mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-24 07:15:44 +00:00
refactor(FE-318,319): Remove laying grading checks and simplify approval
This commit is contained in:
@@ -35,28 +35,22 @@ const RowOptionsMenu = ({
|
|||||||
deleteClickHandler,
|
deleteClickHandler,
|
||||||
approveClickHandler,
|
approveClickHandler,
|
||||||
rejectClickHandler,
|
rejectClickHandler,
|
||||||
isGradingCompleted,
|
|
||||||
}: {
|
}: {
|
||||||
type: 'dropdown' | 'collapse';
|
type: 'dropdown' | 'collapse';
|
||||||
props: CellContext<Recording, unknown>;
|
props: CellContext<Recording, unknown>;
|
||||||
deleteClickHandler: () => void;
|
deleteClickHandler: () => void;
|
||||||
approveClickHandler: () => void;
|
approveClickHandler: () => void;
|
||||||
rejectClickHandler: () => void;
|
rejectClickHandler: () => void;
|
||||||
isGradingCompleted: (recording: Recording) => boolean;
|
|
||||||
}) => {
|
}) => {
|
||||||
const isLayingCategory =
|
|
||||||
props.row.original.project_flock_category === 'LAYING';
|
|
||||||
|
|
||||||
const isRecordingApproved = (recording: Recording) => {
|
const isRecordingApproved = (recording: Recording) => {
|
||||||
return (
|
return (
|
||||||
recording.approval?.action === 'APPROVED' &&
|
recording.approval?.action === 'APPROVED' &&
|
||||||
recording.approval?.step_name === 'Disetujui' &&
|
recording.approval?.step_number === 2 &&
|
||||||
recording.approval?.step_number === 3
|
recording.approval?.step_name === 'Disetujui'
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const isApproved = isRecordingApproved(props.row.original);
|
const isApproved = isRecordingApproved(props.row.original);
|
||||||
const isGradingDone = isGradingCompleted(props.row.original);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<RowOptionsMenuWrapper type={type}>
|
<RowOptionsMenuWrapper type={type}>
|
||||||
@@ -78,7 +72,7 @@ const RowOptionsMenu = ({
|
|||||||
<Icon icon='mdi:pencil-outline' width={16} height={16} />
|
<Icon icon='mdi:pencil-outline' width={16} height={16} />
|
||||||
Edit
|
Edit
|
||||||
</Button>
|
</Button>
|
||||||
{!isApproved && !(isLayingCategory && !isGradingDone) && (
|
{!isApproved && (
|
||||||
<Button
|
<Button
|
||||||
onClick={approveClickHandler}
|
onClick={approveClickHandler}
|
||||||
variant='ghost'
|
variant='ghost'
|
||||||
@@ -89,7 +83,7 @@ const RowOptionsMenu = ({
|
|||||||
Approve
|
Approve
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{!isApproved && !(isLayingCategory && !isGradingDone) && (
|
{!isApproved && (
|
||||||
<Button
|
<Button
|
||||||
onClick={rejectClickHandler}
|
onClick={rejectClickHandler}
|
||||||
variant='ghost'
|
variant='ghost'
|
||||||
@@ -370,7 +364,7 @@ const RecordingTable = () => {
|
|||||||
const [isDeleteLoading, setIsDeleteLoading] = useState(false);
|
const [isDeleteLoading, setIsDeleteLoading] = useState(false);
|
||||||
const [isApproveLoading, setIsApproveLoading] = useState(false);
|
const [isApproveLoading, setIsApproveLoading] = useState(false);
|
||||||
const [isRejectLoading, setIsRejectLoading] = useState(false);
|
const [isRejectLoading, setIsRejectLoading] = useState(false);
|
||||||
const [approvalNotes, setApprovalNotes] = useState('');
|
const [, setApprovalNotes] = useState('');
|
||||||
|
|
||||||
const singleDeleteModal = useModal();
|
const singleDeleteModal = useModal();
|
||||||
const approveModal = useModal();
|
const approveModal = useModal();
|
||||||
@@ -386,33 +380,10 @@ const RecordingTable = () => {
|
|||||||
RecordingApi.getAllFetcher
|
RecordingApi.getAllFetcher
|
||||||
);
|
);
|
||||||
|
|
||||||
const isRecordingFullyApproved = useCallback(
|
const isRecordingApproved = useCallback((recording: Recording): boolean => {
|
||||||
(recording: Recording): boolean => {
|
|
||||||
return (
|
|
||||||
recording.approval?.action === 'APPROVED' &&
|
|
||||||
recording.approval?.step_name === 'Disetujui' &&
|
|
||||||
Number(recording.approval?.step_number) === 3
|
|
||||||
);
|
|
||||||
},
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
|
|
||||||
const isRecordingApproved = useCallback(
|
|
||||||
(recording: Recording) => {
|
|
||||||
return isRecordingFullyApproved(recording);
|
|
||||||
},
|
|
||||||
[isRecordingFullyApproved]
|
|
||||||
);
|
|
||||||
|
|
||||||
const isGradingCompleted = useCallback((recording: Recording): boolean => {
|
|
||||||
if (recording.project_flock_category !== 'LAYING') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
recording.egg_grading_status === 'COMPLETED' ||
|
recording.approval?.action === 'APPROVED' &&
|
||||||
(recording.approval?.action === 'UPDATED' &&
|
recording.approval?.step_name === 'Disetujui'
|
||||||
recording.approval?.step_number === 2)
|
|
||||||
);
|
);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -506,19 +477,9 @@ const RecordingTable = () => {
|
|||||||
if (!isResponseSuccess(recordings) || !recordings.data) return [];
|
if (!isResponseSuccess(recordings) || !recordings.data) return [];
|
||||||
return selectedRowIds.filter((id) => {
|
return selectedRowIds.filter((id) => {
|
||||||
const recording = recordings.data.find((r) => r.id === id);
|
const recording = recordings.data.find((r) => r.id === id);
|
||||||
if (!recording || isRecordingApproved(recording)) return false;
|
return recording && !isRecordingApproved(recording);
|
||||||
|
|
||||||
if (recording.project_flock_category === 'GROWING') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (recording.project_flock_category === 'LAYING') {
|
|
||||||
return isGradingCompleted(recording);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
}, [selectedRowIds, recordings, isRecordingApproved, isGradingCompleted]);
|
}, [selectedRowIds, recordings, isRecordingApproved]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isResponseSuccess(recordings) && recordings.data) {
|
if (isResponseSuccess(recordings) && recordings.data) {
|
||||||
@@ -530,14 +491,7 @@ const RecordingTable = () => {
|
|||||||
(r) => r.id === parseInt(rowId)
|
(r) => r.id === parseInt(rowId)
|
||||||
);
|
);
|
||||||
if (recording && !isRecordingApproved(recording)) {
|
if (recording && !isRecordingApproved(recording)) {
|
||||||
if (recording.project_flock_category === 'GROWING') {
|
newSelection[rowId] = true;
|
||||||
newSelection[rowId] = true;
|
|
||||||
} else if (
|
|
||||||
recording.project_flock_category === 'LAYING' &&
|
|
||||||
isGradingCompleted(recording)
|
|
||||||
) {
|
|
||||||
newSelection[rowId] = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -548,13 +502,7 @@ const RecordingTable = () => {
|
|||||||
setRowSelection(newSelection);
|
setRowSelection(newSelection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [
|
}, [recordings, rowSelection, isRecordingApproved, setRowSelection]);
|
||||||
recordings,
|
|
||||||
rowSelection,
|
|
||||||
isRecordingApproved,
|
|
||||||
isGradingCompleted,
|
|
||||||
setRowSelection,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='w-full p-0 sm:p-4'>
|
<div className='w-full p-0 sm:p-4'>
|
||||||
@@ -640,40 +588,28 @@ const RecordingTable = () => {
|
|||||||
id: 'select',
|
id: 'select',
|
||||||
header: ({ table }) => {
|
header: ({ table }) => {
|
||||||
const allRows = table.getRowModel().rows;
|
const allRows = table.getRowModel().rows;
|
||||||
|
const selectableRows = allRows.filter((row) => {
|
||||||
const selectableGrowingRows = allRows.filter((row) => {
|
|
||||||
const recording = row.original;
|
const recording = row.original;
|
||||||
return (
|
return !isRecordingApproved(recording);
|
||||||
recording.project_flock_category === 'GROWING' &&
|
|
||||||
!isRecordingApproved(recording)
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const hasNoSelectableGrowing = selectableGrowingRows.length === 0;
|
const hasNoSelectableRows = selectableRows.length === 0;
|
||||||
|
|
||||||
const handleSelectAllGrowing = () => {
|
const handleSelectAll = () => {
|
||||||
const isAllSelected = selectableGrowingRows.every((row) =>
|
const isAllSelected = selectableRows.every((row) =>
|
||||||
row.getIsSelected()
|
row.getIsSelected()
|
||||||
);
|
);
|
||||||
|
|
||||||
allRows.forEach((row) => {
|
selectableRows.forEach((row) => {
|
||||||
const recording = row.original;
|
row.toggleSelected(!isAllSelected);
|
||||||
if (
|
|
||||||
recording.project_flock_category === 'GROWING' &&
|
|
||||||
!isRecordingApproved(recording)
|
|
||||||
) {
|
|
||||||
row.toggleSelected(!isAllSelected);
|
|
||||||
} else if (recording.project_flock_category === 'LAYING') {
|
|
||||||
row.toggleSelected(false);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const isAllGrowingSelected =
|
const isAllSelected =
|
||||||
selectableGrowingRows.length > 0 &&
|
selectableRows.length > 0 &&
|
||||||
selectableGrowingRows.every((row) => row.getIsSelected());
|
selectableRows.every((row) => row.getIsSelected());
|
||||||
|
|
||||||
const isSomeGrowingSelected = selectableGrowingRows.some((row) =>
|
const isSomeSelected = selectableRows.some((row) =>
|
||||||
row.getIsSelected()
|
row.getIsSelected()
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -681,33 +617,20 @@ const RecordingTable = () => {
|
|||||||
<div className='w-full flex flex-row justify-center'>
|
<div className='w-full flex flex-row justify-center'>
|
||||||
<CheckboxInput
|
<CheckboxInput
|
||||||
name='allRow'
|
name='allRow'
|
||||||
checked={isAllGrowingSelected}
|
checked={isAllSelected}
|
||||||
indeterminate={
|
indeterminate={isSomeSelected && !isAllSelected}
|
||||||
isSomeGrowingSelected && !isAllGrowingSelected
|
onChange={handleSelectAll}
|
||||||
}
|
disabled={hasNoSelectableRows}
|
||||||
onChange={handleSelectAllGrowing}
|
|
||||||
disabled={hasNoSelectableGrowing}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
cell: ({ row }) => {
|
cell: ({ row }) => {
|
||||||
const isApproved = isRecordingApproved(row.original);
|
|
||||||
const isLayingCategory =
|
|
||||||
row.original.project_flock_category === 'LAYING';
|
|
||||||
|
|
||||||
if (isLayingCategory) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const isDisabled = !row.getCanSelect() || isApproved;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<CheckboxInput
|
<CheckboxInput
|
||||||
name='row'
|
name='row'
|
||||||
checked={row.getIsSelected()}
|
checked={row.getIsSelected()}
|
||||||
disabled={isDisabled}
|
|
||||||
indeterminate={row.getIsSomeSelected()}
|
indeterminate={row.getIsSomeSelected()}
|
||||||
onChange={row.getToggleSelectedHandler()}
|
onChange={row.getToggleSelectedHandler()}
|
||||||
/>
|
/>
|
||||||
@@ -883,7 +806,6 @@ const RecordingTable = () => {
|
|||||||
deleteClickHandler={deleteClickHandler}
|
deleteClickHandler={deleteClickHandler}
|
||||||
approveClickHandler={approveClickHandler}
|
approveClickHandler={approveClickHandler}
|
||||||
rejectClickHandler={rejectClickHandler}
|
rejectClickHandler={rejectClickHandler}
|
||||||
isGradingCompleted={isGradingCompleted}
|
|
||||||
/>
|
/>
|
||||||
</RowDropdownOptions>
|
</RowDropdownOptions>
|
||||||
)}
|
)}
|
||||||
@@ -896,7 +818,6 @@ const RecordingTable = () => {
|
|||||||
deleteClickHandler={deleteClickHandler}
|
deleteClickHandler={deleteClickHandler}
|
||||||
approveClickHandler={approveClickHandler}
|
approveClickHandler={approveClickHandler}
|
||||||
rejectClickHandler={rejectClickHandler}
|
rejectClickHandler={rejectClickHandler}
|
||||||
isGradingCompleted={isGradingCompleted}
|
|
||||||
/>
|
/>
|
||||||
</RowCollapseOptions>
|
</RowCollapseOptions>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user