Как очистить ввод файла после выбора файла

#r #shiny

Вопрос:

У меня есть код с a fileInput и календарем. Если я импортирую файл Excel fileInput , появится календарь. Пока все в порядке, но я хотел бы настроить функцию на своей reset кнопке. reset Кнопка удаляет даты, которые я выбрал в календаре, но мои fileInput остаются прежними Upload complete . Есть ли способ отрегулировать это, то есть очистить и мой fileInput ?

 library(shiny) library(shinythemes)  df1 lt;- 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")),  class = "data.frame", row.names = c(NA, -3L))   ui lt;- fluidPage(    shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,  br(),  tabPanel("",  sidebarLayout(  sidebarPanel(  fileInput("file",h4(("Import file"),  multiple = T,accept = ".xlsx")),  br(),  uiOutput("date"),  actionButton("reset", "Reset")  ),  mainPanel(  ),  ))  ))  server lt;- function(input, output,session) {  data lt;- reactive(df1)    data lt;- eventReactive(input$file, {  if (is.null(input$file)) {  return(NULL)  }  else {  df lt;- read_excel(input$file$datapath)  return(df)  }  })      output$date lt;- renderUI({  all_dates lt;- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day")  disabled lt;- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01")  dateInput(input = "database",   label = h4("Choose"),  min = min(data()$date2),  max = max(data()$date2),  value = NA,  datesdisabled = disabled)    })    observeEvent(input$reset, {  df1 lt;- data()  updateDateInput(session, 'database', value = NA) }) }  shinyApp(ui = ui, server = server)   

Пример того, как это выглядит:

введите описание изображения здесь

Ответ №1:

Вы можете включить fileInput его со стороны сервера и перезагрузить после нажатия reset .

 library(shiny) library(shinythemes) library(readxl)  df1 lt;- 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")),  class = "data.frame", row.names = c(NA, -3L))   ui lt;- fluidPage(    shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,  br(),  tabPanel("",  sidebarLayout(  sidebarPanel(  uiOutput('fileInput'),  br(),  uiOutput("date"),  actionButton("reset", "Reset")  ),  mainPanel(  ),  ))  ))  server lt;- function(input, output,session) {  data lt;- reactive(df1)    data lt;- eventReactive(input$file, {  if (is.null(input$file)) {  return(NULL)  }  else {  df lt;- read_excel(input$file$datapath)  return(df)  }  })      output$date lt;- renderUI({  all_dates lt;- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day")  disabled lt;- as.Date(setdiff(all_dates, as.Date(data()$date2)), origin = "1970-01-01")  dateInput(input = "database",   label = h4("Choose"),  min = min(data()$date2),  max = max(data()$date2),  value = NA,  datesdisabled = disabled)    })    observeEvent(input$reset, {  df1 lt;- data()  updateDateInput(session, 'database', value = NA)    output$fileInput lt;- renderUI({  fileInput("file",h4(("Import file"), multiple = T,accept = ".xlsx"))  })  })    output$fileInput lt;- renderUI({  fileInput("file",h4(("Import file"), multiple = T,accept = ".xlsx"))  }) }  shinyApp(ui = ui, server = server)   

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо за ответ!. Вопрос после того, как я нажму reset кнопку, есть ли способ удалить календарь и показать только fileInput его ?

2. Вы можете заняться shinyjs::hide() этим, чтобы сделать это.