@@ -124,74 +124,14 @@ cond_data_extract_single_ui <- function(ns, single_data_extract_spec) {
124
124
data_extract_ui <- function (id , label , data_extract_spec , is_single_dataset = FALSE ) {
125
125
ns <- NS(id )
126
126
127
- if (inherits(data_extract_spec , " data_extract_spec" )) {
128
- data_extract_spec <- list (data_extract_spec )
129
- }
130
- check_data_extract_spec(data_extract_spec )
131
-
132
- if (is.null(data_extract_spec )) {
133
- return (helpText(sprintf(" Data extraction with label '%s' is NULL. Please contact the app author." , label )))
134
- }
135
- stopifnot(
136
- `more than one dataset in data_extract_spec but is_single_dataset parameter is set to TRUE` =
137
- ! is_single_dataset || length(data_extract_spec ) == 1
138
- )
139
-
140
- dataset_names <- vapply(
141
- data_extract_spec ,
142
- function (x ) x $ dataname ,
143
- character (1 ),
144
- USE.NAMES = FALSE
145
- )
146
-
147
- stopifnot(`list contains data_extract_spec objects with the same dataset` = all(! duplicated(dataset_names )))
148
-
149
- dataset_input <- if (is_single_dataset ) {
150
- NULL
151
- } else {
152
- if (length(dataset_names ) == 1 ) {
153
- if ((is.null(data_extract_spec [[1 ]]$ filter )) &&
154
- (
155
- ! is.null(data_extract_spec [[1 ]]$ select $ fixed ) &&
156
- data_extract_spec [[1 ]]$ select $ fixed == TRUE
157
- )) {
158
- NULL
159
- } else {
160
- helpText(" Dataset:" , tags $ code(dataset_names ))
161
- }
162
- } else {
163
- teal.widgets :: optionalSelectInput(
164
- inputId = ns(" dataset" ),
165
- label = " Dataset" ,
166
- choices = dataset_names ,
167
- selected = dataset_names [1 ],
168
- multiple = FALSE
169
- )
170
- }
171
- }
172
127
tagList(
173
- include_css_files(pattern = " data_extract" ),
174
- tags $ div(
175
- class = " data-extract" ,
176
- tags $ label(label ),
177
- dataset_input ,
178
- if (length(dataset_names ) == 1 ) {
179
- data_extract_single_ui(
180
- id = ns(id_for_dataset(dataset_names )),
181
- single_data_extract_spec = data_extract_spec [[1 ]]
182
- )
183
- } else {
184
- do.call(
185
- div ,
186
- unname(lapply(
187
- data_extract_spec ,
188
- function (x ) {
189
- cond_data_extract_single_ui(ns , x )
190
- }
191
- ))
192
- )
193
- }
194
- )
128
+ # Pass arguments to server function.
129
+ div(
130
+ checkboxInput(ns(" is_single_dataset" ), label = NULL , value = is_single_dataset ),
131
+ textInput(ns(" data_extract_label" ), label = NULL , value = label ),
132
+ style = " display: none;"
133
+ ),
134
+ uiOutput(ns(" data_extract_ui_container" ))
195
135
)
196
136
}
197
137
@@ -562,6 +502,89 @@ data_extract_srv.list <- function(id,
562
502
)
563
503
}
564
504
})
505
+
506
+
507
+ output $ data_extract_ui_container <- renderUI({
508
+ ns <- session $ ns
509
+
510
+ logger :: log_debug(
511
+ " initializing data_extract_ui with datasets: { paste(names(datasets), collapse = ', ') }."
512
+ )
513
+
514
+ if (inherits(data_extract_spec , " data_extract_spec" )) {
515
+ data_extract_spec <- list (data_extract_spec )
516
+ }
517
+ check_data_extract_spec(data_extract_spec )
518
+
519
+ if (is.null(data_extract_spec )) {
520
+ return (helpText(sprintf(" Data extraction with label '%s' is NULL. Please contact the app author." , label )))
521
+ }
522
+ stopifnot(
523
+ `more than one dataset in data_extract_spec but is_single_dataset parameter is set to TRUE` =
524
+ isFALSE(input $ is_single_dataset ) || length(data_extract_spec ) == 1
525
+ )
526
+
527
+ dataset_names <- vapply(
528
+ data_extract_spec ,
529
+ function (x ) x $ dataname ,
530
+ character (1 ),
531
+ USE.NAMES = FALSE
532
+ )
533
+
534
+ if (anyDuplicated(dataset_names ) != 0L ) {
535
+ stop(" list contains data_extract_spec objects with the same dataset" )
536
+ }
537
+
538
+ dataset_input <-
539
+ if (isTRUE(input $ is_single_dataset )) {
540
+ # if (FALSE) {
541
+ NULL
542
+ } else {
543
+ if (length(dataset_names ) == 1 ) {
544
+ if ((is.null(data_extract_spec [[1 ]]$ filter )) &&
545
+ (
546
+ ! is.null(data_extract_spec [[1 ]]$ select $ fixed ) &&
547
+ data_extract_spec [[1 ]]$ select $ fixed == TRUE
548
+ )) {
549
+ NULL
550
+ } else {
551
+ helpText(" Dataset:" , tags $ code(dataset_names ))
552
+ }
553
+ } else {
554
+ teal.widgets :: optionalSelectInput(
555
+ inputId = ns(" dataset" ),
556
+ label = " Dataset" ,
557
+ choices = dataset_names ,
558
+ selected = dataset_names [1 ],
559
+ multiple = FALSE
560
+ )
561
+ }
562
+ }
563
+ tagList(
564
+ include_css_files(pattern = " data_extract" ),
565
+ tags $ div(
566
+ class = " data-extract" ,
567
+ tags $ label(input $ data_extract_label ),
568
+ dataset_input ,
569
+ if (length(dataset_names ) == 1 ) {
570
+ data_extract_single_ui(
571
+ id = ns(id_for_dataset(dataset_names )),
572
+ single_data_extract_spec = data_extract_spec [[1 ]]
573
+ )
574
+ } else {
575
+ do.call(
576
+ div ,
577
+ unname(lapply(
578
+ data_extract_spec ,
579
+ function (x ) {
580
+ cond_data_extract_single_ui(ns , x )
581
+ }
582
+ ))
583
+ )
584
+ }
585
+ )
586
+ )
587
+ })
565
588
filter_and_select_reactive
566
589
}
567
590
)
0 commit comments