# introduction

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.

    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 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.

    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 to learn how to further customise your waiting screen, have it appear on parts of the application, show loading bars, and more.