Creates a panel that displays multiple progress items.
Use pgPaneUI on UI side and use pgPaneUpdate to update it.
A overall progress is automatically calculated on the bottom.
pgPaneUI(
pane_id,
titles,
pg_ids,
title_main = NULL,
opened = FALSE,
top = "3%",
right = "2%"
)
pgPaneUpdate(pane_id, pg_id, value, session = getDefaultReactiveDomain())Progress panel main ID, use ns wrap it on pgPaneUI but not
on pgPaneUpdate if using shiny module
labels to display for each progress, must have the same length
as pg_ids
a character vector of IDs for each progress. Don't forget
to use ns wrap each ID.
If not specified and pane_id contains 'plot', title will be 'Plot Prepare'; has 'df' will be 'Data Prepare', if neither will be "Progress"
bool, if this panel is opened at start
css style off set to the current windown top
css style off set to the current windown right
a character string of ID indicating which progress within this
panel you want to update.
Do not use ns(pg_id) to wrap it on server
0-100 number to update the progress you use pg_id to
choose
current shiny session
returns HTML elements
if(interactive()){
# try to slide c under 0
ui <- fluidPage(
h4("Use your mouse to drag it"),
actionButton("a", "a"),
actionButton("b", "b"),
sliderInput("c", min = -100,
max = 100, value = 0,
label = "c"),
pgPaneUI(
pane_id = "thispg",
titles = c("this a", "this b", " this c"),
pg_ids = c("a", "b", "c"),
title_main = "Example Progress",
opened = TRUE,
top = "30%",
right = "50%"
)
)
server <- function(input, output, session) {
observeEvent(input$a, {
for(i in 1:10){
pgPaneUpdate("thispg", "a", i*10)
Sys.sleep(0.3)
}
})
observeEvent(input$b, {
for(i in 1:10){
pgPaneUpdate("thispg", "b", i*10)
Sys.sleep(0.3)
}
})
observeEvent(input$c, pgPaneUpdate("thispg", "c", input$c))
}
shinyApp(ui, server)
}