1

Help! For the life of me, I can't get values to populate from the server to the infoBox in the UI. I've tried to define the infoboxes from the server section, but the infoboxes will only appear if I construct them in the UI (as shown below).

The goal is to populate the boxes with filtered data based on user inputs, but I've abandoned this at this stage because I can't even pass a value from the server to the UI infobox here:

infoBox("Participants Trained", 
       value = renderText("AYval"), # tried every combo here
       width = 12,color = "blue",  # tried width = NULL
       icon = icon("fa-solid fa-people-group"), fill = F)

A value shows when I hardcode a value in "value = ", but none of the render options, renderText, verbatimText, output$AYval, valueTextbox, listen(),react() will get a value that is hard-coded in the server side to show up in this infobox.

To get the dashboard to display boxes, I'm using header = tagList(useShinydashboard()). My guess is this useShinydashboard() is the culprit.

I thought this comment might be relevant:

Your code using lapply and the navbarPage doesn't generate the UI in the proper namespace, since when using the navbarPage construct your modules are "one level deeper".

The script:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyWidgets)
#library(shinyjs)
  
side_width <- 5

#completing the ui part with dashboardPage
ui <- navbarPage(fluid = TRUE,
             theme = shinythemes::shinytheme("flatly"),
             collapsible = TRUE, 
             header = tagList(
                          useShinydashboard()
                               ),
             tabPanel("START"),
             tabPanel("Home Dashboard",
                 value = "Tab1",
                 # useShinyjs(),  
                 fluidRow(
                   column(4,
        # Selection Input ---------------------------------------------------------
                   selectInput(inputId = "AY","Academic Year",
                               multiple = T,
                               choices = unique(INDGEN$AcademicYear),
                               selected = unique(INDGEN$AcademicYear)
                               )),
                    column(4,
                           selectInput(inputId = "State","Select State",
                               choices = c("State","States"))),
                    column(4,
                           selectInput(inputId = "Program","Select Program",
                               choices = c("Program","Programs")))
                 ),
                 fluidRow(column(12,
                   box(width = 4,
                              infoBox("Who?",
                                      width = 12,color = "blue",
                                      fill = F)
                          ),
                   box(width = 4,
                       infoBox("Where?", width = 12,color = "blue",
                               fill = F)
                          ),
                   box(width = 4,
                       infoBox("What?", width = 12,color = "blue",
                               fill = F))
                   )),

              # UI Box R1 ---------------------------------------------------------------
                 fluidRow(column(12,
                                box(width = 4,
                                    # uiOutput(infoBoxOutput("BOX1",width = NULL)),
                                     infoBox("Participants Trained", value =                                          
                                     renderText("AYval"),
                                             width = 12,color = "blue",
                                             icon = icon("fa-solid fa-people-group"), fill = F)
                         
                                 ),box(width = 4,
                                       infoBox("Training Sites", nrow(data), width = 12,color = "blue",
                                               icon = icon("fa-solid fa-school"), fill = F)

                                 ),box(width = 4,
                                       infoBox("Training Programs Offered", nrow(data), width = 12,color = "blue",
                                               icon = icon("fa-solid fa-book-open-reader"), fill = F))

                 )),
server <- function(input, output,session) {  

output$AYval <- renderText({
   textInput(13)
})

  output$BOX1 <- renderInfoBox({  
       infoBox(title = "Participants Trained", 
              value = 13,
              width = NULL,color = "blue",
              icon = icon("fa-solid fa-people-group"), fill = T) 
              })

    }#Server End
    
    
    shinyApp(ui = ui,server = server,options = list(height =  1440))

Notice the "participant trained" box is empty. That's because that value isn't hard-coded. The rest are.

App looks like this

T2029
  • 65
  • 2
  • 9

1 Answers1

1

Here's a small reproducible example of how to change the value contents dynamically:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyWidgets)

data(iris)

ui <- navbarPage(
  fluid = TRUE,
  theme = shinythemes::shinytheme("flatly"),
  collapsible = TRUE,
  header = tagList(
    useShinydashboard()
  ),
  tabPanel("START"),
  tabPanel(
    title = "Home Dashboard",
    value = "Tab1",
    selectInput("column",
                label = "Select a column",
                choices = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
    ),
    box(
      width = 4,
      infoBoxOutput("test")
    )
  )
)

server <- function(input, output, session) {
  iris_sum <- reactive({
    sum(iris[input$column])
  })
  
  output$test <- shinydashboard::renderInfoBox({
    infoBox(
      title = "Where?",
      value = iris_sum(),
      width = 12,
      color = "blue",
      fill  = F
    )
  })
}

shinyApp(ui, server)

enter image description here

jpdugo17
  • 6,816
  • 2
  • 11
  • 23
  • Thanks but I'm trying to update the contents of the boxes based on server calculations. Even hard coded values are not appearing in the info boxes – T2029 Aug 28 '22 at 03:07
  • I edited my answer to include a calculation made inside the server, in this case it is a sum. Are you looking for something like that? – jpdugo17 Aug 28 '22 at 03:18
  • Odd... I couldn't get your code to work in my script in any way, but it worked once I created a new UI and Server script with the exact same information. – T2029 Aug 28 '22 at 15:14