Многоуровневый выпадающий список hover R shiny

#r #shiny #htmlwidgets

#r #блестящий #htmlwidgets

Вопрос:

Я ищу решение для многоуровневого выпадающего списка в R shiny введите описание изображения здесь

Я просмотрел большинство пакетов здесь, https://github.com/nanxstats/awesome-shiny-extensions Не удалось найти решение ни в одном из доступных пакетов

Близким решением является

               # selectInput("state", "Choose a word:", width = 400,
                       #             list(`Building` = list("Apartment"="ap", "Bank"="bk", "Hospital"="hp"),
                       #                  `Nature` = list("Bank"="bk1", "River"="rv", "Orange"="or"),
                       #                  `Color` = list("Blue"="bl", "Orange"="or1", "Red"="rd"))
 

За исключением того, что, когда список очень длинный, им очень сложно управлять

ps. вопрос и изображение взяты из https://github.com/rstudio/shiny/issues/2729

Комментарии:

1. Что должен делать такой виджет? Когда вы нажимаете на элемент, что вы хотите?

2. Смотрите пример в главном сообщении

3. Дерево флажков не подходит? См. jsTreeR .

4. На самом деле нет. Мне нужно выбрать один из них в данный момент. Также это выглядит не очень красиво.

5. Это не проблема. Вы можете выбрать один из них за раз с помощью ‘jsTreeR’.

Ответ №1:

Я только что сделал посылку. Он использует библиотеку JavaScript jquery-ContextMenu. Чтобы установить его:

 remotes::install_github("stla/NestedMenu")
 

Обратите внимание, что на данный момент это всего лишь черновик.

введите описание изображения здесь

Пример использования:

 library(NestedMenu)
library(shiny)

cities <- list(
  europe = list(
    name = "Europe",
    items = list(
      france = list(
        name = "France",
        items = list(
          paris = list(name = "Paris"),
          lyon = list(name = "Lyon")
        )
      ),
      italy = list(
        name = "Italy",
        items = list(
          roma = list(name = "Roma"),
          milano = list(name = "Milano")
        )
      )
    )
  ),
  america = list(
    name = "America",
    items = list(
      namerica = list(
        name = "North America",
        items = list(
          usa = list(
            name = "USA",
            items = list(
              chicago = list(name = "Chicago"),
              newyork = list(name = "New York")
            )
          ),
          canada = list(
            name = "Canada",
            items = list(
              ottawa = list(name = "Ottawa"),
              toronto = list(name = "Toronto")
            )
          )
        )
      ),
      samerica = list(
        name = "South America",
        items = list(
          brazil = list(
            name = "Brazil",
            items = list(
              brasilia = list(name = "Brasilia"),
              saopolo = list(name = "Sâo Polo")
            )
          ),
          mexico = list(
            name = "Mexico",
            items = list(
              mexicocity = list(name = "Mexico City"),
              tijuana = list(name = "Tijuana")
            )
          )
        )
      )
    )
  )
)

ui <- fluidPage(
  br(),
  NestedMenuOutput("menu", height = "auto"),
  br(),
  verbatimTextOutput("clicked")
)

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

  output[["menu"]] <- renderNestedMenu({
    NestedMenu(
      "Cities", items = cities
    )
  })

  output[["clicked"]] <- renderPrint({
    input[["menu"]]
  })

}

shinyApp(ui, server)
 

Комментарии:

1. Merci beaucoup. Я проверю это как можно скорее и вернусь!