From 671b196d4f5f9e204de6a369f6f54cb904584b57 Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Mon, 27 Jan 2025 11:28:59 -0500 Subject: [PATCH 1/4] Update server app's config API endpoint to return formio base url and project name --- app/server/app/config/formio.js | 6 +++++- app/server/app/routes/config.js | 8 +++++++- docs/csb-openapi.json | 10 +++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/server/app/config/formio.js b/app/server/app/config/formio.js index 720169d6..eb4ddb3d 100644 --- a/app/server/app/config/formio.js +++ b/app/server/app/config/formio.js @@ -40,7 +40,9 @@ const { FORMIO_API_KEY, } = process.env; -const formioProjectUrl = `${FORMIO_BASE_URL}/${FORMIO_PROJECT_NAME}`; +const formioBaseUrl = FORMIO_BASE_URL; +const formioProjectName = FORMIO_PROJECT_NAME; +const formioProjectUrl = `${formioBaseUrl}/${FORMIO_PROJECT_NAME}`; /** * Stores form url for each form by rebate year. @@ -166,6 +168,8 @@ const formioNoUserAccess = { module.exports = { axiosFormio, + formioBaseUrl, + formioProjectName, formioProjectUrl, formUrl, formIntroSubstring, diff --git a/app/server/app/routes/config.js b/app/server/app/routes/config.js index 5064c34f..2cad89ba 100644 --- a/app/server/app/routes/config.js +++ b/app/server/app/routes/config.js @@ -1,6 +1,10 @@ const express = require("express"); // --- -const { submissionPeriodOpen } = require("../config/formio"); +const { + formioBaseUrl, + formioProjectName, + submissionPeriodOpen, +} = require("../config/formio"); const { ensureAuthenticated } = require("../middleware"); const { CSB_REBATE_YEAR } = process.env; @@ -16,6 +20,8 @@ router.get("/", (_req, res) => { const year = date.getFullYear().toString(); return res.json({ + formioBaseUrl, + formioProjectName, rebateYear: CSB_REBATE_YEAR || year, submissionPeriodOpen, }); diff --git a/docs/csb-openapi.json b/docs/csb-openapi.json index d0b924eb..55157a8c 100644 --- a/docs/csb-openapi.json +++ b/docs/csb-openapi.json @@ -158,12 +158,20 @@ "parameters": [], "responses": { "200": { - "description": "Open enrollment status (true/false) for each form, by rebate year.", + "description": "Formio base URL and project name, CSB rebate year and open enrollment status.", "content": { "application/json": { "schema": { "type": "object", "properties": { + "formioBaseUrl": { + "type": "string", + "example": "https://api.form.io" + }, + "formioProjectName": { + "type": "string", + "example": "forms" + }, "rebateYear": { "schema": { "type": "string", From 8505fac8b384464c2c1ac5a1d3d1c4983fb24484 Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Mon, 27 Jan 2025 11:31:22 -0500 Subject: [PATCH 2/4] Update UserDashboard component to set Formio base URL and project URL from data returned from config API --- app/client/src/components/userDashboard.tsx | 21 +++++++++++++++++---- app/client/src/types.ts | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/client/src/components/userDashboard.tsx b/app/client/src/components/userDashboard.tsx index d545cc6f..baa67de6 100644 --- a/app/client/src/components/userDashboard.tsx +++ b/app/client/src/components/userDashboard.tsx @@ -1,21 +1,21 @@ +import { useEffect } from "react"; import { Link, Outlet, useLocation, useNavigate } from "react-router-dom"; import { Formio } from "@formio/react"; import premium from "@formio/premium/lib/index.js"; import uswds from "@formio/uswds"; import icons from "uswds/img/sprite.svg"; // --- -import { serverUrl, formioBaseUrl, formioProjectUrl } from "@/config"; +import { serverUrl } from "@/config"; import { useHelpdeskAccess, useConfigQuery, + useConfigData, useBapSamQuery, useBapSamData, } from "@/utilities"; import { Loading } from "@/components/loading"; import { useDialogActions } from "@/contexts/dialog"; -Formio.setBaseUrl(formioBaseUrl); -Formio.setProjectUrl(formioProjectUrl); Formio.use(premium); /* eslint-disable-line react-hooks/rules-of-hooks */ Formio.use(uswds); /* eslint-disable-line react-hooks/rules-of-hooks */ @@ -61,11 +61,24 @@ export function UserDashboard(props: { email: string }) { useConfigQuery(); useBapSamQuery(); + const configData = useConfigData(); const bapSamData = useBapSamData(); const { displayDialog } = useDialogActions(); const helpdeskAccess = useHelpdeskAccess(); + useEffect(() => { + const { formioBaseUrl, formioProjectName } = configData ?? {}; + + if (formioBaseUrl) { + Formio.setBaseUrl(formioBaseUrl); + } + + if (formioBaseUrl && formioProjectName) { + Formio.setProjectUrl(`${formioBaseUrl}/${formioProjectName}`); + } + }, [configData]); + const onSubmissionsPage = pathname === "/"; const onHelpdeskPage = pathname === "/helpdesk"; const onFormPage = @@ -93,7 +106,7 @@ export function UserDashboard(props: { email: string }) { }); } - if (!bapSamData || !email) { + if (!configData || !bapSamData || !email) { return ; } diff --git a/app/client/src/types.ts b/app/client/src/types.ts index cd23bf80..f206ecc0 100644 --- a/app/client/src/types.ts +++ b/app/client/src/types.ts @@ -25,6 +25,8 @@ export type UserData = { }; export type ConfigData = { + formioBaseUrl: string; + formioProjectName: string; rebateYear: RebateYear; submissionPeriodOpen: { 2022: { frf: boolean; prf: boolean; crf: boolean }; From b1ac196f2a412338f3af28bff43bdddb047634c3 Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Mon, 27 Jan 2025 11:35:24 -0500 Subject: [PATCH 3/4] Remove client app env variables for Formio base URL and project name --- app/client/.env.example | 6 ------ app/client/src/config.tsx | 24 +----------------------- 2 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 app/client/.env.example diff --git a/app/client/.env.example b/app/client/.env.example deleted file mode 100644 index 1fc0f534..00000000 --- a/app/client/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -# NOTE: For local development, set `VITE_FORMIO_BASE_URL` and -# `VITE_FORMIO_PROJECT_NAME` to the same values used in the server app's -# `FORMIO_BASE_URL` and `FORMIO_PROJECT_NAME` env variables. When deployed, a -# GitHub Actions Workflow does this in the "build" npm script. -VITE_FORMIO_BASE_URL= -VITE_FORMIO_PROJECT_NAME= diff --git a/app/client/src/config.tsx b/app/client/src/config.tsx index 33ef4bc5..4ea4654d 100644 --- a/app/client/src/config.tsx +++ b/app/client/src/config.tsx @@ -1,20 +1,4 @@ -const { - MODE, - VITE_SERVER_BASE_PATH, - VITE_CLOUD_SPACE, - VITE_FORMIO_BASE_URL, - VITE_FORMIO_PROJECT_NAME, -} = import.meta.env; - -if (!VITE_FORMIO_BASE_URL) { - const message = `Required VITE_FORMIO_BASE_URL environment variable not found.`; - throw new Error(message); -} - -if (!VITE_FORMIO_PROJECT_NAME) { - const message = `Required VITE_FORMIO_PROJECT_NAME environment variable not found.`; - throw new Error(message); -} +const { MODE, VITE_SERVER_BASE_PATH, VITE_CLOUD_SPACE } = import.meta.env; // allows the app to be accessed from a sub directory of a server (e.g. /csb) export const serverBasePath = @@ -25,12 +9,6 @@ export const serverUrl = window.location.origin + serverBasePath; export const cloudSpace = MODE === "development" ? "dev" : VITE_CLOUD_SPACE || ""; -export const formioBaseUrl = VITE_FORMIO_BASE_URL; - -const formioProjectName = VITE_FORMIO_PROJECT_NAME; - -export const formioProjectUrl = `${formioBaseUrl}/${formioProjectName}`; - export const messages = { genericError: "The application has encountered an unknown error.", authError: "Authentication error. Please log in again or contact support.", From 6a80569432ff013f14da9e6344f3a7485d74093e Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Mon, 27 Jan 2025 11:41:11 -0500 Subject: [PATCH 4/4] Update GitHub workflows to no longer use Formio base url and project name VITE env variables --- .github/workflows/dev.yml | 2 -- .github/workflows/production.yml | 2 -- .github/workflows/staging.yml | 2 -- 3 files changed, 6 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 97cafcae..f9af9678 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -114,8 +114,6 @@ jobs: run: | VITE_SERVER_BASE_PATH="$SERVER_BASE_PATH" \ VITE_CLOUD_SPACE="$CLOUD_SPACE" \ - VITE_FORMIO_BASE_URL="$FORMIO_BASE_URL" \ - VITE_FORMIO_PROJECT_NAME="$FORMIO_PROJECT_NAME" \ npm run build rm ../server/app/public/index.html cd build diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 0f686606..77bbe63b 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -67,8 +67,6 @@ jobs: run: | VITE_SERVER_BASE_PATH="$SERVER_BASE_PATH" \ VITE_CLOUD_SPACE="$CLOUD_SPACE" \ - VITE_FORMIO_BASE_URL="$FORMIO_BASE_URL" \ - VITE_FORMIO_PROJECT_NAME="$FORMIO_PROJECT_NAME" \ npm run build rm ../server/app/public/index.html cd build diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 22c4658c..b144ad72 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -114,8 +114,6 @@ jobs: run: | VITE_SERVER_BASE_PATH="$SERVER_BASE_PATH" \ VITE_CLOUD_SPACE="$CLOUD_SPACE" \ - VITE_FORMIO_BASE_URL="$FORMIO_BASE_URL" \ - VITE_FORMIO_PROJECT_NAME="$FORMIO_PROJECT_NAME" \ npm run build rm ../server/app/public/index.html cd build