From 97126098a2d0c67e78b35911f28f118fffbf9851 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Tue, 11 Jun 2024 00:58:50 +0800 Subject: [PATCH] feat: add view excuses ui --- src/routes/admin/cohorts/ViewCohort.tsx | 6 +- .../admin/cohorts/tables/ExcuseTable.tsx | 151 ++++++++++++++---- 2 files changed, 124 insertions(+), 33 deletions(-) diff --git a/src/routes/admin/cohorts/ViewCohort.tsx b/src/routes/admin/cohorts/ViewCohort.tsx index 9b77050..2988f84 100644 --- a/src/routes/admin/cohorts/ViewCohort.tsx +++ b/src/routes/admin/cohorts/ViewCohort.tsx @@ -365,11 +365,7 @@ export const ViewCohort = (): ReactElement => { onView={(id: number): void => navigate(`${VIEW_WINDOW}/${id}`)} windows={cohort.windows} /> - id} - windows={cohort.windows} - /> + { interface Props { excuses: ExcuseBase[]; windows: WindowBase[]; - onView: (id: number) => void; } const getColumns = ( @@ -137,7 +148,6 @@ const getColumns = ( export const ExcuseTable = ({ excuses, - onView, windows, }: Props): ReactElement => { const [filter, setFilter] = useState('all'); @@ -153,6 +163,8 @@ export const ExcuseTable = ({ return true; } }); + const [isOpen, setIsOpen] = useState(false); + const [selectedExcuse, setSelectedExcuse] = useState(null); const sortedWindows = useMemo( () => @@ -169,36 +181,119 @@ export const ExcuseTable = ({ [sortedWindows], ); + const onView = useCallback( + (id: number): void => { + setIsOpen(true); + setSelectedExcuse(excuses.find((excuse) => excuse.id === id) ?? null); + }, + [excuses], + ); + + const onClose = (): void => { + setIsOpen(false); + }; + const columns = useMemo( () => getColumns(onView, getWindowNumber), [getWindowNumber, onView], ); + const isShowQuestion = + selectedExcuse?.excuseFrom === ExcuseFrom.QUESTION || + selectedExcuse?.excuseFrom === ExcuseFrom.INTERVIEW_AND_QUESTION; + const isShowInterview = + selectedExcuse?.excuseFrom === ExcuseFrom.INTERVIEW || + selectedExcuse?.excuseFrom === ExcuseFrom.INTERVIEW_AND_QUESTION; + return ( - - - - - - } - columns={columns} - options={{ - title: 'Excuses', - isDownloadable: false, - numRowsPerPage: excuses.length, - }} - rows={filteredExcuses} - /> - + <> + {selectedExcuse && ( + + + + + + } + isOpen={isOpen} + onClose={onClose} + title="View Excuse" + > + + + + + Excuse From + + + {isShowQuestion && QUESTION} + {isShowInterview && INTERVIEW} + + + + + + + Window {getWindowNumber(selectedExcuse.window)} + + {`${formatDateWithYear( + selectedExcuse.window.startAt, + )} - ${formatDateWithYear(selectedExcuse.window.endAt)}`} + + + + Excuse Reason + {selectedExcuse.reason} + + + + Current Status + {selectedExcuse.status === ExcuseStatus.ACCEPTED && ( + ACCEPTED + )} + {selectedExcuse.status === ExcuseStatus.REJECTED && ( + REJECTED + )} + {selectedExcuse.status === ExcuseStatus.PENDING && ( + PENDING + )} + + + + )} + + +
+ + + + } + columns={columns} + options={{ + title: 'Excuses', + isDownloadable: false, + numRowsPerPage: excuses.length, + }} + rows={filteredExcuses} + /> + + ); };