2024-12-09 14:00:44 +01:00
# ns <- NS(id)
ui_elements <- list (
##############################################################################
#########
######### Import panel
#########
##############################################################################
" import" = bslib :: nav_panel (
2024-12-13 13:37:19 +01:00
title = " Import" ,
shiny :: fluidRow (
column (
width = 6 ,
shiny :: h4 ( " Choose your data source" ) ,
2024-12-16 22:21:54 +01:00
# shiny::conditionalPanel(
# condition = "output.has_input=='yes'",
# # Input: Select a file ----
# shiny::helpText("Analyses are performed on provided data")
# ),
# shiny::conditionalPanel(
# condition = "output.has_input=='no'",
# Input: Select a file ----
shinyWidgets :: radioGroupButtons (
inputId = " source" ,
# label = "Choice: ",
2024-12-17 11:30:17 +01:00
choices = c (
" File upload" = " file" ,
" REDCap server" = " redcap" ,
2024-12-19 11:34:25 +01:00
" Local data" = " env"
2024-12-17 11:30:17 +01:00
) ,
# checkIcon = list(
# yes = icon("square-check"),
# no = icon("square")
# ),
width = " 100%"
2024-12-13 13:37:19 +01:00
) ,
shiny :: conditionalPanel (
2024-12-16 22:21:54 +01:00
condition = " input.source=='file'" ,
datamods :: import_file_ui ( " file_import" ,
2024-12-17 11:30:17 +01:00
title = " Choose a datafile to upload" ,
file_extensions = c ( " .csv" , " .txt" , " .xls" , " .xlsx" , " .rds" , " .fst" , " .sas7bdat" , " .sav" , " .ods" , " .dta" )
2024-12-13 13:37:19 +01:00
)
2024-12-16 22:21:54 +01:00
) ,
shiny :: conditionalPanel (
condition = " input.source=='redcap'" ,
m_redcap_readUI ( " redcap_import" )
) ,
shiny :: conditionalPanel (
condition = " input.source=='env'" ,
import_globalenv_ui ( id = " env" , title = NULL )
2024-12-13 13:37:19 +01:00
)
2024-12-16 22:21:54 +01:00
# )
2024-12-13 13:37:19 +01:00
) ,
column (
width = 6 ,
2024-12-17 11:30:17 +01:00
shiny :: markdown ( readLines ( " www/intro.md" ) )
2024-12-13 13:37:19 +01:00
)
2024-12-09 14:00:44 +01:00
) ,
shiny :: conditionalPanel (
2024-12-13 13:37:19 +01:00
condition = " input.source=='redcap'" ,
DT :: DTOutput ( outputId = " redcap_prev" )
) ,
shiny :: br ( ) ,
2024-12-19 11:34:25 +01:00
shiny :: actionButton (
inputId = " act_start" ,
label = " Start" ,
width = " 100%" ,
icon = shiny :: icon ( " play" )
) ,
2024-12-19 14:14:21 +01:00
shiny :: helpText ( ' After importing, hit "Start" or navigate to the desired tab.' ) ,
2024-12-19 11:34:25 +01:00
shiny :: br ( ) ,
shiny :: br ( )
2024-12-13 13:37:19 +01:00
) ,
##############################################################################
#########
######### Data overview panel
#########
##############################################################################
2024-12-16 22:21:54 +01:00
" overview" =
2024-12-19 11:34:25 +01:00
# bslib::nav_panel_hidden(
2024-12-16 22:21:54 +01:00
bslib :: nav_panel (
# value = "overview",
2024-12-17 11:30:17 +01:00
title = " Modifications" ,
2024-12-16 22:21:54 +01:00
bslib :: navset_bar (
fillable = TRUE ,
# bslib::nav_panel(
# title = "Edit",
# datamods::edit_data_ui(id = "edit_data")
# ),
# bslib::nav_panel(
# title = "Overview",
# DT::DTOutput(outputId = "table")
# ),
bslib :: nav_panel (
title = " Rename and select" ,
tags $ h3 ( " Select, rename and convert variables" ) ,
fluidRow (
column (
width = 6 ,
# radioButtons(),
shiny :: actionButton ( " data_reset" , " Restore original data" ) ,
shiny :: tags $ br ( ) ,
shiny :: helpText ( " Reset to original imported dataset" ) ,
shiny :: tags $ br ( ) ,
datamods :: update_variables_ui ( " vars_update" )
) ,
column (
width = 6 ,
tags $ b ( " Original data:" ) ,
# verbatimTextOutput("original"),
verbatimTextOutput ( " original_str" ) ,
tags $ b ( " Modified data:" ) ,
# verbatimTextOutput("modified"),
verbatimTextOutput ( " modified_str" )
)
2024-12-13 13:37:19 +01:00
)
2024-12-16 22:21:54 +01:00
) ,
bslib :: nav_panel (
title = " Filter and modify" ,
shinyWidgets :: html_dependency_winbox ( ) ,
fluidRow (
# column(
# width = 3,
# shiny::uiOutput("filter_vars"),
# shiny::conditionalPanel(
# condition = "(typeof input.filter_vars !== 'undefined' && input.filter_vars.length > 0)",
# datamods::filter_data_ui("filtering", max_height = "500px")
# )
# ),
# column(
# width = 9,
# DT::DTOutput(outputId = "filtered_table"),
# tags$b("Code dplyr:"),
# verbatimTextOutput(outputId = "filtered_code")
# ),
shiny :: column (
width = 8 ,
toastui :: datagridOutput ( outputId = " table_mod" ) ,
shiny :: tags $ b ( " Reproducible code:" ) ,
shiny :: verbatimTextOutput ( outputId = " filtered_code" )
) ,
shiny :: column (
width = 4 ,
shiny :: actionButton ( " modal_cut" , " Create factor from a variable" ) ,
shiny :: tags $ br ( ) ,
shiny :: tags $ br ( ) ,
shiny :: actionButton ( " modal_update" , " Reorder factor levels" ) ,
shiny :: tags $ br ( ) ,
shiny :: tags $ br ( ) ,
IDEAFilter :: IDEAFilter_ui ( " data_filter" ) # ,
# shiny::actionButton("save_filter", "Apply the filter")
)
2024-12-13 13:37:19 +01:00
)
2024-12-09 14:00:44 +01:00
)
2024-12-13 13:37:19 +01:00
2024-12-16 22:21:54 +01:00
# column(
# 8,
# shiny::verbatimTextOutput("filtered_code"),
# DT::DTOutput("filtered_table")
# ),
# column(4, IDEAFilter::IDEAFilter_ui("data_filter"))
)
) ,
2024-12-09 14:00:44 +01:00
##############################################################################
#########
######### Data analyses panel
#########
##############################################################################
2024-12-16 22:21:54 +01:00
" analyze" =
2024-12-19 11:34:25 +01:00
# bslib::nav_panel_hidden(
2024-12-16 22:21:54 +01:00
bslib :: nav_panel (
# value = "analyze",
title = " Analyses" ,
bslib :: navset_bar (
title = " " ,
# bslib::layout_sidebar(
# fillable = TRUE,
sidebar = bslib :: sidebar (
shiny :: helpText ( em ( " Please specify relevant settings for your data, and press 'Analyse'" ) ) ,
shiny :: uiOutput ( " outcome_var" ) ,
shiny :: uiOutput ( " strat_var" ) ,
shiny :: conditionalPanel (
condition = " input.strat_var!='none'" ,
shiny :: radioButtons (
inputId = " add_p" ,
label = " Compare strata?" ,
selected = " no" ,
inline = TRUE ,
choices = list (
" No" = " no" ,
" Yes" = " yes"
)
) ,
shiny :: helpText ( " Option to perform statistical comparisons between strata in baseline table." )
) ,
shiny :: radioButtons (
inputId = " all" ,
label = " Specify covariables" ,
inline = TRUE , selected = 2 ,
choiceNames = c (
" Yes" ,
" No"
) ,
choiceValues = c ( 1 , 2 )
) ,
shiny :: conditionalPanel (
condition = " input.all==1" ,
shiny :: uiOutput ( " include_vars" )
) ,
2024-12-09 14:00:44 +01:00
shiny :: radioButtons (
2024-12-16 22:21:54 +01:00
inputId = " specify_factors" ,
label = " Specify categorical variables?" ,
2024-12-09 14:00:44 +01:00
selected = " no" ,
inline = TRUE ,
choices = list (
2024-12-16 22:21:54 +01:00
" Yes" = " yes" ,
" No" = " no"
2024-12-09 14:00:44 +01:00
)
) ,
2024-12-16 22:21:54 +01:00
shiny :: conditionalPanel (
condition = " input.specify_factors=='yes'" ,
shiny :: uiOutput ( " factor_vars" )
2024-12-09 14:00:44 +01:00
) ,
2024-12-16 22:21:54 +01:00
bslib :: input_task_button (
id = " load" ,
label = " Analyse" ,
icon = shiny :: icon ( " pencil" , lib = " glyphicon" ) ,
label_busy = " Working..." ,
icon_busy = fontawesome :: fa_i ( " arrows-rotate" ,
2024-12-19 11:34:25 +01:00
class = " fa-spin" ,
" aria-hidden" = " true"
2024-12-16 22:21:54 +01:00
) ,
2024-12-18 11:26:00 +01:00
type = " secondary" ,
2024-12-16 22:21:54 +01:00
auto_reset = TRUE
) ,
2024-12-18 11:26:00 +01:00
shiny :: helpText ( " If you change the parameters, press 'Analyse' again to update the tables" ) ,
# shiny::conditionalPanel(
# condition = "output.ready=='yes'",
2024-12-19 11:34:25 +01:00
shiny :: tags $ hr ( ) ,
shiny :: h4 ( " Download results" ) ,
shiny :: helpText ( " Choose your favourite output file format for further work, and download, when the analyses are done." ) ,
shiny :: selectInput (
inputId = " output_type" ,
label = " Output format" ,
selected = NULL ,
choices = list (
" MS Word" = " docx" ,
" LibreOffice" = " odt"
# ,
# "PDF" = "pdf",
# "All the above" = "all"
)
) ,
shiny :: br ( ) ,
# Button
shiny :: downloadButton (
outputId = " report" ,
label = " Download" ,
icon = shiny :: icon ( " download" )
) ,
2024-12-18 11:29:46 +01:00
shiny :: helpText ( " If choosing to output to MS Word, please note, that when opening the document, two errors will pop-up. Choose to repair and choose not to update references. The issue is being worked on. You can always choose LibreOffice instead." )
2024-12-18 11:30:28 +01:00
## https://github.com/quarto-dev/quarto-cli/issues/7151
2024-12-18 11:26:00 +01:00
# )
2024-12-16 22:21:54 +01:00
# )
2024-12-13 13:37:19 +01:00
) ,
2024-12-16 22:21:54 +01:00
bslib :: nav_panel (
title = " Baseline characteristics" ,
gt :: gt_output ( outputId = " table1" )
2024-12-13 13:37:19 +01:00
) ,
2024-12-16 22:21:54 +01:00
bslib :: nav_panel (
title = " Regression table" ,
gt :: gt_output ( outputId = " table2" )
2024-12-13 13:37:19 +01:00
) ,
2024-12-16 22:21:54 +01:00
bslib :: nav_panel (
title = " Regression checks" ,
shiny :: plotOutput ( outputId = " check" )
)
2024-12-09 14:00:44 +01:00
)
2024-12-16 22:21:54 +01:00
) ,
2024-12-09 14:00:44 +01:00
##############################################################################
#########
######### Documentation panel
#########
##############################################################################
" docs" = bslib :: nav_panel (
2024-12-13 13:37:19 +01:00
title = " Documentation" ,
2024-12-17 11:30:17 +01:00
# shiny::tags$iframe("www/docs.html", height=600, width=535),
shiny :: htmlOutput ( " docs_file" ) ,
2024-12-09 14:00:44 +01:00
shiny :: br ( )
)
)
2024-12-18 10:37:37 +01:00
# Initial attempt at creating light and dark versions
light <- custom_theme ( )
2024-12-18 11:26:00 +01:00
dark <- custom_theme (
bg = " #000" ,
fg = " #fff"
)
2024-12-18 10:37:37 +01:00
# Fonts to consider:
# https://webdesignerdepot.com/17-open-source-fonts-youll-actually-love/
2024-12-19 11:34:25 +01:00
ui <- bslib :: page_fluid (
2024-12-09 14:00:44 +01:00
title = " freesearcheR" ,
2024-12-18 10:37:37 +01:00
theme = light ,
shiny :: useBusyIndicators ( ) ,
2024-12-19 21:21:29 +01:00
bslib :: page_navbar ( title = " freesearcheR" ,
2024-12-09 14:00:44 +01:00
id = " main_panel" ,
2024-12-19 11:34:25 +01:00
# header = shiny::tags$header(shiny::p("Data is only stored temporarily for analysis and deleted immediately afterwards.")),
2024-12-09 14:00:44 +01:00
ui_elements $ import ,
2024-12-13 13:37:19 +01:00
ui_elements $ overview ,
2024-12-09 14:00:44 +01:00
ui_elements $ analyze ,
2024-12-19 11:34:25 +01:00
ui_elements $ docs ,
# bslib::nav_spacer(),
2024-12-19 21:21:29 +01:00
# bslib::nav_item(shinyWidgets::circleButton(inputId = "mode", icon = icon("moon"),status = "primary")),
2024-12-19 11:34:25 +01:00
fillable = TRUE ,
footer = shiny :: tags $ footer (
style = " background-color: #14131326; padding: 4px; text-align: center; bottom: 0; width: 100%;" ,
shiny :: p (
style = " margin: 1" ,
" Data is only stored for analyses and deleted immediately afterwards." ) ,
shiny :: p (
style = " margin: 1; color: #888;" ,
2024-12-19 15:26:23 +01:00
" Andreas G Damsbo | AGPLv3 license | " , shiny :: tags $ a ( " Source on Github" , href = " https://github.com/agdamsbo/freesearcheR/" , target = " _blank" , rel = " noopener noreferrer" )
2024-12-19 11:34:25 +01:00
) ,
)
2024-12-09 14:00:44 +01:00
)
)