1

I have entered a code below just as an example. I believe that only with this code will it be possible for you to help me. What I would like is this: first is that I would like my reset button to appear only when date in the calendar is selected. In observeEvent(input$reset, I entered req(input$date2), but it didn't work. The second thing is that I would like the reset button to appear in other sidebarPanel below the other one.

Executable code below:

library(shiny)
library(shinythemes)
library(dplyr)


ui <- fluidPage(
  
  ui <- shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                          br(),
                          
                          tabPanel("",
                                   sidebarLayout(
                                     sidebarPanel(
                                       
                                       uiOutput("date"),
                                       uiOutput("mycode"),
                                       actionButton("reset", "Reset"),

                                       br(),
                                       
                                       
                                     ),
                                     
                                     mainPanel(
                                       tabsetPanel(
                                         tabPanel("", plotOutput("graph",width = "100%", height = "600")
                                         )
                                       ),
                                     ))
                          )))


server <- function(input, output,session) {
  
  #data <- reactive(function.test())
  
  output$date <- renderUI({
    req(data())
    all_dates <- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day")
    disabled <- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01")
    dateInput(input = "date2", 
              label = h4("Data"),
              min = min(data()$date2),
              max = max(data()$date2),
              value = min(data()$date2),
              format = "dd-mm-yyyy",
              datesdisabled = disabled)
    
  })
  
  output$mycode <- renderUI({
    req(input$date2)
    df1 <- data()
    df2 <- df1[as.Date(df1$date2) %in% input$date2,]
    selectInput("code", label = h4("Category"),choices=unique(df2$Category))
  })
  
  output$graph <- renderPlot({
    req(input$date2,input$code)
    f1(data(),as.character(input$date2),as.character(input$code))
  })
  
  my <- reactiveValues(plot=NULL)
  output$graph <- renderPlot({
    if (!is.null(input$date2) & !is.null(input$code)) {
      my$plot <- f1(data(),as.character(input$date2),as.character(input$code))
    }else {
      my$plot <- NULL
    }
    my$plot
  })
  
  observeEvent(input$reset, {
    req(input$date2)
    df1 <- data()
    my$plot <- NULL 
    updateDateInput(session, 'date2', value = NA)
    updateSelectInput(session, 'code', h4("Category"),choices= unique(df1$Category), selected=character(0))
  })
  
  
}

shinyApp(ui = ui, server = server)

Like this:

enter image description here

Strange error in Category when press button reset enter image description here

Antonio
  • 1,091
  • 7
  • 24

1 Answers1

1

Try

                       conditionalPanel(
                                         condition = "output.mycode",
                                         actionButton("reset", "Reset")
                                       ),

Full code

function.test<-function(){

  df1 <- structure(
    list(date1= c("2021-06-28","2021-06-28","2021-06-28"),
         date2 = c("2021-07-01","2021-07-02","2021-07-04"),
         Category = c("ABC","ABC","ABC"),
         Week= c("Wednesday","Wednesday","Wednesday"),
         DR1 = c(4,1,0),
         DR01 = c(4,1,0), DR02= c(4,2,0),DR03= c(9,5,0),
         DR04 = c(5,4,0),DR05 = c(5,4,0),DR06 = c(5,4,0),DR07 = c(5,4,0),DR08 = c(5,4,0)),
    class = "data.frame", row.names = c(NA, -3L))



  return(df1)
}

library(shiny)
library(shinythemes)
library(dplyr)


ui <- fluidPage(

  ui <- shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                          br(),
                          
                          fluidRow(
                            column(3,
                                   wellPanel(uiOutput("date"),
                                             uiOutput("mycode")
                                             ),
                                   conditionalPanel(condition = "output.mycode", actionButton("reset", "Reset") )
                                   ),

                            column(9,
                                   wellPanel(
                                     plotOutput("graph",width = "100%", height = "600")
                                   ))
                          )
                          ))


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

  data <- reactive(function.test())

  output$date <- renderUI({
    req(data())
    all_dates <- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day")
    disabled <- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01")
    dateInput(input = "date2",
              label = h4("Data"),
              min = min(data()$date2),
              max = max(data()$date2),
              value = NA, # min(data()$date2),
              format = "dd-mm-yyyy",
              datesdisabled = disabled)

  })

  output$mycode <- renderUI({
    req(input$date2)
    df1 <- data()
    df2 <- df1[as.Date(df1$date2) %in% input$date2,]
    selectInput("code", label = h4("Category"),choices=unique(df2$Category))
  })

  output$graph <- renderPlot({
    req(input$date2,input$code)
    f1(data(),as.character(input$date2),as.character(input$code))
  })

  my <- reactiveValues(plot=NULL)
  output$graph <- renderPlot({
    if (!is.null(input$date2) & !is.null(input$code)) {
      my$plot <- plot(cars) ###  f1(data(),as.character(input$date2),as.character(input$code))
    }else {
      my$plot <- NULL
    }
    my$plot
  })

  observeEvent(input$reset, {
    df1 <- data()
    my$plot <- NULL
    updateDateInput(session, 'date2', value = NA)
  })

}

shinyApp(ui = ui, server = server)

output

YBS
  • 19,324
  • 2
  • 9
  • 27
  • Not works for me. The reset button does not appear again when I choose a date. – Antonio Oct 14 '21 at 20:03
  • It works for me. Please see full code. – YBS Oct 14 '21 at 20:12
  • Perfect, but it is possible to insert the button reset in other `sidebarPanel`? – Antonio Oct 14 '21 at 20:19
  • No, I would just like to do as I did in the image I inserted in the question. Just for the reset button to be separated. – Antonio Oct 14 '21 at 20:49
  • Understood YBS, please take a look at this APP here: https://shiny.rstudio.com/gallery/bus-company-simulation.html Here, it does more or less what I did in the image. Notice that he inserted the reset button in a different place, but from what I saw he used `wellPanel(` and not `sidebarPanel` – Antonio Oct 15 '21 at 13:44
  • 1
    Try the updated code. – YBS Oct 15 '21 at 16:15
  • It works, thanks @YBS! You are ninja in shiny! I have another question if it interests you. https://stackoverflow.com/questions/69587563/adjust-shiny-code-to-generate-the-results-as-in-the-first-code/69587721#69587721 – Antonio Oct 15 '21 at 18:23
  • YBS, if you can test this code. Note that when you press reset, it quickly appears in the Category: `[object Object]`, do you know what this is? I Inserted the figure in the question to you see – Antonio Oct 16 '21 at 16:58
  • 1
    Try the updated code. `updateSelectInput()` was unnecessary. – YBS Oct 16 '21 at 18:55
  • Thanksss YBS =) – Antonio Oct 16 '21 at 19:34