ConditionalPanel на боковой панелиMenu не работает автоматически - PullRequest
0 голосов
/ 06 апреля 2019

У меня блестящее приложение, которое использует conditionalPanel в зависимости от выбора пользователя от selectInput, как показано ниже:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
      dashboardHeader(),
         dashboardSidebar(
          sidebarMenu(      
            selectInput(
              inputId="selectCompany",
              label=" Choose Comanpany", selected = NULL,
              choices=c("HP", "Nokia", "Samsung", "Erickson")),
           uiOutput("ui")
           ),
  conditionalPanel(
       "input.selectCompany == 'HP'",
           sidebarMenu(id = "sidebarmenu",
              menuItem("User", tabName = "userComputer", icon = icon("file-text-o")))),    

   conditionalPanel(
        "input.selectCompany != 'HP'",
          sidebarMenu(id = "sidebarmenu",
              menuItem("User", tabName = "userPhone", icon = icon("file-text-o"))))),    

dashboardBody(    
tabItems(
  tabItem(tabName = "userComputer",
          fluidRow(
            column( width=9,
                    tabBox(
                      width="100%",                          
                      tabPanel("Personal Details"),
                      tabPanel("Personal data"),
                      tabPanel("Table")
                      )))),

  tabItem(tabName = "userPhone",
          fluidRow(
            column( width=9,
                    tabBox(
                      width="100%",                          
                      tabPanel("Personal Details"),
                      tabPanel("Personal data")

                    )))))))

  server <- function(input, output) {}
  shinyApp(ui, server)

Условное условие не работает автоматически, при этом выбор от "HP" до "Nokia"вкладки не изменяются автоматически с 3 на 2 без необходимости щелкать пункт меню «Пользователь».

Я пытался использовать RenderUI, как показано ниже, с тем же поведением:

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
sidebarMenu(      
  selectInput(
    inputId="selectCompany",
    label=" Choose Comanpany", selected = NULL,
    choices=c("HP", "Nokia", "Samsung", "Erickson")),
  uiOutput("ui")
)
  ),
     dashboardBody(
      tabItems(
        tabItem(tabName = "userComputer",              
          fluidRow(
            column( width=9,
                    tabBox(
                      width="100%",                          
                      tabPanel("Personal Details"),                      
                      tabPanel("Personal data"),
                      tabPanel("Table")

                    )))),

  tabItem(tabName = "userPhone",

          fluidRow(
            column( width=9,
                    tabBox(
                      width="100%",                          
                      tabPanel("Personal Details"),
                      tabPanel("Personal data")
                        )))))))        


  server <- function(input, output) {
   output$ui <- renderUI({    
if( input$selectCompany == "Nokia" | input$selectCompany == "Samsung" |input$selectCompany == "Erickson"){

  sidebarMenu(        
    menuItem("User", tabName = "userPhone", icon = icon("file-text-o")))

}else{
  sidebarMenu(        
    menuItem("User", tabName = "userComputer", icon = icon("file-text-o")))
   } 
    }) 
  }
  shinyApp(ui, server)  

Я также пытался использовать метод ObserveEvent, но результат тот же, есть ли способ, которым я могу отображать различные элементы вкладки автоматически в зависимости от выбора из selectInput, не нажимая на пункт меню?

...