DefinitelyTyped/types/react-bootstrap-table/index.d.ts
Vincent Langlet 1a07ffda4e Fix lint
2019-02-12 14:01:30 +01:00

2690 lines
88 KiB
TypeScript

// Type definitions for react-bootstrap-table 4.3
// Project: https://github.com/AllenFang/react-bootstrap-table
// Definitions by: Frank Laub <https://github.com/flaub>,
// Aleksander Lode <https://github.com/alelode>,
// Josué Us <https://github.com/UJosue10>
// Janeene Beeforth <https://github.com/dawnmist>
// Oscar Andersson <https://github.com/Ogglas>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.8
// documentation taken from http://allenfang.github.io/react-bootstrap-table/docs.html
import { Component, CSSProperties, Props, ReactElement, SyntheticEvent } from 'react';
/**
* Table scroll position.
*/
export type ScrollPosition = 'Top' | 'Bottom';
/**
* Row selection mode. Single selection = 'radio', multiple selection = 'checkbox'.
*/
export type SelectRowMode = 'none' | 'radio' | 'checkbox';
/**
* Sort Order values. 'asc' = ascending, 'desc' = descending.
*/
export type SortOrder = 'asc' | 'desc';
/**
* Type of selection for cell editing.
*/
export type CellEditClickMode = 'none' | 'click' | 'dbclick';
/**
* Tell react-bootstrap-table how to trigger expanding by clicking on 'row' or 'column' level.
* If the value is 'column', by default all the columns are expandable. If you want to specify some columns as
* unexpandable, check expandable.
* Default is 'row'.
*/
export type ExpandBy = 'row' | 'column';
/**
* Used to specify whether a dropdown button should use 'dropup' mode or 'dropdown' mode.
* Default is usually 'dropdown'.
*/
export type DropDirection = 'dropdown' | 'dropup';
/**
* List of valid filter types.
* Note: ArrayFilter can only be used as part of the FilterData passed to the BootstrapTable.handleFilterData
* function. It is NOT valid for use when specifying a filter to the TableHeaderColumn filter properties.
*/
export type FilterType =
| 'TextFilter'
| 'RegexFilter'
| 'SelectFilter'
| 'NumberFilter'
| 'DateFilter'
| 'CustomFilter'
| 'ArrayFilter';
/**
* Filter conditions that can be used with TextFilter/SelectFilter/RegexFilter filters.
*/
export type FilterCondition = 'eq' | 'like';
/**
* Filter comparators used for NumberFilter/DateFilter filters
*/
export type FilterComparator = '=' | '<' | '<=' | '>' | '>=' | '!=';
/**
* Element type to use for editing a particular column's cells.
*/
export type EditCellType = 'textarea' | 'select' | 'checkbox' | 'datetime';
/**
* Position to show the Pagination Panel. Options are above the table ('top'), below the table ('bottom'), or both
* above and below the table ('both').
*/
export type PaginationPostion = 'top' | 'bottom' | 'both';
/**
* Result type for validation when editing.
*/
export type EditValidatorType = 'success' | 'error';
/**
* Used to specify the text alignment for a column.
*/
export type DataAlignType = 'left' | 'center' | 'right' | 'start' | 'end';
/**
* Boostrap version number.
*/
export type BootstrapVersion = '3' | '4';
/**
* CSV Field types supported.
*/
export type CSVFieldType = 'string' | 'number';
/**
* Custom attributes for a column/cell/etc.
* Example: { 'data-attr': 'test' }
*/
export interface CustomAttrs {
[attrKey: string]: string | number | boolean;
}
/**
* Size per page list definition
*/
export type SizePerPageList = number[] | Array<{ text: string, value: number }>;
/**
* Interface spec for sepcifying functionality to handle remotely
*
* Consult [documentation](https://allenfang.github.io/react-bootstrap-table/docs.html#remote)
* for more info
*/
export interface RemoteObjSpec {
/**
* If set, cell edits will be handled remotely
*/
cellEdit?: boolean;
/**
* If set insertions will be handled remotely
*/
insertRow?: boolean;
/**
* If set deletion will be handled remotely
*/
dropRow?: boolean;
/**
* If set filters will be handled remotely
*/
filter?: boolean;
/**
* If set search will be handled remotely
*/
search?: boolean;
/**
* If set, exporting CSV will be handled remotely
*/
exportCSV?: boolean;
/**
* If set sorting will be handled remotely
*/
sort?: boolean;
/**
* If set pagination will be handled remotely
*/
pagination?: boolean;
}
export interface BootstrapTableProps extends Props<BootstrapTable> {
/**
* Bootstrap version to use, values include '3' or '4'. Defaults to '3'.
*/
version?: BootstrapVersion;
/**
* Use data to specify the data that you want to display on table.
*/
data: object[];
/**
* Normally, react-bootstrap-table handles all the data sorting/filtering/pagination/etc itself internally.
* If this is true, you need to handle all of those manually outside the table. By default it is false.
* This is used mostly with an external/central data store, for example Redux or a database that returns
* already filtered/sorted/paged data.
*
* If a function given, which means you can choose which functionality should be handled with remote or not.Currently,
* we have following functionality you can control: sort, pagination, cellEdit, insertRow, dropRow, filter, search,
* exportCSV.
*/
remote?: boolean | ((remobeObj: RemoteObjSpec) => RemoteObjSpec);
/**
* Use keyField to tell table which column is unique. This is same as isKey in <TableHeaderColumn>
* Tips: react-bootstrap-table support data manipulation(CRUD) so that we need to fetch correct row by a unique column.
* You need choose one of configuration to set the key field: isKey or keyField in <BootstrapTable>.
*/
keyField?: string;
/**
* Use height to set the height of table, default is 100%. The string needs to have a unit, e.g. 'px', '%'.
*/
height?: string;
/**
* Set the maximum height of table. You need give a string with an unit(px) value like height.
*/
maxHeight?: string;
/**
* Enable striped by setting striped to true. Same as Bootstrap table class .table-striped, default is false.
*/
striped?: boolean;
/**
* Enable hover by setting hover to true. Same as Bootstrap table class .table-hover, default is false.
*/
hover?: boolean;
/**
* Enable condensed by setting condensed to true. Same as Bootstrap table class .table-condensed, default is false.
*/
condensed?: boolean;
/**
* Become a borderless table by setting bordered to false, default is true.
*/
bordered?: boolean;
/**
* Enable pagination by setting pagination to true, default is false.
*/
pagination?: boolean;
/**
* Assign the class name of row(tr). This attribute accept a string or function and function is a better way to do more customization.
* If a string given, means the value will be presented as the row class.
* If a function given, will pass rowData and rowIndex as params and should return string for presenting class. for examples:
* @example
* function trClassFormat(rowData,rowIndex) {
* return rowIndex % 2 == 0 ? "tr-odd" : "tr-even"; // return a class name.
* }
*/
trClassName?: string | ((rowData: any, rowIndex: number) => string);
/**
* Enable row insertion by setting insertRow to true, default is false.
* If you enable row insertion, there's a button on the upper left side of table.
*/
insertRow?: boolean;
/**
* Enable row deletion by setting deleteRow to true, default is false.
* If you enable row deletion, there's a button on the upper left side of table.
*/
deleteRow?: boolean;
/**
* Enable column filter by setting columnFilter to true, default is false.
* If enabled, there're input text field per column under the table, user can input your filter condition by each column.
*/
columnFilter?: boolean;
/**
* Enable search by setting search to true, default is false.
* If enabled, there is a on the upper left side of the table. The default place holder is Search
*/
search?: boolean;
/**
* Set searchPlaceholder to change the placeholder in search field, default is Search.
*/
searchPlaceholder?: string;
/**
* Strict search. Set this flag to apply search terms so that only rows that contain ALL terms are included in the
* search results.
*/
strictSearch?: boolean;
/**
* Enable multi search by multiColumnSearch, default is false.
* If you want to use multi search, you must enable search at first.
* Tips: Use space to delimited search text. EX: 3 4, which means match all 3 or 4 datas in table.
*/
multiColumnSearch?: boolean;
/**
* Enable export csv function, default is false.
* If you enable, there's a button on the upper left side of table.
*/
exportCSV?: boolean;
/**
* Set CSV filename (e.g. items.csv). Default is spreadsheet.csv
*/
csvFileName?: string | (() => string);
/**
* If true, it will hide the pagination if there is only one page, default is false.
*/
ignoreSinglePage?: boolean;
/**
* Specify a fix position for the vertical bar if it exist. Available is a number or Top and Bottom
*/
scrollTop?: number | ScrollPosition;
/**
* Add css styles to the react-bs-table-container class.
* For example: containerStyle={ { background: '#00ff00' } }
*/
containerStyle?: CSSProperties;
/**
* Add css styles to the react-bs-table class.
*/
tableStyle?: CSSProperties;
/**
* Add css styles to the react-bs-container-header class.
*/
headerStyle?: CSSProperties;
/**
* Add css styles to the react-bs-container-body class.
*/
bodyStyle?: CSSProperties;
/**
* Add your own class names on the react-bs-table-container class
*/
containerClass?: string;
/**
* Add your own class names on the react-bs-table class
*/
tableContainerClass?: string;
/**
* Add your own class names on the react-bs-container-header class
*/
headerContainerClass?: string;
/**
* Add your own class names on the react-bs-container-body class
*/
bodyContainerClass?: string;
/**
* react-bootstrap-table separate two table element as header and body.
* The tableHeaderClass is for the table element in the header
*/
tableHeaderClass?: string;
/**
* react-bootstrap-table separate two table element as header and body.
* The tableBodyClass is for the table element in the body
*/
tableBodyClass?: string;
/**
* Tell react-bootstrap-table which rows are able to expand. This prop accepts
* a callback function and is suppose to be return an Array of row keys.
* expandableRow is always used with expandComponent, both of props are enable
* the expand row functionality on table.
*/
expandableRow?(row: any): boolean;
/**
* Tell react-bootstrap-table what's content should be rendered in the expanding
* content. This props accept a callback function and is suppose to be return JSX
* or String.
* expandComponent is always used with expandableRow, both of props are enable
* the expand row functionality on table.
*/
expandComponent?(row: any): string | ReactElement;
/**
* Assign some alternative options for expand row feature, expandColumnOptions
* only have four available property currently.
*/
expandColumnOptions?: ExpandColumnOptions;
/**
* Enable the multi sort on table and the number value is means max number of sorting column.
*/
multiColumnSort?: number;
/**
* This prop will enable/disable the keyboard navigation cell by cell on table. This is new
* feature from 3.0.0. Default is false. You can have a basic and simple keyboard navigation
* feature on table by enabling keyBoardNav on BootstrapTable. For the usage of keyboard
* navigation is you can click any cell to focus in or use ⬅ ⬆ ⬇ ➡ to natigate the cell.
*
* But if you want more advance features for keyboard navigation or to integrate with cell
* editing, expand row or selection row, you may get interested to see how they work well
* together: In the advance cases, you need to configure keyBoardNav as an object.
*/
keyBoardNav?: boolean | KeyboardNavigation;
/**
* Enable row selection on table. SelectRow accept an object.
*/
selectRow?: SelectRow;
/**
* Enable cell editing on table. cellEdit accept an object which have the following properties
*/
cellEdit?: CellEdit;
/**
* For some options setting on this component, you can set the options attribute and give an object which contain following properties
*/
options?: Options;
/**
* Used to specify the total number of rows (matching current filter/sort/size per page) in a remote data source.
* Documented in examples, but missing from the main docs. Essential for remote data pagination calculations.
*/
fetchInfo?: FetchInfo;
/**
* Automatically collapses open rows when doing a sort/filter/search action if those options have been specified.
* Is an object with three possible fields: sort, filter, search. Each field is a flag to specify whether that
* action type should cause expanded rows to close. All three fields default to false.
*/
autoCollapse?: {
sort?: boolean;
filter?: boolean;
search?: boolean;
};
/**
* Set a style to be used for the table rows. Example: https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/style/tr-style-table.js
*/
trStyle?: CSSProperties | ((rowData: any, rowIndex: number) => CSSProperties);
/**
* Disable the automatic tabIndex for navigating between cells. This can be useful if you have a page with multiple
* tables on the page, to stop the tab moving to another table. Default is false.
*/
withoutTabIndex?: boolean;
/**
* Disable writing the header row when exporting to a CSV file.
*/
excludeCSVHeader?: boolean;
/**
* Add a footer to the table.
*/
footer?: boolean;
/**
* Data for the table footer. Format is an array of footer rows, each containing an array of column footer data.
*/
footerData?: FooterData[][];
/**
* Table footer custom class
*/
tableFooterClass?: string;
/**
* Render react-s-alert notifications
*/
renderAlert?: boolean;
}
/**
* Footer Data for a column.
*/
export interface FooterData {
/**
* Title to display for the column footer
*/
label: string;
/**
* Index for the column that this footer belongs to
*/
columnIndex: number;
/**
* Text alignment for the data in this footer.
*/
align?: DataAlignType;
/**
* Formatting function for the data in this footer. Used to be able to do things like sum the contents of this
* column in the table so that the footer can be used for totals, etc.
*
* The output value from the formatter function will be used instead of the label if the formatter function is
* defined.
*/
formatter?(tableData: any[]): string | number | ReactElement;
}
export interface SelectRow<TRow extends object = any> {
/**
* Specify whether the selection column uses single(radio) or multiple(checkbox) selection modes. Required.
*/
mode: SelectRowMode;
/**
* If true, clicking the row will trigger selection on that row, default is false.
*/
clickToSelect?: boolean;
/**
* If true, clicking the row will trigger selection on that row and also trigger cell editing if you enabled cell edit. Default is false.
*/
clickToSelectAndEditCell?: boolean;
/**
* If true, clicking the row will trigger expanding the row. Default is false.
*/
clickToExpand?: boolean;
/**
* You can assign the background color of row which be selected.
* If your requirement is much complex, you can assign a function to bgColor that
* returns a css color string.
*/
bgColor?: string | ((row: TRow, isSelect: boolean) => string);
/**
* You can change the width of the selection column by columnWidth (include units).
*/
columnWidth?: string;
/**
* You can assign the class name of selected rows. This can either be a string, or a function that takes two
* arguments: row and isSelect.
* `row`: The current row data.
* `isSelect`: Flag indicating whether this particular row is selected.
*/
className?: string | ((row: TRow, isSelect: boolean) => string);
/**
* Give an array data to perform which rows you want to be selected when table loading.
* The content of array should be the rowkeys for the rows that you want to be selected.
*/
selected?: Array<number | string>;
/**
* Provide a list of unselectable row keys.
*/
unselectable?: Array<number | string>;
/**
* If true, the radio/checkbox column will be hidden.
* You can enable this attribute if you enable clickToSelect and you don't want to show the selection column.
*/
hideSelectColumn?: boolean;
/**
* Default is false, if enabled, there will be a button on top of table for toggling selected rows only.
*/
showOnlySelected?: boolean;
/**
* Accept a custom callback function, if a row be selected or unselected, this function will be called.
* This callback function takes four arguments: row, isSelected, event, and rowIndex:
* `row`: is the row data which you wanted to select or unselect.
* `isSelected`: it's a boolean value means "whether or not that row will be selected?".
* `event`: The event target object.
* `rowIndex`: the index number for the row.
* If the return value of this (function) is false, the select or deselect action will not be applied.
*/
onSelect?(row: TRow, isSelected: boolean, event: any, rowIndex: number): boolean | void;
/**
* Accept a custom callback function, if click select all checkbox, this function will be called. This callback
* function taking two arguments: isSelected, rows.
* isSelectedis a boolean value which means "whether or not that row will be selected?".
* rows is the rows which be selected or unselected.
*
* Tips:
* If the return value of this function is false, the select all or deselect all action will not be applied.
* If return value of this function is an array of rowkeys, this array will be applied as selection row when
* select all triggers. It's useful when you have a validation to filter some rows on selecting all.
*/
onSelectAll?(isSelected: boolean, rows: TRow[]): boolean | Array<number | string>;
/**
* Function that returns a component to customize the display of the selection checkbox or radio button with.
*/
customComponent?(props: CustomSelectProps): string | ReactElement;
/**
* Only unselect visible rows.
*/
onlyUnselectVisible?: boolean;
}
/**
* react-bootstrap-table supports cell editing. When you enable this feature, react-bootstrap-table will make
* the target cell editable by either clicking or dbclicking (depending on the properties you set).
*/
export interface CellEdit<TRow extends object = any> {
/**
* Spectify which condition will trigger cell editing.(click or dbclick). Required.
*/
mode: CellEditClickMode;
/**
* Enabling blurToSave will trigger a saving event on the cell when the input field becomes deselected. Default is false.
* In the default condition, you need to press ENTER to save the cell.
*/
blurToSave?: boolean;
/**
* Enabling blurToEscape will result in a cell edit being cancelled when the user clicks outside the table during
* editing.
* Default is false.
*/
blurToEscape?: boolean;
/**
* nonEditableRows tell react-bootstrap-table which rows should not be edited on all of the columns. Briefly, its a row level limitation
* Please assign a callback function, and this function is supposed to be return an array of row keys.
*/
nonEditableRows?(): Array<number | string>;
/**
* Accept a custom callback function, before cell saving, this function will be called.
* This callback function takes four arguments: row, cellName, cellValue and done.
* `row`: the row data to be saved.
* `cellName`: the column dataField cell name that has been modified.
* `cellValue`: the new cell value.
* `done`: a callback function to use if this is an async operation, to indicate if the save data is valid.
* `props`: an object containing the current cell's rowIndex and colIndex values.
* If your validation is async, for example: you want to pop a confirm dialog for user to confim in this case,
* react-bootstrap-table pass a callback function to you. You are supposed to call this callback function with a
* bool value to perfom if it is valid or not in addition, you should return 1 from the main function to tell
* react-bootstrap-table that this is a async operation.
*/
beforeSaveCell?<K extends keyof TRow>(
row: TRow,
cellName: K,
cellValue: TRow[K],
done: (isValid: boolean) => void,
props: { rowIndex: number; colIndex: number }
): boolean | 1;
/**
* Accept a custom callback function, after cell saving, this function will be called.
* This callback function takes three arguments: row, cellName and cellValue
* `row`: the row data that was saved.
* `cellName`: the column dataField cell name that has been modified.
* `cellValue`: the new cell value.
* `props`: an object containing the current cell's rowIndex and colIndex values.
*/
afterSaveCell?<K extends keyof TRow>(
row: TRow,
cellName: K,
cellValue: TRow[K],
props: { rowIndex: number; colIndex: number }
): void;
}
/**
* Main Options for the Bootstrap Table.
*/
export interface Options<TRow extends object = any> {
/**
* Provide the name of the column that should be sorted by.
* If multi-column sort is active, this is an array of columns.
* If there should be no active sort, both sortName and sortOrder should be undefined.
*/
sortName?: keyof TRow | Array<keyof TRow>;
/**
* Specify whether the sort should be ascending or descending.
* If multi-column sort is active, this is an array of sortOrder items.
* If there should be no active sort, both sortName and sortOrder should be undefined.
*/
sortOrder?: SortOrder | SortOrder[];
/**
* Specify the default sort column.
* Note: when using cleanSort(), this default sort column will be restored.
*/
defaultSortName?: keyof TRow;
/**
* Assign a default sort order.
* Note: when using cleanSort(), this default sort order will be restored.
*/
defaultSortOrder?: SortOrder;
/**
* Set to false to disable sort indicators on header columns, default is true.
*/
sortIndicator?: boolean;
/**
* Assign a callback function which will be called after triggering sorting.
* This function takes two argument: `sortName` and `sortOrder`.
* `sortName`: The sort column name, or array of column names if multi-column sort is active.
* `sortOrder`: The sort ordering, or array of ordering if multi-column sort is active.
*/
onSortChange?:
| ((sortName: keyof TRow, sortOrder: SortOrder) => void)
| ((sortName: ReadonlyArray<keyof TRow>, sortOrder: ReadonlyArray<SortOrder>) => void);
/**
* Change the text displayed on the table if data is empty.
*/
noDataText?: string | ReactElement;
/**
* If true, this hides the noDataText on the table when the tableis empty. Default is false.
*/
withoutNoDataText?: boolean;
/**
* A delay for trigger search after a keyup (millisecond)
*/
searchDelayTime?: number;
/**
* Only work on enable search. If true, there will be a button beside the search input field
* that will empty the field when clicked.
*/
clearSearch?: boolean;
/**
* Set the default search condition.
*/
defaultSearch?: string;
/**
* Assign a callback function which will be called when search text changes. This function takes
* three argument:
* `searchText`: the text from the search field.
* `colInfos`: Array of column settings (e.g. filterFormatted, etc).
* `multiColumnSearch`: True if multiple column search is enabled.
* In most cases, you only need to use searchText. This function usually used for remote searching.
*/
onSearchChange?(searchText: string, colInfos: ReadonlyArray<ColumnDescription<TRow>>, multiColumnSearch: boolean): void;
/**
* Assign a callback function which will be called after triggering searching.
* This function takes two argument: search and result.
* `search`: The search text from the user.
* `result`: The results after searching (array of rows that matched the search).
*/
afterSearch?(search: string, result: ReadonlyArray<TRow>): void;
/**
* Default is false, if true means you want to ignore any editable columns when creating the insert form.
*/
ignoreEditable?: boolean;
/**
* Assign a callback function that will be called after table updates.
*/
afterTableComplete?(): void;
/**
* Assign a callback function which will be called after row delete.
* This function takes two arguments:
* `rowKeys`: which means the row keys for the deleted rows
* `rows`: the array of row data that was deleted.
*/
afterDeleteRow?(rowKeys: ReadonlyArray<number | string>, rows: ReadonlyArray<TRow>): void;
/**
* Assign a callback function which will be called after inserting a row.
* This function takes one argument: row, which means the whole row data you added.
*/
afterInsertRow?(row: TRow): void;
/**
* Assign a callback function which will be called after triggering column filtering.
* This function takes two arguments: filterConds and result.
* `filterConds`: It's an array object which contain all column filter conditions.
* `result`: The results after filtering.
*
* This function only work when you enable columnFilter on <BootstrapTable> or define
* a filter on <TableHeaderColumn>.
*/
afterColumnFilter?(filterConds: ReadonlyArray<FilterData>, result: ReadonlyArray<TRow>): void;
/**
* Assign a callback function which will be called when a row is added. This function
* takes three arguments:
* `row`: which represents the new row data
* `colInfos`: Array of Column Descriptions for the table.
* `errorCallback`: Function to call to provide an async error message if the Add fails.
* The function should either return a string immediately, or return false and then return a string through the
* error callback function later.
*/
onAddRow?(row: TRow, colInfo: ReadonlyArray<ColumnDescription<TRow>>, errorCallback: (message: string) => void): string | boolean;
/**
* Assign a callback function which will be called when a filter condition changes.
* This function takes one argument: filterObj which is an object which take dataField
* as object key and the value is the filter condition.
*/
onFilterChange?(filterObject: FilterData): void;
/**
* Assign a callback function which will be called when the export csv button is clicked.
* In this function, you need to return an array of rows to be exported.
*/
onExportToCSV?(): TRow[];
/**
* Assign a callback function which will be called when a row been deleted.
* This function takes two arguments:
* `rowKeys`: keys for the rows to be deleted.
* `rows`: row data for the rows to be deleted.
*/
onDeleteRow?(rowKeys: ReadonlyArray<number | string>, rows: ReadonlyArray<TRow>): void;
/**
* Assign a callback function which will be called after a row click.
* This function takes four arguments:
* `row`: which is the row data that was clicked on.
* `columnIndex`: index of the column that was clicked on.
* `rowIndex`: index of the row that was clicked on.
* `event`: the click event.
*/
onRowClick?(row: TRow, columnIndex: number, rowIndex: number, event: React.MouseEvent<any>): void;
/**
* Assign a callback function which will be called after a row double click.
* This function takes two arguments:
* `row`: which is the row data that was double clicked on.
* `event`: the double click event.
*/
onRowDoubleClick?(row: TRow, event: React.MouseEvent<any>): void;
/**
* Assign a callback function which will be called when mouse enters the table.
*/
onMouseEnter?(): void;
/**
* Assign a callback function which will be called when mouse leaves the table.
*/
onMouseLeave?(): void;
/**
* Assign a callback function which will be called when the mouse enters a row in table.
* This function takes two arguments:
* `row`: the row data the mouse entered
* `e`: the mouse event data
*/
onRowMouseOver?(row: TRow, e: React.MouseEvent<any>): void;
/**
* Assign a callback function which will be called when mouse leaves a row in table.
* This function takes two arguments:
* `row`: the row data the mouse entered
* `e`: the mouse event data
*/
onRowMouseOut?(row: TRow, e: React.MouseEvent<any>): void;
/**
* Assign a callback function which will be called when deleting a row.
* It gives you a chance to customize your confirmation for row deletion.
* This function takes two argument: next and rowKeys:
* `next`: If you confirm the delete, call next() to continue the process.
* `rowKeys` Is the row keys to be deleted, you can call the `next` function to apply this deletion.
*/
handleConfirmDeleteRow?(next: () => void, rowKeys: ReadonlyArray<number | string>): void;
/**
* Customize the text of previouse page button.
* If using the default pagination panel, this should be a string to use for the button label.
* If creating a custom pagination panel, this is passed to the panel and can be of any type desired.
*/
prePage?: any;
/**
* Customize the text of next page button.
* If using the default pagination panel, this should be a string to use for the button label.
* If creating a custom pagination panel, this is passed to the panel and can be of any type desired.
*/
nextPage?: any;
/**
* Customize the text of first page button.
* If using the default pagination panel, this should be a string to use for the button label.
* If creating a custom pagination panel, this is passed to the panel and can be of any type desired.
*/
firstPage?: any;
/**
* Customize the text of last page button.
* If using the default pagination panel, this should be a string to use for the button label.
* If creating a custom pagination panel, this is passed to the panel and can be of any type desired.
*/
lastPage?: any;
/**
* Accept a number, which means the page you want to show as default.
*/
page?: number;
/**
* You can change the dropdown list for size per page if you enable pagination.
* Default is [10, 25, 30, 50].
*/
sizePerPageList?: SizePerPageList;
/**
* Current chosen size per page.
*/
sizePerPage?: number;
/**
* Number of page buttons to show on the pagination bar, default is 5.
* i.e. previous 2 pages + current page + next two pages = 5.
*/
paginationSize?: number;
/**
* Hide the dropdown list for size per page, default is false.
*/
hideSizePerPage?: boolean;
/**
* Display a short text showing the total number of rows and current lines displayed,
* default is false. If you want to customize this short text, you can give a function
* and this function take three arguments:
* `start`: Current start index
* `to`: Current end index
* `total`: The total data volume.
*/
paginationShowsTotal?: boolean | ((start: number, to: number, total: number) => string | ReactElement);
/**
* Allows you to modify where to start counting the pages, e.g. to set the first page number to 0.
* Default is 1.
*/
pageStartIndex?: number;
/**
* Assign a callback function which will be called after page changed.
* This function takes two argument: page and sizePerPage.
* `page`: New page number
* `sizePerPage`: The number of rows to display in one page.
*/
onPageChange?(page: number, sizePerPage: number): void;
/**
* Assign a callback function which will be called after the size per page (number of rows per page)
* has been changed.
* This function takes one argument: sizePerPage.
* `sizePerPage`: The new number of rows to display in one page.
*/
onSizePerPageList?(sizePerPage: number): void;
/**
* Default is false. If true, the pagination list will be hidden when there is only one page.
*/
hidePageListOnlyOnePage?: boolean;
/**
* Background color on expanded rows (css color value).
*/
expandRowBgColor?: string;
/**
* Expand all rows
*/
expandAll?: boolean;
/**
* Tell react-bootstrap-table how to trigger expanding by clicking on 'row' or 'column' level.
* If the value is 'column', by default all the columns are expandable. If you want to specify some columns as
* unexpandable, check expandable.
* Default is 'row'.
*/
expandBy?: ExpandBy;
/**
* Customize the text on the insert button.
*/
insertText?: string;
/**
* Customize the text on the delete button.
*/
deleteText?: string;
/**
* Customize the text on the save button in the insert modal.
*/
saveText?: string;
/**
* Customize the text on the close button in the insert modal.
*/
closeText?: string;
/**
* Customize the text on the export csv button
*/
exportCSVText?: string;
/**
* You can do something before the toastr pop or even disable the toastr!!
* Returning false or void will not trigger the toastr.
* If you want the toastr popup, you should return true always.
* Inputs match the EditValidatorObject.notification field types.
*/
beforeShowError?(type: EditValidatorType, msg: string, title: string): boolean | void;
/**
* Default is true. If false, during printing the toolbar is hidden.
*/
printToolBar?: boolean;
/**
* ToolBar is the area on the top of table, it contain the search panel, buttons for data manipulation.
* After v3.0.0, you can custom all the components in the ToolBar also itself too.
* Give a toolBar in options props and toolBar only accept a function and a JSX returned value is necessary.
*/
toolBar?(props: ToolBarProps): ReactElement;
/**
* Button group which contain the insert, drop, show only select and export CSV buttons, these button all
* grouped as btn-group class in bootstrap. This is a chance that you can custom this button group.
* Give a btnGroup in options props and btnGroup only accept a function and a JSX returned value is necessary.
* This lets you customize just the left-hand-side of the toolbar if desired.
*/
btnGroup?(props: ButtonGroupProps): ReactElement;
/**
* It's available to customize the insert button by configuring insertBtn in options props, insertBtn only
* accept a function and a JSX returned value is necessary. This function will take one argument: onClick.
*
* The default `InsertButton` component is also exported as a component, so that you can use it as the base
* for your custom component.
*/
insertBtn?(onClick: (e: React.MouseEvent<any>) => void): ReactElement;
/**
* It's available to customize delete button by configuring deleteBtn in options props, deleteBtn onl<y
* accept a function and a JSX returned value is necessary. This function will take one argument: onClick.
*
* The default `DeleteButton` component is also exported as a component, so that you can use it as the base
* for your custom component.
*/
deleteBtn?(onClick: (e: React.MouseEvent<any>) => void): ReactElement;
/**
* It's available to customize the export csv button by configuring exportCSVBtn in options props, exportCSVBtn only
* accept a function and a JSX returned value is necessary. This function will take one argument: onClick.
*
* The default `ExportCSVButton` component is also exported as a component, so that you can use it as the base
* for your custom component.
*/
exportCSVBtn?(onClick: (e: React.MouseEvent<any>) => void): ReactElement;
/**
* It's available to custom select only toggle button by configuring showSelectedOnlyBtn in options props.
* showSelectedOnlyBtn only accept a function and a JSX returned value is necessary.
* This function will take two argument: onClick and showSelected.
*
* The default `ShowSelectedOnlyButton` component is also exported as a component, so that you can use it as
* the base for your custom component.
*/
showSelectedOnlyBtn?(onClick: (e: React.MouseEvent<any>) => void, showSelected: boolean): ReactElement;
/**
* You can custom the whole search panel(right side) by searchPanel in options props. searchPanel only accept
* a function and a JSX returned value is necessary. This function will take one argument: props, that contains:
* `searchField`: the default search field component
* `clearBtn`: the default clear button component
* `defaultValue`: the default text for the search field
* `placeholder`: the default placeholder text for the search field
* `clearBtnClick`: the callback function to use when the clear search button is clicked
* `search`: the callback function for triggering the search, which takes the search text as an input.
*/
searchPanel?(props: SearchPanelProps): ReactElement;
/**
* You can custom the search input field only by searchField in options props. searchField only accept a
* function and a JSX returned value is necessary.
*
* The default `SearchField` component is also exported as a component, so that you can use it as the base for
* your custom component.
*/
searchField?(props: SearchFieldProps): ReactElement<Component<any> & SearchFieldInterface>;
/**
* You can custom the clear button for search field by giving clearSearchBtn in options props.
* clearSearchBtn only accept a function and a JSX returned value is necessary.
*
* The default `ClearSearchButton` component is also exported as a component, so that you can use it as the
* base for your own custom component.
*/
clearSearchBtn?(onClick: (e: React.MouseEvent<any>) => void): ReactElement;
/**
* You can customize everything in the insert modal via options.insertModal and we give you the event
* callback, props and some informations: onModalClose, onSave, columns, validateState, ignoreEditable
* @see https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/custom/insert-modal/custom-insert-modal.js
*/
insertModal?(
onModalClose: () => void,
onSave: (row: TRow) => void,
columns: ReadonlyArray<InsertModalColumnDescription<TRow>>,
validateState: { [dataField: string]: string },
ignoreEditable: boolean
): ReactElement;
/**
* You can customize the body of the insert modal via options.insertModalBody and we give you the following
* arguments: columns, validateState {[fieldname]: errorMsg}, ignoreEditable
*
* Note: There is no exported Insert Modal Body component - if you are customising this, you need to create your
* own body component. That component needs to implement a `getFieldValue` method that returns the new row data. It
* will be called by react-bootstrap-table when the save button is clicked in the insert modal window.
*/
insertModalBody?(
columns: ReadonlyArray<InsertModalColumnDescription<TRow>>,
validateState: { [dataField: string]: string },
ignoreEditable: boolean
): React.ReactElement<React.Component<any> & ModalBodyInterface<TRow>>;
/**
* It's available to custom the header of insert modal by configuring options.insertModalHeader. It only accepts
* a function and a JSX returned value is necessary. This function will take two arguments: closeModal and save.
* `closeModal`: callback function to trigger closing the modal window.
* `save`: callback function to trigger saving the new row data.
*
* The default `InsertModalHeader` component is also exported as a component, so that you can use it as the base
* for your own custom component.
*/
insertModalHeader?(closeModal: () => void, save: () => void): ReactElement;
/**
* It's available to custom the footer of insert modal by configuring options.insertModalFooter. It only accepts
* a function and a JSX returned value is necessary. This function will take two arguments: closeModal and save.
* `closeModal`: callback function to trigger closing the modal window.
* `save`: callback function to trigger saving the new row data.
*
* The default `InsertModalFooter` component is also exported as a component, so that you can use it as the base
* for your own custom component.
*/
insertModalFooter?(closeModal: () => void, save: () => void): ReactElement;
/**
* Function to customize all of components for pagination, including the sizePerPage dropdown and the
* pagination list.
*/
paginationPanel?(props: PaginationPanelProps): ReactElement;
/**
* Function to customize the sizePerPage dropdown.
*/
sizePerPageDropDown?(props: SizePerPageFunctionProps): ReactElement;
/**
* Location for the pagination panel to be displayed. Options are 'top' (above the table), 'bottom'
* (below the table) and 'both' (above and below the table).
*/
paginationPosition?: PaginationPostion;
/**
* Callback when the value in a cell has been modified. It accepts a function that takes three arguments:
* `row`: row that is being edited.
* `fieldName`: column dataField for the cell being edited.
* `value`: new value for the cell.
* The function allows you to make further modifications to the cell value prior to it being saved. You need to
* return the final cell value to use.
*/
onCellEdit?<K extends string & keyof TRow>(row: TRow, fieldName: K, value: TRow[K]): TRow[K];
/**
* Custom message to show when the InsertModal save fails validation.
* Default message is 'Form validate errors, please checking!'
*/
insertFailIndicator?: string;
/**
* Function to verify that a key being generated in the Insert Modal is a valid key.
* If the key fails validation, return a string error message.
* If the key is ok, return void.
*/
isValidKey?(key: number | string): string | void;
/**
* Ability to disable the BOM in the exported CSV file.
* BOM = prepend BOM for UTF-8 XML and text/* types(including HTML) when saving the file.
*/
noAutoBOM?: boolean;
/**
* Custom class to use for the expanded content section of an expanded row. This can either be a string, or a
* function that returns a string and takes three arguments: row, rowIndex, isExpanding.
* `row`: the row expanding/collapsing.
* `rowIndex`: index number of the row.
* `isExpanding`: boolean flag specifying whether the field is expanding or collapsing.
*/
expandBodyClass?: string | ((row: TRow, rowIndex: number, isExpanding: boolean) => string);
/**
* Custom class to use for the row itself for an expanded row when it has been expanded. This can either be a
* string, or a function that returns a string and takes two arguments: row and rowIndex.
* `row`: the expanded row.
* `rowIndex`: index number of the row.
*/
expandParentClass?: string | ((row: TRow, rowIndex: number) => string);
/**
* Customize the field separator in a CSV export file. Default is ','.
*/
exportCSVSeparator?: string;
/**
* Set a function to be called when expanding or collapsing a row. This function takes three arguments:
* `rowKey`: dataField key for the row that is expanding or collapsing.
* `isExpand`: True if the row is expanding, false if it is collapsing.
* `event`: The click event.
*/
onExpand?(rowKey: number | string, isExpand: boolean, event: React.MouseEvent<any>): void;
/**
* Specify that only one row should be able to be expanded at the same time.
*/
onlyOneExpanding?: boolean;
/**
* Customize the tooltip text shown when hovering over the prePage button.
*/
prePageTitle?: string;
/**
* Customize the tooltip text shown when hovering over the nextPage button.
*/
nextPageTitle?: string;
/**
* Customize the tooltip text shown when hovering over the firstPage button.
*/
firstPageTitle?: string;
/**
* Customize the tooltip text shown when hovering over the lastPage button.
*/
lastPageTitle?: string;
/**
* Provide an array of expanded rows for the table.
*/
expanding?: Array<number | string>;
/**
* Flag to indicate that the table should keep the SizePerPage dropdown open if the table rerenders without any
* user interaction.
*/
keepSizePerPageState?: boolean;
/**
* Flag to indicate that the table should always show next/previous buttons even when there is not next/previous
* page.
*/
alwaysShowAllBtns?: boolean;
/**
* Flag to indicate whether there should be buttons for First and Last page.
*/
withFirstAndLast?: boolean;
}
/**
* Properties for data where only a portion of the data is loaded into the table at one time (i.e. remote data).
*/
export interface FetchInfo {
/**
* Total number of rows that match the current table filter/search properties.
*/
dataTotalSize: number;
}
/**
* BootstrapTable class definition.
*/
export class BootstrapTable extends Component<BootstrapTableProps> {
/**
* Call this function to insert a new row to table.
*/
handleAddRow(row: any): void;
/**
* Call this function to insert a new row as the first row in the table.
*/
handleAddRowAtBegin(row: any): void;
/**
* Call this function to drop/delete rows from the table.
*/
handleDropRow(rowKeys: Array<number | string>): void;
/**
* Call this function to do column filtering on table.
* @example:
* // Filtering passing an array of values
* this.refs.table.handleFilterData({
* name: { type: 'ArrayFilter', value: ['Item name 3', 'Item name 4'] },
* price: { type: 'ArrayFilter', value: [2100, 2104] }
* });
*/
handleFilterData(filter: FilterData): void;
/**
* Call this function with search text for fully searching.
*/
handleSearch(search: string): void;
/**
* Call this function to sort table.
*/
handleSort(order: SortOrder, dataField: string): void;
/**
* Call this function to get the page by a rowkey
*/
getPageByRowKey(rowKey: number | string): number;
/**
* Call this function to export table as csv.
*/
handleExportCSV(): void;
/**
* Reset the sort options to the defaults. Documented in examples but missing from main options list.
* @see https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/sort/clean-sorted-table.js
*/
cleanSort(): void;
/**
* Deselect all rows in the table.
*/
cleanSelected(): void;
/**
* Call reset to clean all the status on the table currently (sort, editing, filtering, search).
*/
reset(): void;
}
export interface TableHeaderColumnProps extends Props<TableHeaderColumn> {
/**
* The field of data you want to show on column. This is used throughout react-bootstrap-table as the column field
* name.
*/
dataField?: string;
/**
* Use isKey to tell table which column is unique. This is same as the keyField in <BootstrapTable>
* Tips: You need choose one configuration to set key field: isKey or the keyField in <BootstrapTable>
*/
isKey?: boolean;
/**
* Set the column width, including the units. e.g. '10%' or '150px'
*/
width?: string;
/**
* Set the text alignment in the column, possible values are 'left', 'center', 'right', 'start' and 'end'.
*/
dataAlign?: DataAlignType;
/**
* Alignment of text in the column header.
* Tip: If you don't set the headerAlign, it will default to the setting for dataAlign.
*/
headerAlign?: DataAlignType;
/**
* True to enable table sorting on this column. Default is disabled.
*/
dataSort?: boolean;
/**
* Allow user to render a custom sort caret. You should give a function and should return a JSX.
* This function takes two arguments: order and fieldName.
* `direction`: the current sort order.
* `fieldName`: the dataField name of the field currently being sorted.
*/
caretRender?(direction: SortOrder | null, fieldName: string): string | ReactElement;
/**
* To customize the column. This callback function should return a String or a React Component.
* In addition, this function taking four argument: cell, row, formatExtraData, rowIdx.
* The formatExtraData will be the value which you assign it on <TableHeaderColumn>
*/
dataFormat?(cell: any, row: any, formatExtraData: any, rowIndex: number): string | ReactElement;
/**
* It's useful with dataFormat, you can give any data you want to be passed to the formatter.
*/
formatExtraData?: any;
/**
* Allow you to add your custom attributes on TD element.
* Example: tdAttr={ { 'data-attr': 'test' } }
*/
tdAttr?: CustomAttrs;
/**
* Allow you to add your custom style object on TD element. Accepts either a CSS Properties object, or
* a function that takes 4 arguments and returns a CSS Properties object. These arguments are:
* `cell`: The current cell value
* `row`: The current row data
* `rowIndex`: Index number for the current row data in the input data array.
* `columnIndex`: Index number for the current column that the cell is in.
*/
tdStyle?: CSSProperties | ((cell: any, row: any, rowIndex: number, columnIndex: number) => CSSProperties);
/**
* Allow you to add your custom style object on TH element.
*/
thStyle?: CSSProperties;
/**
* When true, the column will filter using the value returned by the column's formatter.
* When false (default), the column will filter using the pre-formatted value.
*/
filterFormatted?: boolean;
/**
* Return the value you want to be filtered on that column.
* It's useful if your column data is an object.
* @example: (cell, row) => cell.fieldOne;
* @see: https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/manipulation/search-format-table.js
*/
filterValue?(cell: any, row: any): any;
/**
* Customize the cell content when exporting to a CSV file. This function takes two argument: cell, row.
*/
csvFormat?(cell: any, row: any): string;
/**
* Customize the column header text for the column when exporting to a CSV file.
*/
csvHeader?: string;
/**
* It's usually used with csvFormat, and it's same as formatExtraData.
* You can give any additional data you want to be passed to the csvFormat function.
*/
csvFormatExtraData?: any;
/**
* Set to true to hide the column. Default is false. Often used to hide rowKey columns that are required to
* identify a row but that do not need to be visible.
*/
hidden?: boolean;
/**
* Used to specify whether a column will be exported to csv.
*
* If true, the column will be included in the export. This is usually used with hidden columns, as those are not
* exported by default.
*
* If false, the column will be excluded from the csv export.
*/
export?: boolean;
/**
* Usually used with Options.expandBy.
* You can assign which columns will trigger a row expansion or not.
* If false, clicking on a row inside this column will not cause the row to expand.
*/
expandable?: boolean;
/**
* Set this to true to hide this column on insert modal. Default is false.
*
* This is often used together with autoValue for auto-generated columns like row keys.
*/
hiddenOnInsert?: boolean;
/**
* It only work for enabling insertRow and be assign on rowKey column. If true, the value of rowkey will be
* generated automatically after a row insertion. If a function given, you can customize the value by yourself and
* remember to return the value for the cell from the function.
*/
autoValue?: boolean | (() => any);
/**
* False to disable search functionality on column, default is true.
*/
searchable?: boolean;
/**
* Show the title on each column in the data section of the table.
* @see https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/column/column-title-table.js
*/
columnTitle?: boolean | string | ((cell: any, row: any, rowIndex: number, colIndex: number) => string);
/**
* Show the title on each column in the header section of the table, default is true.
*/
headerTitle?: boolean;
/**
* If the children of TableHeaderColumn is a JSX or Object, we prefer to add this prop to describe this column with
* a pure text(String). It will be used on the placeholder or tips in the filter, search field or insert field etc.
*/
headerText?: string;
/**
* Give a custom callback function for data sorting.
* This function takes five arguments: a, b, order, sortField, extraData
* The extraData value is the data from the sortFuncExtraData.
*/
sortFunc?(a: object, b: object, order: SortOrder, sortField: keyof object, extraData: any): number;
/**
* Extra data for the custom sort function. If defined, this data will be passed as fifth argument in sortFunc.
*/
sortFuncExtraData?: any;
/**
* Add custom css class on table header column, this attribute only accept String or Function.
* If Function, it takes four arguments: cell, row, rowIndex, columnIndex.
* In addition, this function should return a String which is the class name you want to add on.
*/
className?: string | ((cell: any, row: any, rowIndex: number, columnIndex: number) => string);
/**
* Add custom css class on table body column, this attribute only accept String or Function.
* If Function, it taking four arguments: cell, row, rowIndex, columnIndex.
* In addition, this function should return a String which is the class name you want to add on.
*/
columnClassName?: string | ((cell: any, row: any, rowIndex: number, columnIndex: number) => string);
/**
* Add custom css class on editing cell, if assign a callback function, you are supposed to return a String for class name
*/
editColumnClassName?: string | ((cell: any, row: any) => string);
/**
* Add custom css class for invalid editing cell, if assign a callback function, you are supposed to return a String for class name
*/
invalidEditColumnClassName?: string | ((cell: any, row: any) => string);
/**
* boolean: Add True to set column editable, false is non-editable.
* function: You have ability to control the editable level on cell instead of column level. For this
* callback function, you are supposed to be return a bool value to decide this cell editable or not
* This callback accepts four arguments: cell, row, rowIndex, columnIndex.
* object: @see Editable interface.
*/
editable?: boolean | Editable<any, any> | ((cell: any, row: any, rowIndex: number, columnIndex: number) => boolean | string | EditValidatorObject);
/**
* Give an Object like following to able to customize your own editing component.
* This Object should contain these two property:
* getElement(REQUIRED): Accept a callback function and take two arguments: onUpdate and props.
* customEditorParameters: Additional data for custom cell edit component.
*/
customEditor?: CustomEditor<any, any>;
/**
* To Enable a column filter within header column.
* This feature support a lots of filter types and conditions.
*/
filter?: Filter;
/**
* This is always used together with rowSpan and colSpan, to create multi-row/multi-column headers.
* Row is the header row on which this header column present.
*/
row?: number;
/**
* Indicates how many rows this column takes.
* Default: 1
*/
rowSpan?: number;
/**
* Indicates how many columns this column takes.
* Default: 1
*/
colSpan?: number;
/**
* Specify the field type to use when exporting this column to CSV. Available types are 'number' and 'string'.
* Defaults to 'string'.
*/
csvFieldType?: CSVFieldType;
/**
* Set the column class name for the actively filtered column. Can be either a string, or a function that takes two
* parameters: order and dataField.
* `order`: current sort order for the column.
* `dataField`: current column's dataField.
* This allows you to specify a different className depending on whether the current dataField is being sorted 'asc'
* or 'desc'.
* @see https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/sort/sort-style-table.js#L36-L37
*/
sortHeaderColumnClassName?: string | ((order: SortOrder, dataField: string) => string);
/**
* Specify custom tdAttrs to use for a cell that is being edited within this column.
*/
editTdAttr?: CustomAttrs;
/**
* Custom insert editor element. This is a function to generate a custom edit element to display in the InsertModal
* form. The function takes five arguments: column, attr, editorClass, ignoreEditable, defaultValue.
* `column`: column information given to the insert modal.
* `attr`: EditableAttrs from the TableHeader.editable object options.
* `editorClass`: className to apply to the editor component.
* `ignoreEditable`: boolean flag indicating whether editable fields should be ignored in the insert modal
* `defaultValue`: the default value to use for this cell.
* The function should return either a JSX element for the field, or false to default back to the standard edit
* element.
*/
customInsertEditor?: {
getElement(
column: InsertModalColumnDescription,
attr: EditableAttrs,
editorClass: string,
ignoreEditable: boolean,
defaultValue: any
): ReactElement | boolean;
};
/**
* Support specifying that the column should start sorting with the 'asc' option.
*/
defaultASC?: boolean;
}
/**
* Editable Attributes. Poorly documented, but used when creating custom editor components.
*/
export interface EditableAttrs {
/**
* Placeholder text to use for the cell editor field.
*/
placeholder?: string;
/**
* Function to pass a reference to the input editor field.
*/
ref?(ref: any): any;
/**
* Callback for onKeyDown.
*/
onKeyDown?(): void;
/**
* Callback for on cell blur.
*/
onBlur?(): void;
}
/**
* Editable Select option values
*/
export type EditSelectOptionValue =
| Array<{ text: string; value: string; }>
| string[]
| number[];
/**
* Editable Checkbox option values. This should be a string with the true/false value separated by a colon.
* e.g. "Yes:No"
*/
export type EditCheckboxOptionValue = string;
/**
* Object to use to customize the properties for an editable column.
*/
export interface Editable<TRow extends object, K extends keyof TRow> {
/**
* Edit field type, avaiable value is 'textarea', 'select', 'checkbox' and 'datetime'
*/
type?: EditCellType;
/**
* Class name to use for the editor component.
*/
className?: string;
/**
* Number of columns to display for a text area component.
*/
cols?: number;
/**
* Number of rows to display for a text area component.
*/
rows?: number;
/**
* Used to specify a field that can be modified in the insert modal when adding a new row, but cannot be edited
* inside the table after the row has been inserted.
*/
readOnly?: boolean;
/**
* CSS Style to use for the editor component.
*/
style?: CSSProperties;
/**
* Validation function for the column. It takes the new "cell value" as argument. This function should return
* a boolean true/false for isValid, or an EditValidatorObject (so that an error message can be provided).
*/
validator?(cell: TRow[K], row: TRow): boolean | string | EditValidatorObject;
/**
* Data in a select or checkbox. If a checkbox, use a string with a ':'(colon) to separate the two values, ex: Y:N
* The callback function can be used to customize the select options based on other field values within the row.
* If the array is an array of objects, the fields 'text' can be used for the display text and 'value' to specify
* the option's value.
*/
options?: {
values:
| EditSelectOptionValue
| EditCheckboxOptionValue
| ((row: TRow) => EditCheckboxOptionValue | EditSelectOptionValue);
};
/**
* Default value to show in the edit field in the Insert Modal for this column.
*/
defaultValue?: TRow[K];
/**
* @deprecated Use placeholder inside the attrs field instead.
* Text to display as placeholder text in the editor component.
*/
placeholder?: string;
/**
* Additional attributes for the editor component.
*/
attrs?: EditableAttrs;
}
/**
* Text filter type.
*/
export interface TextFilter {
/**
* Filter type must be 'TextFilter'.
*/
type: 'TextFilter';
/**
* Delay time in milliseconds after the last key press prior to applying the filter. Defaults to 500ms.
*/
delay?: number;
/**
* Placeholder text to show in the filter.
*/
placeholder?: string;
/**
* Condition. Can be 'eq' (exactly equal) or 'like' (contains the given string). Defaults to 'like'.
*/
condition?: FilterCondition;
/**
* Default value for the text filter. Defaults to ''
*/
defaultValue?: string;
/**
* CSS Style to use for the select filter.
*/
style?: CSSProperties;
}
export interface SelectFilterOptionsType {
[value: string]: string | number | boolean;
[value: number]: string | number | boolean;
}
/**
* Select filter type
*/
export interface SelectFilter {
/**
* Filter type must be 'SelectFilter'
*/
type: 'SelectFilter';
/**
* Placeholder text to show in the filter.
*/
selectText?: string;
/**
* Options for the filter select.
*/
options: SelectFilterOptionsType;
/**
* Condition. Can be 'eq' (exactly equal) or 'like' (contains the given string). Defaults to 'like'.
*/
condition?: FilterCondition;
/**
* Default value for the select filter.
*/
defaultValue?: string | number | boolean;
/**
* CSS Style to use for the select filter.
*/
style?: CSSProperties;
/**
* Disable the empty option in the dropdown filter.
*/
withoutEmptyOption?: boolean;
}
/**
* Regex filter type
*/
export interface RegexFilter {
/**
* Filter type must be 'RegexFilter'
*/
type: 'RegexFilter';
/**
* Delay time in milliseconds after the last key press prior to applying the filter. Defaults to 500ms.
*/
delay?: number;
/**
* Placeholder text to show in the filter.
*/
placeholder?: string;
/**
* Default value
*/
defaultValue?: string;
/**
* CSS Style to use for the select filter.
*/
style?: CSSProperties;
}
/**
* Number filter type
*/
export interface NumberFilter {
/**
* Filter type must be 'NumberFilter'
*/
type: 'NumberFilter';
/**
* Delay time in milliseconds after the last key press prior to applying the filter. Defaults to 500ms.
*/
delay?: number;
/**
* Placeholder text to show in the filter.
*/
placeholder?: string;
/**
* Number filter comparators
*/
numberComparators?: FilterComparator[];
/**
* Default value for the filter.
*/
defaultValue?: {
/**
* Number value.
*/
number: number;
/**
* Comparator value.
*/
comparator: FilterComparator;
};
/**
* If this is a select number field, disable the empty option in the dropdown.
*/
withoutEmptyOption?: boolean;
/**
* Specify that the comparator field MUST have a comparator selected.
*/
withoutEmptyComparatorOption?: boolean;
/**
* Specify that the value field MUST have a number value specified.
*/
withoutEmptyNumberOption?: boolean;
/**
* List of number options that can be selected, if the number field is a select dropdown instead of a text edit.
*/
options?: number[];
/**
* CSS Style to use for the select filter.
*/
style?: {
number: CSSProperties;
comparator: CSSProperties;
};
}
/**
* Date filter type
*/
export interface DateFilter {
/**
* Filter type must be 'DateFilter'
*/
type: 'DateFilter';
/**
* Delay time in milliseconds after the last key press prior to applying the filter. Defaults to 500ms.
*/
delay?: number;
/**
* Date filter comparators
*/
dateComparators?: FilterComparator[];
/**
* Default value for the filter.
*/
defaultValue?: {
/**
* Date value. String values will be automatically converted to dates.
*/
date: Date | string;
/**
* Comparator value.
*/
comparator: FilterComparator;
};
/**
* CSS Style to use for the select filter.
*/
style?: {
date: CSSProperties;
comparator: CSSProperties;
};
}
/**
* Custom Filter Parameters
*/
export interface CustomFilterParameters<Params extends object = any> {
callback(cell: any, params: Params): boolean;
callbackParameters: Params;
}
/**
* Custom filter element type.
*/
export class CustomFilterElement extends Component<any> {
cleanFiltered: () => void;
}
/**
* Custom filter type.
*/
export interface CustomFilter<FParams extends object = any, FElement extends CustomFilterElement = any> {
/**
* Type must be 'CustomFilter'
*/
type: 'CustomFilter';
/**
* Function to generate the filter component
*/
getElement(
filterHandler: (value?: CustomFilterParameters<FParams>, type?: 'CustomFilter') => void,
customFilterParameters: CustomFilterParameters<FParams>
): ReactElement<FElement>;
/**
* Custom filter parameters to be passed to the generator function
*/
customFilterParameters: CustomFilterParameters<FParams>;
}
/**
* Collection of filter types.
*/
export type Filter = TextFilter | SelectFilter | RegexFilter | NumberFilter | DateFilter | CustomFilter;
/**
* The "value" type for a number filter
*/
export interface NumberFilterValue {
number: number | string;
comparator: FilterComparator;
}
/**
* The "value" type for a date filter.
*/
export interface DateFilterValue {
date: Date | string;
comparator: FilterComparator;
}
/**
* Text Filter's data object.
*/
export interface TextFilterData {
type: 'TextFilter';
value: string;
}
/**
* Select Filter's data object.
*/
export interface SelectFilterData {
type: 'SelectFilter';
value: string;
}
/**
* Regex Filter's data object.
*/
export interface RegexFilterData {
type: 'RegexFilter';
value: string;
}
/**
* Number Filter's data object.
*/
export interface NumberFilterData {
type: 'NumberFilter';
value: NumberFilterValue;
}
/**
* Date Filter's data object.
*/
export interface DateFilterData {
type: 'DateFilter';
value: DateFilterValue;
}
/**
* Data object returned for an array filter.
*/
export interface ArrayFilterData {
type: 'ArrayFilter';
value: string[] | number[];
}
/**
* Valid types for the "value" field inside a filter's data object.
*/
export type FilterValueData = string | number | string[] | number[] | DateFilterValue | NumberFilterValue;
/**
* Combined types of filter data objects.
*/
export type FilterValue =
| TextFilterData
| SelectFilterData
| RegexFilterData
| NumberFilterData
| DateFilterData
| ArrayFilterData;
/**
* Filter object that can be passed to BootstrapTableFilter.handleFilterData function.
*/
export interface FilterData<CustomFilterValue extends object = any> {
[dataField: string]: FilterValue | CustomFilterValue;
}
/**
* TableHeaderColumn class definition.
*/
export class TableHeaderColumn extends Component<TableHeaderColumnProps> {
/**
* Function to reset the filter on this column to the default values.
*/
cleanFiltered(): void;
/**
* Apply a filter value.
*/
applyFilter(value: FilterValueData): void;
}
/**
* Customize the options for Keyboard Navigation.
*/
export interface KeyboardNavigation {
/**
* Return a style object which will be applied on the navigating cell.
*/
customStyle?(cell: any, row: any): CSSProperties;
/**
* Set to false to disable click to navigate, usually user wants to click to select row instead of navigation.
*/
clickToNav?: boolean;
/**
* Return a style object which will be applied on the both of navigating and editing cell.
*/
customStyleOnEditCell?(cell: any, row: any): CSSProperties;
/**
* When set to true, pressing ENTER will begin to edit the cell if cellEdit is also enabled.
*/
enterToEdit?: boolean;
/**
* When set to true, pressing ENTER will expand or collapse the current row.
*/
enterToExpand?: boolean;
/**
* When set to true, pressing ENTER will select or unselect the current row.
*/
enterToSelect?: boolean;
}
/**
* Input properties for the expandColumnComponent function when customising the expand indicator.
*/
export interface ExpandColumnComponentProps {
/**
* True if the current row is able to be expanded.
*/
isExpandableRow: boolean;
/**
* True if the current row is currently expanded.
*/
isExpanded: boolean;
}
/**
* Input properties for the expandedColumnHeaderComponent function.
*/
export interface ExpandedColumnHeaderProps {
anyExpand: boolean;
}
/**
* Customize the options for expand row feature.
*/
export interface ExpandColumnOptions {
/**
* Will enable an indicator column at first column if true. Default is false.
*/
expandColumnVisible?: boolean;
/**
* a callback function to customize the appearance of the indicator column.
*/
expandColumnComponent?(props: ExpandColumnComponentProps): string | ReactElement;
/**
* set the width of indicator column.
*/
columnWidth?: number | string;
/**
* If both an indicator column and a selection column are displaying, this specifies whether the indicator column
* should be shown first. Default is true, false will move the expand indicator column after selection column.
*/
expandColumnBeforeSelectColumn?: boolean;
/**
* a callback function to customise the header column
*/
expandedColumnHeaderComponent?(props: ExpandedColumnHeaderProps): string | ReactElement;
}
/**
* Properties provided in the callback to create a custom component for the selection column radio/checkboxes
*/
export interface CustomSelectProps {
/**
* What type of selection should be used? Values are 'radio' (single) or 'checkbox' (multiple).
*/
type: SelectRowMode;
/**
* True if the current row being drawn is selected.
*/
checked: boolean;
/**
* True if the current row being drawn is not permitted to be selected.
*/
disabled: boolean;
/**
* Callback that should be used when someone selects the current row.
* `event`: the current event target
* `rowIndex`: the index of the current row being toggled.
*/
onChange(event: any, rowIndex: string | number): void;
/**
* Index for the row currently being rendered.
* If the rowIndex is 'Header', it means this rendering is for header selection column.
*/
rowIndex: number | string;
/**
* The indeterminate flag is used to indicate that there are some rows selected, but it is neither all rows nor
* no rows. As far as the select all checkbox is concerned, it is neither true nor false.
*/
indeterminate: boolean;
}
/**
* Details of the column settings, provided to the Options.onSearchChange callback function.
* The values for these settings come from the <TableHeader> properties for a column.
*
* Note: the list of options is poorly documented. This list comes from double-checking the
* react-bootstrap-table source code to check what properties actually get passed to the
* onSearchChange callback function.
*/
export interface ColumnDescription<TRow extends object = any> {
/**
* Name of the column.
* Comes from TableHeader.dataField property.
*/
name: keyof TRow;
/**
* Column text alignment setting
* Comes from TableHeader.dataAlign property.
*/
align: DataAlignType;
/**
* Column sorting setting. If true, the column can be used to sort the data.
* Comes from TableHeader.dataSort property.
*/
sort: boolean;
/**
* Column data format function.
* Comes from TableHeader.dataFormat property.
*/
format(cell: any, row: TRow, formatExtraData: any, rowIndex: number): string | ReactElement;
/**
* The formatExtraData setting for the column.
* Comes from TableHeader.formatExtraData property.
*/
formatExtraData: any;
/**
* Whether data should be filtered based on the formatted value, or the raw data value.
* Comes from TableHeader.filterFormatted property.
*/
filterFormatted: boolean;
/**
* Filter function for the column.
* Comes from TableHeader.filterValue property.
*/
filterValue(cell: any, row: TRow): any;
/**
* Setting for whether the data in this column can be edited.
* Comes from TableHeader.editable property.
*/
editable: boolean | Editable<TRow, any> | ((cell: any, row: TRow, rowIndex: number, columnIndex: number) => boolean | string | EditValidatorObject);
/**
* Custom editor settings to use when editing the data in this column.
* Comes from TableHeader.customEditor property.
*/
customEditor: CustomEditor<TRow, any>;
/**
* Flag to indicate whether this column should be visible or not.
* Comes from TableHeader.hidden property.
*/
hidden: boolean;
/**
* Flag to indicate whether this column should be hidden on the insert modal.
* Comes from TableHeader.hiddenOnInsert property.
*/
hiddenOnInsert: boolean;
/**
* Flag to indicate whether the data in this column should be included in a search.
* Comes from TableHeader.searchable property.
*/
searchable: boolean;
/**
* Custom className setting for this column.
* Comes from TableHeader.columnClassName property.
*/
className: string | ((cell: any, row: TRow, rowIndex: number, columnIndex: number) => string);
/**
* Custom className setting for this column when a cell in the column is being edited.
* Comes from TableHeader.editColumnClassName property.
*/
editClassName: string | ((cell: any, row: TRow) => string);
/**
* Custom className setting for this column when a cell in the column contains invalid data.
* Comes from TableHeader.invalidEditColumnClassName property.
*/
invalidEditColumnClassName: string | ((cell: any, row: TRow) => string);
/**
* Custom title to display for this column.
* Comes from TableHeader.columnTitle property.
*/
columnTitle: boolean;
/**
* Width setting for this column.
* Comes from TableHeader.width property.
*/
width: string;
/**
* Custom header value/component/children to use for this column.
* Comes from TableHeader.headerText || TableHeader.children properties.
*/
text: string | number | boolean | ReactElement;
/**
* Custom sort function to use for this column.
* Comes from TableHeader.sortFunc property.
*/
sortFunc(a: TRow, b: TRow, order: SortOrder, sortField: keyof TRow, extraData: any): number;
/**
* Extra data to be provided to the search function for this column.
* Comes from TableHeader.sortFuncExtraData property.
*/
sortFuncExtraData: any;
/**
* Flag to indicate whether this column should be included in a CSV export.
* Comes from TableHeader.export property.
*/
export: boolean;
/**
* Flag to indicate whether this column is expandable.
* Comes from TableHeader.expandable property.
*/
expandable: boolean;
/**
* Custom attributes (e.g. {'data-attr': 'test'}) to be applied to cells in this column.
* Comes from TableHeader.tdAttr property.
*/
attrs: CustomAttrs;
/**
* Custom attributes (e.g. {'data-attr': 'test'}) to use for cells that are being edited in this column.
* Comes from TableHeader.editTdAttr property.
*/
editAttrs: CustomAttrs;
/**
* CSS style properties to use for cells in this column.
* Comes from TableHeader.tdStyle property.
*/
style: CSSProperties;
}
/**
* Props provided to the Options.toolBar callback function for creating a custom toolbar.
*/
export interface ToolBarProps {
/**
* Rendered components to use in the toolbar.
*/
components: ButtonGroupProps & {
/**
* Search panel component.
*/
searchPanel: ReactElement;
/**
* Button group components.
*/
btnGroup: ReactElement; // button groups JSX
/**
* The individual search field.
*/
searchField: ReactElement; // search field JSX
/**
* The button to clear the search field.
*/
clearBtn: ReactElement; // clear search field JSX
};
/**
* Event callbacks to use with a custom toolbar.
*/
event: {
/**
* Callback to activate the insert row modal window.
*/
openInsertModal(): void;
/**
* Callback to close the insert row modal window.
*/
closeInsertModal(): void;
/**
* Callback to delete selected row(s) from the table.
*/
dropRow(): void;
/**
* Callback to toggle between showing all rows and showing only selected rows.
*/
showOnlyToogle(): void;
/**
* Callback to export the table to a CSV file.
*/
exportCSV(): void;
/**
* Callback to apply a search.
*/
search(): void;
};
}
/**
* Left-hand side Button elements (used when customizing the toolbar).
*/
export interface ButtonGroupProps {
/**
* Export to CSV button.
*/
exportCSVBtn: ReactElement;
/**
* Insert button (to add a row).
*/
insertBtn: ReactElement;
/**
* Delete button.
*/
deleteBtn: ReactElement;
/**
* Toggle button to switch between showing all rows and showing selected rows only.
*/
showSelectedOnlyBtn: ReactElement;
}
/**
* Properties that are given to the Options.searchPanel callback function.
*/
export interface SearchPanelProps {
/**
* Default search field component.
*/
searchField: ReactElement;
/**
* Default clear search field button component.
*/
clearBtn: ReactElement;
/**
* The default search text.
*/
defaultValue: string;
/**
* The placeholder text for the search field.
*/
placeholder: string;
/**
* A callback to trigger the clear search field event.
*/
clearBtnClick(): void;
/**
* A callback to trigger a search, takes the search text as an input.
*/
search(searchText: string): void;
}
/**
* Properties passed as props to the Options.paginationPanel function when generating a custom pagination panel.
*/
export interface PaginationPanelProps {
/**
* Current page number
*/
currPage: number;
/**
* Current number of rows to show per page
*/
sizePerPage: number;
/**
* Choices for size per page dropdown component
*/
sizePerPageList: SizePerPageList;
/**
* Index number for the first page of data.
* Comes from Options.pageStartIndex.
*/
pageStartIndex: number;
/**
* Callback function to use to change page.
*/
changePage(pageNum: number): void;
/**
* Callback function to trigger the toggle on sizePerPage dropdown button
*/
toggleDropDown(): void;
/**
* Callback function to use to set a new size per page.
*/
changeSizePerPage(sizePerPage: number): void;
/**
* The basic components for the pagination panel, provided here so that you have the option to use some of them
* if you don't want to customize all of them.
*/
components: {
/**
* Text/element to display when displaying the total number of rows.
*/
totalText: string | ReactElement;
/**
* Default sizePerPageDropdown component.
*/
sizePerPageDropDown: SizePerPageDropDown;
/**
* The default list of page change buttons.
*/
pageList: HTMLUListElement;
};
}
/**
* Properties given to the Options.sizePerPageDropDown function used to generate a custom sizePerPage component to
* render in the pagination panel.
*/
export interface SizePerPageFunctionProps {
/**
* Flag to indicate that the sizePerPage dropdown should currently be 'open'.
*/
open: boolean;
/**
* Flag indicating that the sizePerPage dropdown should be hidden.
*/
hideSizePerPage: boolean;
/**
* Current size per page as a string value.
*/
currSizePerPage: string;
/**
* Array of the size per page options to display in the dropdown.
*/
sizePerPageList: SizePerPageList;
/**
* On-click toggle function callback to open/close the size per page dropdown list.
*/
toggleDropDown(): void;
/**
* Callback function to use to change the current size per page.
*/
changeSizePerPage(newSizePerPage: number): void;
}
/**
* Custom Editor Props passed to the getElement function in the TableHeader.customEditor object.
*/
export interface CustomEditorProps<TRow extends object, K extends keyof TRow> extends EditableAttrs {
/**
* The row data for the cell being edited.
*/
row: TRow;
/**
* Default value for the editor cell.
*/
defaultValue: TRow[K];
/**
* Contents of the customEditorParameters object.
*/
[parameterName: string]: any;
}
/**
* Object to provide a custom editor component to use for a table column.
* @see: https://github.com/AllenFang/react-bootstrap-table/blob/master/examples/js/cell-edit/custom-cell-edit-table.js
*/
export interface CustomEditor<TRow extends object, K extends keyof TRow> {
/**
* Required. Function to use to create the custom cell editor. Takes two parameters:
* `onUpdate`: callback function to call to update the value inside the cell.
* `props`:
*/
getElement(onUpdate: (updatedCell: TRow[K]) => void, props: CustomEditorProps<TRow, K>): ReactElement;
/**
* Additional parameters to pass to the getElement function inside the props argument.
*/
customEditorParameters?: object;
}
/**
* Validation object that can be returned from cell editing validation.
*/
export interface EditValidatorObject {
/**
* Boolean flag indicating whether the cell value is valid.
*/
isValid: boolean;
/**
* Notification object providing details on the validation result.
*/
notification: {
/**
* One of 'success' or 'error'
*/
type: EditValidatorType;
/**
* A text message explaining the validation result.
*/
msg: string;
/**
* A text title explaining the validation result.
*/
title: string;
};
}
/**
* Properties that can be passed to the InsertButton, DeleteButton, ExportCSVButton and ClearSearchButton
* components.
*/
export interface ButtonProps {
/**
* Label for the button
*/
btnText?: string;
/**
* Bootstrap css style class for the button, e.g. 'btn-warning'
*/
btnContextual?: string;
/**
* Custom class for the button
*/
className?: string;
/**
* Glyphicon glyph string for the button, e.g. 'glyphicon-edit'
*/
btnGlyphicon?: string;
/**
* Function to be called to activate the normal onClick functionality for this button.
*/
onClick?(e: React.MouseEvent<any>): void;
}
/**
* Properties that can be passed to the ShowSelectedOnlyButton component.
*/
export interface ShowSelectedButtonProps {
/**
* Label for when clicking the button will toggle the table back into "show all rows" mode.
*/
showAllText?: string;
/**
* Label for when clicking the button will toggle the table into "show only selected rows" mode.
*/
showOnlySelectText?: string;
/**
* Bootstrap css style class for the button, e.g. 'btn-warning'
*/
btnContextual?: string;
/**
* Custom class for the button
*/
className?: string;
/**
* Glyphicon glyph string for the button, e.g. 'glyphicon-edit'
*/
btnGlyphicon?: string;
/**
* Function to be called to activate the normal onClick functionality for this button.
*/
onClick?(e: React.MouseEvent<any>): void;
}
/**
* Properties that can be passed to the SearchField component.
*/
export interface SearchFieldProps {
/**
* Custom css class name
*/
className?: string;
/**
* Default value for the search field
*/
defaultValue?: string;
/**
* Placeholder text for the search field
*/
placeholder?: string;
/**
* callback funciton to call when a key is released
*/
onKeyUp?(e: React.KeyboardEvent<any>): void;
}
/**
* Interface that must be implemented for a custom search field component.
*/
export interface SearchFieldInterface {
/**
* getValue should return the current search text.
*/
getValue(): string;
/**
* setValue should update the current search text to the given value.
*/
setValue(search: string): void;
}
/**
* Modal Column data passed to Options.insertModal and Options.insertModalBody.
*/
export interface InsertModalColumnDescription<TRow extends object = any> {
/**
* Flag to indicate that this is the key field for the column. It is only present if there is more than
* one column in the table.
* Comes from TableHeader.isKey field.
*/
isKey?: boolean;
/**
* Header text/element for the column.
* Comes from TableHeader.headerText or TableHeader.children.
*/
name: string | ReactElement;
/**
* Field name for the column data.
* Comes from TableHeader.dataField.
*/
field: keyof TRow; // children.props.dataField,
/**
* Flag to indicate whether this column is editable.
* Comes from TableHeader.editable.
*/
editable: boolean | Editable<TRow, keyof TRow> | ((cell: TRow[keyof TRow], row: TRow, rowIndex: number, columnIndex: number) => boolean | string | EditValidatorObject);
/**
* Custom element to use for the Insert field element.
* Comes from TableHeader.customInsertEditor.
*/
customInsertEditor(
column: InsertModalColumnDescription<TRow>,
attr: EditableAttrs,
editorClass: string,
ignoreEditable: boolean,
defaultValue: TRow[keyof TRow]
): ReactElement | boolean;
/**
* Flag to indicate whether this column should be hidden on the Insert Modal page.
* Comes from TableHeader.hiddenOnInsert.
*/
hiddenOnInsert: boolean; // children.props.hiddenOnInsert,
/**
* Flag to indicate whether the table should check that a key does not already exist.
* Comes from TableHeader.keyValidator.
*/
keyValidator: boolean; // children.props.keyValidator
/**
* Flag to indicate that the field should be auto-generated rather than edited. It is only present if there is more
* than one column in the table.
* Comes from TableHeader.autoValue.
*/
autoValue?: boolean;
/**
* Format function for the field. It is only present if there is more than one column in the table. Value is either
* 'false', meaning that there is no format function present, or a wrapper function that returns the formatted string
* content for the field using the TableHeader.dataFormat function to generate that string.
*
* Based on from TableHeader.dataFormat, but is applied as a wrapper function around that function.
*/
format?: boolean | ((cell: TRow[keyof TRow]) => string);
}
/**
* Properties that can be passed to the InsertModalHeader component.
*/
export interface InsertModalHeaderProps {
/**
* Header class name.
*/
className?: string;
/**
* Title to display in the header.
*/
title?: string;
/**
* Callback function to call prior to closing the Insert Modal window.
*/
beforeClose?(e: SyntheticEvent<any>): void;
/**
* Callback function to call to close the Insert Modal window.
*/
onModalClose?(closeModal: () => void): void;
/**
* Set to true to hide the close button. Default is false.
*/
hideClose?: boolean;
/**
* Bootstrap version.
*/
version?: BootstrapVersion;
}
/**
* Properties that can be passed to the InsertModalFooter component.
*/
export interface InsertModalFooterProps {
/**
* Header class name.
*/
className?: string;
/**
* Text to display on the Save button
*/
saveBtnText?: string;
/**
* Text to display on the Close button
*/
closeBtnText?: string;
/**
* Bootstrap css class name for the close button, example: 'btn-warning'
*/
closeBtnContextual?: string;
/**
* Bootstrap css class name for the save button, example: 'btn-success'
*/
saveBtnContextual?: string;
/**
* Custom class name for the close button.
*/
closeBtnClass?: string;
/**
* Custom class name for the save button.
*/
saveBtnClass?: string;
/**
* Callback function to call prior to closing the Insert Modal window.
*/
beforeClose?(e: SyntheticEvent<any>): void;
/**
* Callback function to call to close the Insert Modal window.
*/
onModalClose?(closeModal: () => void): void;
/**
* Callback function to be called prior to saving the new row.
*/
beforeSave?(e: SyntheticEvent<any>): void;
/**
* Callback function to be called to save the new row.
*/
onSave?(save: () => void): void;
}
/**
* Interface that must be implemented by a custom insert modal body component.
*/
export interface ModalBodyInterface<TRow extends object = any> {
/**
* The required getFieldValue method that must be implemented on a customized insert modal body that returns the
* new row data when the save button is clicked in the modal window.
*/
getFieldValue(): TRow;
}
/**
* Properties that can be given to the SizePerPageDropDown component.
*/
export interface SizePerPageDropDownProps {
/**
* Custom class name to use for the component.
*/
className?: string;
/**
* Bootstrap css style class for the button, e.g. 'btn-warning'
*/
btnContextual?: string;
/**
* Whether the button menu should 'dropup' or 'dropdown'.
*/
variation?: DropDirection;
/**
* Callback function that should be triggered when the user clicks on the dropdown button.
*/
onClick?(toggleDropDown: () => void): void;
/**
* Current size per page
*/
currSizePerPage?: string;
/**
* Size Per Page options list
*/
options?: number[] | Array<{ text: string, value: number }>;
/**
* Flag to indicate that the dropdown is open
*/
open?: boolean;
/**
* Flag to indicate that the dropdown is currently hidden
*/
hidden?: boolean;
}
/**
* Default InsertButton component. Can be used to create custom toolbars, etc.
*/
export class InsertButton extends Component<ButtonProps> {}
/**
* Default DeleteButton component. Can be used to create custom toolbars, etc.
*/
export class DeleteButton extends Component<ButtonProps> {}
/**
* Default ExportCSVButton component. Can be used to create custom toolbars, etc.
*/
export class ExportCSVButton extends Component<ButtonProps> {}
/**
* Default ShowSelectedOnlyButton component for toggling between showing all rows or only
* selected rows. Can be used to create custom toolbars, etc.
*/
export class ShowSelectedOnlyButton extends Component<ShowSelectedButtonProps> {}
/**
* Default SearchField component. Can be used to create custom toolbars, etc.
*/
export class SearchField extends Component<SearchFieldProps> implements SearchFieldInterface {
getValue(): string;
setValue(search: string): void;
}
/**
* Default ClearSearchButton component. Can be used to create custom toolbars, etc.
*/
export class ClearSearchButton extends Component<ButtonProps> {}
/**
* Default header component used for the Insert modal. Can be used to customize the
* insert row modal form.
*/
export class InsertModalHeader extends Component<InsertModalHeaderProps> {}
/**
* Default footer component used for the Insert modal. Can be used to customize the
* insert row modal form.
*/
export class InsertModalFooter extends Component<InsertModalFooterProps> {}
/**
* Default size per page component used in the pagination row. Can be used to customize
* the size per page dropdown.
*/
export class SizePerPageDropDown extends Component<SizePerPageDropDownProps> {}