Skip to content

Commit 1e5be80

Browse files
committed
feat: add a poc of a module that uses multiple modules
1 parent 0be199b commit 1e5be80

File tree

4 files changed

+100
-17
lines changed

4 files changed

+100
-17
lines changed

R/module_colur_picker.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
colour_picker_ui <- function(id) {
44
ns <- NS(id)
5-
bslib::accordion(
6-
uiOutput(ns("module"), title = "Event colors:", container = bslib::accordion_panel),
7-
open = FALSE
5+
bslib::popover(
6+
actionButton(ns("toggle"), "Edit colors"),
7+
uiOutput(ns("module"))
88
)
99
}
1010

R/tm_p_lineplot.R

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ tm_p_lineplot <- function(label = "Line Plot",
33
plot_dataname,
44
x_var,
55
y_var,
6+
group_var,
67
transformators = list()) {
78
module(
89
label = label,
@@ -12,7 +13,8 @@ tm_p_lineplot <- function(label = "Line Plot",
1213
server_args = list(
1314
plot_dataname = plot_dataname,
1415
x_var = x_var,
15-
y_var = y_var
16+
y_var = y_var,
17+
group_var = group_var
1618
),
1719
transformators = transformators
1820
)
@@ -28,7 +30,7 @@ ui_p_lineplot <- function(id) {
2830
)
2931
}
3032

31-
srv_p_lineplot <- function(id, data, plot_dataname, x_var, y_var) {
33+
srv_p_lineplot <- function(id, data, plot_dataname, x_var, y_var, group_var) {
3234
moduleServer(id, function(input, output, session) {
3335
plotly_q <- reactive({
3436
df <- data()[[plot_dataname]]
@@ -39,7 +41,7 @@ srv_p_lineplot <- function(id, data, plot_dataname, x_var, y_var) {
3941
y_low_last <- if ("si_low" %in% names(df)) utils::tail(stats::na.omit(df[["si_low"]]), 1) else NA
4042
y_high_last <- if ("si_high" %in% names(df)) utils::tail(stats::na.omit(df[["si_high"]]), 1) else NA
4143

42-
p <- plotly::plot_ly(data = df, x = df[[x_var]]) |>
44+
p <- plotly::plot_ly(data = df |> dplyr::group_by(!!sym(group_var)), x = df[[x_var]]) |>
4345
plotly::add_trace(
4446
y = df[[y_var]],
4547
mode = "lines+markers", type = "scatter", name = "Lab Result",

R/tm_p_scatterlineplot.R

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#' @export
2+
tm_p_scatterlineplot <- function(label = "Scatter + Line Plot",
3+
plot_dataname,
4+
subject_var,
5+
x_var,
6+
y_var,
7+
color_var,
8+
point_colors = character(0),
9+
transformators = list()) {
10+
module(
11+
label = label,
12+
ui = ui_p_scatterlineplot,
13+
server = srv_p_scatterlineplot,
14+
ui_args = list(),
15+
server_args = list(
16+
plot_dataname = plot_dataname,
17+
subject_var = subject_var,
18+
x_var = x_var,
19+
y_var = y_var,
20+
color_var = color_var,
21+
point_colors = point_colors
22+
),
23+
transformators = transformators
24+
)
25+
}
26+
27+
ui_p_scatterlineplot <- function(id) {
28+
ns <- NS(id)
29+
bslib::page_fluid(
30+
ui_p_scatterplot(ns("scatter")),
31+
ui_p_lineplot(ns("line"))
32+
)
33+
}
34+
35+
srv_p_scatterlineplot <- function(id,
36+
data,
37+
plot_dataname,
38+
subject_var,
39+
x_var,
40+
y_var,
41+
color_var,
42+
point_colors) {
43+
moduleServer(id, function(input, output, session) {
44+
plot_q <- srv_p_scatterplot(
45+
"scatter",
46+
data = data,
47+
plot_dataname = plot_dataname,
48+
subject_var = subject_var,
49+
x_var = x_var,
50+
y_var = y_var,
51+
color_var = color_var,
52+
point_colors = point_colors
53+
)
54+
srv_p_lineplot(
55+
"line",
56+
data = plot_q,
57+
plot_dataname = plot_dataname,
58+
x_var = x_var,
59+
y_var = y_var,
60+
group_var = subject_var
61+
)
62+
})
63+
}

R/tm_p_scatterplot.R

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ tm_p_scatterplot <- function(label = "Scatter Plot",
55
x_var,
66
y_var,
77
color_var,
8-
filter_var,
98
point_colors = character(0),
109
transformators = list()) {
1110
module(
@@ -19,7 +18,6 @@ tm_p_scatterplot <- function(label = "Scatter Plot",
1918
x_var = x_var,
2019
y_var = y_var,
2120
color_var = color_var,
22-
filter_var = filter_var,
2321
point_colors = point_colors
2422
),
2523
transformators = transformators
@@ -28,12 +26,16 @@ tm_p_scatterplot <- function(label = "Scatter Plot",
2826

2927
ui_p_scatterplot <- function(id) {
3028
ns <- NS(id)
31-
bslib::page_sidebar(
32-
sidebar = div(
33-
bslib::input_switch(ns("add_lines"), "Add lines", value = FALSE),
34-
colour_picker_ui(ns("colors"))
35-
),
29+
bslib::page_fluid(
3630
tags$div(
31+
shinyWidgets::prettySwitch(
32+
ns("add_lines"),
33+
label = "Add lines",
34+
status = "primary",
35+
slim = TRUE,
36+
inline = TRUE
37+
),
38+
colour_picker_ui(ns("colors")),
3739
bslib::card(
3840
full_screen = TRUE,
3941
tags$div(
@@ -52,7 +54,6 @@ srv_p_scatterplot <- function(id,
5254
x_var,
5355
y_var,
5456
color_var,
55-
filter_var,
5657
point_colors) {
5758
moduleServer(id, function(input, output, session) {
5859
color_inputs <- colour_picker_srv(
@@ -67,7 +68,6 @@ srv_p_scatterplot <- function(id,
6768
req(color_inputs())
6869
within(
6970
data(),
70-
filter_var = str2lang(filter_var),
7171
subject_var = str2lang(subject_var),
7272
x_var = str2lang(x_var),
7373
y_var = str2lang(y_var),
@@ -77,11 +77,13 @@ srv_p_scatterplot <- function(id,
7777
expr = {
7878
plot_data <- scatterplot_ds |>
7979
dplyr::select(subject_var, x_var, y_var, color_var) |>
80-
dplyr::mutate(color_var = factor(color_var, levels = names(colors)))
80+
dplyr::mutate(color_var = factor(color_var, levels = names(colors))) |>
81+
dplyr::mutate(customdata = dplyr::row_number())
8182
p <- plotly::plot_ly(
8283
data = plot_data,
8384
x = ~x_var,
8485
y = ~y_var,
86+
customdata = ~customdata,
8587
color = ~color_var,
8688
colors = colors,
8789
mode = "markers",
@@ -111,9 +113,25 @@ srv_p_scatterplot <- function(id,
111113
output$plot <- plotly::renderPlotly(plotly::event_register(
112114
{
113115
plotly_q()$p |>
114-
setup_trigger_tooltips(session$ns)
116+
setup_trigger_tooltips(session$ns) |>
117+
set_plot_data(session$ns("plot_data"))
115118
},
116119
"plotly_selected"
117120
))
121+
122+
plotly_selected <- reactive(plotly::event_data("plotly_selected", source = "scatterplot"))
123+
reactive({
124+
req(plotly_selected())
125+
plotly_q() |>
126+
within(
127+
{
128+
selected_plot_data <- plot_data |>
129+
dplyr::filter(customdata %in% plotly_selected_customdata)
130+
scatterplot_ds <- scatterplot_ds |>
131+
filter(subject %in% selected_plot_data$subject)
132+
},
133+
plotly_selected_customdata = plotly_selected()$customdata
134+
)
135+
})
118136
})
119137
}

0 commit comments

Comments
 (0)