Refactor: Implement state machine cleanup and fixes

This commit is contained in:
gpt-engineer-app[bot]
2025-10-21 14:10:24 +00:00
parent 14b3305755
commit dcdb20386a
9 changed files with 55 additions and 209 deletions

View File

@@ -45,11 +45,18 @@ export function useLockMonitor(
dispatch({ type: 'LOCK_EXPIRED' });
// Show toast with extension option
toast({
title: 'Lock Expiring Soon',
description: 'Your lock on this submission will expire in less than 2 minutes. Click to extend.',
variant: 'default',
});
toast({
title: 'Lock Expiring Soon',
description: 'Your lock on this submission will expire in less than 2 minutes. Click below to extend.',
duration: Infinity,
});
// Also call extension function automatically after showing toast
if (itemId) {
setTimeout(() => {
handleExtendLock(itemId, dispatch);
}, 100);
}
}
}, 30000); // Check every 30 seconds

View File

@@ -64,7 +64,7 @@ export function submissionReducer(
}
return {
status: 'validation_error',
data: (state as Extract<SubmissionState, { status: 'validating' }>).data,
data: state.data,
errors: action.payload
};
@@ -74,7 +74,7 @@ export function submissionReducer(
}
return {
status: 'submitting',
data: (state as Extract<SubmissionState, { status: 'validating' }>).data,
data: state.data,
submissionId: action.payload.submissionId
};
@@ -84,7 +84,7 @@ export function submissionReducer(
}
return {
status: 'pending_moderation',
submissionId: (state as Extract<SubmissionState, { status: 'submitting' }>).submissionId
submissionId: state.submissionId
};
case 'LOCK':
@@ -93,7 +93,7 @@ export function submissionReducer(
}
return {
status: 'locked',
submissionId: (state as Extract<SubmissionState, { status: 'pending_moderation' }>).submissionId,
submissionId: state.submissionId,
lockedBy: action.payload.lockedBy,
lockedUntil: action.payload.lockedUntil
};
@@ -104,7 +104,7 @@ export function submissionReducer(
}
return {
status: 'reviewing',
submissionId: (state as Extract<SubmissionState, { status: 'locked' }>).submissionId,
submissionId: state.submissionId,
reviewerId: action.payload.reviewerId
};
@@ -114,7 +114,7 @@ export function submissionReducer(
}
return {
status: 'approved',
submissionId: (state as Extract<SubmissionState, { status: 'reviewing' }>).submissionId,
submissionId: state.submissionId,
entityId: action.payload.entityId
};
@@ -124,7 +124,7 @@ export function submissionReducer(
}
return {
status: 'rejected',
submissionId: (state as Extract<SubmissionState, { status: 'reviewing' }>).submissionId,
submissionId: state.submissionId,
reason: action.payload.reason
};
@@ -132,13 +132,10 @@ export function submissionReducer(
if (state.status !== 'reviewing' && state.status !== 'locked') {
throw new Error(`Illegal transition: ${state.status} → escalated`);
}
const submissionId = state.status === 'reviewing'
? (state as Extract<SubmissionState, { status: 'reviewing' }>).submissionId
: (state as Extract<SubmissionState, { status: 'locked' }>).submissionId;
return {
status: 'escalated',
submissionId,
submissionId: state.submissionId,
escalatedBy: action.payload.escalatedBy,
reason: action.payload.reason
};