В идеале мое мини-приложение должно работать следующим образом:
Пользователь выбирает имя из списка ранее существующих имен;
Если имяпользователь имеет в виду, что его нет в списке; для ввода нового имени появляется открытое окно;
Пользователь нажимает кнопку действия "Показать выбранное имя" илюбое имя, выбранное или введенное, отображается на главной панели;
Другая кнопка действия «Показать количество символов» появляется только после нажатия кнопки «Показать выбранное имя» - но только если имявыбирается из списка ИЛИ, если открытое поле для предоставленного пользователем имени не является пустым.Если пользователь нажимает эту новую кнопку, он показывает количество символов в выбранном имени.
Я не могу заставить работать последний пункт: как я могу заставить ТОЛЬКО вторую кнопку появляться, есливыбранное (или напечатанное) имя НЕ пустое и исчезает, как только пользователь удаляет все в открытом окне?
Большое спасибо!Ниже мой код:
library(shiny)
ui = shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("name_fromlist", "Select a name", choices = ""),
uiOutput("open_end")
),
mainPanel(
textOutput("name_final"), br(),
actionButton("button1", label = "Show chosen name"), br(),
textOutput('final_name'),
uiOutput("second_button") # it should show number of characters in the chosen name
)
)
))
server = shinyServer(function(input, output, session) {
# A vector of pre-existing names:
mynames <- c("John", "Mary", "Jim", "Bill")
# Pull-down to select one of the names:
observe({
updateSelectInput(session, inputId = "name_fromlist", label = "Select a name:",
choices = c(mynames, "Name not on our list"))
})
# Open end box to appear only if the name the user wants to enter is not on the list:
output$open_end <- renderUI({
if (!input$name_fromlist == 'Name not on our list') return(NULL) else {
textInput("Not_on_list", "If the name you want is not on our list, type it here:")
}
})
# button 1 shows the name selected or typed:
observeEvent(input$button1, {
if (input$name_fromlist == 'Name not on our list') selected_name <- input$Not_on_list else {
selected_name <- input$name_fromlist
}
output$final_name <- renderText({paste("Chosen name: ", selected_name)})
})
# # This part is not working:
# observe({
# if (input$name_fromlist == 'Name not on our list' & input$Not_on_list == '') renderUI({NULL}) else {
# output$add_user <- renderUI({
# actionButton("second_button", label = "Show number of characters")
# })
# } # end of else
# }) # end of observe
})
shinyApp(ui = ui, server = server)