fix(FE): Parse recordingId and hide actions for rejected

This commit is contained in:
rstubryan
2025-12-11 11:05:20 +07:00
parent 12698004e1
commit 3dd36b8248
4 changed files with 56 additions and 35 deletions
@@ -14,7 +14,7 @@ const RecordingEdit = () => {
const { data: recording, isLoading: isLoadingRecording } = useSWR(
recordingId,
(id: number) => RecordingApi.getSingle(id) // Gunakan RecordingApi
(id: string) => RecordingApi.getSingle(parseInt(id))
);
if (!recordingId) {
+1 -1
View File
@@ -14,7 +14,7 @@ const RecordingDetail = () => {
const { data: recording, isLoading: isLoadingRecording } = useSWR(
recordingId,
(id: number) => RecordingApi.getSingle(id)
(id: string) => RecordingApi.getSingle(parseInt(id))
);
if (!recordingId) {
@@ -50,7 +50,12 @@ const RowOptionsMenu = ({
);
};
const isRecordingRejected = (recording: Recording) => {
return recording.approval?.action === 'REJECTED';
};
const isApproved = isRecordingApproved(props.row.original);
const isRejected = isRecordingRejected(props.row.original);
return (
<RowOptionsMenuWrapper type={type}>
@@ -72,7 +77,7 @@ const RowOptionsMenu = ({
<Icon icon='mdi:pencil-outline' width={16} height={16} />
Edit
</Button>
{!isApproved && (
{!isApproved && !isRejected && (
<Button
onClick={approveClickHandler}
variant='ghost'
@@ -83,7 +88,7 @@ const RowOptionsMenu = ({
Approve
</Button>
)}
{!isApproved && (
{!isApproved && !isRejected && (
<Button
onClick={rejectClickHandler}
variant='ghost'
@@ -112,6 +112,10 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
);
}, []);
const isRecordingRejected = useCallback((recording?: Recording) => {
return recording?.approval?.action === 'REJECTED';
}, []);
// ===== PAYLOAD CREATION HELPERS =====
const createGrowingPayload = useCallback(
(values: RecordingGrowingFormValues) => {
@@ -1483,37 +1487,48 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
Kembali
</Button>
{type === 'detail' && !isRecordingApproved(initialValues) && (
<div className='flex flex-row gap-2'>
<Button
variant='outline'
color='success'
onClick={() => {
setApprovalNotes('');
approveModal.openModal();
}}
isLoading={isApproveLoading}
className='w-full sm:w-fit'
>
<Icon icon='material-symbols:check' width={24} height={24} />
Approve
</Button>
{type === 'detail' &&
initialValues?.approval &&
!isRecordingApproved(initialValues) &&
!isRecordingRejected(initialValues) && (
<div className='flex flex-row gap-2'>
<Button
variant='outline'
color='success'
onClick={() => {
setApprovalNotes('');
approveModal.openModal();
}}
isLoading={isApproveLoading}
className='w-full sm:w-fit'
>
<Icon
icon='material-symbols:check'
width={24}
height={24}
/>
Approve
</Button>
<Button
variant='outline'
color='error'
onClick={() => {
setApprovalNotes('');
rejectModal.openModal();
}}
isLoading={isRejectLoading}
className='w-full sm:w-fit'
>
<Icon icon='material-symbols:close' width={24} height={24} />
Reject
</Button>
</div>
)}
<Button
variant='outline'
color='error'
onClick={() => {
setApprovalNotes('');
rejectModal.openModal();
}}
isLoading={isRejectLoading}
className='w-full sm:w-fit'
>
<Icon
icon='material-symbols:close'
width={24}
height={24}
/>
Reject
</Button>
</div>
)}
</div>
<h1 className='text-2xl font-bold text-center'>
@@ -2803,7 +2818,8 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
{/* Approve Confirmation Modal */}
{(type as 'add' | 'edit' | 'detail') === 'detail' &&
!isRecordingApproved(initialValues) && (
!isRecordingApproved(initialValues) &&
!isRecordingRejected(initialValues) && (
<ConfirmationModalWithNotes
ref={approveModal.ref}
type='success'