Skip to content

Commit

Permalink
Merge pull request #208 from jadmsaadaot/SUBMIT-task#258-B
Browse files Browse the repository at this point in the history
Update Request - Add status badge for the package and the submission items
  • Loading branch information
jadmsaadaot authored Dec 23, 2024
2 parents d9b13ab + bc885cf commit 00f94f6
Show file tree
Hide file tree
Showing 17 changed files with 121 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import {
NON_CANONICAL_PACKAGE_STATUS,
NonCanonicalPackageStatus,
PackageStatus,
SubmissionPackage,
} from "@/models/Package";
import { Box, Stack } from "@mui/material";
import PackageStatusChip from ".";
import { When } from "react-if";

type PackageStatusChipStackProps = {
status: PackageStatus[];
reviewStatus?: NonCanonicalPackageStatus;
submissionPackage: SubmissionPackage;
hideReviewStatus?: boolean;
};
export const PackageStatusChipStack = ({
status,
reviewStatus,
submissionPackage,
hideReviewStatus = false,
}: PackageStatusChipStackProps) => {
const { status, review_status } = submissionPackage;
const isUpdateRequested = submissionPackage.update_requests?.length > 0;
return (
<Box sx={{ display: "inline-block", width: "fit-content" }}>
<Stack direction="column" spacing={1} alignItems={"flex-end"}>
Expand All @@ -23,13 +24,20 @@ export const PackageStatusChipStack = ({
))}
<When
condition={
reviewStatus === NON_CANONICAL_PACKAGE_STATUS.PENDING_MANAGER_REVIEW
review_status ===
NON_CANONICAL_PACKAGE_STATUS.PENDING_MANAGER_REVIEW &&
!hideReviewStatus
}
>
<PackageStatusChip
status={NON_CANONICAL_PACKAGE_STATUS.PENDING_MANAGER_REVIEW}
/>
</When>
<When condition={isUpdateRequested}>
<PackageStatusChip
status={NON_CANONICAL_PACKAGE_STATUS.UPDATE_REQUESTED}
/>
</When>
</Stack>
</Box>
);
Expand Down
10 changes: 10 additions & 0 deletions submit-web/src/components/PackageStatusChip/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,16 @@ const statusStyles: Record<
},
label: "Passed Consultation Check",
},
UPDATE_REQUESTED: {
sx: {
borderRadius: 1,
border: `1px solid #F18A15`,
background: "#FFDEB8",
height: "24px",
width: "140px",
},
label: "Update Requested",
},
};

