A shiny
developer can embed a teal
application into their own shiny
app by using
shiny
module components of teal
:
ui_teal()
and srv_teal()
. This approach
differs from using init()
and offers greater flexibility.
While init()
includes a session info footer automatically,
when using teal
as a shiny
module you can
optionally add it manually with ui_session_info()
and
srv_session_info()
. Using teal
as a
shiny
module offers several advantages:
teal
applications within a larger
shiny
appteal
applications with dynamically generated
components (initial data, modules, filters)The following example demonstrates embedding teal
as a
shiny
module within a larger shiny
application. Users can select dataset names which are passed to the
embedded teal
component. On the server side,
srv_teal()
is called with a reactive teal_data
object passed from the parent app’s server.
library(teal)
data <- teal_data() |> within({
iris <- iris
mtcars <- mtcars
df <- data.frame(a = 1:10, b = letters[1:10])
})
mods <- modules(
example_module("mod1"),
example_module("mod2")
)
ui_app <- fluidPage(
title = "Your app with teal as a module",
selectInput("datasets", "Select datasets", choices = c("iris", "mtcars", "df"), selected = "iris", multiple = TRUE),
ui_teal("teal", mods),
ui_session_info("session_info")
)
srv_app <- function(input, output, session) {
data_subset <- reactive(data[input$datasets])
srv_teal("teal", data = data_subset, modules = mods)
srv_session_info("session_info")
}
if (interactive()) {
shinyApp(ui_app, srv_app)
}