@@ -3,6 +3,7 @@ vdiffrServer <- function(cases) {
33 shiny :: shinyServer(function (input , output , session ) {
44 cases <- shiny :: reactiveValues(all = cases )
55 cases $ active <- shiny :: reactive({
6+ stopifnot(is_string(attr(cases $ all , " pkg_path" )))
67 type <- input $ type %|| % " new_case"
78 filter_cases(cases $ all , type )
89 })
@@ -30,6 +31,7 @@ vdiffrServer <- function(cases) {
3031 output $ case_context <- renderCaseContext(input , cases )
3132
3233 toggleValidateBtns(input , session )
34+ listenToKeys(input , session , cases )
3335
3436 quitApp(input )
3537 })
@@ -152,34 +154,33 @@ withdraw_cases <- function(cases) {
152154}
153155
154156validateSingleCase <- function (input , reactive_cases ) {
155- shiny :: observe({
156- if (input $ case_validation_button > 0 ) {
157- cases <- shiny :: isolate(reactive_cases $ all )
158- case <- shiny :: isolate(input $ case )
157+ shiny :: observeEvent(c(input $ case_validation_button , input [[" validateCase" ]]), {
159158
160- withdraw_cases(cases [case ])
161- cases [[case ]] <- success_case(cases [[case ]])
159+ cases <- shiny :: isolate(reactive_cases $ all )
160+ case <- shiny :: isolate(input $ case )
161+ shiny :: req(input $ case )
162162
163- shiny :: isolate(reactive_cases $ all <- cases )
164- }
163+ withdraw_cases(cases [case ])
164+ cases [[case ]] <- success_case(cases [[case ]])
165+
166+ shiny :: isolate(reactive_cases $ all <- cases )
165167 })
166168}
167169
168- validateGroupCases <- function (input , reactive_cases ) {
169- shiny :: observe({
170- if (input $ group_validation_button > 0 ) {
171- active_cases <- shiny :: isolate(reactive_cases $ active())
172- cases <- shiny :: isolate(reactive_cases $ all )
170+ validateGroupCases <- function (input , reactive_cases , session ) {
171+ shiny :: observeEvent(c(input $ group_validation_button , input [[" validateGroup" ]]), {
172+ active_cases <- shiny :: isolate(reactive_cases $ active())
173+ cases <- shiny :: isolate(reactive_cases $ all )
173174
174- if (length(cases ) > 0 ) {
175- type <- shiny :: isolate(input $ type )
175+ if (length(cases ) > 0 ) {
176+ shiny :: req(input $ type )
177+ type <- shiny :: isolate(input $ type )
176178
177- withdraw_cases(active_cases )
178- idx <- sapply (cases , inherits , type )
179- cases [ idx ] <- lapply (cases [ idx ] , success_case )
179+ withdraw_cases(active_cases )
180+ idx <- purrr :: map_lgl (cases , inherits , type )
181+ cases <- purrr :: modify_if (cases , idx , success_case )
180182
181- shiny :: isolate(reactive_cases $ all <- cases )
182- }
183+ shiny :: isolate(reactive_cases $ all <- cases )
183184 }
184185 })
185186}
@@ -230,6 +231,33 @@ toggleValidateBtns <- function(input, session) {
230231 })
231232}
232233
234+ listenToKeys <- function (input , session , reactive_cases ) {
235+ shiny :: observeEvent(input [[" nextCase" ]], {
236+ names <- unique(names(reactive_cases $ active()))
237+ shiny :: updateSelectInput(session , " case" ,
238+ selected = next_element(input $ case , names )
239+ )
240+ })
241+ shiny :: observeEvent(input [[" prevCase" ]], {
242+ names <- unique(names(reactive_cases $ active()))
243+ shiny :: updateSelectInput(session , " case" ,
244+ selected = next_element(input $ case , names , direction = - 1 )
245+ )
246+ })
247+ shiny :: observeEvent(input [[" nextType" ]], {
248+ types <- unique(map_chr(reactive_cases $ all , function (case ) class(case )[[1 ]]))
249+ shiny :: updateSelectInput(session , " type" ,
250+ selected = next_element(input $ type , types )
251+ )
252+ })
253+ shiny :: observeEvent(input [[" prevType" ]], {
254+ types <- unique(map_chr(reactive_cases $ all , function (case ) class(case )[[1 ]]))
255+ shiny :: updateSelectInput(session , " type" ,
256+ selected = next_element(input $ type , types , direction = - 1 )
257+ )
258+ })
259+ }
260+
233261quitApp <- function (input ) {
234262 shiny :: observe({
235263 if (input $ quit_button > 0 ) {
0 commit comments