Project: workspace-doctolib · Branch: HEAD · Mode: ` · **Model:**claude-haiku-4-5-20251001`
Stats: 1 user messages, 27 tool calls, tools used: Glob, Read, Grep.
Conversation
Turn 1 — User
Explore the national-health-records packages in the Doctolib monolith and treatment-plan to understand the filter data types and interfaces:
- /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src - look for filter-related types, the NhrEntryPoint props, and the filters prop definition
- /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src - look for filter types, column/filter definitions
- /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src - look for the NhrEntryPoint component and how filters/columns props are defined
Show me the TypeScript interfaces and types for filters, columns, and the NhrEntryPoint component props. Also check the existing test files for filter components.
Turn 1 — Assistant
I'll explore these packages to understand the filter data types, interfaces, and component props. Let me start by searching through the relevant directories.
Tools used:
Glob:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/**/*.ts*
Tool results:
→ result (ok): doctolib/packages/@doctolib/national-health-records/src/business/adapters/DmpNhrAdapter.test.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.test.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.test.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.ts doctolib/packages/@doctolib/national-health-records/src/business …(truncated, 2059 more chars)
Tools used:
Glob:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src/**/*.ts*
Tool results:
→ result (ok): treatment-plan/packages/tpf-national-health-records/src/business/nhr-service-factory.ts treatment-plan/packages/tpf-national-health-records/src/business/systems/dmp/types/index.ts treatment-plan/packages/tpf-national-health-records/src/business/systems/dmp/types/types.ts treatment-plan/packages/tpf-national-health-records/src/business/types/index.ts treatment-plan/packages/tpf-national-health-records/src/business/types/participant.ts treatment-plan/packages/tpf-national-health-records/src/busine …(truncated, 272 more chars)
Tools used:
Glob:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/**/*.ts*
Tool results:
→ result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/tests/index.test.ts treatment-plan/packages/tpf-national-health-records-ui/src/i18n.ts treatment-plan/packages/tpf-national-health-records-ui/src/entry.ts treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.stories.tsx treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.tsx treatment-plan/packages/tpf-national-health-re …(truncated, 11778 more chars)
Now let me search for the key type definitions and component interfaces:
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 } from '@doctolib/tpf-national-health-records-ui'
2 import type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient'
3 import type { NhrDocument, NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records'
4
5 interface SearchDocumentsResult {
6 data: NhrDocument[]
7 total: number
8 }
9
10 export type NhrDocumentListVariant = {
11 columns: ColumnConfig[]
12 filters: FilterConfig[]
13 searchDocuments: (appliedFilters?: R
…(truncated, 791 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/filtersFactory.ts
Tool results:
→ result (ok): 1 import {
2 type FilterConfig,
3 createNhrDateSelectionFilterConfig,
4 createNhrDocumentCategoryFilterConfig,
5 createNhrDocumentStatusFilterConfig,
6 createNhrDocumentVisibilityFilterConfig,
7 } from '@doctolib/tpf-national-health-records-ui'
8
9 type FiltersOptions = {
10 lastAccessDate?: string
11 }
12
13 export function filtersFactory({ lastAccessDate = '' }: FiltersOptions = {}): FilterConfig[] {
14 return [
15 createNhrDocumentCategoryFilterConfig(),
16 createNhrDa
…(truncated, 1029 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx
Tool results:
→ result (ok): 1 import { useState } from 'react'
2
3 import type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo, SearchDocumentsFn } from '../../types'
4 import { NhrDocumentListModal } from '../NhrDocumentListModal/NhrDocumentListModal'
5 import { NhrEntryPointButton } from '../NhrEntryPointButton/NhrEntryPointButton'
6
7 export type NhrEntryPointProps = {
8 patient: {
9 show_ins_features?: boolean
10 }
11 patientInfo: NhrPatientInfo
12 title: string
13 columns: ColumnConfig[]
14
…(truncated, 1162 more chars)
Tools used:
Grep:interface.*Filter|type.*Filterin/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src
Tool results:
→ result (ok): No files found
Let me continue searching for filter types and interface definitions:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/entry.ts
Tool results:
→ result (ok): 1 // For module federation 2 export const NhrEntryPoint = import('./components/NhrEntryPoint/NhrEntryPoint') 3
Tools used:
Grep:type FilterConfig|interface FilterConfig|export.*FilterConfigin/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src
Tool results:
→ result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:34:export { createNhrDocumentCategoryFilterConfig } from './business/factories/filters/createNhrDocumentCategoryFilterConfig' treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:35:export { createNhrDateSelectionFilterConfig } from './business/factories/filters/createNhrDateSelectionFilterConfig' treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:49:export { createNhrDocumentStatusFilterConfig } …(truncated, 1227 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types
Tool results:
→ result (ERROR): File does not exist. Note: your current working directory is /Users/USER/workspace/doctolib. Did you mean types.ts?
Let me find the types file:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts
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, 2157 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts
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, 2130 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx
Tool results:
→ result (ok): 1 import type { Option } from '@doctolib/design-system/Option'
2
3 import { NhrDocumentCategoryFilter } from '../../../components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter'
4 import type { FilterConfig } from '../../../types'
5
6 export const createNhrDocumentCategoryFilterConfig = (options: Option[] = [], defaultValue = ''): FilterConfig => ({
7 key: 'typeCodes',
8 render: (filters, onChange) => {
9 const currentValue = (filters.typeCodes as string[] | undefi
…(truncated, 394 more chars)
Now let me check the filter factories and test files:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx
Tool results:
→ result (ok): 1 import type { Option } from '@doctolib/design-system/Option'
2
3 import {
4 type DateMode,
5 NhrDateSelectionFilter,
6 } from '../../../components/NhrDateSelectionFilter/NhrDateSelectionFilter'
7 import type { FilterConfig } from '../../../types'
8
9 export const createNhrDateSelectionFilterConfig = ({
10 label,
11 dateTypeOptions = [],
12 dateTypeLabel,
13 defaultDateType = '',
14 lastAccessDate,
15 fromLabel,
16 toLabel,
17 }: {
18 label: string
19 dateTypeOptions?: O
…(truncated, 1328 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.tsx
Tool results:
→ result (ok): 1 import { NhrDocumentStatusFilter } from '../../../components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter'
2 import type { FilterConfig, StatusOption } from '../../../types'
3
4 export const createNhrDocumentStatusFilterConfig = (statuses: StatusOption[], label: string): FilterConfig => ({
5 key: 'documentStatus',
6 render: (filters, onChange) => (
7 <NhrDocumentStatusFilter
8 label={label}
9 statuses={statuses}
10 value={statuses.filter((s) => fil
…(truncated, 158 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentVisibilityFilterConfig.tsx
Tool results:
→ result (ok): 1 import { NhrDocumentVisibilityFilter } from '../../../components/NhrDocumentVisibilityFilter/NhrDocumentVisibilityFilter'
2 import type { FilterConfig, VisibilityOption } from '../../../types'
3
4 type CreateNhrDocumentVisibilityFilterConfigOptions = {
5 groupLabel: string
6 visibilityModes: VisibilityOption[]
7 }
8
9 export const createNhrDocumentVisibilityFilterConfig = ({
10 groupLabel,
11 visibilityModes,
12 }: CreateNhrDocumentVisibilityFilterConfigOptions): FilterConfig => ({
1
…(truncated, 337 more chars)
Now let me check the test files and the filter components:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx
Tool results:
→ result (ok): 1 import { setup } from '@doctolib/test-helpers'
2 import { screen } from '@testing-library/react'
3 import { describe, expect, it, vi } from 'vitest'
4
5 import { mockPatientInfo } from '../../../test-helpers'
6 import { createNhrDocumentCategoryFilterConfig } from './createNhrDocumentCategoryFilterConfig'
7
8 const ctx = { patient: mockPatientInfo }
9
10 describe('createNhrDocumentCategoryFilterConfig', () => {
11 const renderFilter = (
12 options = [{ value: 'A', label: 'Report A' }]
…(truncated, 1627 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx
Tool results:
→ result (ok): 1 import { t } from '#i18n'
2 import { setup } from '@doctolib/test-helpers'
3 import { screen } from '@testing-library/react'
4 import { describe, expect, it, vi } from 'vitest'
5
6 import { mockPatientInfo } from '../../../test-helpers'
7 import { createNhrDateSelectionFilterConfig } from './createNhrDateSelectionFilterConfig'
8
9 const ctx = { patient: mockPatientInfo }
10
11 describe('createNhrDateSelectionFilterConfig', () => {
12 const renderFilter = (filters: Record<string, unknown>
…(truncated, 4197 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.test.tsx
Tool results:
→ result (ok): 1 import { setup } from '@doctolib/test-helpers'
2 import { screen } from '@testing-library/react'
3 import { describe, expect, it, vi } from 'vitest'
4
5 import { mockPatientInfo } from '../../../test-helpers'
6 import { createNhrDocumentStatusFilterConfig } from './createNhrDocumentStatusFilterConfig'
7
8 // ctx is required by FilterConfig.render but unused by this filter
9 const ctx = { patient: mockPatientInfo }
10
11 const sampleStatuses = [
12 { filterKey: 'includeArchived', label: 'A
…(truncated, 1866 more chars)
Now let me check the NhrEntryPoint test and the column configuration types:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.test.tsx
Tool results:
→ result (ok): 1 import { t } from '#i18n'
2 import { setup } from '@doctolib/test-helpers'
3 import { screen } from '@testing-library/react'
4 import { describe, expect, it, vi } from 'vitest'
5
6 import { mockColumns, mockPatientInfo } from '../../test-helpers'
7 import { NhrEntryPoint } from './NhrEntryPoint'
8
9 describe('NhrEntryPoint', () => {
10 it('should render the button if show_ins_features flag in patient is true and status is enabled', () => {
11 setup(
12 <NhrEntryPoint
13 p
…(truncated, 2240 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/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'
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 / Extracts the human-readable do
…(truncated, 764 more chars)
Tools used:
Grep:type.*Option|interface.*Optionin/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src
Tool results:
→ result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:19: type NhrStatusColumnOptions,
treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:24: type NhrSharedByColumnOptions,
treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:28: type NhrProcedureDateColumnOptions,
treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:32: type NhrDocumentCategoryColumnOptions,
treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:39:
…(truncated, 3523 more chars)
Now let me look at the DMP filters factory to understand the server filters mapping:
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/mappers/mapFiltersToSearchDocumentsParams.ts
Tool results:
→ result (ok): 1 import type { NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records'
2 import { DOCUMENT_STATUS, DOCUMENT_VISIBILITY } from '@doctolib/dmp'
3 import type { ServerFilters } from '../../types'
4 import { toNhrPatientInformation } from '../../../business/mappers/toNhrPatientInformation'
5
6 // Maps UI-level ServerFilters to the NhrDocumentSearchParams format expected by the NHR API.
7 // Each ServerFilters field needs an explicit mapping — field names do not match NhrDocumentSear
…(truncated, 2415 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts
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 { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon' 13 …(truncated, 1466 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.ts
Tool results:
→ result (ok): 1 import { nhrDocumentFixtureBuilder } from './nhrDocumentFixtureBuilder'
2 import { nhrPatientInfoFixtureBuilder } from './nhrPatientInfoFixtureBuilder'
3
4 export { nhrDocumentListColumns as mockColumns } from '../../components/NhrEntryPoint/nhrDocumentListColumns'
5
6 export const mockPatientInfo = nhrPatientInfoFixtureBuilder()
7
8 export const mockRows = [
9 nhrDocumentFixtureBuilder(),
10 nhrDocumentFixtureBuilder({
11 id: '2',
12 title: 'MRI Brain scan',
13 creationDate
…(truncated, 652 more chars)
Perfect! Let me check a few more filter component files to understand the complete picture:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateSelectionFilter/NhrDateSelectionFilter.tsx(1–50)
Tool results:
→ result (ok): 1 import { t } from '#i18n'
2 import type { Option } from '@doctolib/design-system/Option'
3 import { Paragraph } from '@doctolib/design-system/Paragraph'
4 import { RadioGroup } from '@doctolib/design-system/RadioGroup'
5
6 import { NhrDateRangeFilter } from '../NhrDateRangeFilter/NhrDateRangeFilter'
7 import { NhrDateTypeFilter } from '../NhrDateTypeFilter/NhrDateTypeFilter'
8
9 export type DateMode = 'customDateRange' | 'lastAccess'
10
11 type NhrDateSelectionFilterProps = {
12 label: st
…(truncated, 909 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter.tsx(1–50)
Tool results:
→ result (ok): 1 import { Checkbox } from '@doctolib/design-system/Checkbox/v2'
2 import { Heading } from '@doctolib/design-system/Heading'
3
4 import type { NhrDocumentStatusFilterProps } from '../../../types'
5
6 export const NhrDocumentStatusFilter = ({ label, statuses, value, onChange }: NhrDocumentStatusFilterProps) => (
7 <>
8 <Heading level='h5'>{label}</Heading>
9 <div className='flex flex-col'>
10 {statuses.map((status) => (
11 <Checkbox
12 key={status.filterKey}
13
…(truncated, 306 more chars)
Excellent! Now I have a comprehensive understanding of the filter and interface types. Let me create a summary document with all the key TypeScript interfaces and types.
Summary of National Health Records Filter Data Types and Interfaces
Based on my exploration of the Doctolib monolith and treatment-plan repositories, here are the comprehensive TypeScript interfaces and types for the NHR filter system:
Core Filter Types
Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts
/** One filter control definition — render patches only its own key(s) via onChange */
export type FilterConfig = {
key: string
render: (
/** generic — DMP variant casts to DmpServerFilters */
filters: Record<string, unknown>,
onChange: (patch: Record<string, unknown>) => void,
ctx: FilterRenderContext
) => ReactNode
}
/** Passed to every FilterConfig.render() — country variant casts to its own patient type */
export type FilterRenderContext = {
patient: NhrPatientInfo
}
export type NhrPatientInfo = {
fullName: string
gender: 'male' | 'female' | 'other'
birthDate: string
age: number
}
Status and Visibility Options
export type StatusOption = {
filterKey: string
label: string
isDisabled?: boolean
}
export type VisibilityOption = {
filterKey: string
label: string
isDisabled?: boolean
}
export type NhrDocumentStatusFilterProps = {
label: string
statuses: StatusOption[]
value: string[]
onChange: (filterKey: string, checked: boolean) => void
}
Column Configuration Types
Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts
export type ColumnConfig = {
key: string
header: string
sortable: boolean
/** Only required when sortable: true. Returns a string for locale-aware comparison. */
sortAccessor?: (doc: NhrDocument) => string
render: (doc: NhrDocument) => ReactNode
}
NhrEntryPoint Component Props
Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx
export type NhrEntryPointProps = {
patient: {
show_ins_features?: boolean
}
patientInfo: NhrPatientInfo
title: string
columns: ColumnConfig[]
filters: FilterConfig[]
searchDocuments: SearchDocumentsFn
actions?: ActionConfig[]
newDocumentsCount?: number
status: 'enabled' | 'disabled' | 'missing_requirements'
}
Server-Level Filters (Domain Types)
Location: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts
export type BaseServerFilters = {
typeCodes?: string[]
dateType?: 'shareDate' | 'procedureDate'
submissionDateFrom?: string
submissionDateTo?: string
}
export type DmpServerFilters = {
includeArchived?: boolean
includeObsolete?: boolean
includeMaskedToProfessionals?: boolean
includeInvisibleToPatient?: boolean
includeInvisibleToLegalReps?: boolean
}
export type ServerFilters = BaseServerFilters & DmpServerFilters
export type NhrDocumentListVariant = {
columns: ColumnConfig[]
filters: FilterConfig[]
searchDocuments: (appliedFilters?: Record<string, unknown>) => Promise<SearchDocumentsResult>
}
Action Configuration Types
/** Factory that produces actions for a given document selection callback */
export type ActionsFactory = (onDocumentSelected: (id: string) => void) => ActionConfig[]
/** One action button definition — rendered as an IconButtonV2 in the actions cell of each row */
export type ActionConfig = {
/** Unique key for React reconciliation */
key: string
/** Tooltip text & aria-label for the icon button */
tooltip: string
/** Icon component from @doctolib/design-system-icons (e.g. EyeRegularIcon) */
iconComponent: DesignSystemIconComponent
/** IconButtonV2 variant — defaults to 'transparent' */
variant?: 'solid' | 'outlined' | 'transparent'
/** Called when the button is clicked */
onClick: (doc: NhrDocument) => Promise<void>
}
export type SearchDocumentsFn = (
appliedFilters?: Record<string, unknown>
) => Promise<{ data: NhrDocument[]; total?: number }>
Column Factory Options Types
export type NhrDocumentCategoryColumnOptions = {
header: string
getTypeCode: (doc: NhrDocument) => string | undefined
iconMap?: IconMap
}
export type NhrDocumentNameColumnOptions = {
header: string
}
export type NhrProcedureDateColumnOptions = {
header: string
getDate: (doc: NhrDocument) => string | undefined
}
export type NhrShareDateColumnOptions = {
header: string
getDate: (doc: NhrDocument) => string | undefined
}
export type NhrSharedByColumnOptions = {
header: string
isPatientAuthored: (doc: NhrDocument) => boolean
patientLabel: string
getAuthorName: (doc: NhrDocument) => string | undefined
}
export type NhrStatusColumnOptions = {
header: string
splitStatus: (status: string) => string[]
statusMap: Record<string, NhrDocumentStatusConfig>
defaultStatus: NhrDocumentStatusConfig
}
export type NhrVisibilityColumnOptions = {
header: string
getVisibilityEntries: (doc: NhrDocument) => NhrVisibilityEntry[]
}
Filter Factory Function Signatures
Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/
// Category Filter
export const createNhrDocumentCategoryFilterConfig = (
options: Option[] = [],
defaultValue = ''
): FilterConfig
// Date Selection Filter
export const createNhrDateSelectionFilterConfig = ({
label,
dateTypeOptions?,
dateTypeLabel,
defaultDateType?,
lastAccessDate,
fromLabel,
toLabel,
}: {
label: string
dateTypeOptions?: Option[]
dateTypeLabel: string
defaultDateType?: string
lastAccessDate: string
fromLabel: string
toLabel: string
}): FilterConfig
// Document Status Filter
export const createNhrDocumentStatusFilterConfig = (
statuses: StatusOption[],
label: string
): FilterConfig
// Document Visibility Filter
export const createNhrDocumentVisibilityFilterConfig = ({
groupLabel,
visibilityModes,
}: {
groupLabel: string
visibilityModes: VisibilityOption[]
}): FilterConfig
Filter Components (Presentational)
// Date Selection Filter Component
type NhrDateSelectionFilterProps = {
label: string
dateMode: DateMode
onDateModeChange: (mode: DateMode) => void
dateTypeLabel: string
dateTypeValue: string
dateTypeOptions: Option[]
onDateTypeChange: (value: string) => void
lastAccessDate: string
fromLabel: string
toLabel: string
fromValue: string
toValue: string
onFromChange: (value: string) => void
onToChange: (value: string) => void
}
export type DateMode = 'customDateRange' | 'lastAccess'
// Status Filter Component Props (already defined in types)
export type NhrDocumentStatusFilterProps = {
label: string
statuses: StatusOption[]
value: string[]
onChange: (filterKey: string, checked: boolean) => void
}
Test Files Reference
Key test files demonstrating filter types:
-
Filter Config Tests: -
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx-/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx-/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.test.tsx-/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentVisibilityFilterConfig.test.tsx -
Component Tests: - `/Users/USER/workspace …(truncated, 2075 more chars)