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 (for developers)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.