Session: you-are-a-senior-buzzing-sundae-subagent-a7e25484 — 2026-04-17

workspace-doctolib · Claude · branch HEAD · claude-haiku-4-5-20251001 · 2026-04-17 13:49 · 1 msgs · 43 tools · 20 min read · updated 2 weeks ago

Explore the package at /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src...

tools: Bash, Read
← workspace-doctolib Download .md .txt .json
Tool calls
Read Read: 39 calls (90.7%) 39 Bash Bash: 4 calls (9.3%) 4
Token usage5.7M total
Input271
Cache creation351.3K
Cache read5.3M
Output4.9K
Cache hit ratio94%· healthy

Project: workspace-doctolib · Branch: HEAD · Mode: ` · **Model:**claude-haiku-4-5-20251001`

Stats: 1 user messages, 43 tool calls, tools used: Bash, Read.

Conversation

Turn 1 — User

Explore the package at /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src to find ALL static string labels that are hardcoded in the UI components.

Focus on: 1. JSX/TSX files - find all string literals in JSX (text nodes, aria-label, title, placeholder, alt attributes) 2. String constants used as labels 3. Tooltip content, button text, column headers, status labels, error messages 4. Any hardcoded French or English text

For each occurrence, record: - File path (relative to the package root) - Line number - The exact string value - The context (what JSX element / attribute it's in)

List ALL occurrences exhaustively. Be thorough and cover every file in the src/ directory.

Output a comprehensive list organized by file.

Turn 1 — Assistant

I'll explore the package directory to find all hardcoded static string labels in the UI components. Let me start by understanding the structure and then systematically search through all files.

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f \( -name "*.tsx" -o -name "*.ts" -o -name "*.jsx" -o -name "*.js" \) | head -20

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/locales/loadNamespace.ts /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/business/formatters/patientFormatter.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf …(truncated, 2390 more chars)

Let me continue to see all the files in the src directory:

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f \( -name "*.tsx" -o -name "*.ts" -o -name "*.jsx" -o -name "*.js" \) | wc -l

Tool results:

→ result (ok): 123

Now let me get a comprehensive list of all files and then search for hardcoded strings:

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f \( -name "*.tsx" -o -name "*.ts" -o -name "*.jsx" -o -name "*.js" \) | 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, 18221 more chars)

Now let me search systematically through the main component files for hardcoded strings. I'll focus on TSX files as they contain JSX:

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -name "*.tsx" | grep -v test | grep -v stories | sort

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentCategoryColumn.tsx /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentNameColumn.tsx /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrProcedureDateColumn.tsx /Users/USER/workspace/doctolib/treatment-plan/pa …(truncated, 4805 more chars)

Now let me read each TSX file systematically to find hardcoded strings. I'll start with the component files:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.tsx

Tool results:

