# Module UI
#' @title mod_plots_intensity_plots_ui and mod_plots_intensity_plots_server
#'
#' @description A shiny Module.
#'
#' @param id shiny id
#'
#' @param input internal
#'
#' @param output internal
#'
#' @param session internal
#'
#' @rdname mod_plots_intensity_plots
#'
#' @keywords internal
#'
#' @export
#'
#' @importFrom shiny NS tagList
#' @import shinyjs
#'
mod_plots_intensity_ui <- function(id){
ns <- NS(id)
tagList(
shinyjs::useShinyjs(),
tags$div(
tags$div(style="display:inline-block; vertical-align: middle;",
highchartOutput(ns("BoxPlot")),
shinyjs::hidden(imageOutput(ns("viewViolinPlot")))
),
tags$div(style="display:inline-block; vertical-align: middle;",
selectInput(ns("choosePlot"), "Choose plot",
choices=setNames( c("violinplot", "boxplot"),c('violinplot', "boxplot")),
width='100px'),
uiOutput(ns('slave_tracking_ui'))
)
)
)
}
# Module Server
#' @rdname mod_plots_intensity_plots
#'
#' @export
#'
#' @keywords internal
#'
#' @importFrom DAPAR violinPlotD boxPlotD_HC
#'
mod_plots_intensity_server <- function(input, output, session,
dataIn,
meta,
keyId,
conds,
pal = NULL,
params = NULL,
reset = NULL,
slave = FALSE){
ns <- session$ns
rv.modboxplot <- reactiveValues(
indices = NULL,
varTrack = NULL
)
rv.modboxplot$varTrack <- callModule(mod_plots_tracking_server, "slave_tracking",
obj = reactive({dataIn()}),
keyId=reactive({keyId()}),
params=reactive({params()}),
reset=reactive({reset()}),
slave = reactive({slave()})
)
output$slave_tracking_ui <- renderUI({
slave()
dataIn()
if ((slave()==FALSE) && dataIn()@experimentData@other$typeOfData=='protein')
{
mod_plots_tracking_ui(ns('slave_tracking'))
}
else
return(NULL)
})
observeEvent(c(slave(),rv.modboxplot$varTrack()),ignoreInit = TRUE, ignoreNULL=FALSE, {
if (slave() == TRUE){
switch(params()$typeSelect,
ProteinList = rv.modboxplot$indices <- params()$list.indices,
Random = rv.modboxplot$indices <- params()$rand.indices,
Column = rv.modboxplot$indices <- params()$col.indices,
None = rv.modboxplot$indices <- NULL
)
} else {
tmp <- if (is.null(rv.modboxplot$varTrack()$typeSelect)) 'None'
else rv.modboxplot$varTrack()$typeSelect
switch(tmp,
ProteinList = rv.modboxplot$indices <- rv.modboxplot$varTrack()$list.indices,
Random = rv.modboxplot$indices <- rv.modboxplot$varTrack()$rand.indices,
Column = rv.modboxplot$indices <- rv.modboxplot$varTrack()$col.indices,
None = rv.modboxplot$indices <- NULL
)
}
})
observeEvent(input$choosePlot, {
shinyjs::toggle('viewViolinPlot', condition=input$choosePlot=='violinplot')
shinyjs::toggle('BoxPlot', condition=input$choosePlot=='boxplot')
})
output$BoxPlot <- renderHighchart({
dataIn()
rv.modboxplot$indices
tmp <- NULL
pattern <- paste0('test',".boxplot")
withProgress(message = 'Making plot', value = 100, {
tmp <- DAPAR::boxPlotD_HC(obj = dataIn(),
conds = conds(),
keyId = keyId(),
pal = pal(),
subset.view = rv.modboxplot$indices)
#future(createPNGFromWidget(tmp,pattern))
})
tmp
})
output$viewViolinPlot<- renderImage({
dataIn()
rv.modboxplot$indices
tmp <- NULL
# A temp file to save the output. It will be deleted after renderImage
# sends it, because deleteFile=TRUE.
outfile <- tempfile(fileext='.png')
# Generate a png
withProgress(message = 'Making plot', value = 100, {
# png(outfile, width = 640, height = 480, units = "px")
png(outfile)
pattern <- paste0('test',".violinplot")
tmp <- DAPAR::violinPlotD(obj = dataIn(),
keyId = keyId(),
conds = conds(),
pal = pal(),
subset.view = rv.modboxplot$indices)
#future(createPNGFromWidget(tmp,pattern))
dev.off()
})
tmp
# Return a list
list(src = outfile,
alt = "This is alternate text")
}, deleteFile = TRUE)
return(reactive({rv.modboxplot$varTrack()}))
}
## To be copied in the UI
# mod_plots_intensity_plots_ui("plots_intensity_plots_ui_1")
## To be copied in the server
# callModule(mod_plots_intensity_plots_server, "plots_intensity_plots_ui_1")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.