@@ -11,32 +11,38 @@ mod_memo_ui <- function(id) {
1111 ns <- NS(id )
1212 fluidRow(
1313 div(
14- style = " display: flex; align-items: flex-start; margin-left: 30px ;" ,
14+ style = " display: flex; align-items: flex-start; justify-content: space-between; width: 100% ;" ,
1515 div(
16- style = " min-width: 40vh;" ,
17- mod_memo_editor_ui(ns(" memo_main_editor" ))
16+ style = " display: flex; align-items: flex-start; margin-left: 30px;" ,
17+ div(
18+ style = " min-width: 40vh;" ,
19+ mod_memo_editor_ui(ns(" memo_main_editor" ))
20+ ),
21+ div(
22+ style = " display: flex; align-items: center; margin-left: 10px;" ,
23+ actionButton(
24+ ns(" pin" ),
25+ " " ,
26+ title = " Pin memo" ,
27+ icon = icon(" thumbtack" ),
28+ class = " pinned"
29+ )
30+ )
1831 ),
1932 div(
20- style = " display: flex; align-items: center; margin-left: 10px ;" , # Use flexbox for alignment
33+ style = " margin-right: 30px ;" ,
2134 actionButton(
22- ns(" pin" ),
23- " " ,
24- title = " Pin memo" ,
25- icon = icon(" thumbtack" ),
26- class = " pinned"
27- ),
35+ ns(" reload_memo_table" ),
36+ NULL ,
37+ icon = icon(" sync" )
38+ )
2839 )
2940 ),
3041 hr(),
3142 fluidRow(
3243 style = " margin-left: 30px;" ,
33- div(
34- style = " width: 60vw;" ,
35- DT :: dataTableOutput(ns(" memo" ))
36- )
44+ div(style = " width: 60vw;" , DT :: dataTableOutput(ns(" memo" )))
3745 )
38- # downloadButton(ns("export_memo"), label = "Export memos") %>%
39- # tagAppendAttributes(style = "display: inline-block; float: right", class = "scrollable80")
4046 )
4147}
4248
@@ -46,17 +52,17 @@ mod_memo_ui <- function(id) {
4652mod_memo_server <- function (id , glob ) {
4753 moduleServer(id , function (input , output , session ) {
4854 ns <- session $ ns
49- loc <- reactiveValues()
50- loc $ memo_observer <- 0
55+ loc <- reactiveValues(memo_observer = 0 )
56+
5157 mod_memo_editor_server(" memo_main_editor" , glob , type = " free_memo" )
58+
5259 observeEvent(glob $ active_project , {
5360 loc $ memo_observer <- loc $ memo_observer + 1
5461 })
55- # # Observe free_memo_edit_click ----
62+
5663 observeEvent(input $ text_memo_click , {
57- req(input $ text_memo_click )
58- req(glob $ free_memo_observer > 0 )
59- loc $ memo_id <- parse_memo_id(input $ text_memo_click ) # grab the active memo id for this module
64+ req(input $ text_memo_click , glob $ free_memo_observer > 0 )
65+ loc $ memo_id <- parse_memo_id(input $ text_memo_click )
6066 golem :: invoke_js(
6167 " updateEditorInput" ,
6268 list (
@@ -71,155 +77,57 @@ mod_memo_server <- function(id, glob) {
7177 })
7278
7379 observeEvent(
74- c(loc $ memo_observer , glob $ memo_segment_observer , glob $ free_memo_observer ),
80+ c(
81+ loc $ memo_observer ,
82+ glob $ memo_segment_observer ,
83+ glob $ free_memo_observer ,
84+ input $ reload_memo_table
85+ ),
7586 {
7687 output $ memo <- DT :: renderDataTable({
77- if (isTruthy(glob $ active_project )) {
78- memo_table <- list_memo_records(glob $ pool , glob $ active_project )
79- if (glob $ user $ data $ memo_other_view == 0 && nrow(memo_table ) > 0 ) {
80- memo_table <- memo_table %> %
81- dplyr :: filter(user_id == glob $ user $ user_id )
82- }
83- req(nrow(memo_table ) > 0 )
84- memos_segments_map <- dplyr :: tbl(
85- glob $ pool ,
86- " memos_segments_map"
87- ) %> %
88- dplyr :: filter(memo_id %in% !! memo_table $ memo_id ) %> %
89- dplyr :: collect()
90- segment_df <- dplyr :: tbl(glob $ pool , " segments" ) %> %
91- dplyr :: select(segment_id , doc_id , segment_text ) %> %
92- dplyr :: filter(
93- .data $ segment_id %in% !! memos_segments_map $ segment_id
94- ) %> %
95- dplyr :: collect()
96- documents_df <- dplyr :: tbl(glob $ pool , " documents" ) %> %
97- dplyr :: select(doc_id , doc_name ) %> %
98- dplyr :: filter(.data $ doc_id %in% !! segment_df $ doc_id ) %> %
99- dplyr :: collect()
100- user_df <- dplyr :: tbl(glob $ pool , " users" ) %> %
101- dplyr :: filter(.data $ user_id %in% !! memo_table $ user_id ) %> %
102- dplyr :: select(user_id , user_name , user_login ) %> %
103- dplyr :: collect()
104- loc $ enriched_memo_table <- memo_table %> %
105- dplyr :: left_join(
106- memos_segments_map ,
107- by = " memo_id"
108- ) %> %
109- dplyr :: left_join(
110- segment_df ,
111- by = " segment_id"
112- ) %> %
113- dplyr :: left_join(
114- documents_df ,
115- by = " doc_id"
116- ) %> %
117- dplyr :: left_join(
118- user_df ,
119- by = " user_id"
120- ) %> %
121- dplyr :: mutate(
122- memo_title = memo_link(
123- ns(" text_memo_click" ),
124- memo_id ,
125- memo_name
126- ),
127- memo_type = purrr :: map2_chr(
128- doc_id ,
129- segment_id ,
130- memo_segment_link
131- )
132- ) %> %
133- dplyr :: arrange(dplyr :: desc(memo_id )) %> %
134- dplyr :: select(
135- memo_id ,
136- memo_title ,
137- memo_type ,
138- doc_name ,
139- memo_text ,
140- segment_text ,
141- user_name ,
142- user_id
143- )
144-
145- DT :: datatable(
146- loc $ enriched_memo_table ,
147- rownames = FALSE ,
148- width = " 100%" ,
149- colnames = c(
150- " ID" = " memo_id" ,
151- " Title" = " memo_title" ,
152- " Type" = " memo_type" ,
153- " Document" = " doc_name" ,
154- " Creator" = " user_name" ,
155- " Creator ID" = " user_id"
156- ),
157- filter = " top" ,
158- escape = FALSE ,
159- extensions = c(" Buttons" ),
160- options = dt_memo_options(),
161- class = " display" ,
162- selection = " none"
88+ req(glob $ active_project )
89+ memo_table <- list_memo_records(glob $ pool , glob $ active_project )
90+ if (glob $ user $ data $ memo_other_view == 0 ) {
91+ memo_table <- dplyr :: filter(
92+ memo_table ,
93+ user_id == glob $ user $ user_id
16394 )
16495 }
96+ req(nrow(memo_table ) > 0 )
97+
98+ enriched_memo_table <- enrich_memo_table(memo_table , glob $ pool , ns )
99+ loc $ enriched_memo_table <- enriched_memo_table
100+
101+ DT :: datatable(
102+ enriched_memo_table ,
103+ rownames = FALSE ,
104+ width = " 100%" ,
105+ colnames = c(
106+ " ID" = " memo_id" ,
107+ " Title" = " memo_title" ,
108+ " Type" = " memo_type" ,
109+ " Document" = " doc_name" ,
110+ " Creator" = " user_name" ,
111+ " Creator ID" = " user_id"
112+ ),
113+ filter = " top" ,
114+ escape = FALSE ,
115+ extensions = c(" Buttons" ),
116+ options = dt_memo_options(),
117+ class = " display" ,
118+ selection = " none"
119+ )
165120 })
166121 }
167122 )
168123
169- # pin ----
170124 observeEvent(input $ pin , {
171125 req(loc $ memo_id )
172- pin_id <- paste0(" pin_id-" , loc $ memo_id )
173- pinned_text <- read_memo_by_id(
174- glob $ pool ,
175- glob $ active_project ,
176- loc $ memo_id
177- ) %> %
178- dplyr :: pull(memo_text )
179-
180- insertUI(
181- selector = " div.content-wrapper" ,
182- where = " afterBegin" ,
183- div(
184- id = pin_id ,
185- class = " pinned_memo" ,
186- div(
187- id = " pin_header" ,
188- class = " pin_header" ,
189- icon(" thumbtack" ),
190- div(
191- class = " unpin" ,
192- actionButton(
193- paste0(" unpin_" , pin_id ),
194- " " ,
195- icon(" xmark" ),
196- class = " unpin_btn" ,
197- `data-id` = pin_id ,
198- onclick = " Shiny.setInputValue('memo_ui_1-unpin', this.dataset.id, {priority: 'event'})"
199- )
200- ),
201- ),
202- div(class = " inner_pin" , pinned_text ),
203- div(id = " resize_handle" , class = " resizer" )
204- )
205- )
206- golem :: invoke_js(" makeDraggable" , list (id = pin_id ))
126+ pin_memo(loc $ memo_id , glob $ pool , glob $ active_project , ns )
207127 })
208128
209- # unpin -----
210129 observeEvent(input $ unpin , {
211130 removeUI(paste0(" #" , input $ unpin ))
212131 })
213-
214- # # Memo export ----
215- # output$export_memo <- downloadHandler(
216- # filename = function() {
217- # "requal_memo_export.csv"
218- # },
219- # content = function(file) {
220- # memos <- export_memos(glob$pool, glob$active_project)
221- # utils::write.csv(memos, file)
222- # }
223- # )
224132 })
225133}
0 commit comments