diff --git a/distribution_fe/app/(dashboard)/procurement/grn/_components/grn-client.tsx b/distribution_fe/app/(dashboard)/procurement/grn/_components/grn-client.tsx index 8789dde..842b9e0 100644 --- a/distribution_fe/app/(dashboard)/procurement/grn/_components/grn-client.tsx +++ b/distribution_fe/app/(dashboard)/procurement/grn/_components/grn-client.tsx @@ -3,7 +3,7 @@ import { useState, useEffect, useCallback, useMemo } from 'react' import { useRouter } from 'next/navigation' import { HugeiconsIcon } from '@hugeicons/react' -import { Add01Icon } from '@hugeicons/core-free-icons' +import { Add01Icon, PackageDeliveredIcon } from '@hugeicons/core-free-icons' import { DataTable } from '@/components/shared/data-table' import type { TableConfig } from '@/components/shared/data-table' import { Button } from '@/components/ui/button' @@ -11,6 +11,7 @@ import { toast } from '@/components/ui/toast' import { grn as grnApi, getApiError, getPaginatedItems } from '@/lib/api/index' import type { GrnResponse } from '@/types/api' import { GrnViewSheet } from './grn-view-sheet' +import { EmptyState } from '@/components/shared/empty-state' const fmtDate = (v: string) => new Date(v).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) @@ -53,7 +54,19 @@ export function GrnClient() { rowKey: 'id', serverSide: true, stickyHeader: true, - emptyMessage: 'No goods receipts found.', + emptyState: ( + router.push('/procurement/grn/new')}> + + New GRN + + } + /> + ), pagination: { enabled: true, pageSize, pageSizeOptions: [10, 20, 50] }, columns: [ { diff --git a/distribution_fe/components/shared/data-table/data-table.tsx b/distribution_fe/components/shared/data-table/data-table.tsx index f86475b..c5cd9dc 100644 --- a/distribution_fe/components/shared/data-table/data-table.tsx +++ b/distribution_fe/components/shared/data-table/data-table.tsx @@ -620,9 +620,11 @@ export function DataTable({ ))} {!loading && displayData.length === 0 && ( -
- {config.emptyMessage ?? 'No records found.'} -
+ config.emptyState ?? ( +
+ {config.emptyMessage ?? 'No records found.'} +
+ ) )} {!loading && displayData.map(row => ( ({ - {config.emptyMessage ?? 'No records found.'} + {config.emptyState ?? ( +
+ {config.emptyMessage ?? 'No records found.'} +
+ )}
)} diff --git a/distribution_fe/components/shared/data-table/types.ts b/distribution_fe/components/shared/data-table/types.ts index ee84db2..9edb03e 100644 --- a/distribution_fe/components/shared/data-table/types.ts +++ b/distribution_fe/components/shared/data-table/types.ts @@ -119,6 +119,8 @@ export interface TableConfig { exportable?: boolean | ExportConfig; density?: 'compact' | 'normal' | 'comfortable'; emptyMessage?: string; + /** Custom rendered empty state. Overrides emptyMessage when both are provided. */ + emptyState?: React.ReactNode; rowClass?: (row: T) => string; isRowSelectable?: (row: T) => boolean; expandRender?: (row: T) => React.ReactNode;