I'm trying to create a shiny module that adjusts a text output based on a date input.
I used a similar question to outline my issue. When I debug I see that val_from_date()
is NULL, which then throws an error when I try to filter my dataset on that object.
library(shiny)
# sample data
date_range <- seq(as.Date("2020-03-01"), Sys.Date()-1, by = "day")
dataset <- tibble(date = date_range,
n = runif(length(date_range)))
# modules
dateRangeUI <- function(id) {
ns <- NS(id)
tagList(
uiOutput(ns("from_date")),
uiOutput(ns("to_date"))
)
}
dateRangeServer <- function(id) {
moduleServer(id,
function(input, output, session) {
output$from_date = renderUI({dateInput(
session$ns("from_date_select"),
"From",
value = Sys.Date() - 30,
min = as_date('2020-03-01'),
max = Sys.Date()
)})
output$to_date = renderUI({dateInput(
session$ns("to_date_select"),
"To",
value = Sys.Date()-1,
min = as_date('2020-03-01'),
max = Sys.Date()-1)})
return(list(
val_from_date = reactive({input$from_date_select}),
val_to_date = reactive({input$to_date_select})
))
})
}
# ui, server, app
ui <- fluidPage(
dateRangeUI("daterange"),
textOutput("average_data")
)
server <- function(input, output, session) {
daterange <- dateRangeServer("daterange")
output$average_data <- renderText({
dataset %>%
filter(date >= daterange$val_from_date()) %>%
filter(date <= daterange$val_to_date()) %>%
summarise(mean(n))
})
}
shinyApp(ui = ui, server = server)