refactor(FE): Restrict edit and delete actions based on recording status

This commit is contained in:
rstubryan
2026-03-08 16:40:36 +07:00
parent 7366d6490c
commit b2016314f5
2 changed files with 42 additions and 26 deletions
@@ -104,8 +104,19 @@ const RowOptionsMenu = ({
return recording.approval?.action === 'REJECTED'; return recording.approval?.action === 'REJECTED';
}; };
const isRecordingEditable = (recording: Recording) => {
if (
recording.executed_at &&
recording.project_flock?.project_flock_category === 'GROWING'
) {
return false;
}
return true;
};
const isApproved = isRecordingApproved(props.row.original); const isApproved = isRecordingApproved(props.row.original);
const isRejected = isRecordingRejected(props.row.original); const isRejected = isRecordingRejected(props.row.original);
const isEditable = isRecordingEditable(props.row.original);
return ( return (
<div className='relative'> <div className='relative'>
@@ -138,18 +149,20 @@ const RowOptionsMenu = ({
View Details View Details
</Button> </Button>
</RequirePermission> </RequirePermission>
<RequirePermission permissions='lti.production.recording.update'> {isEditable && (
<Button <RequirePermission permissions='lti.production.recording.update'>
href={`/production/recording/detail/edit/?recordingId=${props.row.original.id}`} <Button
variant='ghost' href={`/production/recording/detail/edit/?recordingId=${props.row.original.id}`}
color='none' variant='ghost'
className='p-3 justify-start text-sm font-semibold w-full' color='none'
onClick={closePopover} className='p-3 justify-start text-sm font-semibold w-full'
> onClick={closePopover}
<Icon icon='mdi:pencil-outline' width={20} height={20} /> >
Edit <Icon icon='mdi:pencil-outline' width={20} height={20} />
</Button> Edit
</RequirePermission> </Button>
</RequirePermission>
)}
{!isApproved && !isRejected && ( {!isApproved && !isRejected && (
<RequirePermission permissions='lti.production.recording.approve'> <RequirePermission permissions='lti.production.recording.approve'>
<Button <Button
@@ -182,20 +195,22 @@ const RowOptionsMenu = ({
</Button> </Button>
</RequirePermission> </RequirePermission>
)} )}
<RequirePermission permissions='lti.production.recording.delete'> {isEditable && (
<Button <RequirePermission permissions='lti.production.recording.delete'>
onClick={() => { <Button
deleteClickHandler(); onClick={() => {
closePopover(); deleteClickHandler();
}} closePopover();
variant='ghost' }}
color='error' variant='ghost'
className='p-3 justify-start text-sm font-semibold w-full focus-visible:text-error-content hover:text-error-content' color='error'
> className='p-3 justify-start text-sm font-semibold w-full focus-visible:text-error-content hover:text-error-content'
<Icon icon='mdi:delete-outline' width={20} height={20} /> >
Delete <Icon icon='mdi:delete-outline' width={20} height={20} />
</Button> Delete
</RequirePermission> </Button>
</RequirePermission>
)}
</div> </div>
</PopoverContent> </PopoverContent>
</div> </div>
+1
View File
@@ -49,6 +49,7 @@ export type BaseRecording = {
project_flock: ProjectFlock; project_flock: ProjectFlock;
record_datetime: string; record_datetime: string;
day: number; day: number;
executed_at: string;
} & ProductionMetrics; } & ProductionMetrics;
export type RecordingDepletion = { export type RecordingDepletion = {