r - Shiny Slider Styling Ignored after refresh -
i working on shiny app, reads data file, , display data on app, , allows user refresh data. app works fine, except when 'refresh' data action button, styling gone.
below simplified version of app.r
library(shiny) file_name <- "sample.csv" bkg_color <- "red" # define ui application ui <- fluidpage( actionbutton("refresh", "", icon("refresh") ), tableoutput("table"), uioutput("slider") ) # define server logic required server <- function(input, output, session) { observeevent(input$refresh,{ source("updatedata.r") showmodal(modaldialog( title = "", "data refreshed", easyclose = true, footer = null )) }) # observe raw file, , refresh if there change every 5 seconds raw <- reactivepoll(5000, session, checkfunc = function(){ if (file.exists(file_name)) file.info(file_name)$mtime[1] else "" }, valuefunc = function(){ read.csv(file_name) }) output$table <- rendertable(raw()) output$slider <- renderui({ req(raw()) taglist( # styling slider bar tags$style(html(paste0(".js-irs-0 .irs-single, .js-irs-0 .irs-bar-edge, .js-irs-0 .irs-bar {background: ", bkg_color,";border-top: ",bkg_color,";border-bottom: ",bkg_color,"; border: ",bkg_color,"}"))), sliderinput("date","", min = min(raw()$v1), max = max(raw()$v1), value = max(raw()$v1)) ) }) } # run application shinyapp(ui = ui, server = server) in above, used renderui slider, values depends on raw values read local file. , specify color slider explicitly (currently set red).
and in same directory, have updatedata.r similar below:
file_name <- "sample.csv" temp <- data.frame(v1 =runif(10, min = 0, max = 100), v2 = sys.time() ) write.csv(x =temp, file = file_name,row.names = false ) to run sample app without error, please run above code first initialize csv files.
when app first launches, slider bar red color. however, after refresh underlying data clicking on refresh button @ top of app [not browser refresh], slider bar changed default shiny app color.
i've searched answer quite time, cannot figure out root cause this. has experienced similar issue before, or have idea how can fix it, color of slider bar unchanged after refresh?
thank you!
shiny increments slider class each time new slider rendered. therefore initial class becomes .js-irs-1 on refresh, .js-irs-2 etc.
change css selector .irs child follows:
tags$style(html(paste0(".irs .irs-single, .irs .irs-bar-edge, .irs .irs-bar {background: ", bkg_color,";border-top: ",bkg_color,";border-bottom: ",bkg_color,"; border: ",bkg_color,"}"))) however recommend using server side logic update input. it's better practice since html element rendered on website , values updated not whole element. check updatesliderinput() function update slider
Comments
Post a Comment