Project: workspace-doctolib · Branch: HEAD · Mode: · Model: claude-haiku-4-5-20251001
Stats: 1 user messages, 29 tool calls, tools used: Read, Bash.
Conversation
Turn 1 — User
Explore the package at /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src.
Specifically read these files completely:
1. /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.tsx
2. List the directory /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src to understand overall structure
3. Find and read any test files related to columnsFactory
Also look for how ColumnConfig type is used in the monolith package, especially what properties it currently has and where it is imported from.
Search with breadth "medium".
Turn 1 — Assistant
I'll help you explore this package. Let me start by reading the specific files you mentioned and understanding the overall structure.
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.tsx
Tools used:
- Bash: ls -la /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src
Tool results:
→ result (ok): 1 import type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui'
2 import {
3 createNhrDocumentCategoryColumn,
4 createNhrDocumentNameColumn,
5 createNhrProcedureDateColumn,
6 createNhrShareDateColumn,
7 createNhrSharedByColumn,
8 createNhrStatusColumn,
9 createNhrVisibilityColumn,
10 } from '@doctolib/tpf-national-health-records-ui'
11 import { DOCUMENT_STATUS } from '@doctolib/dmp'
12 import type { DesignSystemIconComponent } from '@doctolib/design-system-icons'
13
…(truncated, 2813 more chars)
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 256 B Wed Apr 22 14:48:15 2026 .
drwxr-xr-x clertonra staff 384 B Tue Apr 28 14:27:19 2026 ..
drwxr-xr-x clertonra staff 224 B Mon Apr 27 11:12:32 2026 business
drwxr-xr-x clertonra staff 320 B Tue Apr 28 14:27:21 2026 hooks
.rw-r--r-- clertonra staff 476 B Wed Apr 22 14:48:15 2026 index.ts
drwxr-xr-x clertonra staff 128 B Thu Feb 26 14:08:52 2026 locales
drwxr-xr-x clertonra staff 256 B Tue Apr 28 14:24:08 2026 mocks
drwxr-xr-x clertonra staff 160 B Tue Apr 28 14:27:1
…(truncated, 15 more chars)
Now let me explore the directory structure more deeply and search for test files and ColumnConfig usage.
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src -type f -name ".ts" -o -name ".tsx" | head -30
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/index.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/filterMockedDocuments.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/generateNhrDocuments.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/filterMockedDocuments.ts
/Users/USER/workspace/doctolib/doctolib/packag
…(truncated, 3091 more chars)
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp -type f
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/useDmpDocumentListVariant.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/constants.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/constants.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/index.ts
/Users/USER/workspace/doctolib/
…(truncated, 1320 more chars)
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records -name "test" -o -name "spec" 2>/dev/null | grep -E "(test|spec)"
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/filterMockedDocuments.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/generateNhrDocuments.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.test.ts
/Users/USER/worksp
…(truncated, 2020 more chars)
Great! Now let me read the test file for columnsFactory and explore the ColumnConfig type definition.
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts
Tool results:
→ result (ok): 1 import { createNhrDocumentCategoryColumn } from '@doctolib/tpf-national-health-records-ui'
2 import { DMP_CLASS_CODE_LABELS } from '../constants'
3 import { columnsFactory } from './columnsFactory'
4
5 jest.mock('@doctolib/dmp', () => ({
6 DOCUMENT_STATUS: {
7 validated: 'validated',
8 obsolete: 'obsolete',
9 archived: 'archived',
10 },
11 }))
12
13 jest.mock('../mappers/dmpDocumentHelpers', () => ({
14 getTypeCode: jest.fn(),
15 getProcedureDate: jest.fn(),
16 getShare
…(truncated, 3794 more chars)
Tools used:
- Bash: grep -r "ColumnConfig" /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src --include=".ts" --include=".tsx" -l
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedColumns.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.tsx
Tools used:
- Bash: grep -r "from.tpf-national-health-records-ui" /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src --include=".ts" --include=".tsx" | head -10
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedColumns.ts:import type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui'
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts:import type { ColumnConfig, FilterConfig, SearchDocumentsResult } from '@doctolib/tpf-national-health-records-ui'
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/vari
…(truncated, 1081 more chars)
Now let me search for the ColumnConfig type definition in the monolith and understand its structure:
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/tpf-national-health-records-ui -name ".ts" -o -name ".tsx" | grep -E "(index|types|column)" | head -20
Tool results:
→ result (ok): bfs: error: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/tpf-national-health-records-ui: No such file or directory.
Tools used:
- Bash: grep -r "type ColumnConfig" /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/tpf-national-health-records-ui --include=".ts" --include=".tsx"
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/tpf-national-health-records-ui -type f -name "index.ts" -o -name ".d.ts"
Tool results:
→ result (ERROR): Exit code 2
ugrep: warning: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/tpf-national-health-records-ui: No such file or directory
Tool results:
→ result (ERROR): Cancelled: parallel tool call Bash(grep -r "type ColumnConfig" /Users/clert…) errored
Let me check what packages are available and find the UI package:
Tools used:
- Bash: ls -la /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages -name "tpf" -type d 2>/dev/null
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 8.9 KB Mon Apr 20 15:32:18 2026 .
drwxr-xr-x clertonra staff 288 B Wed Dec 17 16:23:06 2025 ..
.rw-r--r-- clertonra staff 14 KB Tue Apr 21 16:44:52 2026 .DS_Store
drwxr-xr-x clertonra staff 320 B Thu Apr 9 15:21:29 2026 actions_history
drwxr-xr-x clertonra staff 320 B Thu Apr 9 15:21:29 2026 activity_page
drwxr-xr-x clertonra staff 320 B Thu Apr 9 15:21:29 2026 admin_check_in_sdk
drwxr-xr-x clertonra staff 320 B Tue Apr 28 14:24:07 2026 advanced_patients_filte
…(truncated, 22175 more chars)
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/ehr-consultations/node_modules/@doctolib/tpf-commons
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/e_rezept/node_modules/@doctolib/tpf-commons
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/ehr_paper_forms/node_modules/@doctolib/tpf-commons
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/sick-notes/node_modules/@doctolib/tpf-commons
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/secure_mess
…(truncated, 1263 more chars)
Let me search for the tpf-national-health-records-ui package type definitions in the node_modules:
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/node_modules -name "@doctolib" -type d -o -path "tpf-national-health-records-ui" | head -5
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/node_modules/@doctolib
Tools used:
- Bash: ls -la /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/node_modules/@doctolib/ 2>/dev/null | grep tpf
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 224 B Fri Apr 24 09:55:26 2026 tpf-commons
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib -path "node_modules" -prune -o -path "tpf-national-health-records-ui" -type d -print
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/dist
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/dist/locales
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/dist/business
/Users/USER/workspace/doctoli
…(truncated, 8639 more chars)
Perfect! Let me explore the tpf-national-health-records-ui package to find the ColumnConfig type:
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src -name ".ts" -o -name ".tsx" | grep -E "(index|types|columns)" | head -10
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/types.ts
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/index.ts
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/__tests__/index.test.ts
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/test-helpers/index.ts
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-hea
…(truncated, 793 more chars)
Tools used:
- Bash: ls /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/
Tools used:
- Bash: grep -r "type ColumnConfig\|export.ColumnConfig" /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src --include=".ts" --include=".tsx" | head -5
Tool results:
→ result (ok): __tests__
business
components
entry.ts
i18n.test.ts
i18n.ts
index.ts
locales
test-helpers
types.ts
utils
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/types.ts:export type ColumnConfig = {
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/business/factories/columns/createNhrSharedByColumn.tsx:export const createNhrSharedByColumn = (options: NhrSharedByColumnOptions): ColumnConfig => ({
/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/business/factories/columns/createNhrSta
…(truncated, 613 more chars)
Excellent! Now let me read the types.ts file to see the ColumnConfig definition:
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/types.ts
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/index.ts (1–50)
Tool results:
→ result (ok): 1 import type { DesignSystemIconComponent } from '@doctolib/design-system-icons'
2 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
3 import type { ReactNode } from 'react'
4
5 export type NhrPatientInfo = {
6 fullName: string
7 gender: 'male' | 'female' | 'other'
8 birthDate: string
9 age: number
10 }
11
12 export type ColumnConfig = {
13 key: string
14 header: string
15 sortable: boolean
16 / Only required when sortable: true. Returns a string for lo
…(truncated, 2614 more chars)
Tool results:
→ result (ok): 1 export { NhrDocumentList } from './components/NhrDocumentList/NhrDocumentList'
2 export { NhrDocumentListFilterPanel } from './components/NhrDocumentListFilterPanel/NhrDocumentListFilterPanel'
3 export type {
4 ActionConfig,
5 ActionsFactory,
6 ColumnConfig,
7 FilterConfig,
8 FilterRenderContext,
9 NhrPatientInfo,
10 NhrVisibilityEntry,
11 StatusOption,
12 NhrDocumentStatusFilterProps,
13 VisibilityOption,
14 SearchDocumentsFn,
15 } from './types'
16 export { NhrEntryPoin
…(truncated, 2097 more chars)
Now let me read a couple of the column factory files to see how they implement ColumnConfig:
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentCategoryColumn.tsx
Tool results:
→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
2
3 import { NhrDocumentCategoryCell } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell'
4 import type { IconMap } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell'
5 import type { ColumnConfig } from '../../../types'
6
7 export type NhrDocumentCategoryColumnOptions = {
8 / Translated column header /
9 header: string
10 / Extrac
…(truncated, 1411 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/business/factories/columns/createNhrStatusColumn.tsx
Tool results:
→ result (ok): 1 import type { PillColor } from '@doctolib/design-system/Pill'
2 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
3
4 import { NhrStatusCell } from '../../../components/NhrDocumentList/NhrStatusCell'
5 import type { ColumnConfig } from '../../../types'
6
7 / Pill config for a single recognized status token /
8 export type NhrDocumentStatusConfig = {
9 label: string
10 color?: PillColor
11 }
12
13 export type NhrStatusColumnOptions = {
14 / Translated column
…(truncated, 2104 more chars)
Now let me explore the variants directory structure more thoroughly:
Tools used:
- Bash: find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants -type f | sort
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/constants.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/constants.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts
/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.tsx
/Users/
…(truncated, 1550 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts
Tool results:
→ result (ok): 1 import type { ColumnConfig, FilterConfig, SearchDocumentsResult } from '@doctolib/tpf-national-health-records-ui'
2 import type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient'
3 import type { NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records'
4
5 export type { SearchDocumentsResult }
6
7 export type NhrDocumentListVariant = {
8 columns: ColumnConfig[]
9 filters: FilterConfig[]
10 searchDocuments: (appliedFilters?: Record) => Promise<
…(truncated, 1160 more chars)
Let me also check the mocks file to see how ColumnConfig is being used:
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedColumns.ts
Tool results:
→ result (ok): 1 import type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui'
2 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
3
4 // Column headers are hardcoded in English for the mock. i18n wiring belongs in a follow-up.
5 // Renders are intentionally plain-text — styled cell components will replace them once
6 // the factory functions are available in the published @doctolib/tpf-national-health-records-ui.
7
8 export const buildMockedColumns = (): ColumnConfig[]
…(truncated, 1839 more chars)
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/mappers/dmpDocumentHelpers.ts
Tool results:
→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
2 import type { NhrVisibilityEntry } from '@doctolib/tpf-national-health-records-ui'
3 import { DOCUMENT_STATUS, DOCUMENT_VISIBILITY } from '@doctolib/dmp'
4
5 const CLASS_CODE_SYSTEM = 'dmp:classCode'
6 const TYPE_CODE_SYSTEM = 'dmp:typeCode'
7 const PATIENT_CODE = '90' // EX_3.1-1040: class code for patient-authored documents
8
9 // classification.codes may contain both a classCode (JDV_J06) and a typeCode (JDV_J07/LO
…(truncated, 3132 more chars)
Perfect! Now let me create a comprehensive summary. Let me also quickly check the index file for the DMP variant to understand how these are exported:
Tools used:
- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/index.ts
Tool results:
→ result (ok): 1 export { useDmpDocumentListVariant } from './useDmpDocumentListVariant'
2
Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.
Tools used:
- Bash: tree -L 2 /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src 2>/dev/null || find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-healt
…(truncated, 40 more chars)
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src
├── business
│ ├── adapters
│ ├── builders
│ ├── constants
│ ├── mappers
│ └── utils
├── hooks
│ ├── useDmpNhr.test.ts
│ ├── useDmpNhr.ts
│ ├── useGetDocumentsContent.test.ts
│ ├── useGetDocumentsContent.ts
│ ├── useNationalHealthRecords.test.ts
│ ├── useNationalHealthRecords.ts
│ ├── useSearchDocuments.test.ts
│ └── useSearchDocuments.ts
├── index.ts
├── locales
│ ├── en
│ └── fr
…(truncated, 313 more chars)
Perfect! Now I have all the information needed. Let me create a comprehensive report.
Summary of Exploration
I have completed a thorough exploration of the national-health-records package at /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src. Here are my findings:
1. columnsFactory.tsx - Complete File
Location: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.tsx
The file exports a single function columnsFactory() that returns an array of 7 ColumnConfig[] objects, each created using factory functions from @doctolib/tpf-national-health-records-ui. The columns are:
1. Document Category - Uses a custom icon wrapper (DocumentCategoryDefaultIcon) with a FileLinesRegularIcon styled with blue background
2. Document Name - Simple text display
3. Procedure Date - Date formatting with accessor function
4. Share Date - Date formatting with accessor function
5. Shared By - Shows patient or author name (with special "Patient" label for patient-authored docs)
6. Status - Uses a pill-based display system (maps status codes to labels/colors)
7. Visibility - Shows visibility restrictions
The factory integrates with:
- Helper functions from dmpDocumentHelpers.ts (mappers for extracting and transforming document data)
- Constants from constants.ts (DMP_CLASS_CODE_LABELS for code-to-label mapping)
- Design System Icons from @doctolib/design-system-icons
2. Directory Structure
src/
├── business/
│ ├── adapters/
│ ├── builders/
│ ├── constants/
│ ├── mappers/
│ └── utils/
├── hooks/
├── index.ts
├── locales/ (en, fr)
├── mocks/
└── variants/
├── dmp/
│ ├── factories/
│ │ ├── columnsFactory.tsx
│ │ ├── columnsFactory.test.ts
│ │ ├── dmpCategoryOptions.ts
│ │ ├── filtersFactory.ts
│ │ └── (test files)
│ ├── mappers/
│ │ ├── dmpDocumentHelpers.ts
│ │ └── mapFiltersToSearchDocumentsParams.ts
│ ├── constants.ts
│ ├── index.ts
│ └── useDmpDocumentListVariant.ts
├── types.ts
└── useNhrDocumentListVariant.ts
3. ColumnConfig Type Definition
Location: /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records-ui/src/types.ts
export type ColumnConfig = {
key: string // Unique identifier (e.g., 'documentCategory')
header: string // Translated column header text
sortable: boolean // Whether column supports sorting
sortAccessor?: (doc: NhrDocument) => string // Optional - required if sortable is true
render: (doc: NhrDocument) => ReactNode // Function to render cell content
}
Current properties:
- key - Stable identifier for React reconciliation
- header - Localized column title
- sortable - Boolean flag (all DMP columns set to false)
- sortAccessor - Optional function for extracting sortable string values (used in mocked columns for date sorting)
- render - React component/node renderer (always required)
4. Test File
Location: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts
Tests the following:
- Factory returns correct column with iconMap prop
- IconMap includes a wildcard ('') catch-all key with a function component
- getTypeCode prop correctly resolves class codes to French labels
- getTypeCode prop handles undefined codes gracefully
- getTypeCode prop falls back to raw code when label not found
Tests use Jest mocks for:
- @doctolib/dmp (DOCUMENT_STATUS constants)
- @doctolib/tpf-national-health-records-ui (all column factory functions)
- ../mappers/dmpDocumentHelpers (document extraction helpers)
5. ColumnConfig Usage in the Monolith
Key locations:
- Import locations:
- columnsFactory.tsx - Imports type from UI package
- variants/types.ts - Re-exports in NhrDocumentListVariant type
- mocks/nhrMockedColumns.ts - Uses for mock columns
- UI package index exports it as public API
- NhrDocumentListVariant integration:
type NhrDocumentListVariant = {
columns: ColumnConfig[]
filters: FilterConfig[]
searchDocuments: (appliedFilters?: Record) => Promise
}
- Mock implementation (nhrMockedColumns.ts):
- Shows all ColumnConfig properties in use
- Includes examples of sortable: true with sortAccessor for date columns
- Demonstrates simple render functions returning text, null, or formatted dates
6. Related Factory Functions in UI Package
The UI package exports factory functions for creating pre-configured columns:
- createNhrDocumentCategoryColumn(options) - Returns ColumnConfig with styled category rendering
- createNhrDocumentNameColumn(options) - Returns ColumnConfig for document titles
- createNhrProcedureDateColumn(options) - Returns ColumnConfig with date formatting
- createNhrShareDateColumn(options) - Returns ColumnConfig with submission date
- createNhrSharedByColumn(options) - Returns ColumnConfig with author/patient display
- createNhrStatusColumn(options) - Returns ColumnConfig with pill-based status display
- createNhrVisibilityColumn(options) - Returns ColumnConfig with visibility entries
Each factory encapsulates rendering logic while accepting configuration options (headers, custom mappers, icon maps, etc.).