---
title: "introduction"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{introduction}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
The waiter package comes with a few members of staff but the core one is the waiter which will let you show full page or partial loading screens in your shiny application.
It's fairly straightforward:
1. Place `useWaiter` anywhere in your UI.
2. Create a waiter with `Waiter$new()`
3. Show the waiter with `Waiter$show()`
4. Hide the waiter with `Waiter$hide()`
## Examples
A basic example could be like this, upon clicking a button we display a full page loading screen.
``` r
library(shiny)
library(waiter)
ui <- fluidPage(
useWaiter(), # include dependencies
actionButton("show", "Show loading for 3 seconds")
)
server <- function(input, output, session){
# create a waiter
w <- Waiter$new()
# on button click
observeEvent(input$show, {
w$show()
Sys.sleep(3)
w$hide()
})
}
shinyApp(ui, server)
```
> Make sure you include the dependencies with `useWaiter` or nothing will work.
By default the waiter will show a spinner, 1) you can choose from more than [100 spinners](https://shiny.john-coene.com/waiter/) 2) you are by no means limited to a spinner since the `html` argument takes any htmltools or shiny tag. Below we change the spinner, add some text and change the background color.
``` r
library(shiny)
library(waiter)
waiting_screen <- tagList(
spin_flower(),
h4("Cool stuff loading...")
)
ui <- fluidPage(
useWaiter(), # include dependencies
actionButton("show", "Show loading for 3 seconds")
)
server <- function(input, output, session){
observeEvent(input$show, {
waiter_show(html = waiting_screen, color = "black")
Sys.sleep(3) # do something that takes time
waiter_hide()
})
}
shinyApp(ui, server)
```
Visit the [full waiter documentation](https://shiny.john-coene.com/) to learn how to further customise your waiting screen, have it appear on parts of the application, show loading bars, and more.