Learn R Programming

ShinyBones

shinybones is an R package that provides a highly opinionated way to organize large, multi-page shiny dashboards. It allows users to focus on building independent modules for each page following a minimal set of conventions, and relegating all the boilerplate code involding in laying them out in the dashboard to a simple YAML configuration file.

Installation

You can install shinybones from github:

remotes::install_github('ramnathv/shinybones')

shinybones ships with two useful snippets stpage and stcomponent that lets you create page and component modules that follow the conventions. You can install it by running st_add_snippets. Note that you will need to restart RStudio for the snippets to be usable.

shinybones::sb_add_snippets()

Usage

You can easily scaffold a shinydashboard app using shinybones by clicking on the New Project menu in RStudio

Conventions

  1. A module referred to as foo needs to specify the following functions:

    • ui: foo_ui
    • server: foo
    • sidebar: foo_ui_sidebar (optional)
  1. The layout for the dashboard is specified in YAML.

    • Each menu item becomes a menu item in the sidebar.
    • If a menu item has more than 1 child, the children become subitems.
    • If the child of a menu item has a tabs item, they are rendered as a tabSetPanel
    • Each item (page) is connected to a module by its name.
name: Main Dashboard
sidebar:
  - text: Finance
    icon: briefcase
    menu:
      - text: Registrations
        module: registrations
      - text: Subscriptions
        tabs:
          - text: Individual
            module: subscribers_individual
          - text: Group
            module: subscribers_group

  - text: People
    icon: user
    menu:
      - text: People
        tabs:
          - text: Team Size
            module: team_size
          - text: Organogram
            module: organogram

Development Process

  1. Each page is independently developed as a standalone module.
  2. Use the function preview_module to preview the module.
  3. Add it to the dashboard by editing _site.yml.

ToDos

  • Hook up passing of data to each module
  • Wrap all utilities into a package
  • Automatically check if tabnames are unique
  • Allow factory modules that can accept static parameters
  • Fix bugs where when menu item has only one child, tabNames have to be same.
  • Allow deep linking at the tab level (by default)

Acknowledgements

This package was initially named satin, but had to be renamed since it was already in use by a now-archived package on CRAN. Thanks to @dgrtwo for suggesting the name shinybones, which is very appropriate since this package allows you to create a skeleton of a dashboard app!

Copy Link

Version

Version

0.2.4

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Ramnath Vaidyanathan

Last Published

April 30th, 2020

Functions in shinybones (0.2.4)

sb_add_snippets

Add snippets to your ~/.R/snippets/r.snippets
sb_call_modules

Call all modules
get_module_ui

Get the ui function for a module
%>%

Pipe operator
sb_create_app

Run a ShinyDashboard App created using ShinyBones
sb_create_sidebar

Create sidebar
sb_create_sidebar_conditional_panels

Create conditional panels
preview_module

Preview a shiny module in a shinydashboard
sb_create_tab_items

Create tab items
source_dirs

Source R files from multiple directories recursively
sb_create_project

Create an Rstudio Project bootstraping a shinybones dashboard.
sb_add_page

Add a page module
sb_add_test

Add a test for a shiny module
module_tabs

Generate a tab module
preview_component

Preview a UI component in a ShinyDashboard
preview_datatable

Preview data in a datatable