]> nmode's Git Repositories - Rnaught/blobdiff - R/web.R
Update web app entry point
[Rnaught] / R / web.R
diff --git a/R/web.R b/R/web.R
new file mode 100644 (file)
index 0000000..ecfd501
--- /dev/null
+++ b/R/web.R
@@ -0,0 +1,57 @@
+#' Launch the Rnaught Web Application
+#'
+#' This is the entry point of the Rnaught web application, which creates and
+#' returns a Shiny app object. When invoked directly, the web application is
+#' launched.
+#'
+#' The following dependencies are required to run the application:
+#'   * [shiny](https://shiny.posit.co)
+#'   * [bslib](https://rstudio.github.io/bslib)
+#'   * [DT](https://rstudio.github.io/DT)
+#'   * [plotly](https://plotly-r.com)
+#'
+#' If any of the above packages are missing during launch, a prompt will appear
+#' to install them.
+#'
+#' To configure settings such as the port, host or default browser, set Shiny's
+#' global options (see [shiny::runApp()]).
+#'
+#' @return A Shiny app object for the Rnaught web application.
+#'
+#' @importFrom utils install.packages
+#'
+#' @export
+web <- function() {
+  missing_pkgs <- c()
+  # Check for any missing, required packages.
+  if (!requireNamespace("shiny", quietly = TRUE)) {
+    missing_pkgs <- c(missing_pkgs, "shiny")
+  }
+  if (!requireNamespace("bslib", quietly = TRUE)) {
+    missing_pkgs <- c(missing_pkgs, "bslib")
+  }
+  if (!requireNamespace("DT", quietly = TRUE)) {
+    missing_pkgs <- c(missing_pkgs, "DT")
+  }
+  if (!requireNamespace("plotly", quietly = TRUE)) {
+    missing_pkgs <- c(missing_pkgs, "plotly")
+  }
+
+  # If any of the required packages are missing,
+  # prompt the user to install them.
+  if (length(missing_pkgs) > 0) {
+    cat("The following packages must be installed to run the",
+      "Rnaught web application:\n"
+    )
+    writeLines(missing_pkgs)
+    answer <- readline("Begin installation? [Y/n] ")
+
+    if (answer == "Y" || answer == "y") {
+      install.packages(missing_pkgs)
+    } else {
+      stop("Aborting due to missing, required packages.", call. = FALSE)
+    }
+  }
+
+  shiny::shinyAppDir(appDir = system.file("web", package = "Rnaught"))
+}