ici_overview_category_server <- function(
id,
ioresponse_data,
data_group
) {
shiny::moduleServer(
id,
function(input, output, session) {
ns <- session$ns
dataset_type <- shiny::reactive({
switch(
data_group(),
"ici" = "ici",
"cancer genomics" = "analysis",
"single-cell RNA-Seq" = "ici" #UPDATE!!
)
})
ici_datasets <- shiny::reactive(iatlasGraphQLClient::query_datasets(types = dataset_type()))
ici_samples <- shiny::reactive(iatlasGraphQLClient::query_dataset_samples(datasets = ici_datasets()$name))
categories <- shiny::reactive(iatlasGraphQLClient::query_tags(datasets = ici_datasets()$name))
output$select_group1 <- renderUI({
#shiny::req(categories())
shiny::selectInput(ns("group1"), "Select Category",
choices = categories()$tag_short_display)
# selected = "Responder")
})
output$select_group2 <- renderUI({
shiny::req(input$group1)
shiny::selectInput(ns("group2"), "Select second category to see groups overlap",
choices = (categories() %>%
dplyr::filter(tag_short_display != input$group1))$tag_short_display)
# selected = "Drug")
})
group1 <- reactive({
shiny::req(input$group1)
convert_value_between_columns(input_value = input$group1,
df = shiny::isolate(categories()),
from_column = "tag_short_display",
to_column = "tag_name")
})
group2 <- reactive({
shiny::req(input$group2)
convert_value_between_columns(input_value = input$group2,
df = shiny::isolate(categories()),
from_column = "tag_short_display",
to_column = "tag_name")
})
output$ici_groups_df <- DT::renderDT({
DT::datatable(categories() %>%
dplyr::filter(tag_short_display %in% input$group1) %>%
dplyr::select(Category = tag_short_display, Definition = tag_characteristics), #, `Sample Groups`, `Available for`),
rownames = FALSE,
options = list(dom = 't'))
})
values_for_group1 <- shiny::reactive({
shiny::req(group1())
iatlasGraphQLClient::query_tag_samples(samples = ici_samples()$sample_name, parent_tags = group1()) %>%
merge(., ici_samples(), by = "sample_name")
})
output$ici_per_ds_df <- DT::renderDT({
shiny::req(input$group1)
DT::datatable(get_io_overview_table(values_for_group1()),
rownames = FALSE,
width = "80%",
caption = paste("Group Size per dataset for", input$group1),
options = list(dom = 't',
pageLength = 50,
order = list(list(0, 'asc'))))
})
output$ici_mosaic <- plotly::renderPlotly({
shiny::req(values_for_group1(), group2())
df_mosaic <- get_io_mosaic_df(values_for_group1(), group2())
df_colors <- df_mosaic %>%
dplyr::select(y, plot_color) %>%
dplyr::distinct()
plot_colors <- df_colors$plot_color
names(plot_colors) <- as.character(df_colors$y)
create_mosaicplot(df_mosaic %>% dplyr::select(x,y),
title = stringr::str_c(input$group2, "by", input$group1, sep = " "),
fill_colors = plot_colors) %>%
plotly::layout(
autosize = TRUE,
margin = list(b=0)
)
})
observeEvent(input$method_link,{
shiny::showModal(modalDialog(
title = "Method",
includeMarkdown("inst/markdown/methods/Response_ICI_Predictors.markdown"),
easyClose = TRUE,
footer = NULL
))
})
}
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.