Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
warning = FALSE,
message = FALSE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(cheetahR)
library(palmerpenguins)
library(dplyr)
## -----------------------------------------------------------------------------
# Render table
cheetah(iris)
## -----------------------------------------------------------------------------
# Change some feature of some columns in the data
cheetah(
iris,
columns = list(
Sepal.Length = column_def(name = "Sepal_Length", width = 120),
Sepal.Width = column_def(name = "Sepal_Width", width = 120),
Petal.Length = column_def(name = "Petal_Length", width = 120),
Petal.Width = column_def(name = "Petal_Width", width = 120),
Species = column_def(name = "Species")
)
)
## -----------------------------------------------------------------------------
# Example of customizing rownames with color and width
cheetah(
mtcars,
columns = list(
rownames = column_def(width = 150, style = list(color = "red"))
)
)
## -----------------------------------------------------------------------------
# Using checkbox column type to indicate NA values
head(airquality, 10) %>%
mutate(
has_na = if_any(everything(), is.na),
has_na = ifelse(has_na, "true", "false"),
.before = 1
) %>%
cheetah(
columns = list(
has_na = column_def(
name = "Contains NA",
column_type = "check",
style = list(
uncheckBgColor = "#FDD",
checkBgColor = "rgb(255, 73, 72)",
borderColor = "red"
)
)
)
)
## -----------------------------------------------------------------------------
head(airquality, 10) %>%
mutate(
has_na = if_any(everything(), is.na),
has_na = ifelse(has_na, "true", "false"),
.before = 1
) %>%
cheetah(
columns = list(
has_na = column_def(
name = "Contains NA",
column_type = "check",
action = "check",
style = list(
uncheckBgColor = "#FDD",
checkBgColor = "rgb(255, 73, 72)",
borderColor = "red"
)
)
)
)
## -----------------------------------------------------------------------------
img_url <- c(
"https://assets.shannons.com.au/JD166AU033OKSAEF/Z8E73PWLE94D365M/7g7i8dxq4xdx0g61-me9867ab4krp0uio/jpg/2000x1500x3/vehicle/1973-mazda-rx4.jpg",
"https://live.staticflickr.com/2529/3854349010_4783baf575_o.jpg",
"https://photos.classiccars.com/cc-temp/listing/129/6646/18583131-1974-datsun-710-std.jpg",
"https://tse2.mm.bing.net/th?id=OIP.qV1ZAVktze35RwUpEgtPmwAAAA&pid=Api&P=0&h=180",
"https://tse1.mm.bing.net/th?id=OIP.OA_V14TTdu8nx36mC6VUeAHaEo&pid=Api&P=0&h=180",
"https://res.cloudinary.com/carsguide/image/upload/f_auto,fl_lossy,q_auto,t_cg_hero_low/v1/editorial/dp/albums/album-3483/lg/Valiant-50-years-_6_.jpg"
)
## ----fig.height=3-------------------------------------------------------------
data <- mutate(head(mtcars), image = img_url, .before = 1)
cheetah(
data,
columns = list(
rownames = column_def(width = 150),
image = column_def("images", width = 100, column_type = "image", style = list(imageSizing = "keep-aspect-ratio" ))
)
)
## -----------------------------------------------------------------------------
cheetah(
iris,
columns = list(
Species = column_def(
action = "input",
message = htmlwidgets::JS(
"function(rec) {
return {
type: 'error',
message: rec.Species === 'setosa' ? 'Invalid specie type.' : null,
}
}"
)
)
)
)
## -----------------------------------------------------------------------------
# Prepare data
set.seed(123)
iris_rows <- sample(nrow(iris), 10)
data <- iris[iris_rows, ]
## -----------------------------------------------------------------------------
# Simple cell message
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(type = "info", message = "Ok")
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(message = js_ifelse(Species == "setosa", "", "Invalid"))
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
type = "warning",
message = js_ifelse(Sepal.Length > 5, "BigSepal", "")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
type = "warning",
message = js_ifelse(Sepal.Width <= 3, "NarrowSepal", "WideSepal")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
type = "info",
message = js_ifelse(Sepal.Length > 5 & Species %notin% c("setosa"), "E", "X")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
message = js_ifelse(Species %in% c("setosa", "virginica"), "Bad")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
type = "info",
message = js_ifelse(Species %notin% c("setosa"), "OK")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
type = "info",
message = js_ifelse(grepl("^vir", Species), "Yes")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
columns = list(
Species = column_def(
action = "input",
message = add_cell_message(
type = "warning",
message = js_ifelse(!grepl("set", Species), "NoSet", "")
)
)
)
)
## -----------------------------------------------------------------------------
# Add an extra column to the data
check <-
c(
"", NA,
"ok", NA,
"good", "",
"", "good",
"ok", "better"
)
data <- mutate(data, Check = check, .before = 1)
cheetah(
data,
columns = list(
Check = column_def(
name = "",
column_type = "check",
action = "check",
message = add_cell_message(
message = js_ifelse(Check, if_false = "Please check.")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
data[,-1],
columns = list(
Sepal.Width = column_def(
action = "input",
style = list(textAlign = "center"),
message = add_cell_message(
type = "warning",
message = "rec['Sepal.Width'] <= 3 ? 'NarrowSepal' : 'WideSepal';"
)
)
)
)
## -----------------------------------------------------------------------------
#| fig-height: 3
numeric_data <- data.frame(
price_USD = c(125000.75, 299.99, 7890.45),
price_EUR = c(410.25, 18750.60, 1589342.80),
price_INR = c(2200.50, 134999.99, 945.75),
price_NGN = c(120000, 2100045, 1750),
liter = c(20, 35, 42),
percent = c(0.875, 0.642, 0.238)
)
cheetah(
numeric_data,
columns = list(
price_USD = column_def(
name = "USD",
column_type = number_format(
style = "currency",
currency = "USD"
)
),
price_EUR = column_def(
name = "EUR",
column_type = number_format(
style = "currency",
currency = "EUR",
locales = "de-DE"
)
),
price_INR = column_def(
name = "INR",
column_type = number_format(
style = "currency",
currency = "INR",
locales = "hi-IN"
)
),
price_NGN = column_def(
name = "NGN",
column_type = number_format(
style = "currency",
currency = "NGN"
)
),
liter = column_def(
name = "Liter",
column_type = number_format(
style = "unit",
unit = "liter",
unit_display = "long"
)
),
percent = column_def(
name = "Percent",
column_type = number_format(style = "percent")
)
)
)
## -----------------------------------------------------------------------------
#| fig-height: 3
cheetah(
data.frame(
date = as.Date(c("2023-01-15", "2023-02-28", "2023-03-10")),
datetime = as.POSIXct(c(
"2023-01-15 09:30:00",
"2023-02-28 14:45:00",
"2023-03-10 18:15:00"
))
),
columns = list(
date = column_def(
name = "Date",
column_type = date_format(
locales = "en-US",
month = "long",
day = "numeric",
year = "numeric"
)
),
datetime = column_def(
name = "Date & Time",
column_type = date_format(
locales = "de-DE",
date_style = "full",
time_style = "medium"
)
)
)
)
## ----eval=TRUE----------------------------------------------------------------
cheetah(mtcars, rownames = FALSE, sortable = FALSE)
## -----------------------------------------------------------------------------
cheetah(
mtcars,
sortable = FALSE,
columns = list(
rownames = column_def(
width = 150,
sort = TRUE
)
)
)
## -----------------------------------------------------------------------------
cheetah(
mtcars,
sortable = FALSE,
columns = list(
rownames = column_def(
width = 150,
sort = htmlwidgets::JS(
"function(order, col, grid) {
// your logic
}"
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(
iris,
columns = list(
Sepal.Length = column_def(name = "Length"),
Sepal.Width = column_def(name = "Width"),
Petal.Length = column_def(name = "Length"),
Petal.Width = column_def(name = "Width")
),
column_group = list(
column_group(
name = "Sepal",
columns = c("Sepal.Length", "Sepal.Width"),
header_style = list(textAlign = "center", bgColor = "#fbd4dd")
),
column_group(
name = "Petal",
columns = c("Petal.Length", "Petal.Width"),
header_style = list(textAlign = "center", bgColor = "#d8edfc")
)
)
)
## -----------------------------------------------------------------------------
# Define a named list of styles
user_theme <- list(
color = "#2c3e50",
frozenRowsColor = "#2c3e50",
defaultBgColor = "#ecf0f1",
frozenRowsBgColor = "#bdc3c7",
selectionBgColor = "#d0ece7",
highlightBgColor = "#f9e79f",
underlayBackgroundColor = "#f4f6f7",
# This is also possible to change the theme apply in the state by using callback.
frozenRowsBorderColor = '
function(args) {
const { row, grid: { frozenRowCount } } = args;
if (frozenRowCount - 1 === row) {
return ["#7f8c8d", "#7f8c8d", "#34495e"];
} else {
return "#7f8c8d";
}
}',
borderColor = '
function(args) {
const { col, grid: { colCount } } = args;
if (colCount - 1 === col) {
return ["#34495e", "#7f8c8d", "#34495e", null];
} else {
return ["#34495e", null, "#34495e", null];
}
}',
highlightBorderColor = "#1abc9c",
checkbox = list(
uncheckBgColor = "#ecf0f1",
checkBgColor = "#1abc9c",
borderColor = "#16a085"
),
font = "14px 'Helvetica Neue', sans-serif",
header = list(sortArrowColor = "#2980b9"),
messages = list(
infoBgColor = "#95a5a6",
errorBgColor = "#e74c3c",
warnBgColor = "#f1c40f",
boxWidth = 12,
markHeight = 15
)
)
## -----------------------------------------------------------------------------
cheetah(
data,
theme = user_theme,
columns = list(
Check = column_def(
name = "",
column_type = "check",
action = "check",
message = add_cell_message(
message = js_ifelse(Check, if_false = "Please check.")
)
),
Petal.Width = column_def(
action = "input",
style = list(textAlign = "center"),
message = add_cell_message(
type = "info",
message = js_ifelse(Petal.Width <= 1, "NarrowPetal", "WidePetal")
)
),
Species = column_def(
action = "input",
message = add_cell_message(
type = "warning",
message = js_ifelse(!grepl("set", Species), "NoSet", "")
)
)
)
)
## -----------------------------------------------------------------------------
cheetah(penguins, search = "contains")
## -----------------------------------------------------------------------------
# Disable resize effect in a cheetah table
cheetah(penguins, search = "contains", disable_column_resize = TRUE)
## -----------------------------------------------------------------------------
# Freeze the first column
cheetah(penguins, search = "contains", column_freeze = 1)
## -----------------------------------------------------------------------------
# Define default row height and column width
cheetah(penguins, search = "contains", default_row_height = 30, default_col_width = 100)
## -----------------------------------------------------------------------------
# Define default row height for the header
cheetah(penguins, search = "contains", header_row_height = 20)
## -----------------------------------------------------------------------------
# Define a default font setting for the table
cheetah(penguins, search = "contains", font = "8px sans-serif")
## -----------------------------------------------------------------------------
# Make the table editable
cheetah(penguins, search = "contains", editable = TRUE)
## -----------------------------------------------------------------------------
# Move cells on tab and delete cell values on with the Delete and BackSpace keys
cheetah(
penguins,
search = "contains",
editable = TRUE,
keyboard_options =
list(
deleteCellValueOnDel = TRUE,
moveCellOnTab = TRUE
)
)
## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(bslib)
# library(cheetahR)
#
#
# ui <- page_fluid(cheetahOutput("grid"))
#
# server <- function(input, output) {
# output$grid <- renderCheetah({
# cheetah(data = iris)
# })
# }
#
# shinyApp(ui = ui, server = server)
## ----eval=FALSE---------------------------------------------------------------
# library(shiny)
# library(bslib)
# library(cheetahR)
#
# ui <- page_fluid(cheetahOutput("grid"))
#
# server <- function(input, output) {
# output$grid <- renderCheetah({
# cheetah(data = iris,
# columns = list(
# Species = column_def(
# column_type = "menu",
# action = "inline_menu",
# menu_options = list(
# setosa = "Option Setosa",
# versicolor = "Option Vericolor" ,
# virginica = "Option Virginica"
# )
# )
# )
# )
# })
# }
#
# shinyApp(ui = ui, server = server)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.