Nothing
#' Tabs Function
#'
#' This function creates a tabs based table. It requires a single dataframe
#' with a grouping variable.
#' @param inputId The Id to access the tag
#' @param df A single dataframe with all data. See example for structure
#' @param group_col The column name with the groups to be used as tabs
#' @return a tab table HTML shiny tag object
#' @family Govstyle tables tabs and accordions
#' @export
#' @examples
#' ui <- shiny::fluidPage(
#' shinyGovstyle::header(
#' org_name = "Example",
#' service_name = "User Examples",
#' logo = "shinyGovstyle/images/moj_logo.png",
#' logo_alt_text = "Ministry of Justice logo"
#' ),
#' shinyGovstyle::gov_main_layout(
#' size = "two-thirds",
#' shinyGovstyle::govTabs("tabs", shinyGovstyle::case_data, "tabs")
#' ),
#' shinyGovstyle::footer(full = TRUE)
#' )
#'
#' server <- function(input, output, session) {}
#' if (interactive()) shinyApp(ui = ui, server = server)
govTabs <- # nolint
function(
inputId, # nolint
df,
group_col
) {
tabs <- unique(df[[group_col]])
tab_headers <- create_tabs(tabs, inputId)
# Select the first tab as the selected one
tab_headers$children[[1]][[1]]$attribs$class <-
"govuk-tabs__list-item govuk-tabs__list-item--selected"
main_temp_hold <- NULL
# This needs to make up the tables on each tab
for (i in tabs) {
# filter through tabs and drop the grouping value
temp_table <- df[df[[group_col]] == i, ]
temp_table[group_col] <- NULL
# Create row by row the main bulk of table to insert later
main_row_store <- NULL
for (j in seq_len(nrow(temp_table))) {
temp_row_store <- create_tab_row(temp_table[j, ])
main_row_store <- shiny::tagList(temp_row_store, main_row_store)
}
temp_hold <- create_tab_table(temp_table, main_row_store, i, inputId)
main_temp_hold <- shiny::tagList(main_temp_hold, temp_hold)
}
# Put the lime with coconut and create the final thing
main_tab_div <- shiny::tags$div(
class = "govuk-frontend-supported",
shiny::tags$h2(class = "govuk-tabs__title", "Contents"),
tab_headers,
main_temp_hold
)
# unhide first tab
main_tab_div$children[[3]][[1]][[1]][[1]][[2]][[2]]$class <-
"govuk-tabs__panel"
attachDependency(main_tab_div, "govTab")
}
create_tab_table <- function(
df,
rows,
tab,
inputId # nolint
) {
shiny::tags$div(
class = "govuk-tabs__panel govuk-tabs__panel--hidden",
id = tolower(gsub(" ", "-", tab)),
name = paste0(tolower(gsub(" ", "-", tab)), "-", inputId, "-table"),
shiny::tags$h2(class = "govuk-heading-l", tab),
shiny::tags$table(
class = "govuk-table",
shiny::tags$thead(
class = "govuk-table__head",
shiny::tags$tr(
class = "govuk-table__row",
Map(
function(x) {
shiny::tags$th(
scope = "col",
class = "govuk-table__header",
x
)
},
x = colnames(df)
)
)
),
shiny::tags$tbody(
class = "govuk-table__body",
rows
)
)
)
}
create_tab_row <- function(df_row) {
rowHTML <- # nolint
shiny::tags$tr(
class = "govuk-table__row",
Map(
function(x) {
shiny::tags$td(class = "govuk-table__cell", x)
},
x = df_row
)
)
}
create_tabs <- function(
tabs_names,
inputId # nolint
) {
shiny::tags$ul(
class = "govuk-tabs__list",
id = paste0(inputId, "tab"),
Map(
function(x) {
shiny::tags$li(
name = paste0(tolower(gsub(" ", "-", x)), "-t"),
id = paste0(tolower(gsub(" ", "-", x)), "-test"),
class = "govuk-tabs__list-item",
shiny::tags$a(
class = "govuk-tabs__tab",
name = paste0(tolower(gsub(" ", "-", x)), "-l"),
id = paste0(tolower(gsub(" ", "-", x)), "-l-test"),
href = paste0("#", tolower(gsub(" ", "-", x))),
x
)
)
},
x = tabs_names
)
)
}
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.