diff --git a/src/packages/shared-types/authority.ts b/src/packages/shared-types/authority.ts
index b6f82c9289..4c5aff79e6 100644
--- a/src/packages/shared-types/authority.ts
+++ b/src/packages/shared-types/authority.ts
@@ -6,7 +6,6 @@ export enum Authority {
"1915c" = "1915(c)",
}
-/* Authority values as a union string type. Replaces old Authority enum. */
export type AuthorityUnion =
| "Medicaid SPA"
| "CHIP SPA"
diff --git a/src/services/api/webforms/ABP4/v202401.ts b/src/services/api/webforms/ABP4/v202401.ts
index eb8ce237b1..1a24490cd0 100644
--- a/src/services/api/webforms/ABP4/v202401.ts
+++ b/src/services/api/webforms/ABP4/v202401.ts
@@ -42,49 +42,55 @@ export const v202401: FormSchema = {
},
},
{
- rhf: "Checkbox",
- name: "see-approved-attachment",
- rules: { required: "* Required" },
- formItemClassName:
- "ml-[0.6rem] px-4 my-2 border-l-4 border-l-primary",
- dependency: {
- conditions: [
- {
- name: "abp4_cost-sharing_abp-for-individuals-income-over-100-poverty",
- type: "expectedValue",
- expectedValue: "yes",
+ rhf: "WrappedGroup",
+ name: "wrapped",
+ fields: [
+ {
+ rhf: "Checkbox",
+ name: "see-approved-attachment",
+ rules: { required: "* Required" },
+ formItemClassName:
+ "ml-[0.6rem] px-4 border-l-4 border-l-primary pb-6",
+ dependency: {
+ conditions: [
+ {
+ name: "abp4_cost-sharing_abp-for-individuals-income-over-100-poverty",
+ type: "expectedValue",
+ expectedValue: "yes",
+ },
+ ],
+ effect: { type: "show" },
},
- ],
- effect: { type: "show" },
- },
- props: {
- options: [
- {
- label:
- "See approved Attachment 4.18-F or G for description.",
- value: "true",
+ props: {
+ options: [
+ {
+ label:
+ "See approved Attachment 4.18-F or G for description.",
+ value: "true",
+ },
+ ],
},
- ],
- },
- },
- {
- rhf: "Upload",
- name: "attachment_upload",
- label: "Attachment 4.18-F or G",
- labelClassName: "font-bold",
- rules: { required: "* Required" },
- formItemClassName:
- "ml-[0.6rem] px-4 my-2 border-l-4 border-l-primary",
- dependency: {
- conditions: [
- {
- name: "abp4_cost-sharing_abp-for-individuals-income-over-100-poverty",
- type: "expectedValue",
- expectedValue: "yes",
+ },
+ {
+ rhf: "Upload",
+ name: "attachment_upload",
+ label: "Attachment 4.18-F or G",
+ labelClassName: "font-bold",
+ rules: { required: "* Required" },
+ formItemClassName:
+ "ml-[0.6rem] px-4 border-l-4 border-l-primary",
+ dependency: {
+ conditions: [
+ {
+ name: "abp4_cost-sharing_abp-for-individuals-income-over-100-poverty",
+ type: "expectedValue",
+ expectedValue: "yes",
+ },
+ ],
+ effect: { type: "show" },
},
- ],
- effect: { type: "show" },
- },
+ },
+ ],
},
{
rhf: "Textarea",
diff --git a/src/services/api/webforms/ABP6/v202401.ts b/src/services/api/webforms/ABP6/v202401.ts
index 666c1ccd04..1c119a1c80 100644
--- a/src/services/api/webforms/ABP6/v202401.ts
+++ b/src/services/api/webforms/ABP6/v202401.ts
@@ -21,6 +21,9 @@ export const v202401: FormSchema = {
label:
"Aggregate actuarial value of the benchmark plan (e.g., FEHBP, state/territory employee coverage, commercial plan, state plan) that is equivalent to the state/territory's benefit package",
labelClassName: "font-bold",
+ props: {
+ icon: "$",
+ },
rules: {
required: "* Required",
pattern: {
@@ -35,6 +38,9 @@ export const v202401: FormSchema = {
label:
"Aggregate actuarial value of the state/territory's benchmark-equivalent plan (must be greater than or equal to the amount entered above)",
labelClassName: "font-bold",
+ props: {
+ icon: "$",
+ },
rules: {
required: "* Required",
pattern: {
@@ -283,6 +289,9 @@ export const v202401: FormSchema = {
{
name: "description",
rhf: "Textarea",
+ props: {
+ className: "h-[114px]",
+ },
},
],
},
diff --git a/src/services/api/webforms/ABP9/v202401.ts b/src/services/api/webforms/ABP9/v202401.ts
index 779bffaa4f..3c78ff17c4 100644
--- a/src/services/api/webforms/ABP9/v202401.ts
+++ b/src/services/api/webforms/ABP9/v202401.ts
@@ -40,6 +40,9 @@ export const v202401: FormSchema = {
label:
"Describe the employer-sponsored insurance, including the population covered, amount of premium assistance by population, and employer-sponsored insurance activities, including required contribution, cost-effectiveness test requirements, and benefit information.",
labelClassName: "font-bold",
+ props: {
+ className: "h-[114px]",
+ },
dependency: {
conditions: [
{
@@ -82,6 +85,9 @@ export const v202401: FormSchema = {
label:
"Describe, including the population covered, amount of premium assistance by population, required contributions, cost-effectiveness test requirements, and benefit information.",
labelClassName: "font-bold",
+ props: {
+ className: "h-[114px]",
+ },
dependency: {
conditions: [
{
@@ -100,6 +106,9 @@ export const v202401: FormSchema = {
label:
"Other information about employer-sponsored insurance or payment of premiums (optional)",
labelClassName: "font-bold",
+ props: {
+ className: "h-[114px]",
+ },
rules: {
pattern: {
value: /^\S(.*\S)?$/,
diff --git a/src/services/email/ses-email-templates/index.js b/src/services/email/ses-email-templates/index.js
index 6900973b85..6b91f77620 100644
--- a/src/services/email/ses-email-templates/index.js
+++ b/src/services/email/ses-email-templates/index.js
@@ -541,11 +541,11 @@ for {{id}} was withdrawn by {{submitterName}} {{submitterEmail}}.
Summary:
{{additionalInformation}}
-This mailbox is for the submittal of State Plan Amendments and non-web
-based responses to Requests for Additional Information (RAI) on submitted
-SPAs only. Any other correspondence will be disregarded.
+This mailbox is for the submittal of Section 1915(b) and 1915(c) Waivers,
+responses to Requests for Additional Information (RAI), and extension requests on Waivers only.
+Any other correspondence will be disregarded.
If you have questions, please contact
-spa@cms.hhs.gov .
+spa@cms.hhs.gov or your state lead.
Thank you!
`,
text: `
The OneMAC Submission Portal received a request to withdraw the Formal
@@ -560,9 +560,9 @@ Medicaid SPA Package ID: {{id}}
Summary:
{{additionalInformation}}
-This mailbox is for the submittal of State Plan Amendments and non-web
-based responses to Requests for Additional Information (RAI) on submitted
-SPAs only. Any other correspondence will be disregarded.
+This mailbox is for the submittal of Section 1915(b) and 1915(c) Waivers,
+responses to Requests for Additional Information (RAI), and extension requests on Waivers only.
+Any other correspondence will be disregarded.
If you have any questions, please contact spa@cms.hhs.gov or your state lead.
diff --git a/src/services/ui/e2e/tests/a11y/index.spec.ts b/src/services/ui/e2e/tests/a11y/index.spec.ts
index 2f3cff3c8e..48a23acafd 100644
--- a/src/services/ui/e2e/tests/a11y/index.spec.ts
+++ b/src/services/ui/e2e/tests/a11y/index.spec.ts
@@ -4,7 +4,6 @@ import AxeBuilder from "@axe-core/playwright";
const staticRoutes = [
"/",
"/dashboard",
- "/details",
"/faq",
"/profile",
"/new-submission",
diff --git a/src/services/ui/package.json b/src/services/ui/package.json
index b33c7b45c2..bcd838b282 100644
--- a/src/services/ui/package.json
+++ b/src/services/ui/package.json
@@ -99,7 +99,7 @@
"serverless-s3-sync": "^3.1.0",
"tailwindcss": "^3.3.1",
"typescript": "^5.2.0",
- "vite": "^4.2.0",
+ "vite": "^5.3.5",
"vite-plugin-radar": "^0.9.2"
}
}
diff --git a/src/services/ui/src/api/submissionService.test.ts b/src/services/ui/src/api/submissionService.test.ts
index 36da46cbed..36711d2433 100644
--- a/src/services/ui/src/api/submissionService.test.ts
+++ b/src/services/ui/src/api/submissionService.test.ts
@@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest";
import * as unit from "./submissionService";
import { OneMacUser } from "@/api/useGetUser";
import { SubmissionServiceEndpoint } from "@/utils";
+import { Authority } from "shared-types";
const mockFormData = {
test: "data",
@@ -99,10 +100,10 @@ describe("helpers", () => {
{ test: "data" },
mockGeorge,
"/default" as SubmissionServiceEndpoint,
- "MEDICAID",
+ Authority.MED_SPA,
mockUploadRecipes(3),
);
- expect(payload.authority).toEqual("MEDICAID");
+ expect(payload.authority).toEqual("medicaid spa");
expect(payload.origin).toEqual("micro");
expect(payload.attachments).toHaveLength(3);
expect(payload.test).toEqual("data");
@@ -115,10 +116,10 @@ describe("helpers", () => {
mockFormData,
mockGeorge,
"/submit",
- "MEDICAID",
+ Authority.MED_SPA,
mockUploadRecipes(3),
);
- expect(payload.authority).toEqual("MEDICAID");
+ expect(payload.authority).toEqual("medicaid spa");
expect(payload.origin).toEqual("micro");
expect(payload.attachments).toHaveLength(3);
expect(payload.test).toEqual("data");
diff --git a/src/services/ui/src/api/submissionService.ts b/src/services/ui/src/api/submissionService.ts
index 099be0ecca..97c94cccb4 100644
--- a/src/services/ui/src/api/submissionService.ts
+++ b/src/services/ui/src/api/submissionService.ts
@@ -1,10 +1,10 @@
import { API } from "aws-amplify";
import {
Attachment,
- Authority,
ReactQueryApiError,
Action,
AttachmentKey,
+ Authority,
} from "shared-types";
import { buildActionUrl, SubmissionServiceEndpoint } from "@/utils";
import { OneMacUser } from "@/api";
@@ -15,7 +15,7 @@ export type SubmissionServiceParameters = {
data: T;
endpoint: SubmissionServiceEndpoint;
user: OneMacUser | undefined;
- authority?: Authority;
+ authority: Authority;
};
type SubmissionServiceResponse = {
body: {
@@ -58,7 +58,7 @@ export const buildSubmissionPayload = >(
data: T,
user: OneMacUser | undefined,
endpoint: SubmissionServiceEndpoint,
- authority?: string,
+ authority: Authority,
attachments?: UploadRecipe[],
) => {
const userDetails = {
diff --git a/src/services/ui/src/api/useGetItem.ts b/src/services/ui/src/api/useGetItem.ts
index 9452d91ca3..5b3ee43840 100644
--- a/src/services/ui/src/api/useGetItem.ts
+++ b/src/services/ui/src/api/useGetItem.ts
@@ -42,7 +42,7 @@ export const useGetItem = (
);
};
-export const useGetItemCache = (id: string) => {
+export const useGetItemCache = (id: string | undefined) => {
const queryClient = useQueryClient();
const data = (() => {
const data = queryClient.getQueryCache().find(["record", id])?.state
diff --git a/src/services/ui/src/components/Context/modalContext.tsx b/src/services/ui/src/components/Context/modalContext.tsx
index 47dc9e5490..9cfe0ac60e 100644
--- a/src/services/ui/src/components/Context/modalContext.tsx
+++ b/src/services/ui/src/components/Context/modalContext.tsx
@@ -5,6 +5,7 @@ import { ConfirmationModal } from "@/components";
export type SubmissionAlert = {
header: string;
body: string;
+ areButtonsReversed?: boolean;
cancelButtonText?: string;
acceptButtonText?: string;
};
@@ -46,6 +47,7 @@ export const ModalProvider = ({ children }: PropsWithChildren) => {
acceptButtonVisible={context.content.acceptButtonText !== undefined}
cancelButtonText={context.content.cancelButtonText}
acceptButtonText={context.content.acceptButtonText}
+ areButtonsReversed={context.content.areButtonsReversed}
title={context.content.header}
body={context.content.body}
/>
diff --git a/src/services/ui/src/components/Dialog/index.tsx b/src/services/ui/src/components/Dialog/index.tsx
index cd2a77d4e9..9951a5a19c 100644
--- a/src/services/ui/src/components/Dialog/index.tsx
+++ b/src/services/ui/src/components/Dialog/index.tsx
@@ -79,7 +79,7 @@ const DialogFooter = ({
}) => (
(
{icon && (
{icon}
)}
void;
onAccept: () => void;
@@ -26,6 +28,7 @@ export function ConfirmationModal({
open,
description,
title,
+ areButtonsReversed = false,
body,
onAccept,
onCancel,
@@ -42,17 +45,21 @@ export function ConfirmationModal({
{description &&
{description} }
{body &&
{body}
}
-
- {cancelButtonVisible && (
-
- {cancelButtonText}
-
- )}
+
{acceptButtonVisible && (
{acceptButtonText}
)}
+ {cancelButtonVisible && (
+
+ {cancelButtonText}
+
+ )}
diff --git a/src/services/ui/src/components/Opensearch/main/Filtering/Drawer/hooks.ts b/src/services/ui/src/components/Opensearch/main/Filtering/Drawer/hooks.ts
index 7c3d925ac5..af13b2d508 100644
--- a/src/services/ui/src/components/Opensearch/main/Filtering/Drawer/hooks.ts
+++ b/src/services/ui/src/components/Opensearch/main/Filtering/Drawer/hooks.ts
@@ -157,10 +157,12 @@ export const useFilterDrawer = () => {
(STATE, [KEY, AGG]) => {
return {
...STATE,
- [KEY]: AGG.buckets.map((BUCK) => ({
- label: `${labelMap[BUCK.key] || BUCK.key}`,
- value: BUCK.key,
- })),
+ [KEY]: AGG.buckets
+ .map((BUCK) => ({
+ label: `${labelMap[BUCK.key] || BUCK.key}`,
+ value: BUCK.key,
+ }))
+ .sort((a, b) => Intl.Collator("en").compare(a.value, b.value)),
};
},
{} as Record,
diff --git a/src/services/ui/src/consts/index.ts b/src/services/ui/src/consts/index.ts
index 8a0a2525c1..a5588a31c2 100644
--- a/src/services/ui/src/consts/index.ts
+++ b/src/services/ui/src/consts/index.ts
@@ -1,2 +1 @@
export * from "./blank-value";
-export * from "./spa-id-regex";
diff --git a/src/services/ui/src/consts/spa-id-regex.ts b/src/services/ui/src/consts/spa-id-regex.ts
deleted file mode 100644
index ff5716b7a2..0000000000
--- a/src/services/ui/src/consts/spa-id-regex.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const SPA_ID_REGEX = /^[A-Z]{2}-\d{2}-\d{4}(-[A-Z0-9]{1,4})?$/;
diff --git a/src/services/ui/src/features/dashboard/Lists/renderCells/index.tsx b/src/services/ui/src/features/dashboard/Lists/renderCells/index.tsx
index f652d484bf..d547dfedbb 100644
--- a/src/services/ui/src/features/dashboard/Lists/renderCells/index.tsx
+++ b/src/services/ui/src/features/dashboard/Lists/renderCells/index.tsx
@@ -17,15 +17,19 @@ export const renderCellDate = (key: keyof opensearch.main.Document) =>
return formatSeatoolDate(data[key] as string);
};
-export const renderCellIdLink = (pathResolver: (id: string) => string) =>
- function Cell(data: opensearch.main.Document) {
- const path = pathResolver(encodeURIComponent(data.id));
- return (
-
- {data.id}
-
- );
- };
+type CellIdLinkProps = {
+ id: string;
+ authority: Authority;
+};
+
+export const CellDetailsLink = ({ id, authority }: CellIdLinkProps) => (
+
+ {id}
+
+);
export const renderCellActions = (user: CognitoUserAttributes | null) => {
return function Cell(data: opensearch.main.Document) {
diff --git a/src/services/ui/src/features/dashboard/Lists/spas/consts.tsx b/src/services/ui/src/features/dashboard/Lists/spas/consts.tsx
index 6479f7e213..8f907e2640 100644
--- a/src/services/ui/src/features/dashboard/Lists/spas/consts.tsx
+++ b/src/services/ui/src/features/dashboard/Lists/spas/consts.tsx
@@ -3,9 +3,9 @@ import { OsTableColumn } from "@/components";
import { CMS_READ_ONLY_ROLES, UserRoles } from "shared-types";
import { useGetUser } from "@/api";
import {
+ CellDetailsLink,
renderCellActions,
renderCellDate,
- renderCellIdLink,
} from "../renderCells";
import { BLANK_VALUE } from "@/consts";
import { formatSeatoolDate } from "shared-utils";
@@ -35,7 +35,9 @@ export const useSpaTableColumns = (): OsTableColumn[] => {
label: "SPA ID",
locked: true,
transform: (data) => data.id,
- cell: renderCellIdLink((id) => `/details?id=${encodeURIComponent(id)}`),
+ cell: ({ id, authority }) => (
+
+ ),
},
{
field: "state.keyword",
diff --git a/src/services/ui/src/features/dashboard/Lists/waivers/consts.tsx b/src/services/ui/src/features/dashboard/Lists/waivers/consts.tsx
index 8fc95345da..9bb32a2039 100644
--- a/src/services/ui/src/features/dashboard/Lists/waivers/consts.tsx
+++ b/src/services/ui/src/features/dashboard/Lists/waivers/consts.tsx
@@ -4,9 +4,9 @@ import { BLANK_VALUE } from "@/consts";
import { CMS_READ_ONLY_ROLES, UserRoles } from "shared-types";
import { useGetUser } from "@/api";
import {
+ CellDetailsLink,
renderCellActions,
renderCellDate,
- renderCellIdLink,
} from "../renderCells";
import { formatSeatoolDate } from "shared-utils";
@@ -35,7 +35,9 @@ export const useWaiverTableColumns = (): OsTableColumn[] => {
label: "Waiver Number",
locked: true,
transform: (data) => data.id,
- cell: renderCellIdLink((id) => `/details?id=${encodeURIComponent(id)}`),
+ cell: ({ id, authority }) => (
+
+ ),
},
{
field: "state.keyword",
diff --git a/src/services/ui/src/features/package-actions/ActionPage.tsx b/src/services/ui/src/features/package-actions/ActionPage.tsx
index 2a146829f9..72fca89688 100644
--- a/src/services/ui/src/features/package-actions/ActionPage.tsx
+++ b/src/services/ui/src/features/package-actions/ActionPage.tsx
@@ -1,32 +1,19 @@
-import {
- BreadCrumbConfig,
- BreadCrumbs,
- FAQFooter,
- SimplePageContainer,
-} from "@/components";
+import { BreadCrumbs, FAQFooter, SimplePageContainer } from "@/components";
import { useParams } from "@/components/Routing";
import { getSetupFor } from "@/features/package-actions/lib";
import { ActionForm } from "@/features/package-actions/ActionForm";
-import { Action } from "shared-types";
-import { actionCrumb, dashboardCrumb, detailsCrumb } from "@/utils";
-const detailsAndActionsCrumbs = ({
- id,
- action,
-}: {
- id: string;
- action?: Action;
-}): BreadCrumbConfig[] => {
- const base = [dashboardCrumb(id), detailsCrumb(id)];
- return !action ? base : [...base, actionCrumb(action, id)];
-};
+import { detailsAndActionsCrumbs } from "@/utils";
+
export const ActionPage = () => {
const { id, type, authority } = useParams("/action/:authority/:id/:type");
+
return (
diff --git a/src/services/ui/src/features/package-actions/actions-breadcrumbs.ts b/src/services/ui/src/features/package-actions/actions-breadcrumbs.ts
deleted file mode 100644
index cb93aea458..0000000000
--- a/src/services/ui/src/features/package-actions/actions-breadcrumbs.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Action } from "shared-types";
-import { BreadCrumbConfig } from "@/components";
-import { actionCrumb, dashboardCrumb, detailsCrumb } from "@/utils";
-
-export const detailsAndActionsCrumbs = ({
- id,
- action,
-}: {
- id: string;
- action?: Action;
-}): BreadCrumbConfig[] => {
- const base = [dashboardCrumb(id), detailsCrumb(id)];
- return !action ? base : [...base, actionCrumb(action, id)];
-};
diff --git a/src/services/ui/src/features/package-actions/lib/index.ts b/src/services/ui/src/features/package-actions/lib/index.ts
index c540172b1d..1f2b393543 100644
--- a/src/services/ui/src/features/package-actions/lib/index.ts
+++ b/src/services/ui/src/features/package-actions/lib/index.ts
@@ -2,15 +2,17 @@ import { Action, Authority, AuthorityUnion } from "shared-types";
import { getSchemaFor } from "@/features/package-actions/lib/schemaSwitch";
import { getFieldsFor } from "@/features/package-actions/lib/fieldsSwitch";
import { OneMacUser, submit } from "@/api";
-import { buildActionUrl, useOriginPath } from "@/utils";
+import {
+ buildActionUrl,
+ getDashboardTabForAuthority,
+ useOriginPath,
+} from "@/utils";
import { Route, useAlertContext, useNavigate } from "@/components";
import { FieldValues } from "react-hook-form";
import { getContentFor } from "@/features/package-actions/lib/contentSwitch";
import { successCheckSwitch } from "./successCheckSwitch";
import { documentPoller } from "@/utils/Poller/documentPoller";
import { stripQueryStringFromURL } from "@/utils/stripQueryString";
-import { SPA_ID_REGEX } from "@/consts";
-
export type FormSetup = {
schema: ReturnType;
fields: ReturnType;
@@ -35,7 +37,6 @@ export const submitActionForm = async ({
navigate,
originRoute,
statusToCheck,
- locationState,
}: {
data: FieldValues;
id: string;
@@ -54,10 +55,10 @@ export const submitActionForm = async ({
await submit({
data: { ...data, id: id },
endpoint: !actionsThatUseSubmitEndpoint.includes(type)
- ? buildActionUrl(type!) // "/action/{type}"
+ ? buildActionUrl(type) // "/action/{type}"
: "/submit",
user,
- authority: authority,
+ authority,
});
alert.setBannerStyle("success");
alert.setBannerShow(true);
@@ -75,8 +76,7 @@ export const submitActionForm = async ({
navigate({
path: strippedPath.path as Route,
query: {
- ...strippedPath.queryParams,
- tab: SPA_ID_REGEX.test(id) ? "spas" : "waivers",
+ tab: getDashboardTabForAuthority(authority),
},
});
} catch (e: unknown) {
diff --git a/src/services/ui/src/features/package-actions/lib/modules/temporary-extension/legacy-page.tsx b/src/services/ui/src/features/package-actions/lib/modules/temporary-extension/legacy-page.tsx
index 62a99ec9ac..e67de41d93 100644
--- a/src/services/ui/src/features/package-actions/lib/modules/temporary-extension/legacy-page.tsx
+++ b/src/services/ui/src/features/package-actions/lib/modules/temporary-extension/legacy-page.tsx
@@ -78,19 +78,19 @@ export const TempExtensionWrapper = () => {
};
export const TemporaryExtension = () => {
- const { type, id } = useParams();
+ const { id, authority } = useParams<{ id: string; authority: Authority }>();
const navigationLocation = useMemo(
- () => (isNewSubmission() ? "/dashboard?tab=waivers" : `/details?id=${id}`),
- [type],
+ () =>
+ isNewSubmission()
+ ? "/dashboard?tab=waivers"
+ : `/details/${authority}/${id}`,
+ [id, authority],
);
const { handleSubmit, formMethods } = useSubmitForm();
- const { id: urlId } = useParams();
- const formId = formMethods.getValues("originalWaiverNumber");
formMethods.setValue("seaActionType", "Extend");
- const parentId = urlId ? urlId : formId;
useDisplaySubmissionAlert(
"Temporary extension request submitted",
"Your submission has been received.",
diff --git a/src/services/ui/src/features/package-actions/lib/modules/withdraw-package/index.tsx b/src/services/ui/src/features/package-actions/lib/modules/withdraw-package/index.tsx
index 3fd51bcd71..bce70b1e07 100644
--- a/src/services/ui/src/features/package-actions/lib/modules/withdraw-package/index.tsx
+++ b/src/services/ui/src/features/package-actions/lib/modules/withdraw-package/index.tsx
@@ -73,7 +73,7 @@ export const defaultWithdrawPackageContent: FormContentHydrator = (
header: "Withdraw package?",
body: `You are about to withdraw ${document.authority} ${document.id}. Completing this action will conclude the review of this ${document.authority} package. If you are not sure this is the correct action to select, contact your CMS point of contact for assistance.`,
acceptButtonText: "Yes, withdraw package",
- cancelButtonText: "Return to form",
+ cancelButtonText: "Cancel",
},
successBanner: {
header: "Package withdrawn",
diff --git a/src/services/ui/src/features/package/index.tsx b/src/services/ui/src/features/package/index.tsx
index a5907f26b0..b85b122777 100644
--- a/src/services/ui/src/features/package/index.tsx
+++ b/src/services/ui/src/features/package/index.tsx
@@ -1,6 +1,5 @@
import { CardWithTopBorder, ErrorAlert, LoadingSpinner } from "@/components";
-import { useQuery } from "@/hooks";
import { useGetItem, useGetItemCache } from "@/api";
import { BreadCrumbs } from "@/components/BreadCrumb";
import { FC, PropsWithChildren } from "react";
@@ -13,7 +12,8 @@ import { PackageStatusCard } from "./package-status";
import { PackageActionsCard } from "./package-actions";
import { useDetailsSidebarLinks } from "./hooks";
import { Authority } from "shared-types";
-import { detailsAndActionsCrumbs } from "@/features/package-actions/actions-breadcrumbs";
+import { Navigate, useParams } from "react-router-dom";
+import { detailsAndActionsCrumbs } from "@/utils";
export const DetailCardWrapper = ({
title,
@@ -70,13 +70,19 @@ export const DetailsContent: FC<{ id: string }> = ({ id }) => {
};
export const Details = () => {
- const query = useQuery();
- const id = query.get("id") as string;
+ const { id, authority } = useParams<{
+ id: string;
+ authority: Authority;
+ }>();
+
+ if (id === undefined || authority === undefined) {
+ return ;
+ }
return (
-
+
@@ -101,7 +107,7 @@ const DetailsSidebar: FC<{ id: string }> = ({ id }) => {
};
export const usePackageDetailsCache = () => {
- const query = useQuery();
- const id = query.get("id") as string;
+ const { id } = useParams<{ id: string }>();
+
return useGetItemCache(id);
};
diff --git a/src/services/ui/src/features/package/package-details/appk.tsx b/src/services/ui/src/features/package/package-details/appk.tsx
index d2b894d3e9..b7bc700f3c 100644
--- a/src/services/ui/src/features/package/package-details/appk.tsx
+++ b/src/services/ui/src/features/package/package-details/appk.tsx
@@ -3,9 +3,8 @@ import {
LoadingSpinner,
Route,
useAlertContext,
- useModalContext,
} from "@/components";
-import { Authority, SEATOOL_STATUS } from "shared-types";
+import { SEATOOL_STATUS } from "shared-types";
import { useState } from "react";
import * as T from "@/components/Table";
import { Button } from "@/components/Inputs";
@@ -28,11 +27,11 @@ export const AppK = () => {
const onChildRemove = async (id: string) => {
setLoading(true);
- await submission.mutate(
+ submission.mutate(
{
data: { id, appkParentId: cache.data.id },
user,
- authority: cache.data.authority as Authority,
+ authority: cache.data.authority,
endpoint: "/action/remove-appk-child",
},
{
diff --git a/src/services/ui/src/features/submission/spa/chip-intitial.tsx b/src/services/ui/src/features/submission/spa/chip-intitial.tsx
index 0c1c9f9565..58d6b742cb 100644
--- a/src/services/ui/src/features/submission/spa/chip-intitial.tsx
+++ b/src/services/ui/src/features/submission/spa/chip-intitial.tsx
@@ -17,7 +17,6 @@ import {
import * as Inputs from "@/components/Inputs";
import * as Content from "@/components";
import { useGetUser, submit } from "@/api";
-import { Authority } from "shared-types";
import {
zAttachmentOptional,
zAttachmentRequired,
@@ -32,6 +31,7 @@ import { useQuery as useQueryString } from "@/hooks";
import { SlotAdditionalInfo } from "@/features";
import { documentPoller } from "@/utils/Poller/documentPoller";
import { SubmitAndCancelBtnSection } from "../waiver/shared-components";
+import { Authority } from "shared-types";
const formSchema = z.object({
id: zSpaIdSchema,
diff --git a/src/services/ui/src/features/submission/spa/medicaid-initial.tsx b/src/services/ui/src/features/submission/spa/medicaid-initial.tsx
index 0f501e042b..da105f937c 100644
--- a/src/services/ui/src/features/submission/spa/medicaid-initial.tsx
+++ b/src/services/ui/src/features/submission/spa/medicaid-initial.tsx
@@ -1,4 +1,3 @@
-import { useCallback } from "react";
import { useForm, type SubmitHandler } from "react-hook-form";
import { z } from "zod";
import { zodResolver } from "@hookform/resolvers/zod";
@@ -19,7 +18,6 @@ import {
} from "@/components";
import * as Content from "@/components";
import { submit } from "@/api";
-import { Authority } from "shared-types";
import {
zAttachmentOptional,
zAttachmentRequired,
@@ -34,6 +32,7 @@ import { FormField } from "@/components/Inputs";
import { SlotAdditionalInfo } from "@/features";
import { documentPoller } from "@/utils/Poller/documentPoller";
import { SubmitAndCancelBtnSection } from "../waiver/shared-components";
+import { Authority } from "shared-types";
const formSchema = z.object({
id: zSpaIdSchema,
diff --git a/src/services/ui/src/features/submission/waiver/shared-components/SubmitAndCancelBtnSection.tsx b/src/services/ui/src/features/submission/waiver/shared-components/SubmitAndCancelBtnSection.tsx
index 9c8115aca5..7bf33a1f85 100644
--- a/src/services/ui/src/features/submission/waiver/shared-components/SubmitAndCancelBtnSection.tsx
+++ b/src/services/ui/src/features/submission/waiver/shared-components/SubmitAndCancelBtnSection.tsx
@@ -70,6 +70,7 @@ export const SubmitAndCancelBtnSection = ({
body: "All information you've entered on this form will be lost if you leave this page.",
acceptButtonText: "Yes, leave form",
cancelButtonText: "Return to form",
+ areButtonsReversed: true,
});
modal.setOnAccept(() => acceptAction);
modal.setModalOpen(true);
diff --git a/src/services/ui/src/router.tsx b/src/services/ui/src/router.tsx
index 646fabd254..279b31c147 100644
--- a/src/services/ui/src/router.tsx
+++ b/src/services/ui/src/router.tsx
@@ -22,7 +22,7 @@ export const router = createBrowserRouter([
element:
,
loader: F.dashboardLoader(queryClient),
},
- { path: "/details", element:
},
+ { path: "/details/:authority/:id", element:
},
{
path: "/new-submission",
element:
,
diff --git a/src/services/ui/src/utils/crumbs.ts b/src/services/ui/src/utils/crumbs.ts
index 318410f270..dc1e009ebe 100644
--- a/src/services/ui/src/utils/crumbs.ts
+++ b/src/services/ui/src/utils/crumbs.ts
@@ -1,25 +1,61 @@
-import { BreadCrumbConfig, Route, urlEmbedQuery } from "@/components";
-import { SPA_ID_REGEX } from "@/consts";
+import { BreadCrumbConfig, Route } from "@/components";
import { mapActionLabel, mapSubmissionCrumb } from "@/utils";
-import { Action } from "shared-types";
+import { Action, Authority } from "shared-types";
-export const dashboardCrumb = (id?: string): BreadCrumbConfig => {
+type DetailsAndActionsBreadCrumbsArgs = {
+ id: string;
+ authority: Authority;
+ actionType?: Action;
+};
+
+export const getDashboardTabForAuthority = (
+ authority: Authority,
+): "spas" | "waivers" => {
+ switch (authority) {
+ case "CHIP SPA" as Authority:
+ case "Medicaid SPA" as Authority:
+ return "spas";
+ case "1915(b)":
+ case "1915(c)":
+ return "waivers";
+ default:
+ throw new Error("Invalid authority");
+ }
+};
+
+export const detailsAndActionsCrumbs = ({
+ id,
+ authority,
+ actionType,
+}: DetailsAndActionsBreadCrumbsArgs): BreadCrumbConfig[] => {
+ const defaultBreadCrumbs = [
+ dashboardCrumb(authority),
+ detailsCrumb(id, authority),
+ ];
+
+ return actionType
+ ? [...defaultBreadCrumbs, actionCrumb(actionType, id)]
+ : defaultBreadCrumbs;
+};
+
+export const dashboardCrumb = (authority?: Authority): BreadCrumbConfig => {
return {
displayText: "Dashboard",
order: 1,
default: true,
- to: id
- ? urlEmbedQuery("/dashboard", {
- tab: SPA_ID_REGEX.test(id) ? "spas" : "waivers",
- })
+ to: authority
+ ? `/dashboard?tab=${getDashboardTabForAuthority(authority)}`
: "/dashboard",
};
};
-export const detailsCrumb = (id: string): BreadCrumbConfig => ({
+export const detailsCrumb = (
+ id: string,
+ authority: Authority,
+): BreadCrumbConfig => ({
displayText: id,
order: 2,
- to: `/details?id=${id}`,
+ to: `/details/${authority}/${id}`,
});
export const actionCrumb = (action: Action, id: string): BreadCrumbConfig => ({
diff --git a/src/services/ui/src/utils/formOrigin.ts b/src/services/ui/src/utils/formOrigin.ts
index 28e3fc12a7..69292df7e5 100644
--- a/src/services/ui/src/utils/formOrigin.ts
+++ b/src/services/ui/src/utils/formOrigin.ts
@@ -17,12 +17,17 @@ export const originRoute: Record
= {
*/
export const useOriginPath = () => {
const urlQuery = useQueryString();
- const { id } = useParams("/action/:id/:type");
+ const origin = urlQuery.get(ORIGIN) as Origin | null;
+
+ const { id, authority } = useParams("/action/:authority/:id/:type");
+
return useMemo(() => {
- const origin = urlQuery.get(ORIGIN) as Origin | null;
- if (!origin || !originRoute[origin]) return null;
+ if (!origin || !originRoute[origin]) {
+ return null;
+ }
+
return origin === "actionsDetails"
- ? (`${originRoute[origin]}?id=${id}` as Route)
- : (originRoute[origin] as Route);
- }, []);
+ ? `${originRoute[origin]}/${authority}/${id}`
+ : originRoute[origin];
+ }, [authority, id, origin]);
};
diff --git a/src/services/ui/src/utils/index.ts b/src/services/ui/src/utils/index.ts
index 9b3796bca5..dd0644f5ac 100644
--- a/src/services/ui/src/utils/index.ts
+++ b/src/services/ui/src/utils/index.ts
@@ -2,7 +2,6 @@ export * from "./createContextProvider";
export * from "./date";
export * from "./stateNames";
export * from "./textHelpers";
-export * from "./createContextProvider";
export * from "./labelMappers";
export * from "./user";
export * from "./TestWrapper";
diff --git a/yarn.lock b/yarn.lock
index 6616901056..348454c937 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3532,11 +3532,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
-"@esbuild/android-arm64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
- integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
-
"@esbuild/android-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4"
@@ -3547,11 +3542,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
-"@esbuild/android-arm@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
- integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
-
"@esbuild/android-arm@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824"
@@ -3562,11 +3552,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
-"@esbuild/android-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
- integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
-
"@esbuild/android-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d"
@@ -3577,11 +3562,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
-"@esbuild/darwin-arm64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
- integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
-
"@esbuild/darwin-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e"
@@ -3592,11 +3572,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
-"@esbuild/darwin-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
- integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
-
"@esbuild/darwin-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd"
@@ -3607,11 +3582,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
-"@esbuild/freebsd-arm64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
- integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
-
"@esbuild/freebsd-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487"
@@ -3622,11 +3592,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
-"@esbuild/freebsd-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
- integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
-
"@esbuild/freebsd-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c"
@@ -3637,11 +3602,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
-"@esbuild/linux-arm64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
- integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
-
"@esbuild/linux-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b"
@@ -3652,11 +3612,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
-"@esbuild/linux-arm@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
- integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
-
"@esbuild/linux-arm@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef"
@@ -3667,11 +3622,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
-"@esbuild/linux-ia32@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
- integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
-
"@esbuild/linux-ia32@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601"
@@ -3682,11 +3632,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
-"@esbuild/linux-loong64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
- integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
-
"@esbuild/linux-loong64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299"
@@ -3697,11 +3642,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
-"@esbuild/linux-mips64el@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
- integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
-
"@esbuild/linux-mips64el@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec"
@@ -3712,11 +3652,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
-"@esbuild/linux-ppc64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
- integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
-
"@esbuild/linux-ppc64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8"
@@ -3727,11 +3662,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
-"@esbuild/linux-riscv64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
- integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
-
"@esbuild/linux-riscv64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf"
@@ -3742,11 +3672,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
-"@esbuild/linux-s390x@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
- integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
-
"@esbuild/linux-s390x@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8"
@@ -3757,11 +3682,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
-"@esbuild/linux-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
- integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
-
"@esbuild/linux-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78"
@@ -3772,11 +3692,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
-"@esbuild/netbsd-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
- integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
-
"@esbuild/netbsd-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b"
@@ -3787,11 +3702,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
-"@esbuild/openbsd-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
- integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
-
"@esbuild/openbsd-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0"
@@ -3802,11 +3712,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
-"@esbuild/sunos-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
- integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
-
"@esbuild/sunos-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30"
@@ -3817,11 +3722,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
-"@esbuild/win32-arm64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
- integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
-
"@esbuild/win32-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae"
@@ -3832,11 +3732,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
-"@esbuild/win32-ia32@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
- integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
-
"@esbuild/win32-ia32@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67"
@@ -3847,11 +3742,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
-"@esbuild/win32-x64@0.18.20":
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
- integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
-
"@esbuild/win32-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae"
@@ -9290,34 +9180,6 @@ es6-weak-map@^2.0.3:
es6-iterator "^2.0.3"
es6-symbol "^3.1.1"
-esbuild@^0.18.10:
- version "0.18.20"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
- integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
- optionalDependencies:
- "@esbuild/android-arm" "0.18.20"
- "@esbuild/android-arm64" "0.18.20"
- "@esbuild/android-x64" "0.18.20"
- "@esbuild/darwin-arm64" "0.18.20"
- "@esbuild/darwin-x64" "0.18.20"
- "@esbuild/freebsd-arm64" "0.18.20"
- "@esbuild/freebsd-x64" "0.18.20"
- "@esbuild/linux-arm" "0.18.20"
- "@esbuild/linux-arm64" "0.18.20"
- "@esbuild/linux-ia32" "0.18.20"
- "@esbuild/linux-loong64" "0.18.20"
- "@esbuild/linux-mips64el" "0.18.20"
- "@esbuild/linux-ppc64" "0.18.20"
- "@esbuild/linux-riscv64" "0.18.20"
- "@esbuild/linux-s390x" "0.18.20"
- "@esbuild/linux-x64" "0.18.20"
- "@esbuild/netbsd-x64" "0.18.20"
- "@esbuild/openbsd-x64" "0.18.20"
- "@esbuild/sunos-x64" "0.18.20"
- "@esbuild/win32-arm64" "0.18.20"
- "@esbuild/win32-ia32" "0.18.20"
- "@esbuild/win32-x64" "0.18.20"
-
esbuild@^0.19.3:
version "0.19.12"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04"
@@ -13781,7 +13643,7 @@ postcss@8.4.31:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.4.23, postcss@^8.4.27, postcss@^8.4.31:
+postcss@^8.4.23, postcss@^8.4.31:
version "8.4.38"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
@@ -14491,13 +14353,6 @@ rimraf@~2.2.8:
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
integrity sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==
-rollup@^3.27.1:
- version "3.29.4"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
- integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
- optionalDependencies:
- fsevents "~2.3.2"
-
rollup@^4.13.0:
version "4.18.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda"
@@ -15233,7 +15088,16 @@ strict-event-emitter@^0.5.1:
resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93"
integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==
-"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -15311,7 +15175,14 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -16329,17 +16200,6 @@ vite-plugin-radar@^0.9.2:
resolved "https://registry.yarnpkg.com/vite-plugin-radar/-/vite-plugin-radar-0.9.3.tgz#c184897aa8c057fa845f1033a2f977011a8b7c70"
integrity sha512-o/7F0gHQW9yUxpExXYwQLxFYOSxiWIPs3Uh24sg+wl5ikghzLKMQ2Xldak/rsT0o06rzdrAqP9+XSOwfCbwz2Q==
-vite@^4.2.0:
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.3.tgz#d88a4529ea58bae97294c7e2e6f0eab39a50fb1a"
- integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==
- dependencies:
- esbuild "^0.18.10"
- postcss "^8.4.27"
- rollup "^3.27.1"
- optionalDependencies:
- fsevents "~2.3.2"
-
vite@^5.0.0:
version "5.3.3"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2"
@@ -16351,6 +16211,17 @@ vite@^5.0.0:
optionalDependencies:
fsevents "~2.3.3"
+vite@^5.3.5:
+ version "5.3.5"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.5.tgz#b847f846fb2b6cb6f6f4ed50a830186138cb83d8"
+ integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==
+ dependencies:
+ esbuild "^0.21.3"
+ postcss "^8.4.39"
+ rollup "^4.13.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
vitest@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.0.2.tgz#39a4bde8af124c848b4e9098ca339914ebe10ef9"
@@ -16546,7 +16417,7 @@ wordwrap@^1.0.0:
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -16564,6 +16435,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"