Блестящий модал, используемый в качестве фильтра - сброс значений при повторном открытии - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь разместить все свои фильтры в модальном режиме (для внешнего вида), но он не работает так, как я ожидал.

  1. Изначально график не принимает своего значения, пока модал не будет вызван
  2. Модал не сохраняет текущее состояние, поэтому, когда я снова открываю модальный режим, все входы возвращаются назадк их исходным начальным значениям

Ниже приведен пример кода, который сравнивает два метода (обычный фильтр на боковой панели и фильтр в модальном режиме).Поиграйте с модалом и посмотрите:

rm(list=ls())

library(shiny)
library (shinydashboard)

header <- dashboardHeader(title = "Test")

sidebar <- dashboardSidebar(
  sliderInput(inputId = "bins1",
              label = "Number of bins:",
              min = 1,
              max = 50,
              value = 30),
  actionButton("filterBT", "Filters")
)

body <- dashboardBody(
  fluidRow(
      box(
        title = "Graph using sidebar filter", status = "primary", solidHeader = TRUE, width = 6,
        plotOutput("distPlot1")
      ),
      box(
        title = "Graph using button filter", status = "primary", solidHeader = TRUE, width = 6,
        plotOutput("distPlot2")
      )
  )
)

ui <- dashboardPage(header, sidebar, body)


#######################################/SERVER/####################################
server <- function(input, output, session) {

  myModal <- function() {
    div(id = "test",
        modalDialog(uiOutput("Network"),
                    br(),
                    br(),
                    easyClose = TRUE, title = "Filter Selections")
    )
  }

  # open modal on button click
  observeEvent(input$filterBT,
               ignoreNULL = TRUE,   # Show modal on start up
               showModal(myModal())
  )

  output$Network <- renderUI ({
    sliderInput(inputId = "bins2",
                label = "Number of bins:",
                min = 1,
                max = 50,
                value = 30)
  })

  output$distPlot1 <- renderPlot({

    x    <- faithful$waiting
    bins <- seq(min(x), max(x), length.out = input$bins1 + 1)

    hist(x, breaks = bins, col = "#75AADB", border = "white",
         xlab = "Waiting time to next eruption (in mins)",
         main = "Histogram of waiting times")

  })

  output$distPlot2 <- renderPlot({

    x    <- faithful$waiting
    bins <- seq(min(x), max(x), length.out = input$bins2 + 1)

    hist(x, breaks = bins, col = "#75AADB", border = "white",
         xlab = "Waiting time to next eruption (in mins)",
         main = "Histogram of waiting times")

  })


}

shinyApp(ui, server)
  1. Изначально график справа не появится, пока вы не откроете кнопку «Фильтр»
  2. Если вы выберете что-нибудь кроме 30закрой модальное, открой модальное обратно.Возвращается к значению по умолчанию 30.
...