examples - tags$div shiny
Cómo colapsar manualmente un cuadro en el tablero brillante (1)
Intento colapsar una caja manualmente cuando sucede algo. Parece que solo necesito agregar la clase "collapsed-box"
a la caja, traté de usar la función addClass
, pero no sé cómo hacerlo porque una caja no tiene una id
. Aquí como código básico simple que se puede usar para probar posibles soluciones:
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
box(collapsible = TRUE,p("Test")),
actionButton("bt1", "Collapse")
)
)
server <- function(input, output) {
observeEvent(input$bt1, {
# collapse the box
})
}
shinyApp(ui, server)
Nunca he intentado usar cajas antes, así que ten en cuenta que mi respuesta podría ser muy limitada. Pero eché un vistazo rápido y parece que simplemente configurar la clase "caja-contraída" en la caja no hace que la caja colapse. Así que, en cambio, mi siguiente pensamiento fue hacer clic en el botón de colapsar programáticamente.
Como dijiste, no hay un identificador asociado con el cuadro, así que mi solución fue agregar un argumento de id
a la box
. Inicialmente esperaba que fuera la identificación de la caja, pero parece que esa identificación se le da a un elemento dentro de la caja. No hay problema, solo significa que para seleccionar el botón de colapsar, necesitamos tomar la identificación, buscar el árbol de DOM para encontrar el elemento de caja y luego mirar hacia atrás en el árbol de DOM para encontrar el botón.
Espero que todo lo que dije tenga sentido. Incluso si no lo hace, este código debería funcionar y, con un poco de suerte, aclarará un poco las cosas :)
library(shiny)
library(shinydashboard)
library(shinyjs)
jscode <- "
shinyjs.collapse = function(boxid) {
$(''#'' + boxid).closest(''.box'').find(''[data-widget=collapse]'').click();
}
"
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
useShinyjs(),
extendShinyjs(text = jscode),
actionButton("bt1", "Collapse box1"),
actionButton("bt2", "Collapse box2"),
br(), br(),
box(id = "box1", collapsible = TRUE, p("Box 1")),
box(id = "box2", collapsible = TRUE, p("Box 2"))
)
)
server <- function(input, output) {
observeEvent(input$bt1, {
js$collapse("box1")
})
observeEvent(input$bt2, {
js$collapse("box2")
})
}
shinyApp(ui, server)