Как сохранить видимость, ограничивая доступность conditionalPanel ()? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть conditionalPanel(). Я ищу решение, которое сохранит conditionalPanel() видимым, но не доступным, если условие не будет выполнено.

Условие - когда input$n_sygdom >= 1, тогда показывают / активируют input$ecs и input$contra.pos.

В настоящее время у меня есть

enter image description here

со сценарием

library(shiny)
library(survminer)


ui <- fluidPage(
  titlePanel("Survival Curve of individualized pN-staging\n"),

  br(),

  fluidRow(

    column(3,
           wellPanel(style = "height:150px", sliderInput("n_fjernet", "Lymph Nodal Yield", min = 2, max = 120, value = 40))
    ),

    column(3,
           wellPanel(style = "height:150px", sliderInput("n_sygdom", "Number of positive lymph nodes", min = 0, max = 40, value = 0))
    ),

    column(3,
           wellPanel(style = "height:150px", conditionalPanel(
                                                    condition = "input.n_sygdom >= 1", 
                                                    radioButtons("ecs", "Extracapsular extension", c("No","Yes"))))
    ),

    column(3,
           wellPanel(style = "height:150px", conditionalPanel(
                                             condition = "input.n_sygdom >= 1", 
                                             radioButtons("contra.pos", "Neck involvement", c("Contra.","Ipsi."))))
    )

  ),
  br(),

  #Row of Outputs (make sure the columns sum to 12)
  fluidRow(

    column(12, align="center"
    ),

    column(12, align="center")
    )

)



server <- function(input, output, session) {


}

shinyApp(ui, server)

Мне не нравится, как input$ecs и input$contra.pos это просто две серые коробки, когда input$n_sygdom==0.

Я ищу решение, которое сделает input$ecs и input$contra.pos видимыми, если input$n_sygdom==0, но недоступно.

Как для input$n_sygdom==0:

enter image description here

И так для input$n_sygdom >= 1

enter image description here

1 Ответ

1 голос
/ 09 апреля 2020

Вот как это сделать с shinyjs::disable:

library(shiny)
library(shinyjs)


ui <- fluidPage(
  useShinyjs(),

  titlePanel("Survival Curve of individualized pN-staging\n"),

  br(),

  fluidRow(

    column(
      3,
      wellPanel(
        style = "height:150px", 
        sliderInput("n_fjernet", "Lymph Nodal Yield", 
                    min = 2, max = 120, value = 40)
      )
    ),

    column(
      3,
      wellPanel(
        style = "height:150px", 
        sliderInput("n_sygdom", "Number of positive lymph nodes", 
                    min = 0, max = 40, value = 0)
      )
    ),

    column(
      3,
      wellPanel(
        style = "height:150px", 
        radioButtons("ecs", "Extracapsular extension", c("No","Yes"))
      )
    ),

    column(
      3,
      wellPanel(
        style = "height:150px", 
        radioButtons("contra_pos", "Neck involvement", c("Contra.","Ipsi."))
      )
    )

  )

)


server <- function(input, output, session) {

  observeEvent(input[["n_sygdom"]], {
    if(input[["n_sygdom"]] < 1){
      disable("ecs")
      disable("contra_pos")
    }else{
      enable("ecs")
      enable("contra_pos")
    }
  })

}

shinyApp(ui, server)
...