feat: Refactor tag and correspondent management to use canonical types and dedicated managers.
This commit is contained in:
@@ -2,6 +2,8 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import type { ReactNode } from 'react';
|
||||
import DocumentSummarySection, { DocumentSummarySectionProps } from './DocumentSummarySection';
|
||||
import { describeDocumentSummary, extractDocumentMetadataPayload, type DocumentSummaryRow } from '../logic/documentSummary';
|
||||
import type { Tag, Correspondent } from '../../types/documents';
|
||||
import type { TagId, Identifier } from '../../types/identifiers';
|
||||
|
||||
type PanelTab = { id: string; label: string; render: (context?: Record<string, unknown>) => ReactNode };
|
||||
|
||||
@@ -14,7 +16,8 @@ type ContentState =
|
||||
| { status: 'error'; data: null; error: unknown };
|
||||
|
||||
export interface DocumentInfoPanelProps {
|
||||
document: DocumentSummarySectionProps['document'];
|
||||
tagLookupById?: Map<TagId, Tag>;
|
||||
correspondentLookupById?: Map<Identifier, Correspondent>;
|
||||
summaryProps?: Omit<DocumentSummarySectionProps, 'document' | 'layout'>;
|
||||
metadataItems?: DocumentSummaryRow[];
|
||||
metadataPayload?: Record<string, unknown>;
|
||||
@@ -50,6 +53,8 @@ export interface DocumentInfoPanelProps {
|
||||
|
||||
const DocumentInfoPanel: React.FC<DocumentInfoPanelProps> = ({
|
||||
document,
|
||||
tagLookupById,
|
||||
correspondentLookupById,
|
||||
summaryProps = {},
|
||||
metadataItems: metadataItemsProp,
|
||||
metadataPayload: metadataPayloadProp,
|
||||
@@ -76,8 +81,9 @@ const DocumentInfoPanel: React.FC<DocumentInfoPanelProps> = ({
|
||||
if (Array.isArray(metadataItemsProp) && metadataItemsProp.length) {
|
||||
return metadataItemsProp;
|
||||
}
|
||||
return describeDocumentSummary(document);
|
||||
}, [metadataItemsProp, document]);
|
||||
|
||||
return describeDocumentSummary(document, { tagLookupById, correspondentLookupById });
|
||||
}, [metadataItemsProp, document, tagLookupById, correspondentLookupById]);
|
||||
|
||||
const metadataPayload = useMemo(() => {
|
||||
if (metadataPayloadProp !== undefined) {
|
||||
@@ -107,9 +113,10 @@ const DocumentInfoPanel: React.FC<DocumentInfoPanelProps> = ({
|
||||
<DocumentSummarySection
|
||||
document={document}
|
||||
layout={summaryLayout}
|
||||
correspondentLookupById={correspondentLookupById}
|
||||
{...summaryProps}
|
||||
/>
|
||||
), [document, summaryLayout, summaryProps]);
|
||||
), [document, summaryLayout, summaryProps, correspondentLookupById]);
|
||||
|
||||
const renderDetailsSection = useCallback(() => (
|
||||
<section className={`${base}__section`}>
|
||||
|
||||
Reference in New Issue
Block a user