Обновить datatable с помощью selectInput и вставить в базу данных

#r #mongodb #shiny

#r #mongodb #блестящий

Вопрос:

Пытаюсь использовать selectInput в форме.

  • варианты выбираются из коллекции в MongoDB.
  • когда пользователь заполняет форму и отправляет (которая вставляется в другую коллекцию в mongo), данные в selectInput не фиксируются.
  • пытался сделать это reactive или использовать observeEvent /updateSelectInput на сервере, но не смог заставить его работать.

вот весь код:

 library(shiny)
library(mongolite)
library(jsonlite)

# which fields get saved 
fieldsAll <- c("Name", "selectOne", "tags")

saveData <- function(data) {
  # Connect to the database
}

# load all responses into a data.frame
loadData <- function() {
  # Connect to the database
}

fetchData <- function() {
  # Connect to the database
}

shinyApp(
  ui = tagList(
    navbarPage(
      tabPanel("Technology",
               sidebarPanel(
                 textInput("Name",label ='Name:'),
                 selectInput('selectOne',
                             label ='Select One:',
                             choices=head(fetchData()),
                             selected = "",
                             multiple = FALSE),
                 selectizeInput("tags", "Tags:", NULL, multiple = TRUE, options=list(create=TRUE)),
                 actionButton("submit", "Submit", class = "btn-primary")
               ),
               mainPanel(
                 tabsetPanel(
                   tabPanel("Table",
                            uiOutput("adminPanelContainer")
                   )
                 )
               )
      )
    )
  ),
server = function(input, output, session) {

formData <- reactive({
  fieldsAll 
  data <- sapply(fieldsAll, function(x) input[[x]])
  data <- t(data)
  data 
})    

observeEvent(input$submit, {
  saveData(formData())
  },
)

# render the admin panel
output$adminPanelContainer <- renderUI({
    DT::dataTableOutput("responsesTable")
})

# Update the responses table whenever a new submission is made
responses_data <- reactive({
  input$submit
  data <- loadData()
  data
})

# Show the responses in the admin table
output$responsesTable <- DT::renderDataTable({
  DT::datatable(
    responses_data(),
    rownames = FALSE,
    options = list(searching = TRUE, lengthChange = FALSE)
  )
})
}
)
  

Ответ №1:

добавление столбца в df с выбранным значением сработало:

 formData <- reactive({
 fieldsAll 
 data <- sapply(fieldsAll, function(x) input[[x]])
 data <- c(data,selectOne= input$selectOne)        #added line   
 data <- t(data)
 data 
})