checkedList: Record<string, boolean>;
};
-const multiselectOptions: DataTableMultiselectOption[] = [
- { name: 'First Option', fn: (checkedList) => console.log('one', checkedList) },
- { name: 'Second Option', fn: (checkedList) => console.log('two', checkedList) },
- { name: 'Third Option', fn: (checkedList) => console.log('three', checkedList) },
-];
-
type DataTableProps<T> = DataTableDataProps<T> & WithStyles<CssRules>;
export const DataTable = withStyles(styles)(
),
};
+ multiselectOptions: DataTableMultiselectOption[] = [
+ { name: 'All', fn: () => this.handleSelectAll() },
+ { name: 'None', fn: () => this.handleSelectNone() },
+ { name: 'Invert', fn: () => this.handleInvertSelect() },
+ ];
+
initializeCheckedList = (uuids: any[]): void => {
const { checkedList } = this.state;
uuids.forEach((uuid) => {
window.localStorage.setItem('selectedRows', JSON.stringify(checkedList));
};
+ isAllSelected = (list: Record<string, boolean>): boolean => {
+ for (const key in list) {
+ if (list[key] === false) return false;
+ }
+ return true;
+ };
+
+ handleCheck = (uuid: string): void => {
+ const { checkedList } = this.state;
+ const newCheckedList = { ...checkedList };
+ newCheckedList[uuid] = !checkedList[uuid];
+ this.setState({ checkedList: newCheckedList, isSelected: this.isAllSelected(newCheckedList) });
+ };
+
handleSelectorSelect = (): void => {
- const { isSelected, checkedList } = this.state;
+ const { isSelected } = this.state;
+ isSelected ? this.handleSelectNone() : this.handleSelectAll();
+ };
+
+ handleSelectAll = (): void => {
+ const { checkedList } = this.state;
const newCheckedList = { ...checkedList };
for (const key in newCheckedList) {
- newCheckedList[key] = !isSelected;
+ newCheckedList[key] = true;
}
- this.setState({ isSelected: !isSelected, checkedList: newCheckedList });
+ this.setState({ isSelected: true, checkedList: newCheckedList });
};
- handleCheck = (uuid: string): void => {
+ handleSelectNone = (): void => {
const { checkedList } = this.state;
const newCheckedList = { ...checkedList };
- newCheckedList[uuid] = !checkedList[uuid];
- this.setState({ checkedList: newCheckedList });
+ for (const key in newCheckedList) {
+ newCheckedList[key] = false;
+ }
+ this.setState({ isSelected: false, checkedList: newCheckedList });
};
handleInvertSelect = (): void => {
for (const key in newCheckedList) {
newCheckedList[key] = !checkedList[key];
}
- this.setState({ checkedList: newCheckedList });
+ this.setState({ checkedList: newCheckedList, isSelected: this.isAllSelected(newCheckedList) });
};
render() {
<Tooltip title={this.state.isSelected ? 'Deselect All' : 'Select All'}>
<input type='checkbox' className={classes.checkBox} checked={this.state.isSelected} onChange={this.handleSelectorSelect}></input>
</Tooltip>
- <DataTableMultiselectPopover name={`Options`} options={multiselectOptions} checkedList={this.state.checkedList}></DataTableMultiselectPopover>
+ <DataTableMultiselectPopover
+ name={`Options`}
+ options={this.multiselectOptions}
+ checkedList={this.state.checkedList}
+ ></DataTableMultiselectPopover>
</div>
</TableCell>
) : (