Create a Bootstrap 386 modal
Show a Bootstrap 386 modal
Hide a Bootstrap 386 modal
Usage
modal_386(
...,
title = NULL,
footer = modalButton("Dismiss"),
size = c("m", "s", "l", "xl"),
easyClose = FALSE,
fade = TRUE
)
show_modal_386(ui, session = getDefaultReactiveDomain())
remove_modal_386(session = getDefaultReactiveDomain())Arguments
- ...
UI elements for the body of the modal dialog box.
- title
An optional title for the dialog.
UI for footer. Use
NULLfor no footer.- size
One of
"s"for small,"m"(the default) for medium,"l"for large, or"xl"for extra large. Note that"xl"only works with Bootstrap 4 and above (to opt-in to Bootstrap 4+, passbslib::bs_theme()to thethemeargument of a page container likefluidPage()).- easyClose
If
TRUE, the modal dialog can be dismissed by clicking outside the dialog box, or be pressing the Escape key. IfFALSE(the default), the modal dialog can't be dismissed in those ways; instead it must be dismissed by clicking on amodalButton(), or from a call toremoveModal()on the server.- fade
If
FALSE, the modal dialog will have no fade-in animation (it will simply appear rather than fade in to view).- ui
UI content to show in the modal.
- session
The
sessionobject passed to function given toshinyServer.
Examples
if (interactive()) {
library(shiny)
library(shiny386)
shinyApp(
ui = page_386(
button_386("show", "Show modal dialog"),
verbatimTextOutput("dataInfo")
),
server = function(input, output) {
# reactiveValues object for storing current data set.
vals <- reactiveValues(data = NULL)
# Return the UI for a modal dialog with data selection input. If 'failed' is
# TRUE, then display a message that the previous value was invalid.
dataModal <- function(failed = FALSE) {
modal_386(
textInput("dataset", "Choose data set",
placeholder = 'Try "mtcars" or "abc"'
),
span('(Try the name of a valid data object like "mtcars", ',
'then a name of a non-existent object like "abc")'),
if (failed)
div(tags$b("Invalid name of data object", style = "color: red;")),
footer = tagList(
modalButton("Cancel"),
button_386("ok", "OK")
)
)
}
# Show modal when button is clicked.
observeEvent(input$show, {
show_modal_386(dataModal())
})
# When OK button is pressed, attempt to load the data set. If successful,
# remove the modal. If not show another modal, but this time with a failure
# message.
observeEvent(input$ok, {
# Check that data object exists and is data frame.
if (!is.null(input$dataset) && nzchar(input$dataset) &&
exists(input$dataset) && is.data.frame(get(input$dataset))) {
vals$data <- get(input$dataset)
remove_modal_386()
} else {
show_modal_386(dataModal(failed = TRUE))
}
})
# Display information about selected data
output$dataInfo <- renderPrint({
if (is.null(vals$data))
"No data selected"
else
summary(vals$data)
})
}
)
}