rshinyshinydashboard

R shiny Dashboard: How to add vertical scrollbar to dashboard sidebar?


I have a couple of questions regarding R shiny Dashboard.

ui.R

library(shinydashboard)
library(shiny)

dashboardPage(
dashboardHeader(title = 'Test Interface'),
dashboardSidebar(width = 600,

               h3('-------Input Data-------'),
               fluidRow(
                 column(6, div(style = "height:10px"), fileInput(inputId = 'FileInput', label = 'Upload Input:', accept = c('csv','tsv','txt'))),
                 column(2, div(style = "height:3px"), checkboxInput(inputId = 'header', label = 'Header', value = FALSE)),
                 column(2, div(style = "height:12px"), radioButtons(inputId = 'sep', label = 'Separator', choices = c(comma=',',tab="\t",space=' '), selected = ","),offset = 1)
               ),
               fluidRow(column(6, div(style = "height:1px"), fileInput(inputId = 'FileInput1', label = 'Upload Second Input:'))),
               br(),
               h3('-------Select Foreground-------'),
               fluidRow(
                 column(5, div(style = "height:17px"), radioButtons(inputId = 'cutoff', label = 'Selection', choices = c('Up'='pos','Down'='neg','Both'='both'))),
                 br(),
                 column(3, div(style = "height:1px"), textInput(inputId = 'fc', label = "Fold Change", value = '0')),
                 column(3, div(style = "height:1px; margin-left:10cm"), height = 6,textInput(inputId = 'pvalue', label = "Adj. Pvalue",value = '0.05'))
               ),
               fluidRow(column(2, h1(" "), actionButton(inputId = 'select', label = "Select Data"))),
               fluidRow(column(5, div(style = "height:25px;font-color:blue"), downloadButton('download', 'Download Plot')))),
               dashboardBody(
                 tabsetPanel(type="tabs", id = "tabvalue",
                             tabPanel(title = "Input Table", value = 'tab1', DT::dataTableOutput('table')),
                             tabPanel(title = "Plot", value = 'tab7', plotOutput('plot',width = 800,height = 800)))))

server.R

library(shiny)

shinyServer(function(input, output, session){
})

I couldn't figure out how to add a vertical scroll bar to the dashboardSidebar. In my actual app, the last elements are not visible when I run the app.

Thanks!


Solution

  • I ran into this and came up with the following hack (and I do mean hack).

    shinyDashboard(
      tags$head(
        tags$style(HTML(".sidebar {
                          height: 90vh; overflow-y: auto;
                        }"
                   ) # close HTML       
        )            # close tags$style
      ),             # close tags#Head
    # ...
    

    The 90vh sets the sidebar height at 90% of the viewport height. You may want to adjust this to taste. Too large a percentage and some of the sidebar still drops below the horizon; too small a percentage and the sidebar ends noticeably before the main body (with the scrollbar appearing prematurely).