R/zzz.R

Defines functions .onLoad

.onLoad <- function(...) {
  # TODO: link portal_env to appropriate parts
  # TODO: tidy ??

  # when package is loaded, create new environment to store needed variables
  portal_env <- rlang::new_environment(parent = emptyenv())

  highcharter_opts <- getOption("highcharter.chart")
  highcharter_opts$lang <- list(
    noData = paste("<b>No data available - the API appears to be down.",
                   "Sorry for the inconvenience :)</b>")
  )
  highcharter_opts$noData <- list(
    useHTML = TRUE,
    position = list(align = "center", verticalAlign = "middle")
  )
  options(useFancyQuotes = FALSE,  # for sQuote() function
          scipen = 999,
          highcharter.chart = highcharter_opts)

  CONFIG <- read_config_file()
  assign("CONFIG", CONFIG, envir = portal_env)

  indicator_definitions_raw <- jsonlite::read_json(CONFIG$indicator_definitions)
  indicator_definitions <- list()
  for (item in indicator_definitions_raw) {
    check_indicator_definition(item)
    if (is.null(item$disabled) || !item$disabled) {
      key <- paste(item$class, item$type, item$indicator_name, sep = "_")
      if (key %in% names(indicator_definitions)) {
        stop(
          paste(
            DUPLICATE_INDICATOR_ERROR,
            item$class,
            item$type,
            item$indicator_name
          )
        )
      } else {
        indicator_definitions[[key]] <- item
      }
    }
  }
  assign("indicator_definitions", indicator_definitions, envir = portal_env)

  INDICATOR_CLASSES <<- get_class_names(indicator_definitions)
  assign("INDICATOR_CLASSES", INDICATOR_CLASSES, envir = portal_env)

  DOWNLOADABLE_INDICATORS <<- names(indicator_definitions)[
    as.vector(sapply(indicator_definitions, function(x) (!is.null(x$download) && x$download)))
  ]
  assign("DOWNLOADABLE_INDICATORS", DOWNLOADABLE_INDICATORS, envir = portal_env)

  if (!is.null(CONFIG$production) & !CONFIG$production) {
    warnings(DEV_MODE_WARNING)
    DATA_STORE <- load_data(CONFIG)
  } else if (!is.null(CONFIG$data_store_filename)) {
    DATA_STORE <<- readRDS(CONFIG$data_store_filename)
  } else {
    DATA_STORE <<- NULL
  }
  assign("DATA_STORE", DATA_STORE, envir = portal_env)

  tabs <- list()
  tabs[["title"]] <- ""
  for (i in 2:(length(INDICATOR_CLASSES) + 2)) {
    tabs[[i]] <- get_tab_panel(INDICATOR_CLASSES, i - 1)
  }
  assign("tabs", tabs, envir = portal_env)

  if (!is.null(CONFIG$tag_manager_html)) {
    tag_manager_html <<- includeHTML("www/tag_manager.html")
  } else {
    print("No tag manager set.")
    tag_manager_html <<- "<div></div>"
  }
  assign("tag_manager_html", tag_manager_html, envir = portal_env)

  if (!is.null(CONFIG$filter_dictionary_definitions)) {
    filter_dictionary_raw <- jsonlite::read_json(CONFIG$filter_dictionary_definitions)
    FILTER_DICTIONARY <<- list()
    for (item in filter_dictionary_raw) {
      FILTER_DICTIONARY[[item$name]] <<- item
    }
  }
  assign("FILTER_DICTIONARY", FILTER_DICTIONARY, envir = portal_env)

  if(!is.null(CONFIG$stats_odata_api$environment)){
    ODATA_URL <<- CONFIG$stats_odata_api[[CONFIG$stats_odata_api$environment]]$odata_url
    ODATA_TOKEN <<- CONFIG$stats_odata_api[[CONFIG$stats_odata_api$environment]]$odata_token
  }
  assign("ODATA_URL", ODATA_URL, envir = portal_env)
  assign("ODATA_TOKEN", ODATA_TOKEN, envir = portal_env)
}
xaviermiles/portalLite documentation built on Jan. 28, 2022, 9:10 a.m.