]>
nmode's Git Repositories - Rnaught/blob - R/ui.R
1 ui
<- function() { shiny
::fluidPage(
3 shiny
::titlePanel(shiny
::HTML(
4 paste0("Rnaught: An Estimation Suite for R", shiny
::tags$
sub("0")))),
7 # Sidebar. Hidden if the 'About' tab is selected.
8 shiny
::conditionalPanel(condition
= "input.tabset != 'About'",
9 shiny
::sidebarPanel(id
= "sidebar",
11 shiny
::conditionalPanel(condition
= "input.tabset == 'Data'",
12 shiny
::h3("Enter data"),
13 # Data input method selection.
14 shiny
::radioButtons(inputId
= "dataInputMethod", label
= "",
15 choices
=list("Manually" = 1, "Upload a .csv file" = 2,
16 "Paste a .csv file" = 3)),
17 # Option 1: Manual entry.
18 shiny
::conditionalPanel(condition
= "input.dataInputMethod == '1'",
19 shiny
::textInput(inputId
= "dataName", label
= "Dataset name"),
20 shiny
::span(shiny
::textOutput(outputId
= "dataNameWarn"),
21 style
= "color: red;"),
24 shiny
::textInput(inputId
= "dataCounts", label
= shiny
::HTML(
25 paste0("Case counts", shiny
::tags$
sup("[?]",
26 title
= "Enter as a comma-separated list of positive
27 integers, with at least two entries.
28 Example: 1,1,2,3,5,8"))))),
30 shiny
::selectInput(inputId
= "dataUnits",
31 label
= "Reporting frequency",
32 choices
= list("Daily", "Weekly")))
34 shiny
::span(shiny
::textOutput(outputId
= "dataCountsWarn"),
35 style
= "color: red;")
37 # Option 2: Upload .csv file.
38 shiny
::conditionalPanel(condition
= "input.dataInputMethod == '2'",
39 shiny
::fileInput(inputId
= "dataUpload", label
= "",
40 accept
= c("text/csv", "text/comma-separated-values,text/plain",
43 # Option 3: Paste .csv file.
44 shiny
::conditionalPanel(condition
= "input.dataInputMethod == '3'",
45 shiny
::textAreaInput(inputId
= "dataPaste", label
= "",
46 rows
= 8, resize
= "none"),
48 # Warning text for .csv upload / paste.
49 shiny
::conditionalPanel(
50 condition
= "['2', '3'].includes(input.dataInputMethod)",
51 shiny
::span(shiny
::textOutput(outputId
= "dataCSVWarn"),
52 style
= "color: red;"),
55 shiny
::actionButton(inputId
= "addData", label
= "Add"),
57 # Estimators tab sidebar (collapsable entries).
58 shiny
::conditionalPanel(condition
= "input.tabset == 'Estimators'",
59 shiny
::h3("Estimators"),
60 # WHITE & PANAGO (WP).
62 shiny
::tags$
summary(shiny
::h4("White & Panago (WP)")),
63 shiny
::p("This is a description of the method."),
65 shiny
::radioButtons(inputId
= "serialWPKnown",
66 label
= "Is the mean serial interval known?",
68 choices
= list("Yes" = 1, "No" = 2)),
69 # Known serial interval.
70 shiny
::conditionalPanel(condition
= "input.serialWPKnown == '1'",
73 shiny
::textInput(inputId
= "serialWPInput",
74 label
= "Mean Serial Interval")),
76 shiny
::selectInput(inputId
= "serialWPUnits",
78 choices
= list("Days", "Weeks")))
80 shiny
::span(shiny
::textOutput(outputId
= "serialWPWarn"),
81 style
= "color: red;")
83 # Unknown serial interval.
84 shiny
::conditionalPanel(condition
= "input.serialWPKnown == '2'",
85 shiny
::h5("Grid Search Parameters"),
88 shiny
::textInput(inputId
= "gridLengthInput",
89 label
= "Grid length", value
= "100")),
91 shiny
::textInput(inputId
= "gridShapeInput",
92 label
= "Max. shape", value
= "10")),
94 shiny
::textInput(inputId
= "gridScaleInput",
95 label
= "Max. scale", value
= "10"))
99 shiny
::span(shiny
::textOutput(outputId
= "gridLengthWarn"),
100 style
= "color: red;")),
102 shiny
::span(shiny
::textOutput(outputId
= "gridShapeWarn"),
103 style
= "color: red;")),
105 shiny
::span(shiny
::textOutput(outputId
= "gridScaleWarn"),
106 style
= "color: red;"))
109 shiny
::actionButton(inputId
= "addWP", label
= "Add")
111 # SEQUENTIAL BAYES (seqB).
113 shiny
::tags$
summary(shiny
::h4("Sequential Bayes (seqB)")),
114 shiny
::p("This is a description of the method."),
118 shiny
::textInput(inputId
= "serialseqBInput",
119 label
= "Mean Serial Interval")),
121 shiny
::selectInput(inputId
= "serialseqBUnits",
122 label
= "Time units",
123 choices
= list("Days", "Weeks")))
125 shiny
::span(shiny
::textOutput(outputId
= "serialseqBWarn"),
126 style
= "color: red;"),
127 shiny
::textInput(inputId
= "kappaInput", label
= shiny
::HTML(
128 paste0("Maximum value", shiny
::tags$
sup("[?]",
129 title
= "This describes the prior belief of R0, and should
130 be set to a higher value if R0 is believed to be
131 larger. (Default: 20)"))), value
= "20"),
132 shiny
::span(shiny
::textOutput(outputId
= "kappaWarn"),
133 style
= "color: red;"),
134 shiny
::actionButton(inputId
= "addseqB", label
= "Add")
136 # INCIDENCE DECAY (ID).
138 shiny
::tags$
summary(shiny
::h4("Incidence Decay (ID)")),
139 shiny
::p("This is a description of the method."),
143 shiny
::textInput(inputId
= "serialIDInput",
144 label
= "Mean Serial Interval")),
146 shiny
::selectInput(inputId
= "serialIDUnits",
147 label
= "Time units",
148 choices
= list("Days", "Weeks")))
150 shiny
::span(shiny
::textOutput(outputId
= "serialIDWarn"),
151 style
= "color: red;"),
152 shiny
::actionButton(inputId
= "addID", label
= "Add")
154 # INCIDENCE DECAY & EXPONENTIAL ADJUSTEMENT (IDEA).
157 shiny
::h4("Incidence Decay and Exponential Adjustement (IDEA)")),
158 shiny
::p("This is a description of the method."),
162 shiny
::textInput(inputId
= "serialIDEAInput",
163 label
= "Mean Serial Interval")),
165 shiny
::selectInput(inputId
= "serialIDEAUnits",
166 label
= "Time units",
167 choices
= list("Days", "Weeks")))
169 shiny
::span(shiny
::textOutput(outputId
= "serialIDEAWarn"),
170 style
= "color: red;"),
171 shiny
::actionButton(inputId
= "addIDEA", label
= "Add")
173 shiny
::tags$
style(type
= "text/css",
174 "summary { display: list-item; cursor: pointer; }"),
175 shiny
::tags$
style(type
= "text/css",
176 "summary h4 { display: inline; }")
181 shiny
::mainPanel(id
= "main",
182 shiny
::tabsetPanel(id
= "tabset", type
= "tabs",
183 shiny
::tabPanel("About", shiny
::br(), "Hello"),
184 shiny
::tabPanel("Data", shiny
::br(),
185 shiny
::dataTableOutput(outputId
= "dataTable"),
186 shiny
::tags$
style(type
= "text/css",
187 "#dataTable tfoot { display:none; }")),
188 shiny
::tabPanel("Estimators", shiny
::br(),
189 shiny
::dataTableOutput(outputId
= "estTable"),
190 shiny
::tags$
style(type
= "text/css",
191 "#estTable tfoot { display:none; }"),
192 shiny
::downloadButton(outputId
= "downloadEst",
193 label
= "Download table as .csv"))