dqshiny
Enhance Shiny Apps with Customizable Modules
https://github.com/daqana/dqshiny
https://cran.r-project.org/web/packages/dqshiny/index.html
(https://cran.r-project.org/web/packages/dqshiny/dqshiny.pdf)
https://www.rdocumentation.org/packages/dqshiny/versions/0.0.3
https://www.rdocumentation.org/packages/dqshiny/versions/0.0.3/source
https://www.daqana.org/
rhandsontable paging & enhance
# UI ————————————————————————— header <- dashboardHeaderPlus(fixed=T, enable_rightsidebar=T, rightSidebarIcon="gears") sidebar <- dashboardSidebar(uiOutput("sidebarMenu")) rightsidebar <- rightSidebar(uiOutput("rightsidebarMenu")) footer <- dashboardFooter() ui <- dashboardPagePlus( header, sidebar, rightsidebar, body = dashboardBody( useShinyjs(), tags$head(tags$style(HTML(".content { margin-top: 50px;}"))), #rHandsontableOutput("tableData") dq_handsontable_output("tableData", width=12L, offset=0L) ), footer ) # SERVER ———————————————————————– server <- function(input, output, session) { dd = data.table( val = 1:10, bool = TRUE, big = LETTERS[1:10], small = letters[1:10], dt = seq(from = Sys.Date(), by = "days", length.out = 10) ) # output$tableData <- renderRHandsontable( # rhandsontable(dd) # ) "tableData" %>% dq_render_handsontable(data=dd, filters = c("Sel", "Text", NA, "Auto"), sorting = TRUE, page_size = c(16L, 500L, 1000L), col_param = list(list(col = 3L, format = "0.00")), cell_param = list(list(row = 2:9, col = 2L, readOnly = TRUE)) ) } shinyApp(ui, server)
filters = c(“A”, NA, NA, NA),
filters = list(list(type = “T”, value = “init”), NA, “T”, …)
sorting = c(dir = “up”, col = “B”),
col_param = list(list(col = 1L, type = “dropdown”, source = letters)),
cell_param = list(list(row = 2:9, col = 1:2, readOnly = TRUE))
대량 selectInput
# create 100k random words opts <- sapply(1:100000, function(i) paste0(sample(letters, 7), collapse="")) shinyApp( ui = fluidPage( fluidRow( column(3, # feel free to test this with select... and may get yourself a coffee # , selectInput("sel", "Select:", opts) autocomplete_input("auto1", "Unnamed:", max_options=1000, options=opts), autocomplete_input("auto2", "Named:", max_options=1000, options=structure(opts, names=opts[order(opts)])) ), column(3, tags$label("Value:"), verbatimTextOutput("val1", placeholder=T), tags$label("Value:"), verbatimTextOutput("val2", placeholder=T) ) ) ), server = function(input, output) { output$val1 <- renderText(as.character(input$auto1)) output$val2 <- renderText(as.character(input$auto2)) } )
Child box
library(shiny) library(dqshiny) shinyApp( ui = fluidPage( fluidRow( dq_box(title="child boxes", collapsed=F, fill=F, dq_infobox(icon=icon("hashtag"), title="Hello", value=2, subtitle="World", bg_color="black", color="#D00"), dq_box(title="Box in the box", width=8, bg_color="red", dq_space()) ) ) ), server = function(input, output) {} )
change an elements classes
ui = fluidPage( tags$head(tags$style(".orange{background:#ff8f00}")), actionButton("add", "Add Class"), actionButton("remove", "Remove Class"), actionButton("toggle", "Toggle Class"), actionButton("toggle_cond", "Toggle Class with Condition"), checkboxInput("condition", "orange"), fluidRow(id = "row", dq_space(), # this is needed to make everything work actionButton("example", "EXAMPLE"), dq_space() # this is just for the alignment ;) ) ) server = function(input, output) { observeEvent(input$add, add_class("row", "orange")) observeEvent(input$remove, remove_class("row", "orange")) observeEvent(input$toggle, toggle_class("row", "orange")) observeEvent(input$toggle_cond, toggle_class("row", "orange", input$condition)) } shinyApp(ui, server)
Adds JS function
ui = fluidPage( actionButton("btn1", "Add Values"), add_js(type="addValues", "function(params) { alert('Result is: '+(parseInt(params[0])+parseInt(params[1]))); }"), actionButton("btn2", "What's my name?"), add_js(type="myName", "function(params) { alert('My name is ' + params.name); }") ) server = function(input, output) { observeEvent(input$btn1, run_js(type="addValues", 17, 25)) observeEvent(input$btn2, run_js(type="myName", name="Paul")) } shinyApp(ui, server)
ui = fluidPage( numericInput("clickBtn", "Click Btn Nr:", value=1, min=1, max=3, step=1), actionButton("btn1", "1"), actionButton("btn2", "2"), actionButton("btn3", "3"), dq_space(), textOutput("result") ) server = function(input, output) { observeEvent(input$clickBtn, ignoreInit=T, click(str_c("btn", input$clickBtn)) ) output$result <- renderText( str_c("Buttons clicked:", toString(c(input$btn1, input$btn2, input$btn3))) ) } shinyApp(ui, server)