The "shinyFeedback" not works for "dateRangeInput" component

Viewed 152

I try to test "shinyFeedback" package for processing dates and can't run this test code.

library(shiny)
library(shinyFeedback)

ui <- fluidPage(
  shinyFeedback::useShinyFeedback(),
  uiOutput("uo_numeric"),
  uiOutput("uo_date_range")
)

server <- function(input, output, session) {
  
  # Numeric
  output$uo_numeric <-  renderUI({
    numericInput("n", "Label", value = 10)
  }) 
  
  # Date range
  output$uo_date_range <- renderUI({
    dateRangeInput(
      "si_date_range", "Date range",
      start = as.Date(lubridate::now()),
      end = as.Date(lubridate::now()))
  })
  
  observeEvent(
    input$si_date_range, {
      print(!is.na(input$si_date_range))
      shinyFeedback::feedbackWarning(
        "si_date_range", !is.na(input$si_date_range),
        "Please select a valid dates")
    }
  )
  
  observeEvent(
    input$n, shinyFeedback::feedbackWarning(
      "n", input$n %% 2 != 0, "Please select an even number")  
  )
  
} # server

# Run the application 
shinyApp(ui, server)

Any ideas on how to make "dateRangeInput" workable?

Thanks

2 Answers

Here is my version.

input$si_date_range should be a vector of 2 elements (first and second dates).

You could use is.na to see if either date entered is blank. The feedbackWarning can also check to make sure your first date precedes your second date.

server <- function(input, output, session) {
  
  # Numeric
  output$uo_numeric <-  renderUI({
    numericInput("n", "Label", value = 10)
  }) 
  
  # Date range
  output$uo_date_range <- renderUI({
    dateRangeInput(
      "si_date_range", "Date range",
      start = as.Date(lubridate::now()),
      end = as.Date(lubridate::now()))
  })
  
  observeEvent(
    input$si_date_range, {
      print(input$si_date_range)
      shinyFeedback::feedbackWarning(
        "si_date_range", 
        as.Date(input$si_date_range[1]) > as.Date(input$si_date_range[2]) | 
                any(is.na(input$si_date_range)),
        "Please select valid dates")
    }
  )
  
  observeEvent(
    input$n, shinyFeedback::feedbackWarning(
      "n", input$n %% 2 != 0, "Please select an even number")  
  )
  
} # server
Related