R/get_groups_tbl.R

Defines functions get_group_names make_group_members_tbl get_groups_summary get_group_members_tbl

Documented in get_group_members_tbl get_group_names get_groups_summary make_group_members_tbl

#' Get the Groups Table via the Connect API
#'
#' @description
#' This provides a tibble that relates to all content on Connect. It has the
#' following columns:
#'
#' - email:
#' - username:
#' - first_name:
#' - last_name:
#' - user_role:
#' - group_name:
#'
#' @param conn the Connect server connection details containing the server and
#'   API key.
#'
#' @return a tibble
#' @export
get_group_members_tbl <- function(conn = create_connection()) {

  group_names_tbl_raw <- connectapi::get_groups(src = conn, limit = Inf)

  group_names_tbl_raw %>%
    purrr::transpose() %>%
    purrr::map_dfr(
      ~ connectapi::get_group_members(src = conn, guid = .x$guid) %>%
        dplyr::mutate(group_name = .x$name)
    ) %>%
    dplyr::select(
      -created_time, -updated_time, -active_time,
      -confirmed, -locked, -guid
    )
}


#' Get a Summary of the Groups Table
#'
#' @param groups_tbl The table that is generated by `get_groups_tbl()`
#'
#' @return a tibble
#'
#' @export
get_groups_summary <- function(group_names_tbl = group_names_tbl, group_members_tbl=group_members_tbl) {

  summary_w_members <- group_members_tbl %>%
    dplyr::group_by(group_name) %>%
    rename("Group Name" = group_name) %>%
    dplyr::summarise("Number of Members" = dplyr::n())

  groups_w_no_members <- tibble(`Group Name` =
                                  setdiff(group_names_tbl$group_name, group_members_tbl$group_name),
                                `Number of Members` = 0)

  if(nrow(groups_w_no_members) > 0){
    groups_summary <- bind_rows(summary_w_members, groups_w_no_members) %>%
      arrange(`Group Name`)}else
        groups_summary <- summary_w_members
}

#' Make a Summary Table of Group Members
#'
#' @param group_members_tbl Group members table
#' @param group_name Name of group
#'
#' @return a reactable table
#'
#' @export
make_group_members_tbl <- function(
    group_members_tbl = group_members_tbl,
    group_name = selectedgroup()
) {

  if (length(group_name) == 0) {

    reactable::reactable(
      group_members_tbl, searchable = TRUE, highlight = TRUE,
      filterable = TRUE, width = "100%"
    )
  } else {
    reactable::reactable(
      dplyr::filter(group_members_tbl, group_name == group_name), searchable = TRUE, highlight = TRUE,
      filterable = TRUE, width = "100%"
    )
  }
}

#' List the names of groups on the Connect server
#'
#' @param x groups_tbl
#'
#' @return a vector
#'
#' @export

get_group_names <- function(x = groups_tbl) {

  x %>% dplyr::select(name) %>% unique() %>% dplyr::pull()
}
kmasiello/rscview documentation built on Jan. 3, 2023, 2:58 p.m.