export default function PackageStatusChip({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ export default function ProponentTableRow({ subPackage }: ProjectRowProps) {
{subPackage.submitted_by ?? "--"}
</StyledProjectTableCell>
<StyledProjectTableCell align="center">
<PackageStatusChipStack status={subPackage.status} />
<PackageStatusChipStack
submissionPackage={subPackage}
hideReviewStatus
/>
</StyledProjectTableCell>
</StyledProjectTableRow>
<EmptyRow colSpan={4} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ export default function StaffTableRow({ submissionPackage }: ProjectRowProps) {
name,
meta,
days_since_submission = 0,
review_status,
submitted_on,
status,
} = submissionPackage;

const { cc_completed_on, mp_review, type } = meta || {};
Expand Down Expand Up @@ -126,10 +124,7 @@ export default function StaffTableRow({ submissionPackage }: ProjectRowProps) {
pr: BCDesignTokens.layoutPaddingSmall,
}}
>
<PackageStatusChipStack
status={status}
reviewStatus={review_status}
/>
<PackageStatusChipStack submissionPackage={submissionPackage} />
</StyledProjectTableCell>
</StyledProjectTableRow>
<EmptyRow colSpan={7} />
Expand Down
1 change: 1 addition & 0 deletions submit-web/src/components/Shared/CheckboxGroup/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ type CheckboxGroupProps = {
defaultSelectedValues?: unknown[];
children: React.ReactNode;
onChange: (selectedValues: unknown[]) => void;
errorMessage?: string;
};
export const CheckboxGroup = ({
onChange,
Expand Down
27 changes: 19 additions & 8 deletions submit-web/src/components/Submission/ItemsTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,33 @@ import {
} from "@mui/material";
import { BCDesignTokens } from "epic.theme";
import SubmissionItemTableRow from "./SubmissionItemTableRow";
import {
SUBMISSION_ITEM_METHOD,
SubmissionItem,
} from "@/models/SubmissionItem";
import { SUBMISSION_ITEM_METHOD } from "@/models/SubmissionItem";
import { StyledTableHeadCell } from "../Shared/Table/common";
import { SUBMISSION_STATUS, SUBMISSION_TYPE } from "@/models/Submission";
import { usePackageTableStore } from "./packageTableStore";
import { useAccount } from "@/store/accountStore";
import { USER_TYPE } from "@/models/User";
import { When } from "react-if";
import InternalDocumentsRows from "../SubmissionItem/InternalDocuments/Rows";
import { SubmissionPackage } from "@/models/Package";
import { useMemo } from "react";

export default function ItemsTable({
submissionItems,
submissionPackage,
}: {
submissionItems: Array<SubmissionItem>;
submissionPackage: SubmissionPackage;
}) {
const { items: submissionItems, update_requests } = submissionPackage;

const itemUpdateRequestMap = useMemo(() => {
return update_requests
.flatMap((update_request) => update_request.submission_item_ids)
.reduce((acc: { [key: number]: boolean }, id) => {
acc[id] = true;
return acc;
}, {});
}, [update_requests]);

const { userType } = useAccount();

const { isValidating } = usePackageTableStore();
Expand All @@ -37,15 +47,16 @@ export default function ItemsTable({
submitted_by: subItem?.submitted_by,
version: subItem.version,
submissions: subItem.submissions.filter(
(submission) => submission.type === SUBMISSION_TYPE.DOCUMENT
(submission) => submission.type === SUBMISSION_TYPE.DOCUMENT,
),
has_document:
subItem.type.submission_method === SUBMISSION_ITEM_METHOD.DOCUMENT_UPLOAD,
reviewStatus: subItem.review?.status,
isUpdateRequest: Boolean(itemUpdateRequestMap[subItem.id]),
}));

const internalStaffDocuments = submissionItems.flatMap(
(item) => item.internal_staff_documents ?? []
(item) => item.internal_staff_documents ?? [],
);

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,15 @@ export default function StaffSubmissionItemTableRow({
}: SubmissionItemTableRowProps) {
const { projectId, submissionPackageId } = useParams({ strict: false });
const navigate = useNavigate();
const { name, submissions, has_document, id, status, reviewStatus } = item;
const {
name,
submissions,
has_document,
id,
status,
reviewStatus,
isUpdateRequest,
} = item;

const actionLabel = has_document ? "Review" : "View";

Expand Down Expand Up @@ -59,6 +67,7 @@ export default function StaffSubmissionItemTableRow({
<SubmissionStatusChipStack
status={status}
reviewStatus={reviewStatus}
isUpdateRequested={isUpdateRequest}
/>
</SubmissionItemTableCell>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { LoadingButton } from "@/components/Shared/LoadingButton";
import { SubmissionPackage } from "@/models/Package";
import { CheckboxGroup } from "@/components/Shared/CheckboxGroup";
import { SUBMISSION_ITEM_METHOD } from "@/models/SubmissionItem";
import { notify } from "@/components/Shared/Snackbar/snackbarStore";

type AddRequestSectionProps = {
submissionPackage: SubmissionPackage;
Expand All @@ -38,6 +39,15 @@ export default function AddRequestSection({
>([]);

const onCreateUpdateRequest = () => {
if (!noteText) {
notify.error("Please enter a note");
return;
}
if (selectedSubmissionItems.length === 0) {
notify.error("Please select at least one item");
return;
}

handleCreateUpdateRequest({
note: noteText,
submissionItems: selectedSubmissionItems,
Expand Down
16 changes: 16 additions & 0 deletions submit-web/src/components/Submission/UpdateRequestWidget/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import { SubmissionPackage } from "@/models/Package";
import RequestSection from "./RequestSection";
import { useCreatePackageUpdateRequest } from "@/hooks/api/usePackages";
import AddRequestSection from "./AddRequestSection";
import { notify } from "@/components/Shared/Snackbar/snackbarStore";
import { isAxiosError } from "axios";

type UpdateRequestWidgetProps = {
submissionPackage: SubmissionPackage;
Expand All @@ -31,6 +33,20 @@ export default function UpdateRequestWidget({
useCreatePackageUpdateRequest({
accountProjectId: submissionPackage.account_project_id,
packageId: submissionPackage.id,
options: {
onSuccess: () => {
notify.success("Update request created successfully");
setExpanded(false);
},
onError: (error) => {
const defaultMessage = "Failed to create update request";
notify.error(
isAxiosError(error)
? (error.response?.data.message ?? defaultMessage)
: defaultMessage,
);
},
},
});

const handleIsCreateRequestOpen = () => {
Expand Down
1 change: 1 addition & 0 deletions submit-web/src/components/Submission/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ export type SubmissionItemTableRow = {
submissions: Array<Submission>;
has_document: boolean;
reviewStatus?: string;
isUpdateRequest?: boolean;
};
18 changes: 18 additions & 0 deletions submit-web/src/components/SubmissionStatusChip/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ const statusStyles: Record<string, StyleProps> = {
},
label: "Passed Consultation Check",
},
UPDATE_REQUESTED: {
sx: {
borderRadius: 1,
border: `1px solid #F18A15`,
background: "#FFDEB8",
height: "24px",
width: "140px",
},
label: "Update Requested",
},
};

export function SubmissionStatusChip({ status }: { status: string }) {
Expand All @@ -91,10 +101,12 @@ export function SubmissionStatusChip({ status }: { status: string }) {
type SubmissionStatusChipStackProps = {
status: SubmissionStatus;
reviewStatus?: string;
isUpdateRequested?: boolean;
};
export const SubmissionStatusChipStack = ({
status,
reviewStatus,
isUpdateRequested = false,
}: SubmissionStatusChipStackProps) => {
return (
<Box sx={{ display: "inline-block" }}>
Expand All @@ -109,6 +121,12 @@ export const SubmissionStatusChipStack = ({
NON_CANONICAL_SUBMISSION_STATUS.PENDING_MANAGER_REVIEW && (
<SubmissionStatusChip status={reviewStatus} />
)}

{isUpdateRequested && (
<SubmissionStatusChip
status={NON_CANONICAL_SUBMISSION_STATUS.UPDATE_REQUESTED}
/>
)}
</Stack>
</Box>
);
Expand Down
2 changes: 1 addition & 1 deletion submit-web/src/hooks/api/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type Options<TData = any> = {
onSuccess?: (data?: TData) => void;
onError?: () => void;
onError?: (error?: Error) => void;
onSettled?: (data?: TData) => void;
};
5 changes: 4 additions & 1 deletion submit-web/src/models/Package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ export type PackageType = {
};

// These statuses are just for UI purposes, the actual canonical business statuses are PackageStatus
export type NonCanonicalPackageStatus = "PENDING_MANAGER_REVIEW";
export type NonCanonicalPackageStatus =
| "PENDING_MANAGER_REVIEW"
| "UPDATE_REQUESTED";
export const NON_CANONICAL_PACKAGE_STATUS = Object.freeze<
Record<NonCanonicalPackageStatus, NonCanonicalPackageStatus>
>({
PENDING_MANAGER_REVIEW: "PENDING_MANAGER_REVIEW",
UPDATE_REQUESTED: "UPDATE_REQUESTED",
});

export type PackageStatus =
Expand Down
5 changes: 4 additions & 1 deletion submit-web/src/models/Submission.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
// NonCanonicalSubmissionStatus are just for display purpose, they are not canonical business statuses
export type NonCanonicalSubmissionStatus = "PENDING_MANAGER_REVIEW";
export type NonCanonicalSubmissionStatus =
| "PENDING_MANAGER_REVIEW"
| "UPDATE_REQUESTED";

export const NON_CANONICAL_SUBMISSION_STATUS = Object.freeze<
Record<NonCanonicalSubmissionStatus, NonCanonicalSubmissionStatus>
>({
PENDING_MANAGER_REVIEW: "PENDING_MANAGER_REVIEW",
UPDATE_REQUESTED: "UPDATE_REQUESTED",
});

export type SubmissionStatus =
Expand Down
2 changes: 1 addition & 1 deletion submit-web/src/models/SubmissionItem.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Note } from "@/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/Note";
import { Note } from "@/components/SubmissionItem/Note";
import { Submission, SubmissionStatus } from "./Submission";
import { SubmissionReview } from "./SubmissionReview";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ export default function SubmissionPage() {
>
Submission Status:
</Typography>
<PackageStatusChipStack status={submissionPackage.status} />
<PackageStatusChipStack
submissionPackage={submissionPackage}
/>
</Box>
</Box>
<InfoBox submissionPackage={submissionPackage} />
Expand All @@ -166,7 +168,7 @@ export default function SubmissionPage() {
pt: BCDesignTokens.layoutPaddingSmall,
}}
>
<ItemsTable submissionItems={submissionPackage.items} />
<ItemsTable submissionPackage={submissionPackage} />
</Box>
<When condition={isPackageSubmitted}>
<Box mb={BCDesignTokens.layoutMarginXlarge}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,7 @@ export default function SubmissionPage() {
Submission Status:
</Typography>
<PackageStatusChipStack
status={submissionPackage.status}
reviewStatus={submissionPackage.review_status}
submissionPackage={submissionPackage}
/>
</Box>
</Box>
Expand All @@ -128,7 +127,7 @@ export default function SubmissionPage() {
pt: BCDesignTokens.layoutPaddingSmall,
}}
>
<ItemsTable submissionItems={submissionPackage.items} />
<ItemsTable submissionPackage={submissionPackage} />
</Box>
<UpdateRequestWidget submissionPackage={submissionPackage} />
<Box
Expand Down

0 comments on commit 00f94f6

Please sign in to comment.