refactor(FE-318,319): Remove laying grading checks and simplify approval

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