- The template has been created mainly through the removal of functionality from
Wallaceand the addition of basic functionality to demonstrate how modules can be used. - These are the key features which have been retained:
- Automatic loading of modules
- Saving and loading of the current app state
- Creating Rmarkdown files for reproducing the workflow outside of the application
- Logging errors
- These changes have been made:
common- the data structure passed between modules - has been changed from alist()containingspp <- reactiveValues()to anR6::R6Class().- Due to objects inside
commonnot being inherently reactive, event triggers have been added using{gargoyle} - A Code tab has been added to the Visualization panel to allow the code for each module and the function that each module calls to be viewed.
- Unit tests for each module have been created using
{shinytest2}in addition to unit tests for the function that the module calls. Added a new functionRemoved in 0.2.2 userun_module()which can be used to run a single module.run_<app name>()orload_file_path- Added a new function
create_template()which can be used to create a skeleton app. - Added a Dockerfile which can be used to run the app on a shiny-server.
- Added
show_loading_modal()which uses{shinybusy}to display a modal whilst slow functions are running.
- Added
save_and_load()to automate adding the lines to modules which facilitate saving and loading of input values. - Added an introduction using
{rintrojs}which is only shown to users on their first visit.
- Moved mapping, introduction, code, save and load functionality out of server into
core_modules. - Passed
parent_sessionto the modules enabling switching to the results, map and table tab from within modules and addedshow_table(),show_results()andshow_table()to simplify code. - Added
rep_renvmodule to enable capturing dependencies.
- Added ability to run functions asynchronously using
shiny::ExtendedTask(). - Modules that do not produce results now have a placeholder informing the user.
- Updated
writeLog()to use icons for different events. - Updated
save_and_load()to ignore manually added lines and fix indenting. - Added
metadata()to semi-automate adding code for reproducibility. - Module function file names now take the form of
<identifier>_f.Rto prevent confusion between the function and module file. - Objects are all passed to
printVecAsis()when generating the Rmarkdown, removing the need to manually wrap strings in the.Rmdfiles. - Use
{shinyAce}to display formatted code incore_codemodule.
- The
select_queryandselect_asyncmodules in the demonstration app have been re-written to use a different API.
- Removed
run_module()as it was not maintainable. - Moved all packages to Suggests unless they are required for development of new applications.
- Added
asyncLog()to improve logging from inside async functions. - Updated
run_<app name>()to take a load file as an argument which is loaded automatically. - Creating
load_file_pathcontaining the path to a save file will attempt to load it on app start up. - Made
create_template(),metadata()andsave_and_load()more robust.
- Fixed bug caused by being on CRAN
- Fixed bug in module ordering in
global.R
- Simplified and improved
printVecAsis()by usingdputto support improved reproducibility e.g. by including dataframes directly - Removed all remnants of map when
include_mapisFALSEincreate_template() - Install packages created by
create_template()in tests - Only run markdown tests when pandoc is installed
- Fix bug in writeLog when
type = warning - Skip tests that download files on Fedora systems
- Module
runbuttons can be pressed using the Enter key
- Fixed
core_codemodule when no function exists - Break up very long lines in the markdown so that they can be read in again
- Disabled
register_module()as it has not been refactored to work for created apps - Made loading process more robust by adding the app name
- Made loading fault-tolerant if deprecated
commonobjects exist
- Tidied up
library()calls - Removed unnecessary
gargoyle::andleaflet::scoping
- Entries in the logger are now restored on load and made available in testing
- Added
plot_autoandplot_semimodules to the example app that run automatically and semi-automatically respectively - Added ability to control generated markdown chunks using
asischunks and example toplot_hist.Rmd - Added
common$reset()andreset_data()to reset thecommonobject and remove all outputs - Added an area to the UI for including global options available inside all modules
- Added an options to
create_template()andcreate_module()to include adownloadButtonanddownloadHandlerto modules that is only visible once the module runs successfully - Rewrote
create_template()andcreate_module()so thatcreate_module()creates the module function and tests - Switched to use
shinyWidgets::radioGroupButtons()for module selection menu - Added a description of the package structure to the README
- Fixed UI generation in
create_template() - Enter key no longer reruns a module when an error message is displayed
- Fixed API calls in
select_query()andselect_async()
- Stopped running
{shinytest2}tests on CRAN - Migrated from
{promises}to{mirai}for running async tasks - Migrated to
{bslib}layout functions and various UI tweaks - Added a small footer linking to the CRAN package to generated apps
- Fix half-baked bslib migration
- Further UI tweaks
- Various tweaks to ensure that created apps pass
R CMD check - Removed
{magrittr}dependency and migrated to native pipes, increasing R dependency to v4.1.0 create_module()now creates skeleton functions that include{roxygen2}tags
create_template()now createstestthat.Rfile- Fixed
create_module()module function calls for async apps containing a map - Saving apps now only stores data in
common(i.e. excludingcommon$tasks) - Updated README with clarifications
- Skip problematic test on CRAN