BACKGROUND
У меня есть приложение, в котором пользователь выбирает имя файла в раскрывающемся меню (selectizeInput
) и подтверждает выбор нажатием actionButton
.Приложение отобразит результаты в формате DT::dataTableOutput
.
OBJECTIVE
Я бы хотел показать экран загрузки (используя пакет shinydashboardloader
), но только ПОСЛЕ того, как пользователь нажимает actionButton
.До этого я хотел бы показать пустой экран.Кроме того, если пользователь хочет попробовать несколько файлов за один сеанс, экран загрузки должен появляться каждый раз при нажатии actionButton
и исчезать при загрузке набора данных.
CURRENT STATE
В настоящее время, если я запускаю это приложение, кнопка загрузки появляется все время, даже до того, как пользователь выбирает файл
### 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)
Любая помощь будет отличной, спасибо!