rez-table-listing-mui
Version:
A rez table listing component built on TanStack Table
683 lines (668 loc) • 22.6 kB
TypeScript
import * as react_jsx_runtime from 'react/jsx-runtime';
import { SortingState, PaginationState, RowSelectionState, ExpandedState, ColumnPinningState, ColumnDef, Row, Table, ColumnOrderState, Header } from '@tanstack/react-table';
import React$1, { Dispatch, SetStateAction } from 'react';
import { ButtonProps } from '@mui/material';
interface onFilterChangeFunctionProps {
updatedFilters?: any;
filterMaster?: any;
filters?: any;
}
interface OperationProps {
label: string;
value: string;
}
type OperationMapProps = {
[key in FilterInputDataTypes]?: OperationProps[];
};
interface FilterOperationListProps {
code: string;
label: string;
value: string;
is_shared: boolean;
is_editable: boolean;
is_owner: boolean;
created_by: string;
description: string | null;
}
interface FilterSharedListProps {
created_date: string;
entity_type: string;
id: string;
name: string;
status: string;
parent_type: string | null;
parent_id: string | number | null;
code: string;
created_by: string;
modified_by: string | null;
modified_date: string | null;
enterprise_id: number;
organization_id: number;
appcode: string | null;
level_id: string;
level_type: string;
mapped_entity_type: string;
user_id: number;
is_default: boolean;
filter_scope: string;
is_shared: boolean;
is_editable: boolean | string;
description: string | null;
}
type FilterInputDataTypes = "text" | "select" | "multiselect" | "date" | "year" | "number" | "label";
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;
element_type: FilterInputDataTypes;
data_source_type: string | null;
datasource_list: any | null;
visible: string;
}
interface FilterColumnsDataProps {
column_list: FilterColumnsListProps[];
operation_list: OperationMapProps;
saved_filter: FilterOperationListProps[];
shared_filter: FilterOperationListProps[];
}
interface FilterDropdownDataProps {
[key: string]: FilterOperationListProps[];
}
interface FilterComponentOptionsMainFilterOptions {
showSaveButton?: boolean;
showClearAllButton?: boolean;
customButtons?: Array<{
label: string;
onClick: () => void;
} & Partial<ButtonProps>>;
}
interface FilterComponentOptionsSavedFilterOptions {
showBackButton?: boolean;
editMode?: boolean;
}
type ButtonConfig = {
primary: string;
secondary: string;
};
type ModalConfig = {
title?: string;
description?: string;
button?: ButtonConfig;
isInputField?: boolean;
};
type RecordFilterComponentProps = {
save: ModalConfig;
edit: ModalConfig;
delete: ModalConfig;
};
type TabType = "main" | "saved" | "attributes";
interface FilterComponentTabOptions {
mainFilter?: FilterComponentOptionsMainFilterOptions;
savedFilter?: FilterComponentOptionsSavedFilterOptions;
isSingleFilter?: boolean;
isSingleEntity?: boolean;
showFilter?: TabType;
disableShareFilter?: boolean;
}
type FilterComponentOptions = {
showTabs?: true;
showMainHeader?: boolean;
mainHeaderTitle?: string;
showMainFilter?: boolean;
showSavedFilter?: boolean;
showAttributesFilter?: boolean;
isRuleEngine?: boolean;
tabOptions?: FilterComponentTabOptions;
recordFilterComponentProps?: RecordFilterComponentProps;
} | {
showTabs?: false;
showMainHeader?: boolean;
mainHeaderTitle?: string;
isRuleEngine?: boolean;
tabOptions?: FilterComponentTabOptions;
recordFilterComponentProps?: RecordFilterComponentProps;
};
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[];
};
onChangeFunction: ({ updatedFilters, filterMaster, }: onFilterChangeFunctionProps) => void;
filterComponentOptions?: FilterComponentOptions;
isFlatJson: boolean;
}
interface FilterCriteria {
columnId: string;
value: string | string[];
type: FilterInputDataTypes | undefined;
operator?: string | null;
dropdown?: {
label?: string;
value?: string;
};
optionList?: {
label?: string | undefined;
value?: string | undefined;
};
attribute_key?: string | undefined;
name: string | undefined;
}
interface FilterStateProps {
filter_attribute: string;
filter_operator: string;
filter_value: string | string[];
filter_attribute_name: string | undefined;
filter_attribute_data_type: FilterInputDataTypes | undefined;
attribute_key?: string;
dropdown_list?: {
label?: string;
value?: string;
}[];
optionList?: {
label?: string | undefined;
value?: string | undefined;
};
filter_entity_type?: string;
filter_entity_name?: string;
datasource_list?: string | null;
}
interface OperationOption {
label: string;
value: string;
}
interface OperationList {
text: OperationOption[];
number: OperationOption[];
date: OperationOption[];
select: OperationOption[];
multiselect: OperationOption[];
year: OperationOption[];
}
interface createSavedFilterPayload {
name: string;
organization_id?: number;
enterprise_id?: number;
user_id?: number;
is_default: boolean;
description: string | null;
mapped_entity_type: string;
status?: string;
entity_type: string;
filterDetails: FilterStateProps[];
}
interface deleteSavedFilterPayload {
name: string;
is_default: boolean;
id: string | number;
status?: string;
entity_type: string;
mapped_entity_type: string;
}
interface updateSavedFilterPayload {
name: string;
is_default: boolean;
id: string | number;
status?: string;
entity_type: string;
mapped_entity_type: string;
filterDetails: FilterStateProps[];
}
interface FilterFormComponentProps {
columnsData: FilterColumnsDataProps;
saved_filter?: any;
shared_filter?: any;
dropdownData: FilterDropdownDataProps;
tableStates: CraftTableOptionsProps;
editMode?: boolean;
setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;
setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
onSaveFilterButtonClick?: () => void;
tabValue?: number;
onChangeFunction: ({ updatedFilters, filterMaster, }: onFilterChangeFunctionProps) => void;
filterComponentOptions?: FilterComponentOptions;
isFlatJson: boolean;
}
interface SavedFilterSharingPreference {
shareWithTeam?: boolean;
allowTeamEdit?: boolean;
}
interface FilterMasterStateProps {
attributes: {
selected: string;
radio: string[];
};
saved_filters: {
selectedId: string;
selectedName: string;
selectedCode?: string;
description?: string;
is_shared?: boolean;
is_editable?: boolean;
is_owner?: boolean;
};
activeFilterTabIndex: number;
shared_filters_meta?: Record<string, SavedFilterSharingPreference>;
}
interface AttributesFilterProps {
columnsData: FilterColumnsDataProps;
tableStates: CraftTableOptionsProps;
dropdownData: FilterDropdownDataProps;
searchTerm: string;
setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
tabValue?: number;
onChangeFunction: ({ updatedFilters, filterMaster, }: onFilterChangeFunctionProps) => void;
isFlatJson: boolean;
}
interface AttributesFilterSelectProps {
columnsData: FilterColumnsDataProps;
tableStates: CraftTableOptionsProps;
dropdownData: FilterDropdownDataProps;
searchTerm: string;
setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
tabValue?: number;
}
interface viewSettingsPayload {
column: string;
sort_by: string;
}
interface FilterDataMainFilterEntityListProps {
value: string;
id: string | number;
label: string;
}
interface FilterDataMainFilterEntityWiseCriteriaProps {
id: string;
name: string;
attribute_key: string;
element_type: FilterInputDataTypes;
datasource_list: any;
element_type: FilterInputDataTypes;
}
interface FilterDataProps {
mainFilter?: {
entityList?: {
data?: FilterDataMainFilterEntityListProps[];
isPending?: boolean;
};
entityWiseCriteria?: {
data?: FilterDataMainFilterEntityWiseCriteriaProps[];
isPending?: boolean;
};
};
}
interface QuickFilterModalProps {
view?: string;
isFlatJson: boolean;
show?: boolean;
filterSettingStates: craftTableFilterSettingsOptionsProps;
onClose?: () => void;
columnsData: FilterColumnsDataProps;
columnsDataLoading?: boolean;
quickTabAttributes?: any[];
quickTabAttributesLoading?: boolean;
columnTabAttributes?: any[];
columnTabAttributesLoading?: boolean;
sortingTabAttributes?: any[];
sortingTabAttributesLoading?: boolean;
tabsApiData?: {
label: string;
value: string;
}[];
tabsApiDataLoading?: boolean;
onSaveSettingsData?: (data: any) => void;
activeTab?: string;
selectAttributeData?: {
label: string;
value: string;
}[];
selectSwinLandData?: {
label: string;
value: string;
}[];
laneHideListData?: {
label: string;
value: string;
}[];
swimLaneHideListData?: {
label: string;
value: string;
}[];
onSaveKanbanSettingsData?: (data: KanbanSettingsDataProps) => void;
}
type SortingType = "asc" | "desc";
type QuickTabSortingType = "asc" | "dsc" | "count_asc" | "count_dsc" | "custom";
type KanbanSortingType = "asc" | "dsc" | "count_asc" | "count_dsc" | "custom" | "sort_by" | null;
interface QuickTabConfigProps {
attribute?: string;
sorting?: QuickTabSortingType;
hide_list?: {
label: string;
value: string;
}[];
show_list?: {
label: string;
value: string;
}[];
isAllSelected?: boolean;
isCombineOther?: boolean;
}
interface LaneTabConfigProps {
attribute?: string;
sorting?: KanbanSortingType;
hide_list?: {
label: string;
value: string;
}[];
show_list?: {
label: string;
value: string;
}[];
isSubLane?: boolean;
}
interface SwimLameTabConfigProps {
attribute?: string;
sorting?: KanbanSortingType;
hide_list?: {
label: string;
value: string;
}[];
show_list?: {
label: string;
value: string;
}[];
}
interface ColumnItem {
label: string;
value: string;
}
interface ColumnTab {
tab_name: {
label: string;
value: string;
};
show_list: ColumnItem[];
hide_list: ColumnItem[];
}
interface SortingConfigSortByProps {
column: string;
order: SortingType;
}
interface SortingConfigTabProps {
tab_name: {
label: string;
value: string;
};
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 KanbanSettingsDataProps {
lane?: LaneTabConfigProps;
swim_lane?: SwimLameTabConfigProps;
}
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>>;
columnPinning: ColumnPinningState;
setColumnPinning: Dispatch<SetStateAction<ColumnPinningState>>;
filterData: FilterDataProps | null;
setFilterData: Dispatch<SetStateAction<FilterDataProps | null>>;
selectedFilterEntity: FilterDataMainFilterEntityListProps | undefined;
setSelectedFilterEntity: Dispatch<SetStateAction<FilterDataMainFilterEntityListProps | undefined>>;
}
interface craftTableFilterSettingsOptionsProps {
settingsData: SettingsDataProps;
setSettingsData: Dispatch<SetStateAction<SettingsDataProps>>;
kanbanSettingsData: KanbanSettingsDataProps;
setKanbanSettingsData: Dispatch<SetStateAction<KanbanSettingsDataProps>>;
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$1.ReactNode;
}
interface TopbarOptionsProps {
tableStates: CraftTableOptionsProps;
leftSideComponent?: React$1.ReactNode;
rightSideComponent?: React$1.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$1.ReactNode;
};
type CustomColumnMeta = {
type?: "custom";
propName?: string;
[key: string]: any;
};
type CustomColumnDef<T> = ColumnDef<T> & {
meta?: CustomColumnMeta;
};
interface CraftTableStyleProps {
wrapperStyle?: React$1.CSSProperties;
}
interface FilterOptionsProps {
onClick?: () => void;
show?: boolean;
component: React$1.ReactNode;
}
interface settingsOptionsProps {
showIcon?: boolean;
onClick?: () => void;
}
interface CraftTableProps<T> {
data: T[];
columns: CustomColumnDef<T>[];
tableStates: CraftTableOptionsProps;
filterSettingStates: craftTableFilterSettingsOptionsProps;
onSaveSettings?: (columnId: string) => void;
paginationOptions?: CraftTablePaginationProps;
featureOptions?: CraftTableFeatureProps;
nestedComponent?: React$1.ComponentType<{
row: Row<T>;
}>;
loadingOptions?: LoadingOptionsProps;
topbarOptions?: TopbarOptionsProps;
customRenderFn?: CustomRenderFnMap<T>;
shouldHideColumn?: (accessorKey?: string) => boolean;
styleOptions?: CraftTableStyleProps;
emptyListComponent?: React$1.ReactNode;
filterOptions?: FilterOptionsProps;
settingsOptions?: settingsOptionsProps;
craftTableFilterSettingsOptions?: craftTableFilterSettingsOptionsProps;
activeTab?: any;
}
interface CraftTableComponentProps<T> {
table: Table<T>;
activeTab?: string;
featureOptions: CraftTableFeatureProps;
NestedComponent?: React$1.ComponentType<{
row: Row<T>;
}>;
columnOrder: ColumnOrderState;
setColumnOrder: React$1.Dispatch<React$1.SetStateAction<ColumnOrderState>>;
isCompactTable: boolean;
tableStates: CraftTableOptionsProps;
filterSettingStates: craftTableFilterSettingsOptionsProps;
onSaveSettings?: (columnId: string) => void;
}
interface TableHeaderProps<T> {
header: Header<T, unknown>;
activeTab?: string;
featureOptions: CraftTableFeatureProps;
tableStates: CraftTableOptionsProps;
filterSettingStates?: craftTableFilterSettingsOptionsProps;
onSaveSettings?: (columnId: string) => void;
}
declare function TableWrapper<T>({ data, columns, tableStates, filterSettingStates, onSaveSettings, paginationOptions, featureOptions, topbarOptions, nestedComponent, loadingOptions, customRenderFn, shouldHideColumn, emptyListComponent, filterOptions, activeTab, }: CraftTableProps<T>): react_jsx_runtime.JSX.Element;
declare function useCraftTable(paginationPageSize?: number): CraftTableOptionsProps;
declare function useCraftTableFilterSettings(): craftTableFilterSettingsOptionsProps;
interface TabDataProps {
tab_name: string | null;
count?: string | number;
}
interface TableTabsProps {
loading?: boolean;
tabsData?: TabDataProps[];
activeTab?: TabDataProps;
tableStates: CraftTableOptionsProps;
onClick: (state: string) => void;
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, onChangeFunction, filterComponentOptions, isFlatJson, }: FilterDrawerProps): react_jsx_runtime.JSX.Element;
declare function QuickFilterSettings({ view, isFlatJson, show, filterSettingStates, onClose, columnsData, columnsDataLoading, quickTabAttributes, quickTabAttributesLoading, columnTabAttributes, columnTabAttributesLoading, sortingTabAttributes, sortingTabAttributesLoading, tabsApiData, tabsApiDataLoading, onSaveSettingsData, activeTab, selectAttributeData, selectSwinLandData, laneHideListData, swimLaneHideListData, onSaveKanbanSettingsData, }: QuickFilterModalProps): react_jsx_runtime.JSX.Element;
interface TableSearchProps {
value: string;
onChange: (value: string) => void;
}
declare const TableSearch: ({ value, onChange, }: TableSearchProps) => JSX.Element;
declare const Kanban: ({ metaData, data, kanbanSettingsData, isLoading, KanbanCardComponent, showSettings, onOpenSettings, isFlatJson, entity, }: {
metaData: any;
data: any;
kanbanSettingsData: KanbanSettingsDataProps;
isLoading?: boolean;
KanbanCardComponent: React$1.ComponentType<{
key: string | number;
cardData: any;
color?: string;
darkColor?: string;
darkerColor?: string;
}>;
showSettings: boolean;
onOpenSettings?: () => void;
isFlatJson?: boolean;
entity?: string;
}) => react_jsx_runtime.JSX.Element;
export { TableFilter as CraftTableFilter, TableSearch as CraftTableSearch, QuickFilterSettings as CraftTableSettings, TableTabs as CraftTableTabs, Kanban as KanbanWrapper, TableWrapper, useCraftTable, useCraftTableFilterSettings };
export type { AttributesFilterProps, AttributesFilterSelectProps, CraftTableComponentProps, CraftTableFeatureProps, CraftTableOptionsProps, CraftTablePaginationProps, CraftTableProps, CustomRenderContext, CustomRenderFnMap, FilterColumnsDataProps, FilterColumnsListProps, FilterComponentOptions, FilterComponentOptionsMainFilterOptions, FilterComponentOptionsSavedFilterOptions, FilterCriteria, FilterDataMainFilterEntityListProps, FilterDataMainFilterEntityWiseCriteriaProps, FilterDataProps, FilterDrawerProps, FilterDropdownDataProps, FilterFormComponentProps, FilterInputDataTypes, FilterMasterStateProps, FilterOperationListProps, FilterOptionsProps, FilterSharedListProps, FilterStateProps, OperationList, OperationOption, SavedFilterSharingPreference, TableHeaderProps, TopbarOptionsProps, craftTableFilterSettingsOptionsProps, createSavedFilterPayload, deleteSavedFilterPayload, settingsOptionsProps, updateSavedFilterPayload, viewSettingsPayload };