# Run in an interactive R session
if (interactive()) {
library(shiny)
library(reactable)
library(htmltools)
ui <- fluidPage(
actionButton("prev_page_btn", "Previous page"),
actionButton("next_page_btn", "Next page"),
reactableOutput("table"),
verbatimTextOutput("table_state"),
uiOutput("selected_row_details")
)
server <- function(input, output) {
output$table <- renderReactable({
reactable(
MASS::Cars93[, 1:5],
showPageSizeOptions = TRUE,
selection = "multiple",
onClick = "select"
)
})
output$table_state <- renderPrint({
state <- req(getReactableState("table"))
print(state)
})
observeEvent(input$prev_page_btn, {
# Change to the previous page
page <- getReactableState("table", "page")
if (page > 1) {
updateReactable("table", page = page - 1)
}
})
observeEvent(input$next_page_btn, {
# Change to the next page
state <- getReactableState("table")
if (state$page < state$pages) {
updateReactable("table", page = state$page + 1)
}
})
output$selected_row_details <- renderUI({
selected <- getReactableState("table", "selected")
req(selected)
details <- MASS::Cars93[selected, -c(1:5)]
tagList(
h2("Selected row details"),
tags$pre(
paste(capture.output(print(details, width = 1200)), collapse = "\n")
)
)
})
}
shinyApp(ui, server)
}
Run the code above in your browser using DataLab