Автоматическое всплывающее окно правой боковой панели при нажатии элемента меню в ShinydashboardPlus - PullRequest
0 голосов
/ 18 октября 2018

У меня есть блестящее приложение, которое я сделал с помощью shinydashboardPlus и shinydashboard, и я хотел бы, чтобы rightSidebar автоматически открывался, когда пользователь нажимает на menuItem с моими графиками.

Я пытался найтиответь на это уже пару часов и я ничего не нашел.Я не уверен, возможно ли это, но я решил спросить здесь, чтобы узнать, есть ли у кого-нибудь понимание того, как это сделать (если возможно).

Пример приложения:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)

header<-dashboardHeaderPlus(enable_rightsidebar = TRUE,
rightSidebarIcon = "bars")

sidebar<- dashboardSidebar(
sidebarMenu(
menuItem("Data",
tabName = "data"),
menuItem("Plots",
tabName = "plots",
icon = icon("bar-chart-o"))))

body<-dashboardBody(
tabItems(
tabItem(tabName = "data","DATA"),
tabItem(tabName = "plots",
box(plotOutput("plot1")))))

rightsidebar<-rightSidebar(
background = "dark",
rightSidebarTabContent(
id=1,
title = "Customize Plots",
icon = "desktop",
active = T,
sliderInput("slider", "Number of observations:", 1, 100, 50)))

ui<- dashboardPagePlus(header = header,
sidebar = sidebar,
body = body,
rightsidebar = rightsidebar,

)

server<- function(input,output,session){
set.seed(122)
histdata <- rnorm(500)

output$plot1<- renderPlot({
data <- histdata[seq_len(input$slider)]
hist(data)
})

}
shinyApp(ui, server)

1 Ответ

0 голосов
/ 18 октября 2018

Глядя на HTML, вы видите, что класс css 'control-sidebar-open' добавляется к правой боковой панели при ее открытии.

Вы можете запрограммировать это на глянце, используя пакетосвету, чтобы добавлять этот класс всякий раз, когда на левой боковой панели выбирается пункт меню графиков.Сначала вам нужно присвоить левой боковой панели id, чтобы блестящий затем знал, какая вкладка выбрана, а затем добавляйте / удаляйте класс с brightjs всякий раз, когда вкладка «Графики» выбрана / снята.

Рабочий код ниже.

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyjs)

header<-dashboardHeaderPlus(enable_rightsidebar = TRUE,
                            rightSidebarIcon = "bars")

sidebar<- dashboardSidebar(
  sidebarMenu(id = "left_sidebar",
    menuItem("Data",
             tabName = "data"),
    menuItem("Plots",
             tabName = "plots",
             icon = icon("bar-chart-o"))))

body<-dashboardBody(
  tabItems(
    tabItem(tabName = "data","DATA"),
    tabItem(tabName = "plots",
            box(plotOutput("plot1")))))

rightsidebar<-rightSidebar(
  background = "dark",
  rightSidebarTabContent(
    id=1,
    title = "Customize Plots",
    icon = "desktop",
    active = T,
    sliderInput("slider", "Number of observations:", 1, 100, 50)))

ui<- dashboardPagePlus(
  shinyjs::useShinyjs(),
  header = header,
  sidebar = sidebar,
  body = body,
  rightsidebar = rightsidebar,

)

server <- function(input,output,session){
  set.seed(122)
  histdata <- rnorm(500)

  observe({
    if (input$left_sidebar == "plots") {
      shinyjs::addClass(selector = "aside.control-sidebar", class = "control-sidebar-open")
    } else {
      shinyjs::removeClass(selector = "aside.control-sidebar", class = "control-sidebar-open")
    }
  })

  output$plot1<- renderPlot({
    data <- histdata[seq_len(input$slider)]
    hist(data)
  })

}
shinyApp(ui, server)
...