feat(FE-137): implement bulk approval and rejection functionality in RecordingTable with user feedback

This commit is contained in:
rstubryan
2025-10-24 13:40:27 +07:00
parent 7a6a35568f
commit 537fc617ff
@@ -18,7 +18,9 @@ import RowDropdownOptions from '@/components/table/RowDropdownOptions';
import RowCollapseOptions from '@/components/table/RowCollapseOptions';
import { type CellContext } from '@tanstack/react-table';
import { type Recording } from '@/types/api/production/recording';
import { type BaseApiResponse } from '@/types/api/api-general';
import { RecordingApi } from '@/services/api/production';
import { isResponseSuccess, isResponseError } from '@/lib/api-helper';
import toast from 'react-hot-toast';
const RowOptionsMenu = ({
@@ -136,22 +138,56 @@ const RecordingTable = () => {
const bulkApproveHandler = async () => {
setIsBulkApproveLoading(true);
console.log('Approved recordings:', selectedRowIds);
setTimeout(() => {
setIsBulkApproveLoading(false);
const approveResponse = await RecordingApi.customRequest<
BaseApiResponse<Recording[]>
>('approvals', {
method: 'POST',
payload: {
action: 'APPROVED',
approvable_ids: selectedRowIds,
notes: 'Bulk Approved',
},
});
if (isResponseSuccess(approveResponse)) {
await refreshRecordings();
setRowSelection({});
bulkApproveModal.closeModal();
}, 1000);
toast.success(`Successfully approved ${selectedRowIds.length} recordings!`);
}
if (isResponseError(approveResponse)) {
toast.error(approveResponse?.message as string);
bulkApproveModal.closeModal();
}
setIsBulkApproveLoading(false);
};
const bulkRejectHandler = async () => {
setIsBulkRejectLoading(true);
console.log('Rejected recordings:', selectedRowIds);
setTimeout(() => {
setIsBulkRejectLoading(false);
const rejectResponse = await RecordingApi.customRequest<
BaseApiResponse<Recording[]>
>('approvals', {
method: 'POST',
payload: {
action: 'REJECTED',
approvable_ids: selectedRowIds,
notes: 'Bulk Rejected',
},
});
if (isResponseSuccess(rejectResponse)) {
refreshRecordings();
setRowSelection({});
bulkRejectModal.closeModal();
}, 1000);
toast.success(`Successfully rejected ${selectedRowIds.length} recordings!`);
}
if (isResponseError(rejectResponse)) {
toast.error(rejectResponse?.message as string);
bulkRejectModal.closeModal();
}
setIsBulkRejectLoading(false);
};
const singleDeleteHandler = async () => {