Author: Jason Bryer, Ph.D. Email: jason@bryer.org
Use the devtools package to install the development version of DTedit:
devtools::install_github('jbryer/DTedit')The dtedit_demo will run a sample shiny app with to editable data tables.
DTedit::dtedit_demo()You can download a simple shiny app using DTedit here: inst/template/app.R
There are three steps to using DTedit in your shiny application.
- Define callback function for inserting, updating, and deleting data.
my.insert.callback <- function(data, row) {
mydata <- rbind(data, mydata)
return(mydata)
}
my.update.callback <- function(data, olddata, row) {
mydata[row,] <- data[1,]
return(mydata)
}
my.delete.callback <- function(data, row) {
mydata[row,] <- NULL
return(mydata)
}Typically these functions would interact with a database. As written here, the data would be lost between shiny sessions.
- Create the
dtedit_serverobject within yourserverfunction.
DTedit::dtedit_server(
id = 'mycontacts',
thedata = mydata,
edit.cols = c('name', 'email', 'useR', 'notes'),
edit.label.cols = c('Name', 'Email Address', 'Are they an R user?', 'Additional notes'),
input.types = c(notes='textAreaInput'),
view.cols = c('name', 'email', 'useR'),
callback.update = my.update.callback,
callback.insert = my.insert.callback,
callback.delete = my.delete.callback)The id parameter defines the name of the object available to the uiOutput. The thedata is a data.frame for the initial view of the data table. This can be an empty (i.e. no rows) data.frame. The structure of the data.frame will define the inputs (e.g. factors will be drop down, Date will use dateInput, numerics will use numericInput, etc.). There are many other parameters to custom the behavior of dtedit, see ?dtedit for the full list.
- Use
dtedit_uiin your UI to display the editable data table.
The id you will pass to dteditui is the name you passed to the dtedit_server created on the server side.
dtedit_ui('mycontacts')