ЗАДЕН ПЛАН
Имам приложение, в което потребителят избира име на файл от падащо меню (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
към таблицата с данни, но работи само при първото натискане на бутона „Изпращане“. Ако в същата сесия променя името на файла и натисна отново бутона, товарачът няма да се появи. Някакви идеи как мога да го накарам да работи няколко пъти в една сесия?
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)
Всяка помощ ще бъде страхотна, благодаря!