690329:2209 Fixing refactor Correspondence GPT-5.3-Codex #04
CI / CD Pipeline / build (push) Successful in 20m35s
CI / CD Pipeline / deploy (push) Successful in 10m59s

This commit is contained in:
2026-03-29 22:09:40 +07:00
parent df3020012d
commit abbdebf2b9
21 changed files with 4426 additions and 24 deletions
+23 -12
View File
@@ -22,26 +22,39 @@ import { Badge } from '@/components/ui/badge';
interface CorrespondenceDetailProps {
data: Correspondence;
selectedRevisionId?: string;
}
export function CorrespondenceDetail({ data }: CorrespondenceDetailProps) {
export function CorrespondenceDetail({ data, selectedRevisionId }: CorrespondenceDetailProps) {
const submitMutation = useSubmitCorrespondence();
const processMutation = useProcessWorkflow();
const cancelMutation = useCancelCorrespondence();
const { hasPermission } = useAuthStore();
const { user, hasPermission } = useAuthStore();
const [actionState, setActionState] = useState<'approve' | 'reject' | 'cancel' | null>(null);
const [comments, setComments] = useState('');
const [cancelReason, setCancelReason] = useState('');
if (!data) return <div>No data found</div>;
const currentRevision = data.revisions?.find((r) => r.isCurrent) || data.revisions?.[0];
const selectedRevision = selectedRevisionId
? data.revisions?.find((r) => r.publicId === selectedRevisionId)
: undefined;
const currentRevision = selectedRevision || data.revisions?.find((r) => r.isCurrent) || data.revisions?.[0];
const subject = currentRevision?.subject || '-';
const description = currentRevision?.description || '-';
const status = currentRevision?.status?.statusCode || 'UNKNOWN';
const attachments = currentRevision?.attachments || [];
const importance = (currentRevision?.details?.importance as string) || 'NORMAL';
const canEditMetadata = hasPermission('correspondence.edit');
const privilegedEditableStatuses = ['SUBCSC', 'SUBOWN', 'IN_REVIEW_CSC'];
const normalizedRole = (user?.role || '').toUpperCase().replace(/\s+/g, '_');
const isPrivilegedEditRole = ['SUPERADMIN', 'SUPER_ADMIN', 'ADMIN', 'DC', 'DOCUMENT_CONTROL'].includes(
normalizedRole
);
const canEditInStatus =
status === 'DRAFT' ||
(privilegedEditableStatuses.includes(status) && isPrivilegedEditRole);
const canEditDocument = canEditInStatus && (hasPermission('correspondence.edit') || isPrivilegedEditRole);
const toRecipients = data.recipients?.filter((r) => r.recipientType === 'TO') || [];
const ccRecipients = data.recipients?.filter((r) => r.recipientType === 'CC') || [];
@@ -100,15 +113,13 @@ export function CorrespondenceDetail({ data }: CorrespondenceDetailProps) {
</div>
</div>
<div className="flex gap-2">
{status === 'DRAFT' && (
<Can permission="correspondence.edit">
<Link href={`/correspondences/${data.publicId}/edit`}>
<Button variant="outline">
<Edit className="mr-2 h-4 w-4" />
Edit
</Button>
</Link>
</Can>
{canEditDocument && (
<Link href={`/correspondences/${data.publicId}/edit${selectedRevisionId ? `?revId=${selectedRevisionId}` : ''}`}>
<Button variant="outline">
<Edit className="mr-2 h-4 w-4" />
Edit
</Button>
</Link>
)}
{status === 'DRAFT' && (
<Can permission="correspondence.submit">