2
votes

I am trying to use the new SearchPanes and Buttons features from the DT package for filtering/selecting rows of a (rather large) datatable within a shiny app, along with the Scroller extension but I have problems with the searchpanes: when using both SearchPanes and Scroller only the first 10 unique values appear in the searchpanes.

Minimal example with the dataset gapminder form package gapminder:

library(shiny)
library(DT)
library(magrittr)
library(gapminder)

shinyApp(
  ui = fluidPage(
    dataTableOutput('tbl')
  ),

  server = function(input, output) {
    output$tbl = renderDataTable(server=FALSE, {
      datatable(gapminder,
        rownames = FALSE,
        colnames = c("Country", "Continent", "Year",
                     "Life Exp", "Population", "GDP per capita"),
        extensions = c("SearchPanes", "Select", "Buttons", "Scroller"),
        options = list(
          dom = "Brtip",
          buttons = list("searchPanes"),
          language = list(searchPanes = list(collapse = "Filter Rows")),
          scrollY = 500,
          scroller = TRUE,
          columnDefs = list(
            list(searchPanes = list(show = FALSE), targets = c(3:5)),
            list(searchPanes = list(controls = FALSE), targets = 0:2),
            list(className = "dt-center", targets = 0:5)
          )
        ),
        selection="none"
      ) %>% 
      formatRound(4, 1) %>% 
      formatRound(5, 0) %>% 
      formatCurrency(6, digits = 0)
    })
  }
)

In the searchpanes of this example app the filtering choices for "Country" only go from "Afghanistan" to "Belgium", while there are much more countries in the dataset:

screenshot of SearchPanes issue in shiny app

However if I don't use the Scroller extension, the problem disappears:

shinyApp(
  ui = fluidPage(
    dataTableOutput('tbl')
  ),

  server = function(input, output) {
    output$tbl = renderDataTable(server=FALSE, {
      datatable(gapminder,
        rownames = FALSE,
        colnames = c("Country", "Continent", "Year",
                     "Life Exp", "Population", "GDP per capita"),
        extensions = c("SearchPanes", "Select", "Buttons"),
        options = list(
          dom = "Brtip",
          buttons = list("searchPanes"),
          language = list(searchPanes = list(collapse = "Filter Rows")),
          columnDefs = list(
            list(searchPanes = list(show = FALSE), targets = c(3:5)),
            list(searchPanes = list(controls = FALSE), targets = 0:2),
            list(className = "dt-center", targets = 0:5)
          )
        ),
        selection="none"
      ) %>% 
      formatRound(4, 1) %>% 
      formatRound(5, 0) %>% 
      formatCurrency(6, digits = 0)
    })
  }
)

SearchPanes issue disappears when Scroller isn't used

I would really like to use the Scroller extension and the SearchPanes extension together. Anyone knows about a solution for this issue ?

Jonas

I could reproduce : in case the scroller extension is loaded, the search list displays only the first 10 values (Not hiding controls allows to sort descending and show 10 items from Zimbabwe). It seems like a bug you might want to fill in an issue there : github.com/rstudio/DT/issues - HubertL