The rsc_table()
, rsc_grid()
, rsc_search()
, and rsc_filter()
widgets use crosstalk
to facilitate inter-widget communication. In simple cases, passing identical results from the content()
tibble is sufficient:
library(connectwidgets)
library(dplyr)
library(purrr)
library(htmltools)
client <- connect()
all_content <- client %>% content()
some_content <- slice_sample(all_content, prop = .1)
tagList(
rsc_cols(rsc_search(some_content), rsc_filter(some_content)),
rsc_table(some_content)
)
For more complicated layouts, you may want to pass your own crosstalk
objects to the components.
As a publisher, you want to:
rsc_grid()
of each content owner’s itemscrosstalk::SharedData$new()
takes two optional parameters that make this possible:
keys
content()
tibble contains a globally unique identifier (GUID) for each piece of content, which you can use as a key when creating your SharedData
object (e.g key = ~ guid
).group
SharedData
object gives you control over which widgets are grouped together (e.g. group = "xfilter"
).Since the some_content
tibble contains all the GUIDs, passing it to the Search and Filter components will enable you to search across each of the subset tibbles created by dplyr::group_nest
:
some_content_xfilter <- crosstalk::SharedData$new(
some_content,
key = ~ guid,
group = "xfilter"
)
rsc_content_shared <-
some_content %>%
group_nest(owner_username, .key = "content_df", keep = TRUE)
div(
h3("Grouped Grids by Owner", class = "text-center"),
rsc_cols(rsc_search(some_content_xfilter), rsc_filter(some_content_xfilter)),
purrr::pmap(
rsc_content_shared,
{
~ tagList(
h4(..1),
rsc_grid(crosstalk::SharedData$new(..2, key = ~ guid, group = "xfilter"))
)
}
)
)