teal_module object (#1685).options(teal.enable_deep_linking = TRUE) (default: FALSE). When enabled, the active module is reflected in the URL as ?active_module=<module path>, and navigating to such a URL or using the browser's back/forward buttons switches to the corresponding tab (#1699).srv_transform_teal_data(), ui_transform_teal_data() and check_decorators() (#1697).teal.snapshot_manager.enable option (default: TRUE) to control whether the Snapshot Manager panel is rendered. Setting it to FALSE hides the panel and skips its server logic.ui_teal_with_splash, srv_teal_with_splash, new_tdata, tdata2env, get_code_tdata, join_keys.tdata, get_metadata,
as_tdata, landing_popup_module and show_rcode_modal that were deprecated in 0.16.0.init and srv_teal have new reporter parameter, that allows to pre-define teal.reporter::Reporter object to be
used for storing the content of the report. You can also globally disable reporting by setting reporter = NULL
(and disable = TRUE in ui_teal for cases when ui_teal is used as shiny module).reporter_previewer_module() is deprecated and will be removed in the future release. The custom server_args values can be set using options():
teal.reporter.nav_buttons to control which buttons will be displayed in the "Report" drop-down.teal.reporter.rmd_output to customize the R Markdown outputs types for the report.teal.reporter.rmd_yaml_args to customize the widget inputs in the download report modal.teal.reporter.global_knitr to customize the global knitr options for the report.bslib components.teal_data_module() is now placed inside a modal that can only be closed when it returns teal_data.ui_teal and srv_teal directly in any application by delivering data argument as a reactive returning teal_data object (#669).ui_teal and srv_teal functions, the id argument in init is being deprecated (#1438).ui_session_info and srv_session_info shiny module to create the user session info and teal app lockfile download button.teal_transform_module to provide a way to interactively modify data delivered to teal_module's server and to decorate module outputs, along with a vignette to demonstrate its usage (#1228, #1384).once = FALSE in teal_data_module to possibly reload data during a run time.. are ignored when module's datanames is set as "all".datanames, such as all and .raw_data are being used.datanames() on data passed to teal application no longer has effect. In order to change teal_module's
datanames one should modify module$datanames.landing_popup_module() is deprecated. Please use add_landing_modal() function to add a landing popup for your teal application.teal no longer re-export %>%. Please load library(magrittr) instead or use |> from base.build_app_title will be removed in the future release. Please use the modify_title() function to change the title for your teal application.title, header, and footer arguments of the init() function are deprecated. Please use the modify_title, modify_header, and modify_footer respectively.javascript events by setting $(document).ready(function() { ... }) (#1114).data passed to the teal_module's server consists unfiltered datasets contained in .raw_data.datanames of modules that crashed module-specific applications when filtering child datasets.module_specific feature when a teal module specified datanames of length more than 1.landing_popup_module function which creates a module that will display a popup when the app starts. The popup will block access to the app until it is dismissed.?snapshot.as_tdata function to facilitate migration of modules to the new teal_data class.build_app_title function to facilitate adding favicons to app title.data argument in init now accepts only teal_data and teal_data_module.tdata has been deprecated and replaced with teal_data. Support for tdata passed to the data argument in module(server) will be removed in the next release.module(ui) argument no longer accepts data and datasets arguments. All data dependent logic should be set in the server function.module(server) argument deprecated datasets argument. teal_modules' server functions should accept data (teal_data) instead.init. filter now comes directly after modules, before title.module validation checks so that it won't throw messages about data argument unnecessarily.teal_slices and made modifications to init to enable tagging teal_slices with an app id to safely upload snapshots from disk.FilteredData no longer stores pre-processing code in specific slots. Code is now attached as attribute. Adjusted appropriately.Report previewer module from mapping matrix display in filter manager.module_specific in teal::teal_slices documentation.?snapshot.reporter_previewer_module to customize default values through srv_args.reporter_previewer_module in a list of modules to override default one.filter argument in teal::init requires teal_slices object now. Details in documentation of teal::init.filters argument in module and replaced it with datanames. Details in documentation of teal::modulescda package dependency from examples.datasets argument in modules has been deprecated and will be removed in a future release. Please use data argument instead. data is of type tdata; see "Creating custom modules" vignettes and function documentation of teal::new_tdata for further details.chunks in teal.code, the teal framework now uses their replacement (qenv) instead. The documentation in teal has been updated to reflect this and custom modules written with chunks should be updated to use qenv.chunks in teal.code, get_rcode, get_rcode_srv, and get_rcode_ui have been removed.validate_inputs function that transfers input validation messages to app output.modules argument of init accepts teal_module type of object. There is no need to wrap up a single module in modules() or list().module_nested_tabs so that only active modules are calculated in a teal app.scda.2022.teal applications.rlang instead of digest package to calculate the hash (which has been moved from teal.data and teal.slice). There is now an explicit hashing check in the reproducible code output.root_modules, default_filter, bookmarkableShinyApp, as well as deprecated logging mechanism, including the functions log_app_usage and .log.teal app with bslib::run_with_themer.srv_nested_tabs documentation.header and footer arguments in init to empty text.bslib bootstrap themes in teal::init apps, please read more in the new teal-bs-themes vignette.filterable attributes for the per-dataset lists in the filter argument of init.teal_module to have data argument which receives a list of reactive filter data with "code" and "join_keys" attributes.teal_module to have filter_panel_api argument which receives a FilterPanelAPI object.module_teal to reflect changes in teal.slice.teal_module to no longer receive datasets object in the ... argument. In order to use datasets in the teal_module please specify datasets explicitly.merge_expression argument in get_rcode_srv function and removed it in get_rcode function.session argument in get_rcode function.reporter_previewer_module to wrap the teal.reporter package previewer functionality as a teal module.teal to support modules which include reporting. If any module which supports reporting is included then a reporter_previewer_module is included.module() and the server argument is now a function where the second argument can be ... or datasets.bookmarkableShinyApp. In future releases the teal framework will stop supporting shiny bookmarking (which has not officially been supported); it may be officially supported in the future. Note the filter panel in teal.slice retains its ability to save and restore its state if used in a standalone shiny app with bookmarking.pkgdown configuration.shinytest app tests.teal.data: creating and loading the data needed for teal applications.teal.widgets: shiny components used within teal.teal.slice: provides a filtering panel to allow filtering of data.teal.code: handles reproducibility of outputs.teal.transform: standardizes extracting and merging data.teal.logger: standardizes logging within teal framework.The teal package contains the code to create apps (teal::init), to create a module (teal::module) and to group modules in the app (teal::modules).
teal depends on teal.transform and teal.data which contain the functions that teal app creators are likely to need. The other package teal only imports from and therefore teal module creators should either fully specify functions from these packages when required or import them into custom packages as library(teal) will not load them.
teal module named example_module has been included in the package.teal package has been split into multiple smaller packages, see above.root_modules function, users should use modules directly inside init.root_modules any label argument to modules must be explicitly named. For example modules("lab", mod1, mod2) should be replaced with modules(label = "lab", mod1, mod2).teal: main module panel now has fixed shiny name root and the active tab is named active_tab not Active_tab.MultiAssayExperiment is now suggested packages, not required. Objects dependent on MultiAssayExperiment are changed to lazy-load this now suggested package.HTML identifiers of teal modules - now each nested module receives its own shiny namespace.raw_dataset, raw_dataset_connector, named_dataset, named_dataset_file, named_dataset_connector, relational_dataset, relational_dataset_file, relational_dataset_connector, key, as_cdisc, as_cdisc_relational.rcd_connection and rcd_data; scda_dataset_connectors can be passed into cdisc_data and teal_data directly.rcd_dataset_connector and rcd_cdisc_dataset_connector with scda_dataset_connector and scda_cdisc_dataset_connector respectively.teal_show_js_log option into teal.show_js_log to match options naming convention.%is_in% and stop_shiny internal utility functions.logger package.register_logger, which registers a logger in a given namespace.teal framework.pid and shiny session token into footnote so app developers can identify logs for apps.Added print methods to the DatasetConnector, RelationalData, RelationalDataconnector and JoinKeys classes and added input validation to the implementation of the print method that was already in the Dataset object.
Added public facing constructor functions for CDISCDataConnector, RelationalDataConnector, and DataConnection classes.
Modified data_extract_spec to allow both the filter and select parameters to be NULL, which results in the data_extract_ui acting as if a filter_spec with all variables as possible choices had been supplied as the filter argument and a select_spec with the multiple parameter set to TRUE had been supplied as the select argument.
Added support of the full screen for a module when the filters argument is equal NULL.
Added support for shiny::moduleServer passed to the server parameter of teal::module.
Added teal.threshold_slider_vs_checkboxgroup as an R option: if a categorical variable has more than this number of unique values, the filter panel uses a drop-down select input instead of a checkbox group.
Extended the FilteredData API to allow managing filter states programmatically and not only from the UI of a teal application.
Hid the buttons to remove filters from all datasets and each dataset when there are no active filters.
Updated init to accept RelationalData, data.frame, MultiAssayExperiment, Dataset, DatasetConnector, list or a function returning a named list as data input.
choices_selected now correctly removes duplicates from the array passed to its choices parameter.FilterState in case of using MultiAssayExperiment::subsetByColData. Now single condition for variable containing NA values is !is.na(var) & var == <condition>.DatasetConnector being dependent on other Dataset or DatasetConnector objects.teal application.module_nested_tabs to fix the issue with the filter panel not reacting to an input change in a nested module.updateOptionalSelectInput no longer sets input to NULL when logical value is passed to selected.JoinKeys when key name between two Dataset object differs.JavaScript console logs to the R console when teal.show_js_log = TRUE.mae_dataset() in favor of more general dataset() constructor.teal applications users can apply using R options.label argument of select_spec and filter_spec.FilteredDataset::get_data to accept logical input only.teal.devel in the documentation.Teal prefix to all public R6 classes to avoid name collisions with other packages.utils.nest and replaced its functionality in teal with equivalents from the checkmate package and base R.shiny server functions of DataConnection, RelationalDataConnector, DatasetConnector, and RelationalData with the shiny::moduleServer equivalents.teal application via ui_teal_with_splash and srv_teal_with_splash is now no longer recommended because it doesn't support new features (e.g. logging, bookmarking). Use init instead.shiny version >= 1.7.MultiAssayExperiment to the teal::init using mae_dataset function or through
the connectors.MultiAssayExperiment objects. Filters can be set on a subject level
(colData of MAE object) and on a experiment level (colData and rowData of an assay).cdse_dataset_connector to create delayed data objects from CDSE.datasetdb_dataset_connector to create delayed data objects from DataSetDB.ricepass_connection to create delayed data objects from entimICE via ricepass.Dataset type determines an appearance and a functionality of related filters and filters summary.Datasets are passed (by reference) from DDL to FilteredData skipping extracting data and
their attributes.mutate_dataset multiple times on the same DatasetConnector or Dataset object.get_code function to not reproduce its raw data set.filter_spec to allow no variable selection upon app initialization, where the first possible value was previously selected.modules parameter of teal::init function can also receive a list except root_modules
function call.split and merge methods to the JoinKeys object.all_choices() as a possible argument to the selected parameter of filter_spec, select_spec and choices_selected indicating that all choices are selected.append method of a CodeClass object has been modified to print a warning message when the argument does not result in any code being added because it is duplicated.Dataset and DatasetConnector objects.teal_data to return a CDISCData object whenever any of its arguments is a type of CDISCData object.LICENCE and README with new package references.get_hash to the Dataset class returning the MD5 hash of the object stored inside the Dataset object.random.cdisc.data with scda in examples and tests.JoinKeys in Dataset and DatasetConnector classes.error_on_lintr: TRUE to .lintr%>% is now exported such that downstream code and packages can use it.rice package from the documentation.mutate_data with RelationalDataConnector.as_cdisc to behave similarly to cdisc_dataset when called on a Dataset object.data_extract_spec UI elements. Both are now compressed to <data name>.<column name> if they don't change during runtime of the app.ADSAFTTE to the list of recognized ADaM dataset names.data_extract_spec's doc string showcasing app users can choose a variable used for filtering in the encoding panel.teal modules.Date or datetime column is selected from a filter_spec.snowflake connection and connectors.teal app (ending a user shiny session), all DataConnections will now try to close their connections.ADHY keys to configuration file.filter_spec function: the parameter choices is no longer mandatory (the function will take all possible choices by default) and the vars parameter additionally accepts the choices_selected and allows to change the variables for filtering using the UI elements in the encoding panel.value_choices function to handle edge case when "NA" and NA values exist in the character column that choices are derived from.\Callable class.FilteredData class.JoinKeys class (with join_keys() constructors and join_key() constructor for its elements) to store joining key columns between datasets.dataset() constructor, added cdisc_dataset() constructor and as_cdisc() conversion function.keys()).get_keys() and set_keys() functions to extract and manipulate datasets primary keys respectively.filtered_data_new, filtered_data_set and filtered_data_set_filters.teal::cdisc_dataset and other teal::RelationalDataset constructors should now be shown when getting the code from teal::cdisc_data objects and other teal::RelationalData objects.variable_choices to use datasets with missing labels.NULL to selected argument of select_spec function.python_dataset_connector to create delayed data objects from python scripts or directly from python code.python_dataset_connector is not yet ready to be deployed on RSConnect because it does not contain numpy and pandas, which are Python libraries used in python_dataset_connector.Date and Datetime variables in the Filter Panel.date and datetime filter widgets to reset the value to the original.check_key_duplicates, which creates a short summary about rows with duplicated primary key (row numbers and the number of duplicates)character and factor variables in the Filter Panel.module_filter_panel, not only those of types numeric, logical, factor, character and Datemutate_data to accept the whole scope of objects for vars.teal::init function documentation to state that custom CSS loading code with htmltools::htmlDependency should be included in the header argument rather than inside UI arguments of modules.data_extract_spec.drop_keys to filter_spec to decide whether to drop or keep keys columns on single filter on those columns.keys to variable_choices. keys specifies the names of the variables, which should have the new key icon shown next to them in the variable drop down menus in the left-hand side encoding panels instead of the icon appropriate for their original R variable type. variable_choices now also works with RelationalDataset and RelationalDatasetConnector objects.include_factors option in get_class_colnames in RawDataset.arm_ref_comp objects.width argument in optionalSelectInput.lifecycle badges to all exported functions.code_dataset_connector and code_cdisc_dataset_connector functions which enable the creation of new delayed data objects given a string of code.csv_dataset_connector and csv_cdisc_dataset_connector.set_ui_input method of RawDatasetConnector and NamedDatasetConnector to handle user defined shiny inputs.Keep Inf checkbox for numerical filter items. Keep NA and Keep Inf checkbox doesn't appear if there are no missing or infinite values.RelationalData class with abstract class RelationalDataCollection and rename RelationalDataList class as RelationalData. The data argument to teal::init is now always a RelationalData object.fun_cdisc_dataset_connector to enable providing a custom function which returning a dataset.code and script arguments from as_relational wrapper. This is intended to be done with mutate_dataset functionality.filer argument in init has added a validation step to ensure compatibility with the rest of the app. Variables inherited from ADSL have to be specified only for ADSL dataset.get_code results.pull_fun of DataConnection produces an error.cdisc_dataset and dataset now return R6 class objects (RelationalDataset).
A new teal_data function to include datasets and connectors into teal application.
cdisc_data function to include datasets and connectors into teal application where a check argument still could be used and other consistency tests are performed.
get_raw_data can be used to derive raw data from R6 objects e.g. (RelationalDataset).
RawDatasetConnector, NamedDatasetConnector and RelationalDatasetConnector to execute custom function call in order to get data from connection.
CodeClass to manage reproducibility of the data and relationships between datasets. Not directly exposed to the public interface.
mutate_dataset allows to modify dataset or connector via code argument or an R script.
mutate_data allows to change any dataset in RelationalData, RelationalDataConnector or RelationalDataList.
New wrapper functions to manipulate RelationalDatasetConnector and RelationalDataset such as get_dataset, load_dataset, as_relational.
New wrapper functions to manipulate RelationalDataConnector, RelationalData and RelationalDataList such as get_datasets, load_datasets.
choices_labeled, filter_spec, select_spec, data_extract_spec, value_choices,
variable_choices as S3 class applied on data.frame and also on delayed data.
You can no longer modify the app$datasets, but must instead use argument filter in the init function.
New modules were created to create a module of nested teal modules, then another one that adds the right filter pane to each tab. The teal::init function stays unchanged.
The teal::init function now returns a UI function with an optional id argument. This allows to embed it into other applications. A split view of two teal applications side-by-side is one such example and shown in a vignette. teal::init was turned into a wrapper function around module_teal_with_splash.R and developers that want to embed teal as a shiny module should directly work with these functions (ui_teal_with_splash and srv_teal_with_splash) instead of teal::init.
The teal::init function now has a title parameter to set the title of the browser window.
Missing data NA is now explicitly addressed in the filter panel: NAs are excluded by default and a checkbox to include them was added.
Statistics of the data are visually depicted in terms of histograms or bar charts overlayed onto the shiny input elements.
Added buttons to remove all filters applied to a dataset.
Restored the functionality to hide the filter panel for a module when it was constructed with filters = NULL.
Moved helper functions into utils.nest and removed unused functions set_labels_df and get_labels_df.
optionalSelectInput now allows for grouped choices.
FilteredData is now fully reactive. Now filtered data is lazy evaluated as per need. This further opens the door to bookmarking teal apps (bookmarking currently works for the right filtering panel, but we will make this feature more sophisticated in a future release, each module must be reviewed and adapted if it contains reactiveValues).FilteredData by set_datasets_data function located in init_datasets.R file.get_dataset() method to get_data().get_filter_call() method to get_filter_expr(); returns an expression rather than a list.isolate from get_data() method and similar methods. You must isolate it yourself as needed. If you want to temporarily deactivate shiny errors due to missing errors, you can set options(shiny.suppressMissingContextError = TRUE). In general, avoid isolate as this breaks reactivity.keys function to keys object.choices_selected.choices_selected when selected is not in choices.pickerInput not to display column name as label if it's missing.teal app to initialize without data. The data are then loaded from within the teal app.DatasetConnector, DataConnector) to connect to various data sources, including:
* connector to rice API - rice_data and rice_dataset_connector
* connector to RDS files - rds_data and rds_dataset_connectorshiny app when shiny is busy to update the views.labels argument of cdisc_data function. Labels should now already be present in the data passed to the cdisc_data function. This can be achieved using the var_relabel function.optionalSelectInput and improved inputs look.get_data_labels function to FilteredData class.sep passing within data_extract_spec.choices_labeled and fix bug of not showing column name in data_extract_spec.cdisc_dataset (and more general dataset) functions to properly handle dataset keys while merging..css and .js files.columns_spec to select_spec.variable_choices and value_choices.cdisc_data and get_code to deal with preprocessing and moving a step towards data standard independent teal.teal.utils functions to teal: log_app_usage, stop_shiny.*_spec functions.PickerInput and SelectInput.tab*.generate_sample_data.shinyjs package.teal crashes when a filter variable gets added that has many decimal places.tm_scatterplot module.tm_table module.tabs arguments were renamed to modules.tab_item function is now called module.tab_items function is now called modules.tabs function was removed.variable_browser_item is now called tm_variable_browser.data_table_item is now called tm_data_table.datasets argument is automatically added to the server functions specified with module. Hence teal_datasets has been removed as a server_args element.Datanames in FilteredData are now case sensitive.