qbs-react-grid 1.0.46 → 1.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/qbs-react-grid.css +11 -11
- package/dist/css/qbs-react-grid.min.css +1 -1
- package/dist/css/qbs-react-grid.min.css.map +1 -1
- package/es/Pagination.js +15 -23
- package/es/less/pagination.less +12 -12
- package/es/qbsTable/CustomTableCell.js +14 -12
- package/es/qbsTable/QbsTable.js +30 -9
- package/es/qbsTable/Toolbar.js +10 -1
- package/es/qbsTable/commontypes.d.ts +3 -0
- package/es/qbsTable/utilities/deepEqual.d.ts +1 -0
- package/es/qbsTable/utilities/deepEqual.js +38 -0
- package/lib/Pagination.js +15 -23
- package/lib/less/pagination.less +12 -12
- package/lib/qbsTable/CustomTableCell.js +14 -12
- package/lib/qbsTable/QbsTable.js +29 -8
- package/lib/qbsTable/Toolbar.js +10 -1
- package/lib/qbsTable/commontypes.d.ts +3 -0
- package/lib/qbsTable/utilities/deepEqual.d.ts +1 -0
- package/lib/qbsTable/utilities/deepEqual.js +42 -0
- package/package.json +1 -1
- package/src/Pagination.tsx +15 -22
- package/src/less/pagination.less +12 -12
- package/src/qbsTable/CustomTableCell.tsx +11 -12
- package/src/qbsTable/QbsTable.tsx +26 -9
- package/src/qbsTable/Toolbar.tsx +10 -2
- package/src/qbsTable/commontypes.ts +3 -0
- package/src/qbsTable/utilities/deepEqual.ts +37 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import Cell from '../Cell';
|
|
4
4
|
import Column from '../Column';
|
|
@@ -14,6 +14,7 @@ import debounce from './utilities/debounce';
|
|
|
14
14
|
import { SettingsIcon } from './utilities/icons';
|
|
15
15
|
|
|
16
16
|
import '../../dist/css/qbs-react-grid.css';
|
|
17
|
+
import { deepEqual } from './utilities/deepEqual';
|
|
17
18
|
|
|
18
19
|
const CHECKBOX_LINE_HEIGHT = '36px';
|
|
19
20
|
const COLUMN_WIDTH = 250;
|
|
@@ -67,6 +68,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
67
68
|
const [checkedKeys, setCheckedKeys] = useState<(number | string)[]>([]);
|
|
68
69
|
const dataTheme = useMemo(() => localStorage.getItem('theme') ?? theme, [theme]);
|
|
69
70
|
const [isOpen, setIsOpen] = useState(false);
|
|
71
|
+
const prevColumns = useRef<any | null>();
|
|
70
72
|
|
|
71
73
|
const handleSortColumn = useCallback(
|
|
72
74
|
(sortColumn: any, sortType: any) => {
|
|
@@ -93,10 +95,7 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
93
95
|
const handleCheckAll = useCallback(
|
|
94
96
|
(event: React.ChangeEvent<HTMLInputElement>) => {
|
|
95
97
|
const keys = event.target.checked ? data.map(item => item.id) : [];
|
|
96
|
-
let updatedKeys = [...keys];
|
|
97
|
-
if (checkedKeys) {
|
|
98
|
-
updatedKeys = [...checkedKeys, ...updatedKeys];
|
|
99
|
-
}
|
|
98
|
+
let updatedKeys = [...checkedKeys, ...keys];
|
|
100
99
|
setCheckedKeys(updatedKeys);
|
|
101
100
|
handleChecked(updatedKeys);
|
|
102
101
|
},
|
|
@@ -146,9 +145,8 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
146
145
|
setColumns(columns);
|
|
147
146
|
}, []);
|
|
148
147
|
|
|
149
|
-
useEffect(() => {
|
|
150
|
-
|
|
151
|
-
}, [columns]);
|
|
148
|
+
// useEffect(() => {
|
|
149
|
+
// }, [columns]);
|
|
152
150
|
|
|
153
151
|
const handleClear = ([]) => {
|
|
154
152
|
setCheckedKeys([]);
|
|
@@ -173,9 +171,11 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
173
171
|
checkedKeys: checkedKeys,
|
|
174
172
|
tableHeaderActions: tableHeaderActions,
|
|
175
173
|
selectedRowActions: selectedRowActions,
|
|
176
|
-
onSelect: handleClear
|
|
174
|
+
onSelect: handleClear,
|
|
175
|
+
handleColumnToggle: handleColumnToggle
|
|
177
176
|
};
|
|
178
177
|
const themeToggle = useMemo(() => document.getElementById('themeToggle') as HTMLInputElement, []);
|
|
178
|
+
|
|
179
179
|
useEffect(() => {
|
|
180
180
|
const handleThemeToggle = () => {
|
|
181
181
|
if (themeToggle?.checked) {
|
|
@@ -236,6 +236,23 @@ const QbsTable: React.FC<QbsTableProps> = ({
|
|
|
236
236
|
|
|
237
237
|
return largestCellLength;
|
|
238
238
|
}
|
|
239
|
+
const handleColumnsResizable = useCallback(() => {
|
|
240
|
+
const filteredColumns = columns?.filter(item => item.isVisible);
|
|
241
|
+
const length = filteredColumns?.length ?? 0;
|
|
242
|
+
const lastVisibleColumn = filteredColumns[length - 1];
|
|
243
|
+
const reColumns = columns?.map(item =>
|
|
244
|
+
item?.field === lastVisibleColumn?.field ? { ...item, resizable: false } : item
|
|
245
|
+
);
|
|
246
|
+
setColumns(reColumns);
|
|
247
|
+
}, [columns]);
|
|
248
|
+
|
|
249
|
+
useEffect(() => {
|
|
250
|
+
if (!deepEqual(columns, prevColumns.current)) {
|
|
251
|
+
handleColumnsResizable();
|
|
252
|
+
}
|
|
253
|
+
prevColumns.current = columns;
|
|
254
|
+
}, [columns, handleColumnsResizable]);
|
|
255
|
+
|
|
239
256
|
const columnsRendered: React.ReactElement[] = useMemo(
|
|
240
257
|
() =>
|
|
241
258
|
(columns ?? []).map(
|
package/src/qbsTable/Toolbar.tsx
CHANGED
|
@@ -42,7 +42,15 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
|
|
|
42
42
|
},
|
|
43
43
|
[asyncSearch, handleSearch, handleSearchValue]
|
|
44
44
|
);
|
|
45
|
-
|
|
45
|
+
const handleHide = (actions: any) => {
|
|
46
|
+
if (actions.hidden) {
|
|
47
|
+
return false;
|
|
48
|
+
} else if (actions.customHide == '>2') {
|
|
49
|
+
return checkedKeys && checkedKeys?.length >= 2 ? true : false;
|
|
50
|
+
} else {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
46
54
|
return (
|
|
47
55
|
<div className="qbs-table-toolbar-container">
|
|
48
56
|
<div className={`qbs-table-toolbar ${className}`}>
|
|
@@ -75,7 +83,7 @@ const ToolBar: React.FC<QbsTableToolbarProps> = ({
|
|
|
75
83
|
</button>
|
|
76
84
|
{selectedRowActions?.map((actions, index: number) => (
|
|
77
85
|
<>
|
|
78
|
-
{
|
|
86
|
+
{handleHide(actions) && (
|
|
79
87
|
<button
|
|
80
88
|
key={index.toString()}
|
|
81
89
|
className="btn"
|
|
@@ -93,6 +93,7 @@ export interface QbsTableProps {
|
|
|
93
93
|
action: (checked: (number | string)[]) => void;
|
|
94
94
|
disabled?: boolean;
|
|
95
95
|
hidden?: boolean;
|
|
96
|
+
customHide?: string;
|
|
96
97
|
}[];
|
|
97
98
|
selectedRows?: (number | string)[];
|
|
98
99
|
classes?: { [key: string]: any };
|
|
@@ -121,10 +122,12 @@ export interface QbsTableToolbarProps {
|
|
|
121
122
|
checkedKeys?: (number | string)[];
|
|
122
123
|
tableHeaderActions?: ReactElement | ReactNode;
|
|
123
124
|
onSelect?: (keys: any[]) => void;
|
|
125
|
+
handleColumnToggle?: (columns: QbsColumnProps[]) => void;
|
|
124
126
|
selectedRowActions?: {
|
|
125
127
|
actionTitle?: string;
|
|
126
128
|
action: (checked: (number | string)[]) => void;
|
|
127
129
|
disabled?: boolean;
|
|
128
130
|
hidden?: boolean;
|
|
131
|
+
customHide?:string
|
|
129
132
|
}[];
|
|
130
133
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function deepEqual(value1: any, value2: any): boolean {
|
|
2
|
+
if (value1 === value2) {
|
|
3
|
+
return true;
|
|
4
|
+
}
|
|
5
|
+
if (typeof value1 !== typeof value2) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (value1 === null || value2 === null) {
|
|
9
|
+
return value1 === value2;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value1 === 'object' && typeof value2 === 'object') {
|
|
12
|
+
if (Array.isArray(value1) && Array.isArray(value2)) {
|
|
13
|
+
if (value1.length !== value2.length) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
for (let i = 0; i < value1.length; i++) {
|
|
17
|
+
if (!deepEqual(value1[i], value2[i])) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
} else if (!Array.isArray(value1) && !Array.isArray(value2)) {
|
|
23
|
+
const keys1 = Object.keys(value1);
|
|
24
|
+
const keys2 = Object.keys(value2);
|
|
25
|
+
if (keys1.length !== keys2.length) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
for (const key of keys1) {
|
|
29
|
+
if (!keys2.includes(key) || !deepEqual(value1[key], value2[key])) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|