Search code examples
rshinyshiny-server

Shiny select go to different tabPanel using action button or something


I have built the following template for my shiny app.

      ##ui.R
      shinyUI(navbarPage("My Application",
      tabPanel
      (
        "Select Data range",
        sidebarLayout
        (
            sidebarPanel
            (
                h3("Select Data Range"),
                selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(),
                dateRangeInput("dates", label = h3("Select Date range")),br(),
                submitButton("Submit"),br(),
                actionButton("action", label = "Proceed to select resolution")
            ),
            mainPanel("Output")
        )
      ),

      tabPanel
      (
        "Select Resolution",
        sidebarLayout
        (
            sidebarPanel
            (
                h3("Select Resolution"),
                numericInput("num", label = h3("Select X-Grid Size"), value = 2),br(),
                numericInput("num", label = h3("Select Y-Grid Size"), value = 2),br(),
                numericInput("num", label = h3("Outlier Removal"), value = 2),br(),
                numericInput("num", label = h3("Frequency"), value = 2),br(),
                submitButton("Submit"),br(),
                #actionButton("action", label = "Proceed to Service Parameters")
            ),
            mainPanel("Output")
        )
      )

    ))

And the server file is kept empty for now:

      ##server.R
      shinyServer(function(input, output) {
      })

The problem is ideally I would like to use a input like action button on first tabPanel to navigate to second tab panel. Any suggestion about an alternative would be appreciated equally.


Solution

  • You can send a custom message:

    ui.R

    shinyUI(navbarPage("My Application",
    
                   tabPanel
                   (
                     "Select Data range",
                     sidebarLayout
                     (
                       sidebarPanel
                       (tags$head(tags$script('
                                         Shiny.addCustomMessageHandler("myCallbackHandler",
                                           function(typeMessage) {console.log(typeMessage)
                                              if(typeMessage == 1){
                                              console.log("got here");
                                              $("a:contains(Select Resolution)").click();
                                              }
                                              if(typeMessage == 2){
                                              $("a:contains(Select Data range)").click();
                                              }
                                              });
                                              ')),
                         h3("Select Data Range"),
                         selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(),
                         dateRangeInput("dates", label = h3("Select Date range")),br(),
                         actionButton("action", label = "Proceed to select resolution")
                       ),
                       mainPanel("Output")
                     )
                   ),
    
                   tabPanel
                   (
                     "Select Resolution",
                     sidebarLayout
                     (
                       sidebarPanel
                       (
                         h3("Select Resolution"),
                         numericInput("num1", label = h3("Select X-Grid Size"), value = 2),br(),
                         numericInput("num2", label = h3("Select Y-Grid Size"), value = 2),br(),
                         numericInput("num3", label = h3("Outlier Removal"), value = 2),br(),
                         numericInput("num4", label = h3("Frequency"), value = 2),br(),
                         actionButton("action1", label = "Proceed to Service Parameters")
    
                       ),
                       mainPanel("Output"),
    
                     )
                   )
    
    ))
    

    server.R

    library(shiny)
    shinyServer(function(input, output,session) {
      observe({
        if(input$action > 0){
          print('1')
          session$sendCustomMessage("myCallbackHandler", "1")
        }
      })
      observe({
        if(input$action1 > 0){
          print('2')
          session$sendCustomMessage("myCallbackHandler", "2")
        }
      })
    }
    )
    

    Also you cannot have objects with the same id's. Note all your numericInput and actionButton had the same id's. Also I removed the submit buttons not sure you want more then one of these.