mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-14 09:28:02 -05:00
* closes issue #3631 - documenting that 'xl' modal dialog will be changed to 'm' in Bootstrap 3 * Update R/modal.R adds note about how to switch to Bootstrap 4+ with bslib Co-authored-by: Carson Sievert <cpsievert1@gmail.com> * add note about how to use Bootstrap 4+ with bslib to get 'xl' modal dialog * Update NEWS.md Co-authored-by: Carson Sievert <cpsievert1@gmail.com>
153 lines
4.6 KiB
R
153 lines
4.6 KiB
R
% Generated by roxygen2: do not edit by hand
|
|
% Please edit documentation in R/modal.R
|
|
\name{modalDialog}
|
|
\alias{modalDialog}
|
|
\alias{modalButton}
|
|
\title{Create a modal dialog UI}
|
|
\usage{
|
|
modalDialog(
|
|
...,
|
|
title = NULL,
|
|
footer = modalButton("Dismiss"),
|
|
size = c("m", "s", "l", "xl"),
|
|
easyClose = FALSE,
|
|
fade = TRUE
|
|
)
|
|
|
|
modalButton(label, icon = NULL)
|
|
}
|
|
\arguments{
|
|
\item{...}{UI elements for the body of the modal dialog box.}
|
|
|
|
\item{title}{An optional title for the dialog.}
|
|
|
|
\item{footer}{UI for footer. Use \code{NULL} for no footer.}
|
|
|
|
\item{size}{One of \code{"s"} for small, \code{"m"} (the default) for medium,
|
|
\code{"l"} for large, or \code{"xl"} for extra large. Note that \code{"xl"} only
|
|
works with Bootstrap 4 and above (to opt-in to Bootstrap 4+,
|
|
pass \code{\link[bslib:bs_theme]{bslib::bs_theme()}} to the \code{theme} argument of a page container
|
|
like \code{\link[=fluidPage]{fluidPage()}}).}
|
|
|
|
\item{easyClose}{If \code{TRUE}, the modal dialog can be dismissed by
|
|
clicking outside the dialog box, or be pressing the Escape key. If
|
|
\code{FALSE} (the default), the modal dialog can't be dismissed in those
|
|
ways; instead it must be dismissed by clicking on a \code{modalButton()}, or
|
|
from a call to \code{\link[=removeModal]{removeModal()}} on the server.}
|
|
|
|
\item{fade}{If \code{FALSE}, the modal dialog will have no fade-in animation
|
|
(it will simply appear rather than fade in to view).}
|
|
|
|
\item{label}{The contents of the button or link--usually a text label, but
|
|
you could also use any other HTML, like an image.}
|
|
|
|
\item{icon}{An optional \code{\link[=icon]{icon()}} to appear on the button.}
|
|
}
|
|
\description{
|
|
\code{modalDialog()} creates the UI for a modal dialog, using Bootstrap's modal
|
|
class. Modals are typically used for showing important messages, or for
|
|
presenting UI that requires input from the user, such as a user name and
|
|
password input.
|
|
|
|
\code{modalButton()} creates a button that will dismiss the dialog when clicked,
|
|
typically used when customising the \code{footer}.
|
|
}
|
|
\examples{
|
|
if (interactive()) {
|
|
# Display an important message that can be dismissed only by clicking the
|
|
# dismiss button.
|
|
shinyApp(
|
|
ui = basicPage(
|
|
actionButton("show", "Show modal dialog")
|
|
),
|
|
server = function(input, output) {
|
|
observeEvent(input$show, {
|
|
showModal(modalDialog(
|
|
title = "Important message",
|
|
"This is an important message!"
|
|
))
|
|
})
|
|
}
|
|
)
|
|
|
|
|
|
# Display a message that can be dismissed by clicking outside the modal dialog,
|
|
# or by pressing Esc.
|
|
shinyApp(
|
|
ui = basicPage(
|
|
actionButton("show", "Show modal dialog")
|
|
),
|
|
server = function(input, output) {
|
|
observeEvent(input$show, {
|
|
showModal(modalDialog(
|
|
title = "Somewhat important message",
|
|
"This is a somewhat important message.",
|
|
easyClose = TRUE,
|
|
footer = NULL
|
|
))
|
|
})
|
|
}
|
|
)
|
|
|
|
|
|
# Display a modal that requires valid input before continuing.
|
|
shinyApp(
|
|
ui = basicPage(
|
|
actionButton("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) {
|
|
modalDialog(
|
|
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"),
|
|
actionButton("ok", "OK")
|
|
)
|
|
)
|
|
}
|
|
|
|
# Show modal when button is clicked.
|
|
observeEvent(input$show, {
|
|
showModal(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)
|
|
removeModal()
|
|
} else {
|
|
showModal(dataModal(failed = TRUE))
|
|
}
|
|
})
|
|
|
|
# Display information about selected data
|
|
output$dataInfo <- renderPrint({
|
|
if (is.null(vals$data))
|
|
"No data selected"
|
|
else
|
|
summary(vals$data)
|
|
})
|
|
}
|
|
)
|
|
}
|
|
}
|