diff --git a/submit-api/src/submit_api/models/queries/project.py b/submit-api/src/submit_api/models/queries/project.py index 659c3406..cb5dc498 100644 --- a/submit-api/src/submit_api/models/queries/project.py +++ b/submit-api/src/submit_api/models/queries/project.py @@ -40,7 +40,7 @@ def get_projects_by_account_id(cls, account_id: int, search_options: AccountProj ).join(AccountProject.project) # Apply search filters if provided - if search_options: + if search_options and any(bool(search_option) for search_option in search_options.__dict__.values()): query = cls.filter_by_search_criteria(query, search_options) return query.all() diff --git a/submit-api/src/submit_api/resources/project.py b/submit-api/src/submit_api/resources/project.py index de2ddde6..62bb4bb6 100644 --- a/submit-api/src/submit_api/resources/project.py +++ b/submit-api/src/submit_api/resources/project.py @@ -72,6 +72,23 @@ def get(account_id): projects = ProjectService.get_projects_by_account_id(account_id, search_options) return AccountProjectSchema(many=True).dump(projects), HTTPStatus.OK + @staticmethod + @ApiHelper.swagger_decorators(API, endpoint_description="Add projects in bulk") + @API.expect(project_add_list) + @API.response( + code=HTTPStatus.CREATED, model=project_list_model, description="Added projects" + ) + @API.response(HTTPStatus.BAD_REQUEST, "Bad Request") + @auth.require + @cors.crossdomain(origin="*") + def post(account_id): + """Add projects in bulk.""" + projects_data = AddProjectSchema().load(API.payload) + added_projects = ProjectService.bulk_add_projects( + account_id, projects_data.get("project_ids") + ) + return ProjectSchema(many=True).dump(added_projects), HTTPStatus.CREATED + @cors_preflight("GET, OPTIONS, POST") @API.route("/proponents/", methods=["POST", "GET", "OPTIONS"]) diff --git a/submit-web/src/components/DocumentUpload/DocumentTable.tsx b/submit-web/src/components/DocumentUpload/DocumentTable.tsx new file mode 100644 index 00000000..e6239ffe --- /dev/null +++ b/submit-web/src/components/DocumentUpload/DocumentTable.tsx @@ -0,0 +1,87 @@ +import { + Box, + Table, + TableBody, + TableContainer, + TableHead, + TableRow, + Typography, +} from "@mui/material"; +import { BCDesignTokens } from "epic.theme"; +import { StyledTableHeadCell } from "../Shared/Table/common"; +import { Submission } from "@/models/Submission"; +import DocumentTableRow, { + StyledHeadTableCell, + DocumentHeadTableRow, +} from "./DocumentTableRow"; +import { Document } from "@/store/documentUploadStore"; +import PendingDocumentRow from "./PendingDocumentRow"; + +export default function DocumentTable({ + header, + documents, + pendingDocuments, +}: { + header: string; + documents: Array; + pendingDocuments: Array; +}) { + return ( + + + + + + + Form/Document + + + Uploaded by + Version + Actions + + + + + + + {header} + + + + {documents?.map((document) => ( + + ))} + {pendingDocuments?.map((document) => ( + + ))} + +
+
+ ); +} diff --git a/submit-web/src/components/DocumentUpload/DocumentTableRow.tsx b/submit-web/src/components/DocumentUpload/DocumentTableRow.tsx new file mode 100644 index 00000000..7e85fd3e --- /dev/null +++ b/submit-web/src/components/DocumentUpload/DocumentTableRow.tsx @@ -0,0 +1,167 @@ +import React, { useState } from "react"; +import { + Link as MuiLink, + styled, + TableCell, + TableRow, + TableRowProps, + Typography, +} from "@mui/material"; +import { BCDesignTokens } from "epic.theme"; +import { downloadObject } from "@/hooks/api/useObjectStorage"; +import { notify } from "../Shared/Snackbar/snackbarStore"; + +export const StyledHeadTableCell = styled(TableCell)<{ error?: boolean }>( + ({ error }) => ({ + borderTop: error + ? `1px solid ${BCDesignTokens.supportBorderColorDanger}` + : `1px solid ${BCDesignTokens.themeBlue20}`, + borderBottom: error + ? `1px solid ${BCDesignTokens.supportBorderColorDanger}` + : `1px solid ${BCDesignTokens.themeBlue20}`, + padding: `${BCDesignTokens.layoutPaddingXsmall} !important`, + "&:first-of-type": { + borderLeft: error + ? `1px solid ${BCDesignTokens.supportBorderColorDanger}` + : `1px solid ${BCDesignTokens.themeBlue20}`, + borderTopLeftRadius: 5, + borderBottomLeftRadius: 5, + }, + "&:last-of-type": { + borderRight: error + ? `1px solid ${BCDesignTokens.supportBorderColorDanger}` + : `1px solid ${BCDesignTokens.themeBlue20}`, + borderTopRightRadius: 5, + borderBottomRightRadius: 5, + }, + }) +); + +export const DocumentHeadTableRow = styled(TableRow)<{ error?: boolean }>( + ({ error }) => ({ + backgroundColor: error + ? BCDesignTokens.supportSurfaceColorDanger + : BCDesignTokens.themeBlue10, + "&:hover": { + backgroundColor: BCDesignTokens.themeBlue40, + }, + }) +); + +export const DocumentTableCell = styled(TableCell)(() => ({ + borderTop: `1px solid ${BCDesignTokens.themeBlue20}`, + borderBottom: `1px solid ${BCDesignTokens.themeBlue20}`, + padding: `${BCDesignTokens.layoutPaddingXsmall} !important`, + "&:first-of-type": { + borderLeft: `1px solid ${BCDesignTokens.themeBlue20}`, + borderTopLeftRadius: 5, + borderBottomLeftRadius: 5, + }, + "&:last-of-type": { + borderRight: `1px solid ${BCDesignTokens.themeBlue20}`, + borderTopRightRadius: 5, + borderBottomRightRadius: 5, + }, +})); + +const StyledTableRow = styled(TableRow)(() => ({})); + +type StyledTableRowProps = TableRowProps & { error?: boolean }; +export const PackageTableRow = ({ + error, + children, + ...otherProps +}: StyledTableRowProps) => { + // pass error to every child + const childrenWithProps = React.Children.map(children, (child) => + React.isValidElement(child) + ? React.cloneElement(child, { error } as any) // eslint-disable-line @typescript-eslint/no-explicit-any + : child + ); + + return ( + + {childrenWithProps} + + ); +}; + +type DocumentTableRowProps = { + documentItem: { + id: number; + name: string; + submitted_by: string; + version: number; + url: string; + }; + error?: boolean; +}; +export default function DocumentTableRow({ + documentItem, + error = false, +}: DocumentTableRowProps) { + const { name, submitted_by, version, url } = documentItem; + + const onActionClick = () => {}; + const [pendingGetObject, setPendingGetObject] = useState(false); + + const getObjectFromS3 = async () => { + try { + if (pendingGetObject) return; + setPendingGetObject(true); + const response = await downloadObject({ + filename: name, + s3sourceuri: url, + }); + const linkUrl = window.URL.createObjectURL(new Blob([response.data])); + const link = document.createElement("a"); + link.href = linkUrl; + link.setAttribute("download", name); + document.body.appendChild(link); + link.click(); + } catch (e) { + notify.error("Failed to download documentItem"); + } finally { + setPendingGetObject(false); + } + }; + + return ( + + + + + {name} + + + + {submitted_by} + {version} + + + Remove + + + + ); +} diff --git a/submit-web/src/components/DocumentUpload/PendingDocumentRow.tsx b/submit-web/src/components/DocumentUpload/PendingDocumentRow.tsx new file mode 100644 index 00000000..e01cfa56 --- /dev/null +++ b/submit-web/src/components/DocumentUpload/PendingDocumentRow.tsx @@ -0,0 +1,114 @@ +import { CircularProgress, Link as MuiLink, Typography } from "@mui/material"; +import { BCDesignTokens } from "epic.theme"; +import { PackageTableRow, DocumentTableCell } from "./DocumentTableRow"; +import { createSubmission } from "@/hooks/api/useSubmissions"; +import { SUBMISSION_TYPE } from "@/models/Submission"; +import { QUERY_KEY } from "@/hooks/api/constants"; +import { notify } from "../Shared/Snackbar/snackbarStore"; +import { useEffect } from "react"; +import { saveObject } from "@/hooks/api/useObjectStorage"; +import { useDocumentUploadStore } from "@/store/documentUploadStore"; +import { useQueryClient } from "@tanstack/react-query"; +import { useParams } from "@tanstack/react-router"; +import { Document } from "@/store/documentUploadStore"; + +type DocumentTableRowProps = { + documentItem: Document; + error?: boolean; +}; +export default function PendingDocumentRow({ + documentItem, + error = false, +}: DocumentTableRowProps) { + const { submissionId: subItemId } = useParams({ + from: "/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/submissions/$submissionId", + }); + + const queryClient = useQueryClient(); + + const { triggerPending, completeDocument, removeDocument } = + useDocumentUploadStore(); + + useEffect(() => { + triggerPending(documentItem.id); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const uploadObject = async () => { + try { + const uploadedFile = await saveObject({ + file: documentItem.file, + fileDetails: { + filename: documentItem.file.name, + }, + }); + + const documentData = { + name: documentItem.file.name, + url: uploadedFile.filepath, + folder: documentItem.folder, + }; + const documentSubmission = await createSubmission(Number(subItemId), { + type: SUBMISSION_TYPE.DOCUMENT, + data: documentData, + }); + + completeDocument(documentItem.id, documentSubmission.id); + queryClient.invalidateQueries({ + queryKey: [QUERY_KEY.SUBMISSION_ITEM, documentSubmission.item_id], + }); + } catch (error) { + notify.error("Failed to upload document"); + removeDocument(documentItem.id); + } + }; + + useEffect(() => { + if (documentItem.pending) { + uploadObject(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [documentItem.pending]); + + const onActionClick = () => {}; + + return ( + + + + + {documentItem.file.name} + + + + + + + + + Remove + + + + ); +} diff --git a/submit-web/src/components/PackageStatusChip/index.tsx b/submit-web/src/components/PackageStatusChip/index.tsx index 0b23c544..4d54f735 100644 --- a/submit-web/src/components/PackageStatusChip/index.tsx +++ b/submit-web/src/components/PackageStatusChip/index.tsx @@ -12,6 +12,7 @@ const statusStyles: Record = { borderRadius: 1, border: `2px solid ${BCDesignTokens.supportBorderColorSuccess}`, background: BCDesignTokens.supportSurfaceColorSuccess, + height: "24px", }, label: "Approved", }, @@ -20,6 +21,7 @@ const statusStyles: Record = { borderRadius: 1, border: `1px solid ${BCDesignTokens.themeBlue100}`, background: BCDesignTokens.themeBlue20, + height: "24px", }, label: "In Review", }, @@ -34,6 +36,7 @@ const statusStyles: Record = { borderRadius: 1, border: `1px solid ${BCDesignTokens.supportBorderColorInfo}`, background: BCDesignTokens.themeBlue20, + height: "24px", }, label: "Submitted", }, @@ -42,6 +45,7 @@ const statusStyles: Record = { borderRadius: 1, border: `1px solid ${BCDesignTokens.supportBorderColorSuccess}`, background: BCDesignTokens.supportSurfaceColorSuccess, + height: "24px", }, label: "Completed", }, @@ -61,7 +65,7 @@ const statusStyles: Record = { background: EAOColors.DecisionLight, height: "24px", }, - label: "New Submission", + label: "New", }, }; diff --git a/submit-web/src/components/SubmissionItem/ConsultationRecord/DocumentUploadSection.tsx b/submit-web/src/components/SubmissionItem/ConsultationRecord/DocumentUploadSection.tsx index 643d60bc..9dbd7c10 100644 --- a/submit-web/src/components/SubmissionItem/ConsultationRecord/DocumentUploadSection.tsx +++ b/submit-web/src/components/SubmissionItem/ConsultationRecord/DocumentUploadSection.tsx @@ -2,8 +2,6 @@ import { useEffect } from "react"; import { Box, Divider, Grid, Typography } from "@mui/material"; import { BCDesignTokens, EAOColors } from "epic.theme"; import { useDocumentUploadStore } from "@/store/documentUploadStore"; -import DocumentContainer from "../ManagementPlanSubmission/DocumentContainer"; -import DocumentToUploadContainer from "../DocumentToUploadContainer"; import { When } from "react-if"; import { Navigate, useParams } from "@tanstack/react-router"; import { notify } from "@/components/Shared/Snackbar/snackbarStore"; @@ -12,6 +10,7 @@ import { ControlledFileUpload } from "@/components/Shared/controlled/ControlledF import { CONSULTATION_RECORD_DOCUMENT_FOLDERS } from "./constants"; import { useQueryClient } from "@tanstack/react-query"; import { SubmissionItem } from "@/models/SubmissionItem"; +import DocumentTable from "@/components/DocumentUpload/DocumentTable"; export const DocumentUploadSection = () => { const { submissionId: submissionItemId } = useParams({ @@ -21,7 +20,7 @@ export const DocumentUploadSection = () => { const queryClient = useQueryClient(); const submissionItem = queryClient.getQueryData([ "item", - submissionItemId, + Number(submissionItemId), ]); const { reset, handleAddDocuments, documents } = useDocumentUploadStore(); @@ -35,7 +34,7 @@ export const DocumentUploadSection = () => { const handleOnDrop = (acceptedFiles: File[]) => { handleAddDocuments( acceptedFiles[0], - CONSULTATION_RECORD_DOCUMENT_FOLDERS.CONSULTATION_RECORDS, + CONSULTATION_RECORD_DOCUMENT_FOLDERS.CONSULTATION_RECORDS ); }; @@ -45,17 +44,17 @@ export const DocumentUploadSection = () => { } const documentSubmissions = submissionItem?.submissions.filter( - (submission) => submission.type === SUBMISSION_TYPE.DOCUMENT, + (submission) => submission.type === SUBMISSION_TYPE.DOCUMENT ); const documentSubmissionIds = documentSubmissions?.map( - (submission) => submission.id, + (submission) => submission.id ); const pendingDocuments = documents.filter( (document) => !document.submissionId || - !documentSubmissionIds?.includes(document.submissionId), + !documentSubmissionIds?.includes(document.submissionId) ); return ( @@ -108,31 +107,19 @@ export const DocumentUploadSection = () => { > Accepted file types: pdf, doc, docx, xlsx. Max. file size: 250 MB. - - - - {documentSubmissions?.map((docSub) => ( - + - ))} - - - - {pendingDocuments.map((document) => ( - - ))} + + ); diff --git a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/DocumentUploadSection.tsx b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/DocumentUploadSection.tsx index c1e7563f..6256bf96 100644 --- a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/DocumentUploadSection.tsx +++ b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/DocumentUploadSection.tsx @@ -2,16 +2,16 @@ import { useEffect } from "react"; import { Box, Divider, Grid, Typography } from "@mui/material"; import { BCDesignTokens, EAOColors } from "epic.theme"; import { useDocumentUploadStore } from "@/store/documentUploadStore"; -import DocumentContainer from "./DocumentContainer"; import { When } from "react-if"; import { Navigate, useParams } from "@tanstack/react-router"; import { notify } from "@/components/Shared/Snackbar/snackbarStore"; import { SUBMISSION_TYPE } from "@/models/Submission"; -import DocumentToUploadContainer from "../DocumentToUploadContainer"; import { ControlledFileUpload } from "@/components/Shared/controlled/ControlledFileUpload"; import { MANAGEMENT_PLAN_DOCUMENT_FOLDERS } from "./constants"; import { useQueryClient } from "@tanstack/react-query"; import { SubmissionItem } from "@/models/SubmissionItem"; +import DocumentTable from "@/components/DocumentUpload/DocumentTable"; +import { QUERY_KEY } from "@/hooks/api/constants"; export const DocumentUploadSection = () => { const { submissionId: submissionItemId } = useParams({ @@ -20,8 +20,8 @@ export const DocumentUploadSection = () => { const queryClient = useQueryClient(); const submissionItem = queryClient.getQueryData([ - "item", - submissionItemId, + QUERY_KEY.SUBMISSION_ITEM, + Number(submissionItemId), ]); const { reset, handleAddDocuments, documents } = useDocumentUploadStore(); @@ -42,40 +42,41 @@ export const DocumentUploadSection = () => { } const documentSubmissions = submissionItem?.submissions.filter( - (submission) => submission.type === SUBMISSION_TYPE.DOCUMENT, + (submission) => submission.type === SUBMISSION_TYPE.DOCUMENT ); const documentSubmissionIds = documentSubmissions?.map( - (submission) => submission.id, + (submission) => submission.id ); const managementPlanDocuments = documentSubmissions?.filter( (submission) => submission.submitted_document.folder === - MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN, + MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN ); const supportingDocuments = documentSubmissions?.filter( (submission) => submission.submitted_document.folder === - MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING, + MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING ); const pendingDocuments = documents.filter( (document) => !document.submissionId || - !documentSubmissionIds?.includes(document.submissionId), + !documentSubmissionIds?.includes(document.submissionId) ); const pendingManagementPlanDocuments = pendingDocuments.filter( (document) => - document.folder === MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN, + document.folder === MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN ); const pendingSupportingDocuments = pendingDocuments.filter( (document) => - document.folder === MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING, + document.folder === MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING ); + return ( @@ -119,7 +120,7 @@ export const DocumentUploadSection = () => { onDrop={(acceptedFiles) => handleOnDrop( acceptedFiles, - MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN, + MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN ) } /> @@ -131,31 +132,21 @@ export const DocumentUploadSection = () => { > Accepted file types: pdf, doc, docx, xlsx. Max. file size: 250 MB. - - - - {managementPlanDocuments?.map((docSub) => ( - + - ))} - - - - {pendingManagementPlanDocuments.map((document) => ( - - ))} + + @@ -180,7 +171,7 @@ export const DocumentUploadSection = () => { onDrop={(acceptedFiles) => handleOnDrop( acceptedFiles, - MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING, + MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING ) } /> @@ -192,31 +183,20 @@ export const DocumentUploadSection = () => { > Accepted file types: pdf, doc, docx, xlsx. Max. file size: 250 MB. - - - - {supportingDocuments?.map((docSub) => ( - + - ))} - - - - {pendingSupportingDocuments.map((document) => ( - - ))} + + ); diff --git a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/index.tsx b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/index.tsx index 77754278..897f753e 100644 --- a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/index.tsx +++ b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/index.tsx @@ -27,6 +27,7 @@ import { booleanToString, stringToBoolean } from "@/utils"; import Form from "@/components/Shared/Forms/common"; import { useQueryClient } from "@tanstack/react-query"; import { SubmissionItem } from "@/models/SubmissionItem"; +import { QUERY_KEY } from "@/hooks/api/constants"; const managementPlanSubmissionSchema = yup.object().shape({ conditionSatisfied: yup.string().required("Please answer this question."), @@ -65,12 +66,12 @@ export const ManagementPlanSubmission = () => { const queryClient = useQueryClient(); const submissionItem = queryClient.getQueryData([ - "item", + QUERY_KEY.SUBMISSION_ITEM, Number(submissionItemId), ]); const formSubmission = submissionItem?.submissions.find( - (submission) => submission.type === SUBMISSION_TYPE.FORM, + (submission) => submission.type === SUBMISSION_TYPE.FORM ); const defaultFormValues = useMemo(() => { if (!formSubmission?.submitted_form?.submission_json) return {}; @@ -78,22 +79,22 @@ export const ManagementPlanSubmission = () => { return { ...formSubmission.submitted_form.submission_json, conditionSatisfied: booleanToString( - formSubmission.submitted_form.submission_json.conditionSatisfied, + formSubmission.submitted_form.submission_json.conditionSatisfied ), allRequirementsAddressed: booleanToString( - formSubmission.submitted_form.submission_json.allRequirementsAddressed, + formSubmission.submitted_form.submission_json.allRequirementsAddressed ), requirementsClear: booleanToString( - formSubmission.submitted_form.submission_json.requirementsClear, + formSubmission.submitted_form.submission_json.requirementsClear ), informationAccurate: booleanToString( - formSubmission.submitted_form.submission_json.informationAccurate, + formSubmission.submitted_form.submission_json.informationAccurate ), }; }, [formSubmission]); const documentSubmissions = submissionItem?.submissions?.filter( - (submission) => submission.type === SUBMISSION_TYPE.DOCUMENT, + (submission) => submission.type === SUBMISSION_TYPE.DOCUMENT ); const defaultDocumentValues = useMemo(() => { if (!documentSubmissions) return {}; @@ -103,14 +104,14 @@ export const ManagementPlanSubmission = () => { .filter( (submission) => submission.submitted_document.folder === - MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN, + MANAGEMENT_PLAN_DOCUMENT_FOLDERS.MANAGEMENT_PLAN ) .map((submission) => submission.submitted_document.url), supportingDocuments: documentSubmissions .filter( (submission) => submission.submitted_document.folder === - MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING, + MANAGEMENT_PLAN_DOCUMENT_FOLDERS.SUPPORTING ) .map((submission) => submission.submitted_document.url), }; @@ -161,7 +162,7 @@ export const ManagementPlanSubmission = () => { const saveSubmission = async ( formData: ManagementPlanSubmissionForm, - status: SubmissionStatus, + status: SubmissionStatus ) => { const { conditionSatisfied, diff --git a/submit-web/src/routes/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/index.tsx b/submit-web/src/routes/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/index.tsx index 159363ff..1747cd3d 100644 --- a/submit-web/src/routes/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/index.tsx +++ b/submit-web/src/routes/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/index.tsx @@ -29,7 +29,7 @@ import { PackageStatusChipStack } from "@/components/PackageStatusChip/PackageSt import { usePackageTableStore } from "@/components/Submission/packageTableStore"; export const Route = createFileRoute( - "/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/", + "/_authenticated/_dashboard/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/" )({ component: SubmissionPage, }); @@ -75,7 +75,7 @@ export default function SubmissionPage() { if ( submissionPackage.items.some( - (item) => item.status !== SUBMISSION_STATUS.COMPLETED.value, + (item) => item.status !== SUBMISSION_STATUS.COMPLETED.value ) ) { setIsValidating(true); @@ -95,7 +95,7 @@ export default function SubmissionPage() { } const isPackageSubmitted = submissionPackage.status.includes( - PACKAGE_STATUS.SUBMITTED.value, + PACKAGE_STATUS.SUBMITTED.value ); return ( @@ -192,7 +192,7 @@ export default function SubmissionPage() { loading={isSubmittingPackage} disabled={isPackageSubmitted} > - Submit Management Plan + Submit to EAO