0

ユーザーからの入力を受け取り、DB のテーブルからデータを取得し、ダウンロードするレコード数を入力として取得し、ダウンロード ファイル オプションを提供するシンプルな光沢のあるアプリを構築しています。

以下のすべてがうまく機能します。私の唯一の懸念は、 datatableOutput が表示された後にのみ textInput bar( variable : uiOutput("text") in the ui and output$text in the server) が表示されることです。なぜこれが起こるのかわかりません。

理想的には、葉 (つまり、input$leaf1 が null ではない) が選択されたら、textInput バー ('uiOutput("text")') オブジェクトを表示し、次に datatableOutput を表示してから、ダウンロード ボタンを表示する必要があります。やってくる。

これを達成する方法はありますか?ありがとう

library(shiny)
library(shinydashboard)
#library(stringr)
library(DT)
#library(shinyBS) 


ui <- dashboardPage(
  dashboardHeader(title = strong("DASHBOARD"),titleWidth = 240),
  dashboardSidebar(
    sidebarMenu(
     selectizeInput("x", "Choose a number:", choices = sort(unique(lftable$x)), multiple = TRUE),
     uiOutput("leaf_categ")

  )
  ),
  dashboardBody(
    fluidRow(
      uiOutput("text"),
      dataTableOutput("lm_df"),
      downloadButton('downloadData', 'Download')

 )))


server <- function(input, output){
  output$leaf_categ <- renderUI(
    selectizeInput("leaf1", "Choose leaf categories:",
                  choices = reactive(unique(lftable[lftable$num %in% input$x, c("X_NAME")]))(),
                  multiple = TRUE)

  ) 

  #### creates a text input box
  #### number of records to be downloaded is provided as input 
  output$text <- renderUI({
    if(is.null(reactive(input$leaf1)())){
      return()
    }else{
      textInput("var1", label = "Enter the number of records to be downloaded", value = "")
    }
  })

  #### fetches data from DB
  lm <- reactive({
    if(is.null(input$leaf1)){
      return()
    }else{
      leaf_id <- unique(lftable[lftable$X_NAME %in% input$leaf1, c("leaf_id")])
      query_str <- paste('select * from table1 where current_date between start_dt and end_dt and score_num >= 0.1 and x in (' , input$x, ')', ' and X_ID in (', leaf_id, ')', ';', sep = "")
    }
    lm_data <- getDataFrmDW(query_str)
  })

  ###creates a download tab
  output$downloadData <- downloadHandler(
    filename = function() { paste("lm_user_data", '.csv', sep='') },
    content = function(file) {
      lm_df <- lm()
      lm_df <- lm_df[1:(as.integer(input$text)),]
      print(dim(lm_df))
      write.csv(lm_df, file, row.names = F)
    })

  output$lm_df <- DT::renderDataTable(lm())


}
shinyApp(ui, server)
4

0 に答える 0