Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 304
anonR Avatar asked Sep 18 '14 19:09

anonR


1 Answers

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.

like image 128
jdharrison Avatar answered Oct 02 '22 02:10

jdharrison