Let’s say you already use DT::datatable() to display
your data, but want to switch to editbl::eDT() to be able
to edit it. What should you look out for?
eDTOutput() uses an id argument instead of
outputId since it’s actually a shiny
module.eDT() adds extra (hidden) columns to your
datatable. Try to format using column names instead of
indexes.datatable now exists within a module (e.g. child
namespace). This means your own chosen outputId is now
moduleId-DT. This influences for example the values
accessible under input. Example: switch from
input$outputId_cell_clicked to
input[["moduleId-DT_cell_clicked"]].eDT() accepts all arguments of
DT::datatable(), but has some different defaults for
convenience.format argument of eDT().Here is an example covering the above:
##
## Attaching package: 'DT'
## The following objects are masked from 'package:shiny':
##
## dataTableOutput, renderDataTable
ui <- fluidPage(DTOutput("DT"))
server <- function(input, output, session){
output$DT <- renderDataTable({
datatable(mtcars) %>%
formatRound('disp', 1)
})
observe({
print(input[["DT_cell_clicked"]])
})
}
shinyApp(ui, server)##
## Listening on http://127.0.0.1:4274
## NULL
## named list()
Reworked into eDT():
ui <- fluidPage(eDTOutput("DT"))
server <- function(input, output, session){
editbl::eDT(
id = "DT",
data = mtcars,
format = function(x){formatRound(x,'disp', 1)})
observe({
print(input[["DT-DT_cell_clicked"]])
})
}
shinyApp(ui, server)##
## Listening on http://127.0.0.1:5173
## Warning in observe(): Data is not of class `tbl`. Converting automatically.
## NULL
## named list()