rshinyshinydashboardshinywidgetsshinydashboardplus

R Shiny navbarPage; values not loading from server


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


Solution

  • 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