ui_teal
and srv_teal
directly in any application by delivering data
argument as a reactive
returning teal_data
object. #669teal_transform_module
to provide a way to interactively modify data delivered to teal_module
's server
and to decorate module outputs. #1228 #1384once = FALSE
in teal_data_module
to possibly reload data during a run time.set_datanames()
to change a datanames
of the teal_module
..
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()
needs to be passed as the landing_popup
argument of init
instead of being passed as a module of the modules
argument of init
.teal
no longer re-export %>%
. Please load library(magrittr)
instead or use |>
from base
.javascript
events by setting $(document).ready(function() { ... })
. #1114data
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_module
s' 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::module
scda
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 DataConnection
s 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 Date
mutate_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: NA
s 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_connector
shiny
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.