In the shiny App which I am creating I have a set of Drop down list boxes which are interconnected with each other. That is the input of One drop down box decides the set of Input for others.
For the drop down boxes i use selectInput() function to do it and also there are drop down boxes from which I need to select multiple options.
But when the number of options are more the user is required to select each and every option individually. Is there any way to select all the options at once.
That is kind of having a "ALL" option. which selects everything.
I don't want to use "pickerInput"
function please.
As my options in the drop down are dependent on the previous drop down input, I am not able to create a static choices list.
As a work around i used a checker box input to select all the values in the drop down list, but Unfortunately its not working.
Kindly find the UI and Server code below.
Source_Data <-
data.frame(
key = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
Product_Name = c(
"Table",
"Table",
"Chair",
"Table",
"Bed",
"Bed",
"Sofa",
"Chair",
"Sofa"
),
Product_desc = c("XX", "XX", "YY", "XX", "Z", "ZZZ", "A", "Y", "AA"),
Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6)
)
The UI and the server code
ui <- fluidPage(titlePanel("Demo"),
sidebarLayout(
sidebarPanel(
sliderInput(
"key",
"keys",
min = 1,
max = 3,
value = c(1, 3),
step = 1
),
selectInput("Product", "List of Products", choices = NULL),
selectInput(
"Product_d",
"Product Description",
choices = NULL,
multiple = TRUE,
selected = TRUE
),
checkboxInput('all', 'Select All/None'),
actionButton("Button", "ok")
),
mainPanel(tabsetPanel(
type = "tabs",
tabPanel("table_data", DT::dataTableOutput("table"))
))
))
server <- function(input, output, session) {
observeEvent(input$key, {
updateSelectInput(
session,
"Product",
"List of Products",
choices = unique(
Source_Data %>% filter(key %in% input$key) %>% select
(Product_Name)
)
)
})
observeEvent(c(input$key, input$Product, input$all), {
updateSelectInput(
session,
"Product_d",
"Product Description",
choices = unique(
Source_Data %>% filter(key %in% input$key,
Product_Name %in% input$Product) %>% select
(Product_desc)
),
selected = if (input$all)
unique(
Source_Data %>% filter(key %in% input$key,
Product_Name %in% input$Product) %>% select
(Product_desc)
)
}))
output_func <- eventReactive(input$Button, {
key_input <- input$key
Product_input <- input$Product
Product_desc_input <- input$Product_d
cat_input <- input$Product_desc
div_input <- input$divisions
z <-
Source_Data %>% dplyr::arrange (key) %>% dplyr::select(key,
Product_Name,
Product_Desc,
Cost) %>%
dplyr::filter (
key %inrange%
key_input,
Product_Name ==
Product_input,
Product_Desc ==
Product_desc_input
)
return(z)
})
output$table_data <-
DT::renderDataTable({
DT::datatable(output_func())
})
}
Any suggestions would help please.
Thanks in advance
David
Here is a way to select all items by clicking a button:
library(shiny)
js1 <- paste0(c(
"Selectize.prototype.selectall = function(){",
" var self = this;",
" self.setValue(Object.keys(self.options));",
"}"),
collapse = "\n")
js2 <- paste0(c(
"var selectinput = document.getElementById('select');",
"selectinput.selectize.setValue(-1, false);",
"selectinput.selectize.selectall();",
"$('#select + .selectize-control .item').removeClass('active');"),
collapse = "\n")
ui <- fluidPage(
tags$head(tags$script(js1)),
actionButton("selectall", "Select all", onclick = js2),
br(),
selectizeInput("select", "Select", choices = month.name, multiple = TRUE,
options = list(
plugins = list("remove_button")
)
)
)
server <- function(input, output){}
shinyApp(ui, server)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With