Отключить / включить нажмите на боковой панели панели инструментов в блестящей

1

Есть ли способ, с помощью которого я могу отключить/включить щелчок на боковой панели панели мониторинга, чтобы пользователь не мог перейти к другому виду в блестящем?.

Я наткнулся на это решение " отключить/включить боковую панель со стороны сервера ", но все, что он делает, это свернуть/развернуть боковую панель.

Но я ищу какое-то решение, с помощью которого я могу включить/отключить клик на нем, чтобы иметь больше контроля над тем, когда разрешить доступ пользователям к другому виду.

Один из вариантов использования: если я хочу, чтобы пользователь сначала заполнил все входы на первой странице, прежде чем он сможет перейти к другому разделу.

Теги:
shiny
shinyapps

1 ответ

2
Лучший ответ

Вы можете сделать это, используя пакет shinyjs вместе с некоторыми пользовательскими css. Вот минимальный пример:

library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    useShinyjs(),
    sidebarMenu(id = "sidebar",
      tags$head(tags$style(".inactiveLink {
                            pointer-events: none;
                           cursor: default;
                           }")),
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
     menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )

  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              actionButton("Disable", "Disable Widgets"),
              actionButton("Enable", "Enable Widgets")
      ),

      # Second tab content
      tabItem(tabName = "widgets",
              h2("Widgets tab content")
      )
    )
    )
  )



server <- function(input, output){


  observeEvent(input$Disable, {
     addCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")

  })
  observeEvent(input$Enable, {
    removeCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")
  })

}
shinyApp(ui, server)

Нажав кнопку "Включить (Включить виджеты)" и "Отключить (отключить виджеты)", вы можете включать и отключать виджеты menuitem.

РЕДАКТИРОВАТЬ:

Чтобы убедиться, что при загрузке приложения menuItems отключены, вы можете просто добавить функцию addCssClass на свой сервер, чтобы ваш файл выполнялся при загрузке вашего приложения.

Таким образом, код будет выглядеть примерно так:

library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    useShinyjs(),
    sidebarMenu(id = "sidebar",
      tags$head(tags$style(".inactiveLink {
                            pointer-events: none;
                           cursor: default;
                           }")),
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
     menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )

  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              actionButton("Disable", "Disable Widgets"),
              actionButton("Enable", "Enable Widgets")
      ),

      # Second tab content
      tabItem(tabName = "widgets",
              h2("Widgets tab content")
      )
    )
    )
  )



server <- function(input, output){

  #Disable menuitem when the app loads
  addCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")

  observeEvent(input$Disable, {
     addCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")

  })
  observeEvent(input$Enable, {
    removeCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")
  })

}
shinyApp(ui, server)

Надеюсь, поможет!

  • 0
    : - Когда приложение загружается в первый раз, кажется, что .inactiveLink отсутствует, но даже тогда я все еще могу перейти в раздел «Виджеты». Как я могу убедиться, что когда приложения загружаются в первый раз, пользователь не может перейти к другим разделам?
  • 0
    Вы хотите, чтобы виджеты были отключены при первоначальной загрузке приложения?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню