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.add_custom_server()
to allow adding custom server
logic to the main shiny server function of a teal app.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_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
(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_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.