Search code examples
rshinytextinput

How to convert textInput to output in the Shiny appplication with insertUIs


I have a small Shiny app to randomize speaker's list using insertUI (in case there is be more of them).

The problem is that I only got it working using textInput and I fail to get it done without the input box - just to display the text without the box. It's more of an aesthetics thing but after many hours of unsuccessful trials I'm reaching out for help here.

I really appreciate your help.
Herunia

Here is the code:

if (interactive()) {
       
  ui <- fluidPage(      
    actionButton("add", "Next speaker")
         )
  
  # Server logic
  server <- function(input, output, session) {
    a <- sample(c("Speaker 1","Speaker 2","Speaker 3","Speaker 4","Speaker 5"))
    uiCount = reactiveVal(0)
    observeEvent(input$add, {
      
      uiCount(uiCount()+1)
      insertUI(
        selector = "#add",
        where = "afterEnd",
        ui = textInput(paste0("txt", input$add), paste0("Speaker #", uiCount() , ": "),
                       placeholder = a[uiCount()] ), 
      )
    })
  }
  shinyApp(ui, server)
}

Solution

  • Is this closer to what you want?

    ui <- fluidPage(
      actionButton("add", "Next speaker"),
      uiOutput("txt")
    )
    
    server <-  function(input, output, session) {
      a <- sample(c("Speaker 1","Speaker 2","Speaker 3","Speaker 4","Speaker 5"))
      uiCount = reactiveVal(0)
      
      observeEvent(input$add, {
        uiCount(uiCount()+1)
        
        output$txt <- renderUI({
          div(
            p(
              paste0("Speaker #", uiCount(), " :", a[uiCount()])
            ) #close p
          ) #close div
        })
      })
    }
    shinyApp(ui, server)