Project: workspace-doctolib · Branch: HEAD · Mode: ` · **Model:**claude-haiku-4-5-20251001`
Stats: 1 user messages, 22 tool calls, tools used: Bash, Read.
Conversation
Turn 1 — User
Explore the TPF National Health Records UI package at /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src. I need to understand:
- List all files recursively in the src directory
- Find any files mentioning "lastAccessDate"
- Find any files related to document search or filtering
- Look at the components/hooks that handle date filtering for national health records
- Understand the overall package architecture
Also check: - /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/ - find any worktree for fhir-2035 that might have related UI components
Be thorough and return file paths and key code snippets.
Turn 1 — Assistant
I'll help you explore the TPF National Health Records UI package thoroughly. Let me start by mapping out the directory structure and searching for the specific items you mentioned.
Tools used:
Bash:find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f | head -50
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/i18n.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/entry.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/i18n.test.ts /U …(truncated, 6455 more chars)
Let me get the complete file list and search for the specific items you mentioned.
Tools used:
Bash:find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f | wc -l
Tool results:
→ result (ok): 150
Tools used:
Bash:find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f | sort
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/tests/index.test.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/actions/createMoreActionsAction.test.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/actions/createMoreActionsAction.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/bus …(truncated, 22635 more chars)
Now let me search for files mentioning "lastAccessDate":
Tools used:
Bash:grep -r "lastAccessDate" /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src --include="*.ts" --include="*.tsx" --include="*.json"
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx: lastAccessDate, /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx: lastAccessDate: string /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilter …(truncated, 1862 more chars)
Now let me search for document search and filtering related files:
Tools used:
Bash:grep -r "search\|filter" /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src --include="*.tsx" --include="*.ts" -l | head -30
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/i18n.test.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx /Users/USER/workspace/doctolib/treatment-pl …(truncated, 4005 more chars)
Now let me read key files to understand the architecture. Let me start with the main files:
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, NhrResultStatus } 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. Return
…(truncated, 4043 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 DropdownActionOption, 6 BasicActionConfig, 7 DropdownActionConfig, 8 SimpleActionConfig, 9 ActionsFactory, 10 ColumnConfig, 11 FilterConfig, 12 FilterRenderContext, 13 NhrPatientInfo, 14 NhrVisibilityEntry, 15 StatusOption, 16 NhrDocumentStatusF …(truncated, 2601 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/utils/nhrDateHelpers.ts
Tool results:
→ result (ok): 1 const FALLBACK = '–'
2
3 export const formatNhrDate = (isoDate: string | null | undefined): string => {
4 if (!isoDate) return FALLBACK
5 const date = new Date(isoDate)
6 return Number.isNaN(date.getTime()) ? FALLBACK : date.toLocaleDateString()
7 }
8
9 export const formatNhrDateTime = (isoDate: string | null | undefined): string => {
10 if (!isoDate) return FALLBACK
11 const date = new Date(isoDate)
12 return Number.isNaN(date.getTime())
13 ? FALLBACK
14 : date.toLocaleS
…(truncated, 547 more chars)
Now let me read the date selection filter files which are key:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListFilterPanel/NhrDocumentListFilterPanel.tsx
Tool results:
→ result (ok): 1 import { ArrowRotateLeftRegularIcon } from '@doctolib/design-system-icons/ArrowRotateLeftRegularIcon'
2 import { Button } from '@doctolib/design-system/Button/v2'
3 import { Divider } from '@doctolib/design-system/Divider'
4 import { IconButton } from '@doctolib/design-system/IconButton/v2'
5 import { Paragraph } from '@doctolib/design-system/Paragraph'
6 import { useEffect, useState } from 'react'
7
8 import type { FilterConfig } from '../../types'
9
10 export type NhrDocumentListFilterPane
…(truncated, 4534 more chars)
Let me read the critical date-related filter 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 { formatNhrDateTime } from '#utils/nhrDateHelpers'
2 import type { Option } from '@doctolib/design-system/Option'
3
4 import {
5 type DateMode,
6 NhrDateSelectionFilter,
7 } from '../../../components/NhrDateSelectionFilter/NhrDateSelectionFilter'
8 import type { FilterConfig } from '../../../types'
9
10 export const createNhrDateSelectionFilterConfig = ({
11 label,
12 dateTypeOptions = [],
13 dateTypeLabel,
14 defaultDateType = '',
15 lastAccessDate,
16 fromLabel,
17
…(truncated, 1748 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateSelectionFilter/NhrDateSelectionFilter.tsx
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, 2582 more chars)
Now let me check the main NhrDocumentList and NhrEntryPoint:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.tsx(1–100)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx(1–100)
Tool results:
→ result (ok): 1 import { getPagedData } from '#utils/nhrPaginationHelpers'
2 import { SpinnerLoader } from '@doctolib/design-system/SpinnerLoader'
3 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
4 import { useMemo, useState } from 'react'
5
6 import type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo } from '../../types'
7 import { NhrDocumentListFilterPanel } from '../NhrDocumentListFilterPanel/NhrDocumentListFilterPanel'
8 import { NhrDocumentListHeader } from '../Nhr
…(truncated, 3453 more chars)
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, 1502 more chars)
Now let me check the NhrDocumentListModal to understand full flow:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.tsx(1–80)
Tool results:
→ result (ok): 1 import { Modal } from '@doctolib/design-system/Modal'
2 import { ModalBody } from '@doctolib/design-system/ModalBody'
3 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
4 import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react'
5
6 import { addToast } from '../../business/toast'
7 import type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo, SearchDocumentsFn } from '../../types'
8 import { NhrDocumentList } from '../NhrDocumen
…(truncated, 2449 more chars)
Now let me check the package.json and check for dmp folder:
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp -type d -name "*fhir*" 2>/dev/null | head -20
Tool results:
→ result (ok): (Bash completed with no output)
Tools used:
Bash:ls -la /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/ 2>/dev/null | head -30
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 448 B Tue Apr 28 14:27:18 2026 . drwxr-xr-x clertonra staff 8.9 KB Mon Apr 20 15:32:18 2026 .. drwxr-xr-x clertonra staff 96 B Mon Feb 16 15:51:07 2026 .swc .rw-r--r-- clertonra staff 50 B Wed Dec 17 16:18:33 2025 babel.config.cjs .rw-r--r-- clertonra staff 5.4 KB Fri Apr 24 09:45:44 2026 BUSINESS_KNOWLEDGE.md .rw-r--r-- clertonra staff 320 B Wed Dec 17 16:18:33 2025 catalog-info.yaml .rw-r--r-- clertonra staff 68 B Wed Dec 17 16:18:33 2025 CODEOWNERS.local drw …(truncated, 500 more chars)
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src -type d | head -30
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src/types /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src/business /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src/components /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src/hooks /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/dmp/src/test-helpers /Users/USER/workspace/doctolib/doctolib/packages/@doc …(truncated, 402 more chars)
Tools used:
Bash:git -C /Users/USER/workspace/doctolib/doctolib worktree list 2>/dev/null | grep -i fhir
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib e8b3e695da92 [fhir-2215_wire-dmp-errors-through-dmpnhradapter] /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2089 9c01fcf036d7 (detached HEAD) /Users/USER/workspace/doctolib/worktrees/doctolib/FHIR-2091-nhr-document-list-pagination 0729f7b7bbaa [FHIR-2091-nhr-document-list-pagination] /Users/USER/workspace/doctolib/worktrees/doctolib/FHIR-21 …(truncated, 1092 more chars)
Good! Let me check for the fhir-2035 worktree:
Tools used:
Bash:git -C /Users/USER/workspace/doctolib/doctolib worktree list 2>/dev/null | grep -i "2035"
Tool results:
→ result (ok): (Bash completed with no output)
Let me check the main package json structure:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/package.json
Tool results:
→ result (ok): 1 {
2 "name": "@doctolib/tpf-national-health-records-ui",
3 "version": "16.0.2",
4 "repository": {
5 "type": "git",
6 "url": "git+https://github.com/doctolib/treatment-plan.git"
7 },
8 "keywords": [
9 "upfront",
10 "modular frontend",
11 "smaller-scope"
12 ],
13 "author": "@doctolib/fire",
14 "license": "Doctolib",
15 "doctolib": {
16 "upfront-type": "smaller-scope"
17 },
18 "type": "module",
19 "sideEffects": [
20 "./src/i18n.ts"
21 ],
22
…(truncated, 4204 more chars)
Now let me look at some filter components for better context:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateRangeFilter/NhrDateRangeFilter.tsx
Tool results:
→ result (ok): 1 import { InputDate } from '@doctolib/design-system/InputDate'
2
3 type NhrDateRangeFilterProps = {
4 fromLabel: string
5 toLabel: string
6 fromValue: string
7 toValue: string
8 onFromChange: (value: string) => void
9 onToChange: (value: string) => void
10 }
11
12 export const NhrDateRangeFilter = ({
13 fromLabel,
14 toLabel,
15 fromValue,
16 toValue,
17 onFromChange,
18 onToChange,
19 }: NhrDateRangeFilterProps) => (
20 <div className='flex gap-8 w-full'>
21 <di
…(truncated, 875 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateTypeFilter/NhrDateTypeFilter.tsx
Tool results:
→ result (ok): 1 import type { Option } from '@doctolib/design-system/Option'
2 import { Select } from '@doctolib/design-system/Select'
3
4 type NhrDateTypeFilterProps = {
5 label: string
6 value: string
7 options: Option[]
8 onChange: (value: string) => void
9 }
10
11 export const NhrDateTypeFilter = ({ label, value, options, onChange }: NhrDateTypeFilterProps) => (
12 <Select
13 label={label}
14 name='documentDateType'
15 customStyle={['w-full']}
16 value={value}
17 options={o
…(truncated, 413 more chars)
Perfect! Now let me create a comprehensive summary with all the information gathered. Let me generate the report:
Comprehensive Exploration: TPF National Health Records UI Package
I've completed a thorough exploration of the package architecture, date filtering systems, and document search/filtering capabilities. Here's the complete analysis:
1. COMPLETE FILE STRUCTURE
Total files: 150 across the src directory
Key directory organization:
src/
├── business/ # Business logic and factories
│ ├── factories/
│ │ ├── filters/ # 6 filter config factories
│ │ ├── columns/ # 8 column config factories
│ │ └── actions/ # 2 action factories
│ ├── formatters/
│ ├── toast.ts
├── components/ # React components
│ ├── MultiSelectDropdown/ # 8 files (core + sub-components)
│ ├── NhrDateRangeFilter/ # Date range UI
│ ├── NhrDateSelectionFilter/ # Date mode selector
│ ├── NhrDateTypeFilter/ # Date type selector
│ ├── NhrDocumentList/ # Main table + cells
│ ├── NhrDocumentListFilterPanel/# Filter sidebar panel
│ ├── NhrDocumentListModal/ # Modal wrapper
│ ├── NhrDocumentCategoryFilter/ # Category filter
│ ├── NhrDocumentStatusFilter/ # Status filter
│ ├── NhrDocumentVisibilityFilter/# Visibility filter
│ ├── NhrEntryPoint/ # Entry point + button
├── data/ # Data hooks (empty - future work)
├── helpers/ # Small utilities
├── hooks/ # Shared hooks (none currently)
├── locales/ # i18n translations (en, fr)
├── test-helpers/ # Test fixtures and builders
├── utils/ # Utilities
│ ├── nhrDateHelpers.ts # Date formatting
│ └── nhrPaginationHelpers.ts # Pagination logic
├── types.ts # Core TypeScript definitions
├── index.ts # Public API exports
├── entry.ts # Module federation entry
└── i18n.ts # i18n setup
2. FILES MENTIONING "lastAccessDate"
5 key files:
-
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx- Factory function that creates the date selection filter config - AcceptslastAccessDate: stringparameter - Formats it usingformatNhrDateTime(lastAccessDate)- Passes it to NhrDateSelectionFilter component -
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateSelectionFilter/NhrDateSelectionFilter.tsx- Core presentational component - AcceptslastAccessDate: stringprop - Displays it in a Paragraph whendateMode === 'lastAccess'- Uses i18n key:tpf_national_health_records_ui.filters.date_selection.last_access.message -
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx- Test file withLAST_ACCESS_DATE_ISOconstant -
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateSelectionFilter/NhrDateSelectionFilter.stories.tsx- Storybook stories with sample data -
/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListFilterPanel/NhrDocumentListFilterPanel.stories.tsx- Storybook stories
3. DOCUMENT SEARCH AND FILTERING ARCHITECTURE
Core Types (types.ts)
export type SearchDocumentsResult = {
data: NhrDocument[]
total?: number
status: NhrResultStatus
message?: string
code?: string
}
export type SearchDocumentsFn = (appliedFilters?: Record<string, unknown>) => Promise<SearchDocumentsResult>
export type FilterConfig = {
key: string
render: (
filters: Record<string, unknown>,
onChange: (patch: Record<string, unknown>) => void,
ctx: FilterRenderContext
) => ReactNode
}
Filter Architecture
4 main filter factories:
-
createNhrDateSelectionFilterConfig.tsx(lines 10-53) - Factory returns FilterConfig with key: 'dateMode' - Handles two date modes: 'customDateRange' | 'lastAccess' - Manages filters:dateMode,dateType,submissionDateFrom,submissionDateTo- Takes lastAccessDate as ISO string, formats with formatNhrDateTime() -
createNhrDocumentCategoryFilterConfig.tsx- Category-based filtering -
createNhrDocumentStatusFilterConfig.tsx- Status filtering (maps to StatusOption array) -
createNhrDocumentVisibilityFilterConfig.tsx- Visibility filtering
Document Filtering & Search Flow
File: NhrDocumentListModal.tsx (lines 16-38)
async function fetchDocuments(
searchDocuments: SearchDocumentsFn,
appliedFilters: Record<string, unknown>,
setDocumentsState: Dispatch<SetStateAction<DocumentsState>>
): Promise<void> {
const result = await searchDocuments(appliedFilters)
// Error/success handling
}
Data Flow: 1. User opens modal (NhrEntryPoint -> NhrDocumentListModal) 2. FilterPanel renders all FilterConfig items 3. User selects filters, clicks "Apply filters" 4. NhrDocumentListFilterPanel calls onApply(pendingFilters) 5. NhrDocumentListModal receives new appliedFilters 6. useEffect triggers fetchDocuments(searchDocuments, appliedFilters) 7. Backend receives filters and returns SearchDocumentsResult 8. Results displayed in NhrDocumentListTable
Filter Panel State Management (NhrDocumentListFilterPanel.tsx, lines 84-137):
- Pending state: user selections while panel is open
- Applied state: committed filters driving the query
- Reset button clears pendingFilters to {}
- Apply button commits pendingFilters and closes panel
4. DATE FILTERING COMPONENTS & HOOKS
Component Hierarchy
NhrDateSelectionFilter (presentational, line 28)
├── RadioGroup (dateMode selector: customDateRange vs lastAccess)
├── NhrDateTypeFilter (Select dropdown for date types)
└── NhrDateRangeFilter (conditionally rendered)
├── InputDate (from Label)
└── InputDate (to Label)
Date Helpers (nhrDateHelpers.ts)
export const formatNhrDate = (isoDate: string | null | undefined): string
// Returns localized date (e.g., "3/15/2025")
export const formatNhrDateTime = (isoDate: string | null | undefined): string
// Returns localized datetime with hours/minutes
// Format: "15 Mar 2025, 14:30" (locale-aware)
Key Filter Logic
createNhrDateSelectionFilterConfig.tsx (lines 27-52):
- Extracts filters from current state:
- dateMode: 'customDateRange' (default) or 'lastAccess'
- dateType: [selected value] from dateTypeOptions
- submissionDateFrom: ISO date string
- submissionDateTo: ISO date string
- On user change: calls onChange() with patch object
- Last access date displayed as formatted datetime
5. PACKAGE ARCHITECTURE OVERVIEW
Entry Points
Public API (index.ts):
- Exports components: NhrDocumentList, NhrDocumentListFilterPanel, NhrEntryPoint
- Exports types: FilterConfig, SearchDocumentsFn, NhrPatientInfo, etc.
- Exports factories: createNhrDateSelectionFilterConfig, createNhrStatusColumn, etc.
- Exports filter/action builders for consumers
Module Federation Entry (entry.ts):
- Supports remote component loading
Component Usage Pattern
NhrEntryPoint (top-level component): - Takes: patient info, columns, filters, searchDocuments function, actions - Returns: button + modal - Manages modal open/close state
NhrDocumentListModal: - Wrapper around NhrDocumentList - Manages data fetching (calls searchDocuments with appliedFilters) - Handles errors via toast notifications - Manages action loading state
**NhrDocument …(truncated, 3921 more chars)