5

I have a pretty basic Shiny app.

I am using renderUI and uiOutput to populate a selectInput where a date can be selected.

But I'd only like that selectInput to appear if a user chooses an option via a radio button:

enter image description here

As it currently stands, the app radio buttons don't have any effect. (At this stage, IF things were working, clicking on 'no date' would mean nothing is plotted).

I'm sure the problem is here:

radioButtons('radio', 'Radio', choices=c('show_date', 'no_date'), selected = NULL, inline = FALSE),
  conditionalPanel(
    condition = "input.show_date == 'true'"
    uiOutput('fdate')
  ),

It doesn't seem possible to use uiOutput in a conditionalPanel. Why?

APP.R

library(shiny)
library(ggplot2)
library(dplyr)
library(leaflet)


DF <- data.frame(lon=c(-120.6596156, -87.27751, -119.7725868, -124.2026, -117.1858759),  
                 lat=c(35.2827524, 33.83122, 36.7468422, 41.75575, 34.5008311), 
                 date=c('2014-03-14', '2014-01-11', '2013-11-22', '2012-08-23', '2013-08-23'),
                 city=c('San Luis Obispo', 'Jasper', 'Fresno', 'Crescent City', 'Apple Valley'), 
                 P1_name=c('John Doe', 'John Doe', 'John Doe', 'John Doe', 'Joe Blow'))

DF[, c('date', 'city', 'P1_name')] <- sapply(DF[, c('date', 'city', 'P1_name')], as.character)


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

  output$fdate<-renderUI({
    selectInput('dates', 'Select date', choices=DF[which(DF$P1_name == input$person), ]$date, selectize = FALSE)
  })

  output$map<-renderLeaflet({

  DF <- filter(DF, P1_name==input$person, date==input$dates)    
    output$city <-renderText({c("Location:", DF$city)})


m <- leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  setView(lng=DF$lon, lat=DF$lat, zoom=5) %>%
  addMarkers(lng=DF$lon, lat=DF$lat, popup=DF$city)

  })

}

ui <- fluidPage(
  titlePanel("Testing Shiny"),
  sidebarLayout (
    sidebarPanel(

      selectInput('person', 'Select person', choices=unique(DF$P1_name), selectize = FALSE),

      radioButtons('radio', 'Radio', choices=c('show_date', 'no_date'), selected = NULL, inline = FALSE),
      conditionalPanel(
        condition = "input.show_date == 'true'"
        uiOutput('fdate')

      ),

#       uiOutput('fdate'),
      textOutput("city")

    ),

    mainPanel(
      leafletOutput('map')
    )  
  ))

shinyApp(ui = ui, server = server)
tumultous_rooster
  • 12,150
  • 32
  • 92
  • 149

1 Answers1

7

Try

condition = "input.radio == 'show_date'",

instead

Jimbo
  • 928
  • 1
  • 8
  • 15