react-web-native-sketch
Version:
[TODO: We need an overview of how this can be used via npm vs as a local package]
148 lines (147 loc) • 4.32 kB
TypeScript
import { InjectedTranslateProps } from "react-i18next";
import { destroy, initialize } from 'redux-form';
import { WithStyles } from "src/index";
import { FILTER_OPERATORS } from "src/utils/enums";
import { FieldDefinition, FORM_INPUT_TYPES } from "../../";
import { FormErrorChecker } from "../../redux/FormComponents/Form";
import { FieldReduxData } from "../../redux/FormComponents/FormComponents.types";
import { setPersistentTableOptions } from "../../redux/reducers/persistedTableOptions";
import { clearTableData, loadTableData, setRefreshTable, showEntryDetails, showMenu, TableEntryDetail } from "../../redux/reducers/table";
export interface TableRowAction {
title?: string;
titleXs?: string;
icon?: any;
iconXs?: any;
onPress: (row?: Row) => void;
}
export interface BaseColumn {
dataFormat?: (cell: any, row: any) => any;
preferredWidth?: number;
notSortable?: boolean;
hiddenInTable?: boolean;
hiddenInForm?: boolean;
modalDisplay?: number;
fullRow?: (row: Row | undefined) => boolean;
description?: string;
}
export declare type TableColumnFiltersData = {
hasFilter?: false;
} | {
hasFilter: true;
operator: FILTER_OPERATORS;
};
export declare type TableColumn = (FieldDefinition | {
type: any;
field: string;
title: string;
} | {
field: string;
title: string;
type?: FORM_INPUT_TYPES;
}) & TableColumnFiltersData & BaseColumn;
export interface TableDefinitionData {
columns: ((extraData: any) => Array<TableColumn>);
dataName: string;
title: string;
url?: string;
urlNew?: string;
urlEdit?: string;
mixRows?: (response: any) => Array<Row>;
rowStyle?: (row: any) => any;
formErrorChecker?: FormErrorChecker;
filtersOnTop?: boolean;
paginate?: boolean;
itemsPerPage?: number | Array<number>;
paginateIcons?: {
jumpToFirstIcon: any;
jumpToLastIcon: any;
};
hideRefreshButton?: boolean;
hideExportButton?: boolean;
}
export interface Fields {
[key: string]: FieldReduxData;
}
export interface TableFilterFormData {
order?: string;
pages?: number;
}
export interface TableFilterPersistentData {
visibleColumns: Array<string>;
wrapRows: boolean;
}
export interface TableFormData {
[key: string]: any;
}
export interface TableData {
loading?: boolean;
refresh?: boolean;
data?: Data;
menuShown?: boolean;
menuRow?: Row;
}
export interface Data {
items: Array<Row>;
page: number;
itemsPerPage: number;
totalItemsNumber: number;
}
export interface Row {
[key: string]: number | string | null;
}
export interface OwnProps {
tableDefinition: TableDefinitionData;
extraActions?: Array<TableRowAction>;
tableActions?: Array<TableRowAction>;
editFunc?: (row: Row) => void;
title: string;
refreshMethod?: () => void;
url?: string;
mixRows?: (response: any) => Array<Row>;
clearDataOnUnmount?: boolean;
tableContainerName?: string;
tableData?: TableData;
extraData?: any;
style?: any;
}
export interface ConnectedProps {
loadingData: boolean;
openedTableRow: Row;
refreshTable: boolean;
tableData: TableData;
tableFilterFormData: {
order: string;
};
tableFilterPersistentData: TableFilterPersistentData;
tableId: string;
tableDetailsEntry: {
details: Array<TableEntryDetail>;
itemName: string | number;
componentName: string;
};
destroy: typeof destroy;
clearTableData: typeof clearTableData;
initialize: typeof initialize;
loadTableData: typeof loadTableData;
setPersistentTableOptions: typeof setPersistentTableOptions;
setRefreshTable: typeof setRefreshTable;
showMenu: typeof showMenu;
showEntryDetails: typeof showEntryDetails;
}
export interface TableFiltersData {
filters: {
[field: string]: {
value?: string;
upperValue?: string;
};
};
filtersTimeout: any;
bindedFiltersOnChange: {
[field: string]: {
value: (value: any) => void;
upperValue?: (value: any) => void;
};
};
bindedLoadTableData: (filters?: any) => any;
}
export declare type TableProps = OwnProps & ConnectedProps & WithStyles & InjectedTranslateProps;