// Type definitions for react-bootstrap-table 4.3 // Project: https://github.com/AllenFang/react-bootstrap-table // Definitions by: Frank Laub , // Aleksander Lode , // Josué Us // Janeene Beeforth // Oscar Andersson // 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 { /** * 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 * 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 . */ 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 { /** * 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; /** * Provide a list of unselectable row keys. */ unselectable?: Array; /** * 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; /** * 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 { /** * 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; /** * 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?( 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?( row: TRow, cellName: K, cellValue: TRow[K], props: { rowIndex: number; colIndex: number } ): void; } /** * Main Options for the Bootstrap Table. */ export interface Options { /** * 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; /** * 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, sortOrder: ReadonlyArray) => 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>, 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): 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, rows: ReadonlyArray): 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 or define * a filter on . */ afterColumnFilter?(filterConds: ReadonlyArray, result: ReadonlyArray): 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>, 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, rows: ReadonlyArray): 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): 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): 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): 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): 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): 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) => void): ReactElement; /** * It's available to customize delete button by configuring deleteBtn in options props, deleteBtn onl) => 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) => 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) => 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 & 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) => 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>, 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>, validateState: { [dataField: string]: string }, ignoreEditable: boolean ): React.ReactElement & ModalBodyInterface>; /** * 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?(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): 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; /** * 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 { /** * 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): 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 { /** * 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 * Tips: You need choose one configuration to set key field: isKey or the keyField in */ 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 */ 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 | ((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; /** * 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 { /** * 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 { callback(cell: any, params: Params): boolean; callbackParameters: Params; } /** * Custom filter element type. */ export class CustomFilterElement extends Component { cleanFiltered: () => void; } /** * Custom filter type. */ export interface CustomFilter { /** * Type must be 'CustomFilter' */ type: 'CustomFilter'; /** * Function to generate the filter component */ getElement( filterHandler: (value?: CustomFilterParameters, type?: 'CustomFilter') => void, customFilterParameters: CustomFilterParameters ): ReactElement; /** * Custom filter parameters to be passed to the generator function */ customFilterParameters: CustomFilterParameters; } /** * 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 { [dataField: string]: FilterValue | CustomFilterValue; } /** * TableHeaderColumn class definition. */ export class TableHeaderColumn extends Component { /** * 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 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 { /** * 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 | ((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; /** * 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 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 { /** * 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): 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): 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): 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): 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 { /** * 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 | ((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, 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): 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): 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): 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 { /** * 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 {} /** * Default DeleteButton component. Can be used to create custom toolbars, etc. */ export class DeleteButton extends Component {} /** * Default ExportCSVButton component. Can be used to create custom toolbars, etc. */ export class ExportCSVButton extends Component {} /** * 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 {} /** * Default SearchField component. Can be used to create custom toolbars, etc. */ export class SearchField extends Component implements SearchFieldInterface { getValue(): string; setValue(search: string): void; } /** * Default ClearSearchButton component. Can be used to create custom toolbars, etc. */ export class ClearSearchButton extends Component {} /** * Default header component used for the Insert modal. Can be used to customize the * insert row modal form. */ export class InsertModalHeader extends Component {} /** * Default footer component used for the Insert modal. Can be used to customize the * insert row modal form. */ export class InsertModalFooter extends Component {} /** * 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 {}