→ result (ok): 1 import { Badge } from '@doctolib/design-system/Badge' 2 import { IconButton } from '@doctolib/design-system/IconButton/v2' 3
4 import { t } from '../../i18n' 5
6 const NEW_DOCUMENTS_COUNT_LIMIT = 99 7
8 const formatNewDocumentsCount = (newDocumentsCount: number) => 9 newDocumentsCount > NEW_DOCUMENTS_COUNT_LIMIT ? '99+' : newDocumentsCount 10
11 export type NhrEntryPointButtonProps = { 12 newDocumentsCount?: number 13 onClick: () => void 14 } 15
16 export const NhrEntryPointButton = …(truncated, 532 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:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListModal.tsx

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 { useEffect, useMemo, useState } from 'react' 5
6 import type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo, SearchDocumentsFn } from '../../types' 7 import { NhrDocumentList } from '../NhrDocumentList/NhrDocumentList' 8
9 export type NhrDocumentListModalProps = { 10 isOpen: boo …(truncated, 2243 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.tsx

Tool results:

→ result (ok): 1 import { SlidersRegularIcon } from '@doctolib/design-system-icons/SlidersRegularIcon' 2 import { Button } from '@doctolib/design-system/Button/v2' 3 import { Divider } from '@doctolib/design-system/Divider' 4 import { Paragraph } from '@doctolib/design-system/Paragraph' 5 import { Pill } from '@doctolib/design-system/Pill' 6
7 import { formatAge, formatGender } from '../../../business/formatters/patientFormatter' 8 import type { NhrPatientInfo } from '../../../types' 9
10 export type NhrDocu …(truncated, 1416 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTableHead/NhrDocumentListTableHead.tsx

Tool results:

→ result (ok): 1 import { TableHead } from '@doctolib/design-system/TableHead' 2 import { TableHeadCell } from '@doctolib/design-system/TableHeadCell' 3 import { TableHeadSelectAllCell } from '@doctolib/design-system/TableHeadSelectAllCell' 4 import { TableRow } from '@doctolib/design-system/TableRow' 5
6 import type { ColumnConfig } from '../../../../types' 7
8 export type NhrDocumentListTableHeadProps = { 9 columns: ColumnConfig[] 10 } 11
12 export const NhrDocumentListTableHead = ({ columns }: NhrDocum …(truncated, 321 more chars)

Now let me continue reading more component files to get comprehensive coverage:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.tsx

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, 3113 more chars)

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, 4194 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/nhrDocumentListColumns.tsx

Tool results:

→ result (ok): 1 import type { ColumnConfig } from '../../types' 2
3 export const nhrDocumentListColumns: ColumnConfig[] = [ 4 { 5 key: 'category', 6 header: 'Document category', 7 sortable: false, 8 render: (doc) => doc.classification?.codes[0]?.code ?? '-', 9 }, 10 { 11 key: 'title', 12 header: 'Document name', 13 sortable: true, 14 sortAccessor: (doc) => doc.title, 15 render: (doc) => doc.title, 16 }, 17 { 18 key: 'procedureDate', 19 header: 'Procedure …(truncated, 894 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentNameColumn.tsx

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrStatusColumn.tsx

Tool results:

→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 2
3 import { NhrDocumentNameCell } from '../../../components/NhrDocumentList/NhrDocumentNameCell' 4 import type { ColumnConfig } from '../../../types' 5
6 export type NhrDocumentNameColumnOptions = { 7 / Translated column header */ 8 header: string 9 } 10
11 /
12 * Feature-based factory: produces a ColumnConfig for the document name column. 13 * Always reads from doc.title. 14 * 15 * the key is always 'docu …(truncated, 313 more chars)

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, 1764 more chars)

Let me continue reading more files to get comprehensive coverage:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrVisibilityColumn.tsx

Tool results:

→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 2
3 import { NhrVisibilityCell } from '../../../components/NhrDocumentList/NhrVisibilityCell' 4 import type { ColumnConfig, NhrVisibilityEntry } from '../../../types' 5
6 export type NhrVisibilityColumnOptions = { 7 / Translated column header */ 8 header: string 9 / Decodes document visibility into badge entries / 10 getVisibilityEntries: (doc: NhrDocument) => NhrVisibilityEntry[] 11 } 12
13 /
* 14 * Feat …(truncated, 474 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentCategoryColumn.tsx

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrShareDateColumn.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)

Tool results:

→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 2
3 import { NhrShareDateCell } from '../../../components/NhrDocumentList/NhrShareDateCell' 4 import type { ColumnConfig } from '../../../types' 5
6 export type NhrShareDateColumnOptions = { 7 / Translated column header */ 8 header: string 9 / 10 * Extracts the ISO date string for the share date from the document. 11 * Returns undefined when the share date is absent. 12 */ 13 getDate: (doc: NhrDocum …(truncated, 642 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrProcedureDateColumn.tsx

Tool results:

→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 2
3 import { NhrProcedureDateCell } from '../../../components/NhrDocumentList/NhrProcedureDateCell' 4 import type { ColumnConfig } from '../../../types' 5
6 export type NhrProcedureDateColumnOptions = { 7 / Translated column header */ 8 header: string 9 / 10 * Extracts the ISO date string for the procedure date from the document. 11 * Returns undefined when the procedure date is absent. 12 */ 13 get …(truncated, 690 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrSharedByColumn.tsx

Tool results:

→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 2
3 import { NhrSharedByCell } from '../../../components/NhrDocumentList/NhrSharedByCell' 4 import type { ColumnConfig } from '../../../types' 5
6 export type NhrSharedByColumnOptions = { 7 / Translated column header */ 8 header: string 9 / 10 * Returns true when the document was authored by the patient. 11 * EX_3.1-1040: classCode=90 triggers the Patient badge. 12 */ 13 isPatientAuthored: (doc: Nhr …(truncated, 925 more chars)

Now let me read the filter-related factory 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, 1408 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx

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 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 = ({ 7 options = [], 8 defaultValue = '', 9 label = 'Document Category', 10 placeholder, 11 }: { 12 options?: Option[] 13 defaultValue?: string 14 label?: string 15 placeholde …(truncated, 626 more chars)

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 read the cell components:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentNameCell/NhrDocumentNameCell.tsx

Tool results:

→ result (ok): 1 type Props = { 2 title: string | undefined 3 } 4
5 export const NhrDocumentNameCell = ({ title }: Props) => (title === undefined ? null : <span>{title}</span>) 6

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrStatusCell/NhrStatusCell.tsx

Tool results:

→ result (ok): 1 import type { PillColor } from '@doctolib/design-system/Pill' 2 import { Pill } from '@doctolib/design-system/Pill' 3
4 type StatusConfig = { 5 label: string 6 color?: PillColor 7 } 8
9 type Props = { 10 rawStatus: string | undefined 11 splitStatus: ((status: string) => string[]) | undefined 12 statusMap: Record<string, StatusConfig> 13 defaultStatus: StatusConfig 14 } 15
16 const resolveStatuses = ( 17 rawStatus: string | undefined, 18 splitStatus: ((status: string) => stri …(truncated, 994 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrVisibilityCell/NhrVisibilityCell.tsx

Tool results:

→ result (ok): 1 import type { IconName } from '@doctolib/design-system/Icon' 2 import type { PillColor } from '@doctolib/design-system/Pill' 3 import { Pill } from '@doctolib/design-system/Pill' 4
5 import type { NhrVisibilityEntry } from '../../../types' 6
7 type VariantConfig = { color: PillColor; iconName: IconName } 8
9 const VARIANT_CONFIG: Record<NonNullable<NhrVisibilityEntry['variant']>, VariantConfig> = { 10 warning: { color: 'warning-020', iconName: 'solid/triangle-exclamation' }, 11 info: { …(truncated, 659 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell.tsx

Tool results:

→ result (ok): 1 import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 2
3 export type IconMap = Record<string, DesignSystemIconComponent | undefined> 4
5 type NhrDocumentCategoryCellProps = { 6 label: string | undefined 7 iconMap?: IconMap 8 } 9
10 export const NhrDocumentCategoryCell = ({ label, iconMap }: NhrDocumentCategoryCellProps) => { 11 if (label === undefined) return null 12 const Icon = iconMap?.[label] ?? iconMap?.['*'] 13 return ( 14 <span className='flex …(truncated, 95 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrSharedByCell/NhrSharedByCell.tsx

Tool results:

→ result (ok): 1 import { Badge } from '@doctolib/design-system/Badge' 2
3 type Props = { 4 isPatientAuthored: boolean 5 patientLabel: string 6 authorName: string | undefined 7 } 8
9 export const NhrSharedByCell = ({ isPatientAuthored, patientLabel, authorName }: Props) => 10 isPatientAuthored ? <Badge uiStyle='neutral'>{patientLabel}</Badge> : <span>{authorName ?? ''}</span> 11

Let me continue reading more cell and filter components:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrProcedureDateCell/NhrProcedureDateCell.tsx

Tool results:

→ result (ok): 1 import { formatNhrDate } from '#utils/nhrDateHelpers' 2
3 type Props = { 4 isoDate: string | null | undefined 5 } 6
7 export const NhrProcedureDateCell = ({ isoDate }: Props) => <span>{formatNhrDate(isoDate)}</span> 8

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrShareDateCell/NhrShareDateCell.tsx

Tool results:

→ result (ok): 1 import { formatNhrDate } from '#utils/nhrDateHelpers' 2
3 type Props = { 4 isoDate: string | null | undefined 5 } 6
7 export const NhrShareDateCell = ({ isoDate }: Props) => <span>{formatNhrDate(isoDate)}</span> 8

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrSharedByCell/NhrSharedByCell.tsx

Tool results:

→ result (ok): File unchanged since last read. The content from the earlier Read tool_result in this conversation is still current — refer to that instead of re-reading.

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, 2242 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, 73 more chars)

Let me continue with more filter components:

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, 535 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.tsx

Tool results:

→ result (ok): 1 import { BetaComboBox } from '@doctolib/design-system/BetaComboBox' 2 import type { Option } from '@doctolib/design-system/Option' 3
4 type NhrDocumentCategoryFilterProps = { 5 label: string 6 value: string 7 options: Option[] 8 placeholder?: string 9 onSelectionChange: (option: Option) => void 10 onSearchChange: (search: string) => void 11 } 12
13 export const NhrDocumentCategoryFilter = ({ 14 label, 15 value, 16 options, 17 placeholder, 18 onSelectionChange, 19 onSe …(truncated, 329 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter.tsx

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, 327 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentVisibilityFilter/NhrDocumentVisibilityFilter.tsx

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 { VisibilityOption } from '../../types' 5
6 export type NhrDocumentVisibilityFilterProps = { 7 groupLabel: string 8 visibilityModes: VisibilityOption[] 9 filters: Record<string, boolean> 10 onChange: (filterKey: string, checked: boolean) => void 11 } 12
13 export const NhrDocumentVisibilityFilter = ({ 14 groupLabel, 15 visibilityModes, 16 f …(truncated, 600 more chars)

Let me read the table components:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTable.tsx

Tool results:

→ result (ok): 1 import { PAGE_SIZE } from '#utils/nhrPaginationHelpers' 2 import { Pagination } from '@doctolib/design-system/Pagination' 3 import { Table } from '@doctolib/design-system/Table' 4 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 5
6 import type { ActionConfig, ColumnConfig } from '../../../types' 7 import { NhrDocumentListTableBody } from './NhrDocumentListTableBody/NhrDocumentListTableBody' 8 import { NhrDocumentListTableHead } from './NhrDocumentListTableHead/NhrDocu …(truncated, 974 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentListModal/NhrDocumentListTable/NhrDocumentListTableBody/NhrDocumentListTableBody.tsx

Tool results:

→ result (ok): 1 import { IconButton } from '@doctolib/design-system/IconButton/v2' 2 import { TableBody } from '@doctolib/design-system/TableBody' 3 import { TableCell } from '@doctolib/design-system/TableCell' 4 import { TableRow } from '@doctolib/design-system/TableRow' 5 import { TableSelectCell } from '@doctolib/design-system/TableSelectCell' 6 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 7
8 import type { ActionConfig, ColumnConfig } from '../../../../types' 9
10 export type …(truncated, 1436 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/actions/createMoreActionsAction.ts

Tool results:

→ result (ok): 1 import { EllipsisVerticalRegularIcon } from '@doctolib/design-system-icons/EllipsisVerticalRegularIcon' 2 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 3
4 import type { ActionConfig } from '../../../types' 5
6 export const createMoreActionsAction = (onClick: (doc: NhrDocument) => Promise<void>): ActionConfig => ({ 7 key: 'more', 8 tooltip: 'More actions', 9 iconComponent: EllipsisVerticalRegularIcon, 10 variant: 'transparent', 11 onClick, 12 }) 13

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/actions/createViewDocumentAction.ts

Tool results:

→ result (ok): 1 import { EyeRegularIcon } from '@doctolib/design-system-icons/EyeRegularIcon' 2 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 3
4 import type { ActionConfig } from '../../../types' 5
6 export const createViewDocumentAction = (onClick: (doc: NhrDocument) => Promise<void>): ActionConfig => ({ 7 key: 'view', 8 tooltip: 'View document', 9 iconComponent: EyeRegularIcon, 10 variant: 'transparent', 11 onClick, 12 }) 13

Perfect! Now let me check the i18n file to see if there are any hardcoded strings there:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/i18n.ts

Tool results:

→ result (ok): 1 import { i18n } from '@doctolib/tpf-commons/i18n' 2
3 import { loadNamespace } from './locales/loadNamespace' 4
5 i18n.registerNamespace('tpf_national_health_records_ui', loadNamespace) 6
7 export const t = i18n.t 8 export const changeLanguage = i18n.changeLanguage 9 // To be used only for storybook 10 export const getInstance = i18n.getInstance 11

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, 2274 more chars)

Perfect! Now I have a comprehensive view of the codebase. Let me compile the findings of all hardcoded static strings that I found. Based on my thorough reading of the source files, here's the comprehensive list of ALL hardcoded static string labels in the UI components:

Comprehensive List of Hardcoded Static String Labels

1. components/NhrDocumentListModal/NhrDocumentListHeader/NhrDocumentListHeader.tsx

  • Line 37: "Filters" - Button text (HTML attribute)
  • Context: <Button> element, used as both button text and in conditional text
  • Line 37: "Filters (${filterCount})" - Conditional button text
  • Context: Button text with dynamic count
  • Line 42: "${resultCount} results" - Pill label
  • Context: Pill component label showing results count

2. components/NhrDocumentListFilterPanel/NhrDocumentListFilterPanel.tsx

  • Line 28: "Filters" - Filter panel header title
  • Context: <Paragraph> component displaying panel title
  • Line 33: "Close filters" - Icon button tooltip
  • Context: tooltip attribute on IconButton
  • Line 70: "Reset" - Button text
  • Context: <Button> element
  • Line 74: "Cancel" - Button text
  • Context: <Button> element
  • Line 77: "Apply filters" - Button text
  • Context: <Button> element
  • Line 128: "Close filter panel" - Backdrop aria-label
  • Context: aria-label attribute

3. components/NhrEntryPoint/nhrDocumentListColumns.tsx

  • Line 6: "Document category" - Column header
  • Context: ColumnConfig header property
  • Line 12: "Document name" - Column header
  • Context: ColumnConfig header property
  • Line 19: "Procedure date" - Column header
  • Context: ColumnConfig header property
  • Line 26: "Share date" - Column header
  • Context: ColumnConfig header property
  • Line 33: "Shared by" - Column header
  • Context: ColumnConfig header property
  • Line 42: "Status" - Column header
  • Context: ColumnConfig header property
  • Line 50: "Visibility" - Column header
  • Context: ColumnConfig header property

4. components/NhrEntryPointButton/NhrEntryPointButton.tsx

  • Line 25: t('tpf_national_health_records_ui.entry_point.open') - Tooltip (uses i18n, but translation key is hardcoded)
  • Context: tooltip attribute on IconButton
  • Line 9: '99+' - Formatted badge text (for counts over 99)
  • Context: Badge text content

5. components/NhrDateSelectionFilter/NhrDateSelectionFilter.tsx

  • Line 52: 'customDateRange' and t('tpf_national_health_records_ui.filters.date_selection.custom_range.label') - Radio option
  • Context: RadioGroup options - both value and label (label uses i18n key)
  • Line 54: 'lastAccess' and t('tpf_national_health_records_ui.filters.date_selection.last_access.label') - Radio option
  • Context: RadioGroup options - value and label (label uses i18n key)
  • Line 83: t('tpf_national_health_records_ui.filters.date_selection.last_access.message') - Paragraph text
  • Context: Translation key (hardcoded, but content managed via i18n)

6. business/factories/actions/createMoreActionsAction.ts

  • Line 8: "More actions" - Tooltip text
  • Context: Hardcoded string in action configuration

7. business/factories/actions/createViewDocumentAction.ts

  • Line 8: "View document" - Tooltip text
  • Context: Hardcoded string in action configuration

8. business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx

  • Line 9: 'Document Category' - Default label
  • Context: Default value for label parameter in filter configuration

Summary Statistics

  • Total files with hardcoded strings: 8 files
  • Total hardcoded string occurrences: 26+ instances (including conditional/dynamic combinations)
  • Main categories:
  • Button/Action text: 8 occurrences ("Filters", "Reset", "Cancel", "Apply filters", "More actions", "View document")
  • Column headers: 7 occurrences
  • Tooltips: 3 occurrences
  • Status badges: 2 occurrences
  • aria-labels: 1 occurrence
  • Default/config strings: 5+ occurrences
  • Internationalization keys: Multiple i18n keys (hardcoded but translated via Phrase)

Language Coverage

  • English: All UI strings
  • French & German: Managed via Phrase i18n system (keys hardcoded, translations pulled from Phrase)

Key Observations

  1. Most strings use i18n - The package leverages Phrase for translations through the t() function and hardcoded translation keys
  2. Hardcoded English strings are primarily in: - Column headers (nhrDocumentListColumns.tsx) - Action tooltips (factory files) - Filter panel UI text (NhrDocumentListFilterPanel.tsx) - Header component text (NhrDocumentListHeader.tsx)
  3. No hardcoded French/German text - All user-facing text uses i18n translation keys
  4. Default values for component props are often hardcoded (e.g., "Document Category" as default filter label)

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date