ФОН
У меня есть приложение, в котором пользователь выбирает имя файла из раскрывающегося меню (selectizeInput
) и подтверждает выбор с помощью actionButton
. Приложение отобразит результаты в формате DT::dataTableOutput
.
ЗАДАЧА
Я хотел бы иметь возможность отображать экран загрузки (с использованием пакета shinydashboardloader
), но только ПОСЛЕ того, как пользователь нажимает actionButton
. Перед этим я хотел бы показать пустой экран. Кроме того, если пользователь хочет попробовать несколько файлов в одном сеансе, экран загрузки должен появляться каждый раз при нажатии кнопки actionButton
и исчезать после загрузки набора данных.
ТЕКУЩЕЕ СОСТОЯНИЕ
В настоящее время, если я запускаю это приложение, кнопка загрузки появляется все время, даже до того, как пользователь выберет файл.
### ui.R
library(shiny)
library(shinydashboard)
library(DT)
library(shinycustomloader)
dashboardPage(
dashboardHeader(),
dashboardSidebar(
selectizeInput("file", "Select File",
c("fileA", "fileB")),
actionButton("submit", "Submit")
),
dashboardBody(
fluidRow(
box(h2("My Data"),
div(style = 'overflow-x: scroll',
withLoader(DT::dataTableOutput('mytable'),
type = "html",
loader = "loader1")),
width = 12)
)
)
)
#### server.R
library(shiny)
library(shinydashboard)
library(DT)
shinyServer(function(input, output, session) {
file_name <- reactive({
req(input$file)
})
# When the Submit button is clicked, start the cleaning and matching
observeEvent(input$submit, {
## open chosen file
# open_file <- read_excel(paste0("input_files/", file_name()))
### + some processing that gives me matched_df
matched_df <- data.frame(A = c(1, 2, 3, 4),
B = c("A", "B", "C", "D"))
selected <- reactive({
matched_df # + apply some filter
})
output$mytable = DT::renderDataTable({
selected()
})
})
})
Я предполагаю, что в дальнейшем можно было бы использовать conditionalPanel
, но я не уверен, как щелкнуть actionButton
условие.
ОБНОВИТЬ
Я применил conditionalPanel
к datatable, но он работает только при первом нажатии кнопки «Отправить». Если в том же сеансе я изменю имя файла и снова нажму кнопку, загрузчик не появится. Есть идеи, как заставить его работать несколько раз за один сеанс?
dashboardBody(
fluidRow(
box(h2("My Data"),
conditionalPanel("input.submit==1",
div(style = 'overflow-x: scroll',
withLoader(DT::dataTableOutput('mytable'),
type = "html",
loader = "loader1"))
),
width = 12)
Любая помощь будет отличной, спасибо!