UNPKG

pagamio-frontend-commons-lib

Version:

Pagamio library for Frontend reusable components like the form engine and table container

170 lines (169 loc) 5.26 kB
import { type TableProps } from '@mantine/core'; import type { MRT_ColumnDef, MRT_Row, MRT_TableInstance } from 'mantine-react-table'; import { type ChangeEvent } from 'react'; import type { ExtraOption } from './ExportButton'; interface ThemeColors { primary: { 500: string; 600: string; 700: string; }; core: { primary: string; secondary: string; }; } interface PdfExportOptions { title?: string; subtitle?: string; colors?: ThemeColors; logo?: { url: string; width?: number; height?: number; }; } interface XlsxExportOptions { title?: string; subtitle?: string; colors?: ThemeColors; sheetName?: string; includeTimestamp?: boolean; autoFitColumns?: boolean; } interface CsvExportOptions { title?: string; includeTimestamp?: boolean; includeHeaders?: boolean; delimiter?: string; filename?: string; } export type { PdfExportOptions, XlsxExportOptions, CsvExportOptions, ThemeColors }; export type CoreTableColumnDef<T extends Record<string, any>> = MRT_ColumnDef<T> & { showHeader?: boolean; }; export type PagamioMantineTableProps<T extends Record<string, any>> = { columns: CoreTableColumnDef<T>[]; data: T[]; selectable?: boolean; isLoading?: boolean; sortable?: boolean; enableGlobalFilters?: boolean; enableManualSorting?: boolean; enableManualPagination?: boolean; enablePagination?: boolean; rowCount: number; onClearFilters?: () => void; showClearFilters?: boolean; showApplyFilterButton?: boolean; onRowClick?: (row: T) => void; rowClassName?: string; pagination?: { enabled: boolean; pageIndex: number; totalPages?: number; onPageChange: (page: number) => void; pageSize: number; itemsPerPage: number; itemsPerPageOptions: number[]; onPaginationChange: (index: number, itemsPerPage: number) => void; }; sorting?: { multiSorting?: boolean; sortConfig: SortConfig; onSort: (sortKey: string, sortDirection: 'asc' | 'desc') => void; setSortBy?: (sortKey: string) => void; setSortDir?: (dir: string) => void; }; filtering?: { filters: BaseFilter[]; appliedFilters: Record<string, string>; onTableFilter: (columnKey: string, value: string) => void; }; search?: { enabled: boolean; searchQuery: string; onSearch: (e: ChangeEvent<HTMLInputElement>) => void; }; exportable?: boolean; addButton?: boolean | React.ReactNode; searctInputPlaceHolder?: string; addText?: string; onAdd?: () => void; handleSearchTable: () => void; renderEmptyRowsFallback?: React.ReactNode; mantineTableProps?: TableProps; mantineTableContainerProps?: React.ComponentPropsWithoutRef<'div'>; mantinePaperProps?: React.ComponentPropsWithoutRef<'div'>; mantinePaginationProps?: React.ComponentPropsWithoutRef<'div'>; defaultColumn?: Partial<MRT_ColumnDef<T>>; manualFilters?: boolean; manualSorting?: boolean; manualPagination?: boolean; enableStickyHeader?: boolean; enableRowSelection?: boolean; enableColumnResizing?: boolean; expandable?: boolean; extraExportOptions?: ExtraOption[]; pdfExportOptions?: PdfExportOptions; xlsxExportOptions?: XlsxExportOptions; csvExportOptions?: CsvExportOptions; exportAll?: boolean; fetchData?: (params?: Record<string, string>) => Promise<T[]>; renderExpandableComponent?: (props: { row: MRT_Row<T>; table: MRT_TableInstance<T>; }) => React.ReactNode; }; export type TableToolbarProps<T extends Record<string, any>> = { searchable: boolean; searchQuery: string; onSearch: (e: ChangeEvent<HTMLInputElement>) => void; onClearFilters?: () => void; showClearFilters?: boolean; showApplyFilterButton?: boolean; filters?: BaseFilter[]; appliedFilters: Record<string, string>; exportable: boolean; columns: MRT_ColumnDef<T>[]; data: T[]; onTableFilter?: (columnKey: string, value: string) => void; addButton: boolean | React.ReactNode; addText?: string; isNarrow: boolean; searctInputPlaceHolder?: string; onAdd: () => void; handleSearchTable: () => void; handleApplyFilters?: () => void; extraExportOptions?: ExtraOption[]; pdfExportOptions?: PdfExportOptions; xlsxExportOptions?: XlsxExportOptions; csvExportOptions?: CsvExportOptions; exportAll?: boolean; fetchData?: (params?: Record<string, string>) => Promise<T[]>; }; export interface BaseEntity { id: number | string; createdById?: number; lastModifiedById?: number; createdDate?: string; lastModifiedDate?: string; state?: number; [key: string]: any; } export interface BaseFilter { columnKey: string; label?: string; type?: 'select' | 'multi-select' | 'date' | 'range' | 'boolean'; options: Array<{ label: string; value: string; }>; defaultValue?: string | string[]; placeholder?: string; } export interface SortConfig { sortBy?: string; sortDir?: 'asc' | 'desc'; multiSorting?: boolean; }