--- title: "Busy indicator for shiny apps" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{shinybusy-usage} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(shinybusy) ``` {shinybusy} allow to add **global** indicators to a {shiny} application to show the user that application is busy (something is happening server-side). There is three main type of indicators : * automatic, just add a line in UI, the indicator will show up whenever server is busy. * manual, activate the indicator from the server when you want it to be displayed. * modal indicators, display a modal and prevent user to interact with the application. ## Automatic indicators The indicator will be displayed each time a calculation take more than the timeout defined (default to 1000ms), you don't have to intervene in the server. Three indicators are available : * a spinner : with `add_busy_spinner()`. ```{r, eval=FALSE} # Add in UI add_busy_spinner(spin = "fading-circle") ``` ```{r, echo=FALSE} knitr::include_graphics(path = "figures/add_busy_spinner.png") ``` * a top progress bar : with `add_busy_bar()`. ```{r, eval=FALSE} add_busy_bar(color = "red", height = "8px") ``` ```{r, echo=FALSE} knitr::include_graphics(path = "figures/add_busy_bar.png") ``` * a GIF that will animate when app is busy : with : `add_busy_gif()`. ```{r, eval=FALSE} # Add in UI add_busy_gif( src = "https://jeroen.github.io/images/banana.gif", height = 70, width = 70 ) ``` ```{r, echo=FALSE} knitr::include_graphics(path = "figures/add_busy_gif.png") ``` ## Manual indicators The same types of indicators are available than for automatic indicators, but this time functions starts with `use_*` and you have to explicitly trigger the indicator server-side. * spinner : with `use_busy_spinner()` : ```{r, eval=FALSE} # in UI use_busy_spinner(spin = "fading-circle") # in server show_spinner() # show the spinner hide_spinner() # hide the spinner ``` * top progress bar : with `use_busy_bar()` : ```{r, eval=FALSE} # in UI use_busy_bar(color = "#01DF01", height = "15px") # in server update_busy_bar(0) # update with the desire value [0-100], 100 hide the bar ``` * GIF : with `use_busy_gif()` : ```{r, eval=FALSE} # in UI use_busy_gif( src = "https://jeroen.github.io/images/banana.gif", height = 70, width = 70 ) # in server play_gif() # play animation stop_gif() # stop animation ``` ## Modal indicators Display an indicator (a spinner or a progress bar) in a modal window, this prevent user to interact with the app and launch other calculation when something is already happening in the server. Those functions are only used server-side. * Spinner : ```{r, eval=FALSE} # in server show_modal_spinner() # show the modal window remove_modal_spinner() # remove it when done ``` ```{r, echo=FALSE} knitr::include_graphics(path = "figures/modal_spinner.png") ``` * Progress bar : ```{r, eval=FALSE} # in server show_modal_progress_line() # show the modal window update_modal_progress(0.2) # update progress bar value remove_modal_progress() # remove it when done ``` ```{r, echo=FALSE} knitr::include_graphics(path = "figures/modal_progress.png") ``` Don't forget to remove the modal window when computation is finished ! ## Notifications Show notifications and reports to user through JavaScript library [Notiflix](https://notiflix.github.io/). Four appearance are available: success, failure, info and warning. Notifications are fully configurable. ```{r notifications, eval=FALSE} # success notification notify_success("Well done!") # report failure report_failure( "Oups...", "Something went wrong" ) ```