mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +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,
|
||||
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>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user