--- title: "Switching from DT" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteEncoding{UTF-8} %\VignetteIndexEntry{How to: adjust your `DT` code to use `eDT` instead.} %\VignetteEngine{knitr::rmarkdown} --- 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](https://mastering-shiny.org/scaling-modules.html). * `eDT()` adds extra (hidden) columns to your `datatable`. Try to format using column names instead of indexes. * Your `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. * Any additional formatting should be done by passing a function to the `format` argument of `eDT()`. * As always be careful when using [extensions](https://datatables.net/extensions/index) or custom javascript, not everything works well together. The [KeyTable](https://datatables.net/extensions/keytable/) and [AutoFill](https://datatables.net/extensions/autofill/) extensions of datatable are used by default and should be well integrated. Here is an example covering the above: ```{r echo = TRUE, results = 'hide'} library(shiny) library(DT) library(editbl) ``` ```{r, screenshot.opts = list(vwidth = 700), screenshot.alt = 'screenshots/howto_switch_from_DT_1.png'} 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) ``` Reworked into `eDT()`: ```{r, screenshot.opts = list(vwidth = 700), screenshot.alt = 'screenshots/howto_switch_from_DT_2.png'} 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) ```