У меня есть блестящее приложение, которое отображает 3 вкладки.
На вкладке Documents
есть таблица. Когда пользователь нажимает на setosa
1-й строки, он переходит на вкладку View
(видимую только при нажатии) и видит таблицу. Когда пользователь щелкает setosa
2-й строки, он переходит на вкладку View
и видит другую таблицу. Также эти таблицы должны быть видны только на вкладке View
.
Кажется, что приложение работает нормально, но если я нажму на 1-ю строку setosa
, перейду на вкладку View
, вернусь к Documents
снова вкладка и попробуйте еще раз щелкнуть 1-ю строку setosa
ничего не происходит. Мне нужно щелкнуть 2-ю строку setosa
, чтобы она снова заработала. То же самое происходит со второй строкой setosa
.
Короче говоря, я не могу выполнить одно и то же действие дважды подряд, и я чувствую, что мое условие if
отвечает за это.
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(shinydashboardPlus)
library(DT)
library(shinyjs)
shinyApp(
ui = dashboardPagePlus(
header = dashboardHeaderPlus(title = span(strong("ArmorDoc"),style = "color: black;")
),
sidebar = dashboardSidebar(
),
body = dashboardBody(
useShinyjs(),
tags$hr(),
tabsetPanel(
id ="tabA",
type = "tabs",
tabPanel("Documents",icon = icon("accusoft"),
tags$hr(),
DTOutput("dt1")),
tabPanel("View", icon = icon("table"),
DTOutput("dt3")
),
tabPanel("Upload", icon = icon("table")
)
)
)),
server = function(input, output,session) {
observeEvent(input$tabA, {
if(input$tabA == "Documents"|input$tabA=="Upload"){
hideTab("tabA", "View")
}
})
observeEvent(input$dt1_cell_clicked, {
# alternative: input$dt1_cells_selected
if (req(input$dt1_cell_clicked$value) == "setosa") {
showTab("tabA", "View")
updateTabsetPanel(session, inputId = "tabA", selected = "View")
}
})
output$dt1 <- DT::renderDataTable({
DT::datatable(
iris[1:2,],
filter = "top",
options = list(searchHighlight = TRUE, search = list(search = ""),pageLength = 5,columnDefs = list(list(className = 'dt-left', targets = "_all"))),rownames= FALSE,
selection = list(mode = 'single', target = 'cell')
)
})
output$dt3 <- renderDT(server = F,
if(input$dt1_cell_clicked$row == 1&input$tabA=="View"){
datatable(iris)
}
else if(input$dt1_cell_clicked$row == 2&input$tabA=="View"){
datatable(mtcars)
}
else{
return(NULL)
}
)
}
)