# rn-time-entry-list URL: /docs/native/docyrus/time-entry-list A reusable mobile list for time entries with app-controlled localized labels. ## Installation ```bash pnpm dlx @docyrus/cli add @docyrus/rn-time-entry-list ``` ## Usage ```tsx import { TimeEntryList } from '@/components/docyrus-native/time-entry-list'; ``` All copy falls back to `t('ui.timeEntryList.*')` from `` (English defaults below). Pass `messages` to override individual labels: ```tsx ``` Dates render through `dateFormatter` when given, else the mounted `DateFormatProvider`'s `formatDateTime`, else `Intl` (`MMM d, HH:mm` in the device locale). ## API Reference ### TimeEntryListProps | Prop | Type | Default | Description | |------|------|---------|-------------| | `entries` | `TimeEntryListItem[]` | — | Time entry rows to render | | `messages` | `TimeEntryListMessagesInput` | — | App-supplied copy; every key optional, wins over the translation provider | | `isLoading` | `boolean` | `false` | Shows loading state | | `emptyMessage` | `string` | — | Optional empty state override | | `size` | `'sm' \| 'md'` | `'md'` | Controls row density | | `showStatus` | `boolean` | `true` | Displays the status chip | | `showBillable` | `boolean` | `true` | Displays the billable/non-billable chip | | `onEntryPress` | `(entry: TimeEntryListItem) => void` | — | Row press handler | | `dateFormatter` | `(date: string) => string` | — | Overrides the date formatting (wins over `DateFormatProvider`) | | `className` | `string` | — | Additional wrapper classes | | `contentContainerClassName` | `string` | — | Additional content container classes | ### TimeEntryListMessages `messages` accepts `TimeEntryListMessagesInput` — the same fields, all optional (`statusLabels` is a `Partial`). | Field | Type | Fallback key | English fallback | |-------|------|--------------|------------------| | `loading` | `string` | `ui.timeEntryList.loading` | `Loading time entries...` | | `empty` | `string` | `ui.timeEntryList.empty` | `No time entries yet` | | `billable` | `string` | `ui.timeEntryList.billable` | `Billable` | | `nonBillable` | `string` | `ui.timeEntryList.nonBillable` | `Non-billable` | | `statusLabels.draft` | `string` | `ui.timeEntryList.statusDraft` | `Draft` | | `statusLabels.submitted` | `string` | `ui.timeEntryList.statusSubmitted` | `Submitted` | | `statusLabels.approved` | `string` | `ui.timeEntryList.statusApproved` | `Approved` | | `statusLabels.rejected` | `string` | `ui.timeEntryList.statusRejected` | `Rejected` | | `statusLabels.running` | `string` | `ui.timeEntryList.statusRunning` | `Running` | | `statusLabels.completed` | `string` | `ui.timeEntryList.statusCompleted` | `Completed` | ## Components | Component | Description | |-----------|-------------| | `TimeEntryList` | FlashList-backed time entry feed | ## Type Exports | Type | Description | |------|-------------| | `TimeEntryListProps` | Props for TimeEntryList | | `TimeEntryListItem` | A time entry row | | `TimeEntryListStatus` | `'draft' \| 'submitted' \| 'approved' \| 'rejected' \| 'running' \| 'completed'` | | `TimeEntryListSize` | `'sm' \| 'md'` | | `TimeEntryListMessages` | Full copy shape | | `TimeEntryListMessagesInput` | Partial `messages` prop shape |