How to render two uiOutput in order not synchronistically in Shiny?

361 views Asked by At

when input$variable change uiOutput(1) and uiOutput(2) are rendered at the same time? Is there any way render step by step not synchronistically?

The following is the steps I want.

1) input variable change

2) uiOutput(1) rendering

3) uiOutput(2) rendering

when input variable change shiny page is not working properly. but after resizing the page window, the screen appears correctly. Each time I change the input value, i have to recalibrate the page size.

ui.R

library(shiny)
library(shinydashboard)

sidebar <- dashboardSidebar(  
  radioButtons(inputId = "sidebar_data_sell", 
               label = "", 
               choices = c("Sell-in" = "sell_in", "Sell-out" = "sell_out"),
               selected = "sell_out", 
               inline = TRUE),
  uiOutput("summary_sidebar_ui")
)


ui <- dashboardPage(
  dashboardHeader(title = h5("Hi")),
  sidebar,
  uiOutput("dashboard_body")
)

server.R

convertMenuItem <- function(mi, tabName) {
  mi$children[[1]]$attribs['data-toggle'] = "tab"
  mi$children[[1]]$attribs['data-value'] = tabName
  mi
}

out_product_main <- function() {
  list(
    fluidPage(h5("product")))
}

product_items <- function() {
  list(
    selectInput("product_product_sell", 
                "product", 
                choices = list("product1" = "prd1", "product2" = "prd2"), 
                selected = c("prd1"))
  )
}

in_overview_main <- function() {
  list(
    fluidPage(h5("overview")))
}

overview_items <- function() {
  list(
    radioButtons("overview_period_sell", 
                 "period", 
                 choices = c("year","month"), 
                 inline = TRUE, 
                 selected = "month")
  )
}

shinyServer(function(input, output) {
  output$summary_sidebar_ui <- renderUI({
    if (input$sidebar_data_sell == "sell_in")
    {
      sidebarMenu(id = "summary_item",
                  convertMenuItem(menuItem("Overview", 
                                           tabName = "in_overview",
                                           icon = icon("signal", lib = 'font-awesome'),
                                           overview_items()),
                                  tabName = 'in_overview'))
    }
    else{
      sidebarMenu(id = "p_analysis_item",
                  convertMenuItem(menuItem("Product", 
                                           tabName = "out_product", 
                                           icon = icon("product-hunt", lib='font-awesome'), 
                                           product_items()), 
                                  tabName = 'out_product')
      )
    }


  })

  output$dashboard_body <- renderUI({
    if (input$sidebar_data_sell == "sell_in") {
      dashboardBody(tabItems(tabItem("in_overview", in_overview_main())))
    }
    else {
      dashboardBody(tabItems(tabItem("out_product", out_product_main())))
    }
  })

})
0

There are 0 answers