ui_teal_with_splash,srv_teal_with_splash,new_tdata,tdata2env,get_code_tdata,join_keys.tdata,get_metadata,as_tdata,landing_popup_module andshow_rcode_modal that were deprecated in 0.16.0.init andsrv_teal have newreporter parameter, that allows to pre-defineteal.reporter::Reporter object to be used for storing thecontent of the report. You can also globally disable reporting bysettingreporter = NULL (anddisable = TRUE inui_teal for cases whenui_teal is used asshiny module).reporter_previewer_module() is deprecated and willbe removed in the future release. The customserver_argsvalues can be set usingoptions():teal.reporter.nav_buttons to control which buttons willbe displayed in the “Report” drop-down.teal.reporter.rmd_output to customize the R Markdownoutputs types for the report.teal.reporter.rmd_yaml_args to customize the widgetinputs in the download report modal.teal.reporter.global_knitr to customize the globalknitr options for the report.bslib components.teal_data_module() is now placed inside a modal that canonly be closed when it returnsteal_data.ui_teal andsrv_tealdirectly in any application by deliveringdata argument asareactive returningteal_data object(#669).ui_teal andsrv_tealfunctions, theid argument ininit is beingdeprecated (#1438).ui_session_info andsrv_session_info shiny module to create the user sessioninfo and teal app lockfile download button.teal_transform_module to provide a way tointeractively modify data delivered toteal_module’sserver and to decorate module outputs, along with avignette to demonstrate its usage (#1228, #1384).once = FALSE inteal_data_module to possibly reload data during a runtime.. are ignored whenmodule’sdatanames is set as"all".datanames, such asall and.raw_data are being used.datanames() ondata passed to tealapplication no longer has effect. In order to changeteal_module’sdatanames one should modifymodule$datanames.landing_popup_module() is deprecated. Please useadd_landing_modal() function to add a landing popup foryour teal application.teal no longer re-export%>%. Pleaseloadlibrary(magrittr) instead or use|>frombase.build_app_title will be removed in the future release.Please use themodify_title() function to change the titlefor your teal application.title,header, andfooterarguments of theinit() function are deprecated. Please usethemodify_title,modify_header, andmodify_footer respectively.javascript events by setting$(document).ready(function() { ... }) (#1114).data passed to theteal_module’s server consists unfiltered datasets containedin.raw_data.datanames of modules thatcrashed module-specific applications when filtering child datasets.module_specific featurewhen ateal module specifieddatanames oflength more than 1.landing_popup_module function which creates amodule that will display a popup when the app starts. The popup willblock access to the app until it is dismissed.?snapshot.as_tdata function to facilitate migration ofmodules to the newteal_data class.build_app_title function to facilitate addingfavicons to app title.data argument ininit now accepts onlyteal_data andteal_data_module.tdata has been deprecated and replaced withteal_data. Support fortdata passed to thedata argument inmodule(server) will beremoved in the next release.module(ui) argument no longer acceptsdataanddatasets arguments. All data dependent logic should beset in the server function.module(server) argument deprecateddatasets argument.teal_modules’ serverfunctions should acceptdata (teal_data)instead.init.filter now comes directly aftermodules,beforetitle.module validation checks so that it won’tthrow messages aboutdata argument unnecessarily.teal_slices and made modifications toinit to enable taggingteal_slices with an appid to safely upload snapshots from disk.FilteredData no longer stores pre-processing code inspecific slots. Code is now attached as attribute. Adjustedappropriately.Report previewer module from mapping matrixdisplay in filter manager.module_specific inteal::teal_slicesdocumentation.?snapshot.reporter_previewer_module to customize defaultvalues throughsrv_args.reporter_previewer_module in a listof modules to override default one.filter argument inteal::initrequiresteal_slices object now. Details in documentationofteal::init.filters argument inmoduleand replaced it withdatanames. Details in documentation ofteal::modulescda package dependency from examples.datasets argument inmoduleshas been deprecated and will be removed in a future release. Please usedata argument instead.data is of typetdata; see “Creating custom modules” vignettes and functiondocumentation ofteal::new_tdata for further details.chunks inteal.code,theteal framework now uses their replacement(qenv) instead. The documentation inteal hasbeen updated to reflect this and custom modules written withchunks should be updated to useqenv.chunks inteal.code,get_rcode,get_rcode_srv, andget_rcode_ui have been removed.validate_inputs function that transfers inputvalidation messages to app output.modules argument ofinit acceptsteal_module type of object. There is no need to wrap up asingle module inmodules() orlist().module_nested_tabs so that only active modulesare calculated in ateal app.scda.2022.teal applications.rlang instead ofdigest package to calculate the hash (which has been movedfromteal.data andteal.slice). There is nowan explicit hashing check in the reproducible code output.root_modules,default_filter,bookmarkableShinyApp, as wellas deprecated logging mechanism, including the functionslog_app_usage and.log.teal app withbslib::run_with_themer.srv_nested_tabsdocumentation.header andfooter arguments ininit to empty text.bslib bootstrap themes inteal::init apps, please read more in the newteal-bs-themes vignette.filterable attributes for theper-dataset lists in thefilter argument ofinit.teal_module to havedata argumentwhich receives a list of reactive filter data with"code"and"join_keys" attributes.teal_module to havefilter_panel_api argument which receives aFilterPanelAPI object.module_teal to reflect changesinteal.slice.teal_module to no longer receivedatasets object in the... argument. In orderto usedatasets in theteal_module pleasespecifydatasets explicitly.merge_expression argument inget_rcode_srv function and removed it inget_rcode function.session argument inget_rcodefunction.reporter_previewer_module to wraptheteal.reporter package previewer functionality as ateal module.teal to supportmodules whichinclude reporting. If anymodule which supports reportingis included then areporter_previewer_module isincluded.module() and the serverargument is now a function where the second argument can be... ordatasets.bookmarkableShinyApp. In future releases theteal framework will stop supportingshinybookmarking (which has not officially been supported); it may beofficially supported in the future. Note the filter panel inteal.slice retains its ability to save and restore itsstate if used in a standaloneshiny app withbookmarking.pkgdown configuration.shinytest app tests.teal.data: creating and loading the data needed forteal applications.teal.widgets:shiny components used withinteal.teal.slice: provides a filtering panel to allowfiltering of data.teal.code: handles reproducibility of outputs.teal.transform: standardizes extracting and mergingdata.teal.logger: standardizes logging withinteal framework.Theteal 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 onteal.transform andteal.data which contain thefunctions thatteal app creators are likely to need. Theother packageteal only imports from and thereforeteal module creators should either fully specify functionsfrom these packages when required or import them into custom packages aslibrary(teal) will not load them.
teal module namedexample_module has been included in the package.teal package has been split into multiple smallerpackages, see above.root_modules function, users should usemodules directly insideinit.root_modules anylabel argument tomodules must be explicitlynamed. For examplemodules("lab", mod1, mod2) should bereplaced withmodules(label = "lab", mod1, mod2).teal: main module panelnow has fixedshiny nameroot and the activetab is namedactive_tab notActive_tab.MultiAssayExperiment is now suggested packages, notrequired. Objects dependent onMultiAssayExperiment arechanged to lazy-load this now suggested package.HTML identifiers oftealmodules - now each nested module receives its ownshinynamespace.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 andrcd_data;scda_dataset_connectors can be passed intocdisc_data andteal_data directly.rcd_dataset_connector andrcd_cdisc_dataset_connector withscda_dataset_connector andscda_cdisc_dataset_connector respectively.teal_show_js_log option intoteal.show_js_log to match options naming convention.%is_in% andstop_shiny internalutility functions.loggerpackage.register_logger, which registers alogger in a given namespace.tealframework.pid andshiny session token intofootnote so app developers can identify logs for apps.Added print methods to theDatasetConnector,RelationalData,RelationalDataconnector andJoinKeys classes and added input validation to theimplementation of the print method that was already in theDataset object.
Added public facing constructor functions forCDISCDataConnector,RelationalDataConnector,andDataConnection classes.
Modifieddata_extract_spec to allow both thefilter andselect parameters to beNULL, which results in thedata_extract_uiacting as if afilter_spec with all variables as possiblechoices had been supplied as thefilter argument and aselect_spec with themultiple parameter set toTRUE had been supplied as theselectargument.
Added support of the full screen for amodule whenthefilters argument is equalNULL.
Added support forshiny::moduleServer passed to theserver parameter ofteal::module.
Addedteal.threshold_slider_vs_checkboxgroup as an Roption: if a categorical variable has more than this number of uniquevalues, the filter panel uses a drop-down select input instead of acheckbox group.
Extended theFilteredData API to allow managingfilter states programmatically and not only from the UI of ateal application.
Hid the buttons to remove filters from all datasets and eachdataset when there are no active filters.
Updatedinit to acceptRelationalData,data.frame,MultiAssayExperiment,Dataset,DatasetConnector,listor a function returning a named list as data input.
choices_selected now correctly removes duplicates fromthe array passed to itschoices parameter.FilterState in case of usingMultiAssayExperiment::subsetByColData. Now single conditionfor variable containingNA values is!is.na(var) & var == <condition>.DatasetConnector being dependenton otherDataset orDatasetConnectorobjects.tealapplication.module_nested_tabs to fix the issue with thefilter panel not reacting to an input change in a nested module.updateOptionalSelectInput no longer sets input toNULL whenlogical value is passed toselected.JoinKeys when key name between twoDataset object differs.JavaScript console logs to theR console whenteal.show_js_log = TRUE.mae_dataset() in favor of more generaldataset() constructor.tealapplications users can apply usingR options.label argument ofselect_spec andfilter_spec.FilteredDataset::get_data to acceptlogical input only.teal.develin the documentation.Teal prefix to all publicR6classes to avoid name collisions with other packages.utils.nest and replaced itsfunctionality inteal with equivalents from thecheckmate package and baseR.shiny server functions ofDataConnection,RelationalDataConnector,DatasetConnector, andRelationalData with theshiny::moduleServer equivalents.teal application viaui_teal_with_splash andsrv_teal_with_splashis now no longer recommended because it doesn’t support new features(e.g. logging, bookmarking). Useinit instead.shiny version >= 1.7.MultiAssayExperiment to theteal::init usingmae_dataset function orthrough the connectors.MultiAssayExperimentobjects. Filters can be set on a subject level (colData ofMAE object) and on a experiment level (colDataandrowData of an assay).cdse_dataset_connector to create delayed dataobjects fromCDSE.datasetdb_dataset_connector to create delayeddata objects fromDataSetDB.ricepass_connection to create delayed dataobjects fromentimICE viaricepass.Dataset type determines an appearance and afunctionality of related filters and filters summary.Datasets are passed (by reference) fromDDL toFilteredData skipping extracting dataand their attributes.mutate_dataset multipletimes on the sameDatasetConnector orDatasetobject.get_code functionto not reproduce its raw data set.filter_spec to allow no variable selection uponapp initialization, where the first possible value was previouslyselected.modules parameter ofteal::init functioncan also receive alist exceptroot_modulesfunction call.split andmerge methods to theJoinKeys object.all_choices() as a possible argument to theselected parameter offilter_spec,select_spec andchoices_selected indicatingthat all choices are selected.append method of aCodeClass objecthas been modified to print a warning message when the argument does notresult in any code being added because it is duplicated.Dataset andDatasetConnector objects.teal_data to return aCDISCDataobject whenever any of its arguments is a type ofCDISCDataobject.LICENCE andREADME with newpackage references.get_hash to theDatasetclass returning the MD5 hash of the object stored inside theDataset object.random.cdisc.data withscda inexamples and tests.JoinKeys inDataset andDatasetConnector classes.error_on_lintr: TRUE to.lintr%>% is now exported such thatdownstream code and packages can use it.rice package from thedocumentation.mutate_datawithRelationalDataConnector.as_cdisc to behave similarly tocdisc_dataset when called on aDatasetobject.data_extract_spec UI elements. Both are now compressed to<data name>.<column name> if they don’t changeduring runtime of the app.ADSAFTTE to the list of recognizedADaM dataset names.data_extract_spec’s doc stringshowcasing app users can choose a variable used for filtering in theencoding panel.teal modules.Date ordatetime column is selected from afilter_spec.snowflake connection and connectors.teal app (ending a usershiny session), allDataConnections will nowtry to close their connections.ADHY keys to configuration file.filter_spec function: the parameterchoices is no longer mandatory (the function will take allpossible choices by default) and thevars parameteradditionally accepts thechoices_selected and allows tochange the variables for filtering using the UI elements in the encodingpanel.value_choices function to handle edge casewhen"NA" andNA values exist in thecharacter column that choices are derived from.Callable class.FilteredData class.JoinKeys class (withjoin_keys()constructors andjoin_key() constructor for its elements)to store joining key columns between datasets.dataset() constructor, addedcdisc_dataset() constructor andas_cdisc()conversion function.keys()).get_keys() andset_keys() functionsto extract and manipulate datasets primary keys respectively.filtered_data_new,filtered_data_set andfiltered_data_set_filters.teal::cdisc_datasetand otherteal::RelationalDataset constructors should nowbe shown when getting the code fromteal::cdisc_dataobjects and otherteal::RelationalData objects.variable_choices to use datasets with missinglabels.NULL toselected argument ofselect_specfunction.python_dataset_connector to create delayed dataobjects from python scripts or directly from python code.python_dataset_connector is not yet ready to bedeployed onRSConnect because it does not containnumpy andpandas, which arePython libraries used inpython_dataset_connector.Date andDatetime variables in the Filter Panel.date anddatetime filterwidgets to reset the value to the original.check_key_duplicates, which createsa short summary about rows with duplicated primary key (row numbers andthe number of duplicates)character andfactor variables in the Filter Panel.module_filter_panel,not only those of typesnumeric,logical,factor,character andDatemutate_data to accept the whole scope of objectsforvars.teal::init function documentation to statethat customCSS loading code withhtmltools::htmlDependency should be included in theheader argument rather than inside UI arguments ofmodules.data_extract_spec.drop_keys tofilter_spec to decide whether to drop or keep keys columnson single filter on those columns.keys tovariable_choices.keys specifies the names ofthe variables, which should have the new key icon shown next to them inthe variable drop down menus in the left-hand side encoding panelsinstead of the icon appropriate for their original R variable type.variable_choices now also works withRelationalDataset andRelationalDatasetConnector objects.include_factors option inget_class_colnames inRawDataset.arm_ref_comp objects.width argument inoptionalSelectInput.lifecycle badges to all exported functions.code_dataset_connector andcode_cdisc_dataset_connector functions which enable thecreation of new delayed data objects given a string of code.csv_dataset_connector andcsv_cdisc_dataset_connector.set_ui_input method ofRawDatasetConnector andNamedDatasetConnectorto handle user definedshiny inputs.Keep Inf checkbox for numerical filter items.Keep NA andKeep Inf checkbox doesn’t appearif there are no missing or infinite values.RelationalData class with abstractclassRelationalDataCollection and renameRelationalDataList class asRelationalData.Thedata argument toteal::init is now alwaysaRelationalData object.fun_cdisc_dataset_connector to enable providing acustom function which returning a dataset.code andscript arguments fromas_relational wrapper. This is intended to be done withmutate_dataset functionality.filer argument ininit has added avalidation step to ensure compatibility with the rest of the app.Variables inherited fromADSL have to be specified only forADSL dataset.get_code results.pull_fun ofDataConnection produces an error.cdisc_dataset anddataset now return R6class objects (RelationalDataset).
A newteal_data function to include datasets andconnectors intoteal application.
cdisc_data function to include datasets andconnectors intoteal application where acheckargument still could be used and other consistency tests areperformed.
get_raw_data can be used to derive raw data from R6objects e.g. (RelationalDataset).
RawDatasetConnector,NamedDatasetConnector andRelationalDatasetConnector to execute custom function callin order to get data from connection.
CodeClass to manage reproducibility of the data andrelationships between datasets. Not directly exposed to the publicinterface.
mutate_dataset allows to modify dataset or connectorviacode argument or an R script.
mutate_data allows to change any dataset inRelationalData,RelationalDataConnector orRelationalDataList.
New wrapper functions to manipulateRelationalDatasetConnector andRelationalDataset such asget_dataset,load_dataset,as_relational.
New wrapper functions to manipulateRelationalDataConnector,RelationalData andRelationalDataList such asget_datasets,load_datasets.
choices_labeled,filter_spec,select_spec,data_extract_spec,value_choices,variable_choices as S3 classapplied ondata.frame and also on delayed data.
You can no longer modify theapp$datasets, but mustinstead use argumentfilter in theinitfunction.
New modules were created to create a module of nestedteal modules, then another one that adds the right filterpane to each tab. Theteal::init function staysunchanged.
Theteal::init function now returns a UI functionwith an optionalid argument. This allows to embed it intoother applications. A split view of twoteal applicationsside-by-side is one such example and shown in a vignette.teal::init was turned into a wrapper function aroundmodule_teal_with_splash.R and developers that want to embedteal as ashiny module should directly workwith these functions (ui_teal_with_splash andsrv_teal_with_splash) instead ofteal::init.
Theteal::init function now has a title parameter toset the title of the browser window.
Missing dataNA is now explicitly addressed in thefilter panel:NAs are excluded by default and a checkbox toinclude them was added.
Statistics of the data are visually depicted in terms ofhistograms or bar charts overlayed onto theshiny inputelements.
Added buttons to remove all filters applied to adataset.
Restored the functionality to hide the filter panel for a modulewhen it was constructed withfilters = NULL.
Moved helper functions intoutils.nest and removedunused functionsset_labels_df andget_labels_df.
optionalSelectInput now allows for groupedchoices.
FilteredData (for developers)FilteredData is now fully reactive. Now filtered datais lazy evaluated as per need. This further opens the door tobookmarkingteal apps (bookmarking currently works for theright filtering panel, but we will make this feature more sophisticatedin a future release, each module must be reviewed and adapted if itcontainsreactiveValues).FilteredData byset_datasets_data functionlocated ininit_datasets.R file.get_dataset() method toget_data().get_filter_call() method toget_filter_expr(); returns an expression rather than alist.isolate fromget_data()method and similar methods. You mustisolate it yourself asneeded. If you want to temporarily deactivateshiny errorsdue to missing errors, you can setoptions(shiny.suppressMissingContextError = TRUE). Ingeneral, avoidisolate as this breaks reactivity.keys function tokeysobject.choices_selected.choices_selected whenselected is not inchoices.pickerInput not to display column name as label ifit’s missing.teal app to initialize without data. The dataare then loaded from within theteal app.DatasetConnector,DataConnector) to connect to various data sources,including: * connector torice API -rice_dataandrice_dataset_connector * connector toRDSfiles -rds_data andrds_dataset_connectorshiny app whenshiny is busy to update the views.labels argument ofcdisc_datafunction. Labels should now already be present in the data passed to thecdisc_data function. This can be achieved using thevar_relabel function.optionalSelectInput and improvedinputs look.get_data_labels function toFilteredData class.sep passing withindata_extract_spec.choices_labeled and fix bug of not showingcolumn name indata_extract_spec.cdisc_dataset (and more generaldataset) functions to properly handle dataset keys whilemerging..css and.jsfiles.columns_spec toselect_spec.variable_choices andvalue_choices.cdisc_data andget_code todeal with preprocessing and moving a step towards data standardindependent teal.teal.utils functions toteal:log_app_usage,stop_shiny.*_spec functions.PickerInput andSelectInput.tab*.generate_sample_data.shinyjs package.teal crashes when a filter variable getsadded that has many decimal places.tm_scatterplot module.tm_table module.tabs arguments were renamed tomodules.tab_item function is now calledmodule.tab_items function is now calledmodules.tabs function was removed.variable_browser_item is now calledtm_variable_browser.data_table_item is now calledtm_data_table.datasets argument is automatically added to the serverfunctions specified withmodule. Henceteal_datasets has been removed as aserver_args element.Datanames inFilteredData are now casesensitive.