+ state: DataTableState = {
+ isSelected: false,
+ checkedList: {},
+ };
+
+ componentDidMount(): void {
+ this.initializeCheckedList(this.props.items);
+ }
+
+ componentDidUpdate(prevProps: Readonly<DataTableProps<T>>, prevState: DataTableState) {
+ const { items } = this.props;
+ const { checkedList } = this.state;
+ if (!arraysAreCongruent(prevProps.items, items)) {
+ this.state.isSelected = false;
+ this.initializeCheckedList(items);
+ }
+ if (prevState.checkedList !== checkedList) {
+ window.localStorage.setItem('selectedRows', JSON.stringify(checkedList));
+ }
+ }
+
+ 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.state.checkedList[uuid] ?? false}
+ onChange={() => this.handleCheck(uuid)}
+ onDoubleClick={(ev) => ev.stopPropagation()}
+ ></input>
+ ),
+ };
+
+ initializeCheckedList = (uuids: any[]): void => {
+ const { checkedList } = this.state;
+ uuids.forEach((uuid) => {
+ if (!checkedList.hasOwnProperty(uuid)) {
+ checkedList[uuid] = false;
+ }
+ });
+ for (const key in checkedList) {
+ if (!uuids.includes(key)) {
+ delete checkedList[key];
+ }
+ }
+ window.localStorage.setItem('selectedRows', JSON.stringify(checkedList));
+ };
+
+ handleSelectorSelect = (): void => {
+ const { isSelected, checkedList } = this.state;
+ const newCheckedList = { ...checkedList };
+ for (const key in newCheckedList) {
+ newCheckedList[key] = !isSelected;
+ }
+ this.setState({ isSelected: !isSelected, checkedList: newCheckedList });
+ };
+
+ handleCheck = (uuid: string): void => {
+ const { checkedList } = this.state;
+ const newCheckedList = { ...checkedList };
+ newCheckedList[uuid] = !checkedList[uuid];
+ this.setState({ checkedList: newCheckedList });
+ };
+
+ handleInvertSelect = (): void => {
+ const { checkedList } = this.state;
+ const newCheckedList = { ...checkedList };
+ for (const key in newCheckedList) {
+ newCheckedList[key] = !checkedList[key];
+ }
+ this.setState({ checkedList: newCheckedList });
+ };
+