Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[UTOPIA-1288] only allow one idir user to review one program area selected role #1381

Merged
merged 9 commits into from
Jul 19, 2023
37 changes: 33 additions & 4 deletions src/frontend/src/components/public/PIAFormTabs/review/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ import { useContext, useEffect, useMemo, useState } from 'react';
import { IReview, IReviewSection } from './interfaces';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faTrash } from '@fortawesome/free-solid-svg-icons';
import { HttpRequest } from '../../../../utils/http-request.util';
import { API_ROUTES } from '../../../../constant/apiRoutes';
import { useParams } from 'react-router-dom';
import { getGUID } from '../../../../utils/helper.util';
import { IPiaForm } from '../../../../types/interfaces/pia-form.interface';
import {
IPiaFormContext,
Expand Down Expand Up @@ -113,7 +112,22 @@ const PIAReview = ({ printPreview }: IReviewProps) => {
true,
);
};
const allowUserReviewProgramArea = () => {
const userGuid = getGUID();
const selectedRoles = reviewForm?.programArea?.selectedRoles;
binggaofw marked this conversation as resolved.
Show resolved Hide resolved
// if selectedRoles is null means none of selectedRole got reviewed so return true
// otherwise loop all the role in reviews part to see if the current user already did review
if (selectedRoles === null) return true;
for (const role of selectedRoles) {
antsand marked this conversation as resolved.
Show resolved Hide resolved
if (
reviewForm?.programArea?.reviews?.[role]?.reviewedByGuid === userGuid
) {
return false;
}
}

return true;
};
const disableConfirmButton = () => {
if (pia.hasAddedPiToDataElements === false && reviewNote.trim() === '')
return true;
Expand Down Expand Up @@ -246,12 +260,18 @@ const PIAReview = ({ printPreview }: IReviewProps) => {
className="d-flex align-items-center"
key={index}
>
{Object(pia?.review?.programArea)?.reviews?.[role]
{!allowUserReviewProgramArea() ||
antsand marked this conversation as resolved.
Show resolved Hide resolved
Object(pia?.review?.programArea)?.reviews?.[role]
?.isAcknowledged ? (
<ViewProgramAreaReview
pia={pia}
role={role}
stateChangeHandler={stateChangeHandler}
isAcknowledged={
Object(pia?.review?.programArea)?.reviews?.[
role
]?.isAcknowledged || false
}
/>
) : (
<EditProgramAreaReview
Expand Down Expand Up @@ -308,7 +328,11 @@ const PIAReview = ({ printPreview }: IReviewProps) => {
<div className="drop-shadow card p-4 p-md-5">
<div className="data-table__container">
{enableMPOReviewViewMode() ? (
<ViewMPOReview pia={pia} editReviewNote={setEditReviewNote} />
<ViewMPOReview
pia={pia}
editReviewNote={setEditReviewNote}
isAcknowledged={pia?.review?.mpo?.isAcknowledged || false}
/>
) : (
<>
<div className="data-row">
Expand Down Expand Up @@ -391,6 +415,10 @@ const PIAReview = ({ printPreview }: IReviewProps) => {
{pia?.review?.programArea?.selectedRoles.map((role: string) => (
<>
<ViewProgramAreaReview
isAcknowledged={
pia?.review?.programArea?.reviews?.[role].isAcknowledged ||
false
}
pia={pia}
printPreview
role={role}
Expand All @@ -403,6 +431,7 @@ const PIAReview = ({ printPreview }: IReviewProps) => {
pia={pia}
printPreview
editReviewNote={setEditReviewNote}
isAcknowledged={pia?.review?.mpo?.isAcknowledged || false}
/>
</>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ interface IMPOReviewProps {
pia: IPiaForm;
editReviewNote: Dispatch<SetStateAction<boolean>>;
printPreview?: boolean;
isAcknowledged: boolean;
}

const ViewMPOReview = (props: IMPOReviewProps) => {
const { pia, printPreview, editReviewNote } = props;
const { pia, printPreview, editReviewNote, isAcknowledged } = props;

return (
<div className="d-grid gap-3">
Expand All @@ -29,12 +30,14 @@ const ViewMPOReview = (props: IMPOReviewProps) => {
reviewSection={pia.review?.mpo}
editReviewNote={editReviewNote}
printPreview
isAcknowledged={isAcknowledged}
/>
</div>
)}
</div>
) : (
<ViewReviewSection
isAcknowledged={isAcknowledged}
pia={pia}
reviewSection={pia?.review?.mpo}
editReviewNote={editReviewNote}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ interface IViewProgramAreaReviewProps {
editReviewNote?: Dispatch<SetStateAction<boolean>>;
printPreview?: boolean;
role: string;
isAcknowledged: boolean;
}

const ViewProgramAreaReview = (props: IViewProgramAreaReviewProps) => {
const { pia, printPreview, stateChangeHandler, role } = props;
const { pia, printPreview, stateChangeHandler, role, isAcknowledged } = props;

return (
<div className="d-grid gap-3">
Expand All @@ -38,6 +39,7 @@ const ViewProgramAreaReview = (props: IViewProgramAreaReviewProps) => {
pia?.review?.programArea?.reviews?.[role as keyof IReview]
}
printPreview
isAcknowledged={isAcknowledged}
/>
</div>
)}
Expand All @@ -51,6 +53,7 @@ const ViewProgramAreaReview = (props: IViewProgramAreaReviewProps) => {
}
stateChangeHandler={stateChangeHandler}
role={role}
isAcknowledged={isAcknowledged}
/>
</div>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ interface IReviewProps {
stateChangeHandler?: (value: any, path: string, callApi?: boolean) => void;
printPreview?: boolean;
role?: string;
isAcknowledged: boolean;
}

const ViewReviewSection = (props: IReviewProps) => {
Expand All @@ -27,6 +28,7 @@ const ViewReviewSection = (props: IReviewProps) => {
editReviewNote,
stateChangeHandler,
role,
isAcknowledged,
} = props;

const reviewGuid = reviewSection?.reviewedByGuid;
Expand Down Expand Up @@ -78,7 +80,7 @@ const ViewReviewSection = (props: IReviewProps) => {
<div className="row mt-4">
<Checkbox
value=""
checked={true}
checked={isAcknowledged}
isLink={false}
label={
messages.PiaReviewHeader.MinistrySection.Input.AcceptAccountability
Expand Down
Loading