+ state: DataTableState = {
+ isSelected: false,
+ };
+
+ componentDidMount(): void {
+ this.initializeCheckedList(this.props.items);
+ }
+
+ componentDidUpdate(prevProps: Readonly<DataTableProps<T>>, prevState: DataTableState) {
+ const { items, setCheckedListOnStore } = this.props;
+ const { isSelected } = this.state;
+ if (prevProps.items !== items) {
+ if (isSelected === true) this.setState({ isSelected: false });
+ if (items.length) this.initializeCheckedList(items);
+ else setCheckedListOnStore({});
+ }
+ }
+
+ checkBoxColumn: DataColumn<any, any> = {
+ name: "checkBoxColumn",
+ selected: true,
+ configurable: false,
+ filters: createTree(),
+ render: uuid => (
+ <input
+ type="checkbox"
+ name={uuid}
+ className={this.props.classes.checkBox}
+ checked={this.props.checkedList[uuid] ?? false}
+ onChange={() => this.handleSelectOne(uuid)}
+ onDoubleClick={ev => ev.stopPropagation()}></input>
+ ),
+ };
+
+ multiselectOptions: DataTableMultiselectOption[] = [
+ { name: "All", fn: list => this.handleSelectAll(list) },
+ { name: "None", fn: list => this.handleSelectNone(list) },
+ { name: "Invert", fn: list => this.handleInvertSelect(list) },
+ ];
+
+ initializeCheckedList = (uuids: any[]): void => {
+ const newCheckedList = { ...this.props.checkedList };
+
+ uuids.forEach(uuid => {
+ if (!newCheckedList.hasOwnProperty(uuid)) {
+ newCheckedList[uuid] = false;
+ }
+ });
+ for (const key in newCheckedList) {
+ if (!uuids.includes(key)) {
+ delete newCheckedList[key];
+ }
+ }
+ this.props.setCheckedListOnStore(newCheckedList);
+ };
+
+ isAllSelected = (list: TCheckedList): boolean => {
+ for (const key in list) {
+ if (list[key] === false) return false;
+ }
+ return true;
+ };
+
+ isAnySelected = (): boolean => {
+ const { checkedList } = this.props;
+ if (!Object.keys(checkedList).length) return false;
+ for (const key in checkedList) {
+ if (checkedList[key] === true) return true;
+ }
+ return false;
+ };
+
+ handleSelectOne = (uuid: string): void => {
+ const { checkedList } = this.props;
+ const newCheckedList = { ...checkedList };
+ newCheckedList[uuid] = !checkedList[uuid];
+ this.setState({ isSelected: this.isAllSelected(newCheckedList) });
+ this.props.setCheckedListOnStore(newCheckedList);
+ };
+
+ handleSelectorSelect = (): void => {
+ const { checkedList } = this.props;
+ const { isSelected } = this.state;
+ isSelected ? this.handleSelectNone(checkedList) : this.handleSelectAll(checkedList);
+ };
+
+ handleSelectAll = (list: TCheckedList): void => {
+ if (Object.keys(list).length) {
+ const newCheckedList = { ...list };
+ for (const key in newCheckedList) {
+ newCheckedList[key] = true;
+ }
+ this.setState({ isSelected: true });
+ this.props.setCheckedListOnStore(newCheckedList);
+ }
+ };
+
+ handleSelectNone = (list: TCheckedList): void => {
+ const newCheckedList = { ...list };
+ for (const key in newCheckedList) {
+ newCheckedList[key] = false;
+ }
+ this.setState({ isSelected: false });
+ this.props.setCheckedListOnStore(newCheckedList);
+ };
+
+ handleInvertSelect = (list: TCheckedList): void => {
+ if (Object.keys(list).length) {
+ const newCheckedList = { ...list };
+ for (const key in newCheckedList) {
+ newCheckedList[key] = !list[key];
+ }
+ this.setState({ isSelected: this.isAllSelected(newCheckedList) });
+ this.props.setCheckedListOnStore(newCheckedList);
+ }
+ };
+