UNPKG

rez-table-listing-mui

Version:

A rez table listing component built on TanStack Table

334 lines (322 loc) 11.3 kB
import * as react_jsx_runtime from 'react/jsx-runtime'; import { SortingState, PaginationState, RowSelectionState, ExpandedState, ColumnDef, Row, Table, ColumnOrderState, Header } from '@tanstack/react-table'; import React, { Dispatch, SetStateAction } from 'react'; interface OperationProps { label: string; value: string; } type OperationMapProps = { [key in FilterInputDataTypes]?: OperationProps[]; }; interface FilterOperationListProps { label: string; value: string; } type FilterInputDataTypes = "text" | "select" | "multiselect" | "date" | "year" | "number"; interface FilterColumnsListProps { created_date: string | null; entity_type: string; id: string; name: string; status: string | null; parent_type: string; parent_id: string; code: string | null; created_by: string | null; modified_by: string | null; modified_date: string | null; enterprise_id: string | null; organization_id: string | null; app_code: string | null; mapped_entity_type: string; menu_code: string | null; table_name: string | null; col_position: number; sortable: string | null; searchable: string | null; attribute_key: string; sort_type: string | null; data_type: FilterInputDataTypes; data_source_type: string | null; datasource_list: any | null; visible: string; } interface FilterColumnsDataProps { column_list: FilterColumnsListProps[]; operation_list: OperationMapProps; saved_filter: FilterOperationListProps[]; } interface FilterDropdownDataProps { [key: string]: FilterOperationListProps[]; } interface FilterDrawerProps { tableStates: CraftTableOptionsProps; open?: boolean; onClose?: () => void; onDeleteFilter?: () => void; onSaveFilter?: (name: string) => void; onUpdateFilter?: (name: string) => void; columnsData: FilterColumnsDataProps; dropdownData: FilterDropdownDataProps; defaultFilters?: Array<{ filter_attribute: string; filter_operator: string; filter_value: string; }>; savedFilters?: Array<{ label: string; value: string; }>; tableData?: { entity_list: any[]; }; } interface FilterStateProps { filter_attribute: string; filter_operator: string; filter_value: string | string[]; } interface FilterMasterStateProps { attributes: { selected: string; radio: string[]; }; saved_filters: { selectedId: string; selectedName: string; }; activeFilterTabIndex: number; } interface QuickFilterModalProps { show?: boolean; filterSettingStates: craftTableFilterSettingsOptionsProps; onClose?: () => void; columnsData: FilterColumnsDataProps; columnsDataLoading: boolean; tabsApiData?: string[]; tabsApiDataLoading?: boolean; onSaveSettingsData?: (data: any) => void; } type TabName = string; type SortingType = "asc" | "desc"; type QuickTabSortingType = "asc" | "dsc" | "count_asc" | "count_dsc" | "custom"; interface QuickTabConfigProps { attribute?: string; sorting?: QuickTabSortingType; hide_list?: string[]; show_list?: string[]; isAllSelected?: boolean; isCombineOther?: boolean; } interface ColumnItem { label: string; value: string; } interface ColumnTab { tab_name: TabName; show_list: ColumnItem[]; hide_list: ColumnItem[]; } interface SortingConfigSortByProps { column: string; order: SortingType; } interface SortingConfigTabProps { tab_name: TabName; sortby: SortingConfigSortByProps[]; } interface SortingConfigProps { isDefault?: boolean; sortby?: SortingConfigSortByProps[]; tabs?: SortingConfigTabProps[]; } interface ColumnTabConfigProps { isDefault?: boolean; show_list?: ColumnItem[]; hide_list?: ColumnItem[]; tabs?: ColumnTab[]; } interface SettingsDataProps { isDefault?: boolean; show_list?: ColumnItem[]; hide_list?: ColumnItem[]; tabs?: ColumnTab[]; quick_tab?: QuickTabConfigProps; column?: ColumnTabConfigProps; sorting?: SortingConfigProps; } interface SavedButtonErrorProps { hasError: boolean; messages: { type: string; message: string; }[]; } interface CraftTableOptionsProps { sorting: SortingState; setSorting: Dispatch<SetStateAction<SortingState>>; pagination: PaginationState; setPagination: Dispatch<SetStateAction<PaginationState>>; rowSelection: RowSelectionState; setRowSelection: Dispatch<SetStateAction<RowSelectionState>>; isCompactTable?: boolean; setIsCompactTable?: Dispatch<SetStateAction<boolean>>; expanded: ExpandedState; setExpanded: Dispatch<SetStateAction<ExpandedState>>; wrapColumns: Record<string, boolean>; setWrapColumns: Dispatch<SetStateAction<Record<string, boolean>>>; filters: FilterStateProps[]; setFilters: Dispatch<SetStateAction<FilterStateProps[]>>; savedFilterEditValue: string | number; setSavedFilterEditValue: Dispatch<SetStateAction<string | number>>; filterToDelete: FilterOperationListProps | null; setFilterToDelete: Dispatch<SetStateAction<FilterOperationListProps | null>>; filterSelectedAttributeValue: string; setFilterSelectedAttributeValue: Dispatch<SetStateAction<string>>; filterMaster: FilterMasterStateProps | null; setFilterMaster: Dispatch<SetStateAction<FilterMasterStateProps | null>>; showTableFilter: boolean; setShowTableFilter: Dispatch<SetStateAction<boolean>>; showFilterOptions: boolean; setShowFilterOption: Dispatch<SetStateAction<boolean>>; } interface craftTableFilterSettingsOptionsProps { settingsData: SettingsDataProps; setSettingsData: Dispatch<SetStateAction<SettingsDataProps>>; showListViewSettings: boolean; setShowListViewSettings: Dispatch<SetStateAction<boolean>>; quickTabStates: QuickTabConfigProps; setQuickTabStates: Dispatch<SetStateAction<QuickTabConfigProps>>; columnTabState: ColumnTabConfigProps; setColumnTabState: Dispatch<SetStateAction<ColumnTabConfigProps>>; sortingTabState: SortingConfigProps; setSortingTabState: Dispatch<SetStateAction<SortingConfigProps>>; saveButtonError: SavedButtonErrorProps; setSaveButtonError: Dispatch<SetStateAction<SavedButtonErrorProps>>; } interface CraftTableFeatureProps { enableSorting?: boolean; enableServerSidePagination?: boolean; enableServerSideSorting?: boolean; enableRowSelection?: boolean; enableColumnResizing?: boolean; enableColumnReordering?: boolean; enableColumnPinning?: boolean; enableMultiColumnSorting?: boolean; enableTopbar?: boolean; enableWordBreakAll?: boolean; stickyHeader?: boolean; compactTable?: boolean; striped?: boolean; } interface CraftTablePaginationProps { totalRows?: number; rowsPerPageArray?: number[]; showPagination?: boolean; paginationPosition?: "top" | "bottom"; paginationView?: "full" | "compact"; } interface LoadingOptionsProps { isLoading: boolean; loaderText?: string; loadingComponent?: React.ReactNode; } interface TopbarOptionsProps { tableStates: CraftTableOptionsProps; leftSideComponent?: React.ReactNode; rightSideComponent?: React.ReactNode; showColumnToggle?: boolean; showCompactTableToggle?: boolean; showChangeLayoutToggle?: boolean; viewMoreToggle?: boolean; showSearch?: boolean; showSortingToggle?: boolean; showFilterToggle?: boolean; searchValue?: string; onSearchChange?: (val: string) => void; onFilterButtonClick?: () => void; } interface CustomRenderContext<T> { value: unknown; row: Row<T>; table: Row<T>[]; } type CustomRenderFnMap<T> = { [key: string]: (ctx: CustomRenderContext<T>) => React.ReactNode; }; type CustomColumnMeta = { type?: "custom"; propName?: string; [key: string]: any; }; type CustomColumnDef<T> = ColumnDef<T> & { meta?: CustomColumnMeta; }; interface CraftTableStyleProps { wrapperStyle?: React.CSSProperties; } interface FilterOptionsProps { onClick?: () => void; show?: boolean; component: React.ReactNode; } interface settingsOptionsProps { showIcon?: boolean; onClick?: () => void; } interface CraftTableProps<T> { data: T[]; columns: CustomColumnDef<T>[]; tableStates: CraftTableOptionsProps; paginationOptions?: CraftTablePaginationProps; featureOptions?: CraftTableFeatureProps; nestedComponent?: React.ComponentType<{ row: Row<T>; }>; loadingOptions?: LoadingOptionsProps; topbarOptions?: TopbarOptionsProps; customRenderFn?: CustomRenderFnMap<T>; shouldHideColumn?: (accessorKey?: string) => boolean; styleOptions?: CraftTableStyleProps; emptyListComponent?: React.ReactNode; filterOptions?: FilterOptionsProps; settingsOptions?: settingsOptionsProps; craftTableFilterSettingsOptions?: craftTableFilterSettingsOptionsProps; } interface CraftTableComponentProps<T> { table: Table<T>; featureOptions: CraftTableFeatureProps; NestedComponent?: React.ComponentType<{ row: Row<T>; }>; columnOrder: ColumnOrderState; setColumnOrder: React.Dispatch<React.SetStateAction<ColumnOrderState>>; isCompactTable: boolean; tableStates: CraftTableOptionsProps; } interface TableHeaderProps<T> { header: Header<T, unknown>; featureOptions: CraftTableFeatureProps; tableStates: CraftTableOptionsProps; } declare function TableWrapper<T>({ data, columns, tableStates, paginationOptions, featureOptions, topbarOptions, nestedComponent, loadingOptions, customRenderFn, shouldHideColumn, emptyListComponent, filterOptions, }: CraftTableProps<T>): react_jsx_runtime.JSX.Element; declare function useCraftTable(paginationPageSize?: number): CraftTableOptionsProps; declare function useCraftTableFilterSettings(): craftTableFilterSettingsOptionsProps; interface TabDataProps { tab_value: string | null; tab_value_count: string | number; } interface TableTabsProps { loading?: boolean; tabsData?: TabDataProps[]; activeTab?: string; tableStates: CraftTableOptionsProps; onClick: (state: string) => void; columns?: any[]; settingsOptions?: settingsOptionsProps; } declare function TableTabs({ loading, tabsData, activeTab, onClick, tableStates, settingsOptions, }: TableTabsProps): react_jsx_runtime.JSX.Element; declare function TableFilter({ onClose, columnsData, tableStates, onDeleteFilter, onSaveFilter, onUpdateFilter, dropdownData, }: FilterDrawerProps): react_jsx_runtime.JSX.Element; declare function QuickFilterSettings({ show, filterSettingStates, onClose, columnsData, columnsDataLoading, tabsApiData, tabsApiDataLoading, onSaveSettingsData, }: QuickFilterModalProps): react_jsx_runtime.JSX.Element; export { TableFilter as CraftTableFilter, QuickFilterSettings as CraftTableSettings, TableTabs as CraftTableTabs, TableWrapper, useCraftTable, useCraftTableFilterSettings }; export type { CraftTableComponentProps, CraftTableFeatureProps, CraftTableOptionsProps, CraftTablePaginationProps, CraftTableProps, CustomRenderContext, CustomRenderFnMap, FilterOptionsProps, TableHeaderProps, TopbarOptionsProps, craftTableFilterSettingsOptionsProps, settingsOptionsProps };