Я пытаюсь создать индикатор прогресса в моем интерфейсе Shiny.
Конкретно, у меня есть блестящий интерфейс, где пользователь может выбирать значения.Когда он нажимает «закрыть и запустить», интерфейс закрывается и вызывается несколько сценариев.
Проблема в том, что моя панель загрузки выполняется при открытии приложения Shiny, а не при нажатии кнопки.
Я бы хотел, чтобы индикатор выполнения запускался после того, как он нажал кнопку, и развивался до конца сценария, а затем закрывался.
Вот код app.R:
require(shiny)
require(shinyWidgets)
require(shinyjs)
pb <- winProgressBar(title="Example progress bar", label="0% done", min=0, max=100, initial=0)
jscode <- "shinyjs.closeWindow = function() { window.close(); }"
if (interactive()) {
# Open this application in multiple browsers, then close the browsers
shinyApp(
#Ui part
ui <- pageWithSidebar(
headerPanel("Filters for Datorama"),
sidebarPanel(
dateInput(inputId = "startDate", label = "Start date : ", value = "2018-12-01", format = "yyyy/mm/dd"),
dateInput(inputId = "endDate", label = "End date : ", value = "2018-12-31", format = "yyyy/mm/dd"),
selectInput(inputId = "client", label = "Choose your client : ", c("ING" = "ING", "Pernod-Ricard" = "Pernod-Ricard")),
selectInput(inputId = "brand", label = "Choose your template : ", c("Carat" = "Carat", "Amplifi" = "Amplifi", "iProspect" = "iProspect", "Vizeum" = "Vizeum")),
selectInput(inputId = "medium", label = "Choose the medium type : ", c("Social Post" = "Social Post")),
textInput(inputId = "iplan", label = "Enter the plan ID of your campaign : "),
useShinyjs(),
extendShinyjs(text = jscode, functions = c("closeWindow")),
actionButton("close", "Close and run"),
for(i in 1:100) {
Sys.sleep(0.1) # slow down the code for illustration purposes
info <- sprintf("%d%% done", round((i/100)*100))
setWinProgressBar(pb, i/(100)*100, label=info)
}
),
mainPanel()
),
#Server part
server = function(input, output, session) {
observe({
startDate <<- input$startDate
endDate <<- input$endDate
client <<- input$client
brand <<- input$brand
medium <<- input$medium
iPlan <<- input$iplan
})
onStop(function()
source("C:/Users/RPeete01/Desktop/Automated reporting/Social/Scripts/DatoramaSocial.R"))
observeEvent(input$close, {
close(pb)
js$closeWindow()
stopApp()
})
}
)
}