juba / shinyglide

Glide.js component for Shiny apps
https://juba.github.io/shinyglide/
91 stars 8 forks source link

Create the glide screens dynamically #35

Closed analytichealth closed 1 year ago

analytichealth commented 1 year ago

Hi, great package! Is it possible to create the glide screens dynamically? Here's what I tried. It outputs a glide but not as expected. Thank you

library(shinyglide)

ui <- fixedPage(
    h3("Simple shinyglide app"),

    uiOutput('glide_ui')
)

server <- function(input, output, session) {

    dynamic_list <- c('a', 'b')

    output$glide_ui <- renderUI({
        glide(
            tagList(
                for (i in 1:length(dynamic_list)) {
                    screen(dynamic_list[i])
                }
            )
        )
    })

}

shinyApp(ui, server)
juba commented 1 year ago

Hi, you can try something like this :

library(shiny)
library(shinyglide)

ui <- fixedPage(
    h3("Simple shinyglide app"),
    mainPanel(
        uiOutput("glide_ui")
    )
)

server <- function(input, output, session) {
    dynamic_list <- c("a", "b", "c")

    output$glide_ui <- renderUI({
        screens <- list()
        for (el in dynamic_list) {
            screens <- append(screens, list(screen(el)))
        }
        glide(
            tagList(screens)
        )
    })
}

shinyApp(ui, server)
analytichealth commented 1 year ago

That's what I needed, thanks very much!

ismirsehregal commented 1 year ago

As an alternative we can use lapply:

library(shiny)
library(shinyglide)

ui <- fixedPage(
  h3("Simple shinyglide app"),
  mainPanel(
    uiOutput("glide_ui")
  )
)

server <- function(input, output, session) {
  dynamic_list <- list("a", "b", "c")
  output$glide_ui <- renderUI({
    glide(
      lapply(dynamic_list, screen)
    )
  })
}

shinyApp(ui, server)