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
-
A module referred to as
foo
needs to specify the following functions:- ui:
foo_ui
- server:
foo
- sidebar:
foo_ui_sidebar
(optional)
- ui:
-
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 atabs
item, they are rendered as atabSetPanel
- Each item (page) is connected to a module by its name.
- Each
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
- Each page is independently developed as a standalone module.
- Use the function
preview_module
to preview the module. - 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!