The shinyFeedback
package creates a user friendly message that appears along side a shiny
input. Here are pictures of shiny
inputs with feeback messages displayed:
shinyFeedback
provides a friendly way to guide your users on how to use your app.
shinyFeedback
currently only works with the following shiny::*Input()
functions:
numericInput()
textInput()
passwordInput()
selectInput()
More inputs and display options will be supported in future versions of shinyFeedback
In order to use shinyFeedback
you need to include the following function at the top of your UI.
useShinyFeedback()
The following is a minimal example of a shiny
app that uses shinyFeedback
. Run the following code in your R console to run the app.
library(shiny)
library(shinyFeedback)
ui <- fluidPage(
useShinyFeedback(), # include shinyFeedback
numericInput(
"warningInput",
"Warn if Negative",
value = -5
)
)
server <- function(input, output) {
observeEvent(input$warningInput, {
feedbackWarning(
inputId = "warningInput",
condition = input$warningInput < 0
)
})
}
shinyApp(ui, server)
The above app uses the feedbackWarning()
function to display a default warning feedback message. feebackWarning()
is a wrapper around the more general feedback()
function.
feedback
functionThe primary function provided by shinyFeedback
is feedback()
. feedback()
creates messages similar to those shown in the image at the top of this vignette. The color, icon, and text of the feedback message can be customized.
To use feedback()
, you will want to call it from inside a shiny
observer (either shiny::observe()
or shiny::observeEvent()
).
feedback
wrappersshinyFeedback
has 3 convenient wrappers functions:
feedbackWarning()
feedbackDanger()
feedbackSuccess()
The above functions provide default arguments for all the formal arguments in the feedback
function other than inputId
and condition
. A live app using these functions is available here.
feedback
sWhen assigning multiple feedback()
s to a single input (e.g. you want to display a certain feedback message if the input value >= 1, and a different feedback value if the input is >= 2), place the feedback()
s in the same shiny
observer. The feedback()
s further down in the body of the observer will override the higher feedback()
s if multiple feedback()
function conditions evaluate to TRUE.
ui <- fluidPage(
useShinyFeedback(), # include shinyFeedback
numericInput(
"multiFeedbacks",
"1 is scary 2 is dangerous",
value = 1
)
)
server <- function(input, output) {
observeEvent(input$multiFeedbacks, {
feedbackWarning(
inputId = "multiFeedbacks",
condition = input$multiFeedbacks >= 1,
text = "Warning 1 is a lonely number"
)
feedbackDanger(
inputId = "multiFeedbacks",
condition = input$multiFeedbacks >= 2,
text = "2+ is danger"
)
})
}
shinyApp(ui, server)
In the above example, both feedback*()
function conditions are TRUE when the input is >=2. The feedbackDanger()
is displayed because it is called after the feedbackWarning()
.