The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
The shinyFeedback package displays user friendly messages that appear alongside shiny inputs. e.g.
shinyFeedback currently works with the following shiny and shinyWidgets inputs:
shiny::dateInput()shiny::dateRangeInput()shiny::fileInput()shiny::numericInput()shiny::passwordInput()shiny::selectInput()shiny::sliderInput()shiny::textAreaInput()shiny::textInput()shinyWidgets::airDatepickerInput()shinyWidgets::pickerInput()In order to use shinyFeedback you need to include the useShinyFeedback() function at the top of your UI.
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
textInput(
"myInput",
"Warn if >3 characters",
value = ""
)
)
server <- function(input, output, session) {
observeEvent(input$myInput, {
if (nchar(input$myInput) > 3) {
showFeedbackWarning(
inputId = "myInput",
text = "too many chars"
)
} else {
hideFeedback("myInput")
}
})
}
shinyApp(ui, server)The above app has one textInput() input in the UI. In the server function, we write the code to conditionally display a feedback message. If the text input has more than 3 characters, the feedback message is displayed.
feedback()The feedback() function is an alternative to using showFeedback() and hideFeedback(). With feedback() the feedback message is shown/hidden based on whether the show argument to feedback() is “truthy”. “truthiness” is determined by shiny::isTruthy(). feedback() works nicely with reactive expressions that use shiny::req() to check the validity of Shiny inputs. e.g.
library(shiny)
library(shinyFeedback)
ui <- fluidPage(
useShinyFeedback(), # include shinyFeedback
selectInput(
"dataset",
"Dataset",
choices = c(
"airquality",
"Unknown dataset"
)
),
tableOutput('data_table')
)
server <- function(input, output, session) {
data_out <- reactive({
req(input$dataset)
dataset_exists <- exists(input$dataset, "package:datasets")
feedbackWarning("dataset", !dataset_exists, "Unknown dataset")
req(dataset_exists, cancelOutput = TRUE)
get(input$dataset, "package:datasets")
})
output$data_table <- renderTable({
head(data_out())
})
}
shinyApp(ui, server)shinyFeedback works inside shiny modules.
As for all modules, input and output IDs in the module UI code must be wrapped in shiny::ns() calls. Inside your module server code, you need not wrap input or output IDs inside shiny::ns(); shinyFeedback will automatically prepend the namespace of your current module.
Here is a simple example using shinyFeedback inside a module:
library(shiny)
library(shinyFeedback)
numberInput <- function(id) {
ns <- NS(id)
tagList(
useShinyFeedback(),
numericInput(
ns("warningInput"),
"Warn if Negative",
value = 0
)
)
}
number <- function(input, output, session) {
observeEvent(input$warningInput, {
req(input$warningInput)
if (input$warningInput < 0) {
showFeedbackWarning(inputId = "warningInput")
} else {
hideFeedback("warningInput")
}
})
}
ui <- fluidPage(
numberInput(id = "numberFoo")
)
server <- function(input, output) {
callModule(module = number, id = "numberFoo")
}
shinyApp(ui, server)These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.