@rainbow-oh/yee-c 0.8.12 → 0.8.14
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/cjs/Pagination/style/index.less +4 -0
- package/dist/cjs/Spin/demo/types.js +1 -1
- package/dist/cjs/Spin/indicator.js +4 -2
- package/dist/cjs/Spin/style/index.less +2 -8
- package/dist/cjs/Table/col-group.d.ts +2 -2
- package/dist/cjs/Table/col-group.js +1 -1
- package/dist/cjs/Table/demo/sorter-callback.js +3 -2
- package/dist/cjs/Table/demo/sorter.js +3 -2
- package/dist/cjs/Table/hooks/useExpand.d.ts +2 -2
- package/dist/cjs/Table/hooks/useFilter.d.ts +8 -2
- package/dist/cjs/Table/hooks/useFilter.js +36 -22
- package/dist/cjs/Table/hooks/usePagination.js +8 -8
- package/dist/cjs/Table/hooks/useSelection.d.ts +3 -3
- package/dist/cjs/Table/hooks/useSelection.js +8 -9
- package/dist/cjs/Table/hooks/useSorter.d.ts +6 -3
- package/dist/cjs/Table/hooks/useSorter.js +193 -87
- package/dist/cjs/Table/interface.d.ts +10 -7
- package/dist/cjs/Table/table.js +51 -45
- package/dist/cjs/Table/tbody/index.js +13 -5
- package/dist/cjs/Table/tbody/lazy-row.js +6 -3
- package/dist/cjs/Table/tbody/row.js +5 -4
- package/dist/cjs/Table/theader/cell.js +4 -0
- package/dist/cjs/Table/theader/filter.js +52 -20
- package/dist/cjs/Table/util/index.js +5 -3
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Pagination/style/index.less +4 -0
- package/dist/esm/Spin/demo/types.js +6 -3
- package/dist/esm/Spin/indicator.js +4 -2
- package/dist/esm/Spin/style/index.less +2 -8
- package/dist/esm/Table/col-group.d.ts +2 -2
- package/dist/esm/Table/col-group.js +1 -1
- package/dist/esm/Table/demo/sorter-callback.js +3 -2
- package/dist/esm/Table/demo/sorter.js +3 -2
- package/dist/esm/Table/hooks/useExpand.d.ts +2 -2
- package/dist/esm/Table/hooks/useFilter.d.ts +8 -2
- package/dist/esm/Table/hooks/useFilter.js +52 -32
- package/dist/esm/Table/hooks/usePagination.js +8 -10
- package/dist/esm/Table/hooks/useSelection.d.ts +3 -3
- package/dist/esm/Table/hooks/useSelection.js +16 -11
- package/dist/esm/Table/hooks/useSorter.d.ts +6 -3
- package/dist/esm/Table/hooks/useSorter.js +218 -105
- package/dist/esm/Table/interface.d.ts +10 -7
- package/dist/esm/Table/table.js +42 -47
- package/dist/esm/Table/tbody/index.js +8 -5
- package/dist/esm/Table/tbody/lazy-row.js +7 -3
- package/dist/esm/Table/tbody/row.js +7 -6
- package/dist/esm/Table/theader/cell.js +7 -1
- package/dist/esm/Table/theader/filter.js +75 -27
- package/dist/esm/Table/util/index.js +6 -3
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Pagination/style/index.less +4 -0
- package/src/Spin/demo/types.tsx +3 -3
- package/src/Spin/index.en-US.md +2 -8
- package/src/Spin/index.zh-CN.md +2 -8
- package/src/Spin/indicator.tsx +2 -0
- package/src/Spin/style/index.less +2 -8
- package/src/Table/col-group.tsx +1 -1
- package/src/Table/demo/sorter-callback.tsx +3 -2
- package/src/Table/demo/sorter.tsx +3 -2
- package/src/Table/hooks/useExpand.ts +3 -3
- package/src/Table/hooks/useFilter.ts +47 -23
- package/src/Table/hooks/usePagination.ts +9 -10
- package/src/Table/hooks/useSelection.ts +18 -20
- package/src/Table/hooks/useSorter.ts +236 -82
- package/src/Table/interface.ts +19 -7
- package/src/Table/table.tsx +54 -49
- package/src/Table/tbody/index.tsx +14 -5
- package/src/Table/tbody/lazy-row.tsx +6 -3
- package/src/Table/tbody/row.tsx +5 -4
- package/src/Table/theader/cell.tsx +10 -0
- package/src/Table/theader/filter.tsx +64 -22
- package/src/Table/util/index.ts +3 -1
- package/src/version.ts +1 -1
|
@@ -46,6 +46,8 @@ const HeadCell: React.FC<HeadCellProps> = (props) => {
|
|
|
46
46
|
const sortOrder = (dataIndex && sorters?.[dataIndex]) || 0;
|
|
47
47
|
const displaySortOrder: 0 | 1 | 2 =
|
|
48
48
|
sortOrder === -1 ? 2 : (sortOrder as 0 | 1);
|
|
49
|
+
const currentSortOrder =
|
|
50
|
+
sortOrder === 1 ? 'ascend' : sortOrder === -1 ? 'descend' : null;
|
|
49
51
|
|
|
50
52
|
const handleSort = () => {
|
|
51
53
|
if (dataIndex && onSort) {
|
|
@@ -54,6 +56,14 @@ const HeadCell: React.FC<HeadCellProps> = (props) => {
|
|
|
54
56
|
};
|
|
55
57
|
|
|
56
58
|
const renderSort = () => {
|
|
59
|
+
if (typeof sorter === 'object' && sorter.icon) {
|
|
60
|
+
return (
|
|
61
|
+
<span className={`${prefixCls}-column-sorter`}>
|
|
62
|
+
{sorter.icon(currentSortOrder)}
|
|
63
|
+
</span>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
57
67
|
const trigger = (
|
|
58
68
|
<span className={`${prefixCls}-column-sorter`}>
|
|
59
69
|
<ArrowIcon
|
|
@@ -8,6 +8,7 @@ import Popover from '../../Popover';
|
|
|
8
8
|
import Space from '../../Space';
|
|
9
9
|
import Tree from '../../Tree';
|
|
10
10
|
import { useLocale } from '../../locale';
|
|
11
|
+
import type { FilterValue } from '../interface';
|
|
11
12
|
import { TableCtx } from '../table';
|
|
12
13
|
|
|
13
14
|
export interface TableFilterProps {
|
|
@@ -23,14 +24,37 @@ const getStrLower = (str: any) => {
|
|
|
23
24
|
return str;
|
|
24
25
|
};
|
|
25
26
|
|
|
27
|
+
type FilterInput = FilterValue | FilterValue[];
|
|
28
|
+
|
|
29
|
+
const areFilterValuesEqual = (a: FilterInput, b: FilterInput) => {
|
|
30
|
+
if (!Array.isArray(a) || !Array.isArray(b)) return a === b;
|
|
31
|
+
return a.length === b.length && a.every((value, index) => value === b[index]);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const hasFilterValue = (value: FilterInput) =>
|
|
35
|
+
Array.isArray(value) ? value.length > 0 : value !== '';
|
|
36
|
+
|
|
26
37
|
const HeaderFilter = React.memo((props: any) => {
|
|
27
38
|
const { filter, column, getPopupContainer, onInternalFilter } = props;
|
|
28
39
|
const { prefixCls } = useContext(TableCtx);
|
|
29
40
|
const { locale } = useLocale();
|
|
30
41
|
const { table: tableLocale } = locale;
|
|
31
42
|
const { dataIndex } = column;
|
|
43
|
+
const {
|
|
44
|
+
items,
|
|
45
|
+
icon,
|
|
46
|
+
searchable = true,
|
|
47
|
+
filterMode = 'menu',
|
|
48
|
+
filtered,
|
|
49
|
+
filterOnClose = true,
|
|
50
|
+
render,
|
|
51
|
+
} = filter;
|
|
32
52
|
|
|
33
53
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
54
|
+
const initialValue: FilterInput = items ? [] : '';
|
|
55
|
+
const committedValueRef = useRef<FilterInput>(initialValue);
|
|
56
|
+
const [committedValue, setCommittedValue] =
|
|
57
|
+
useState<FilterInput>(initialValue);
|
|
34
58
|
const [open, setOpen] = useState(false);
|
|
35
59
|
const [selectNodes, setSelectNodes] = useState<Array<string | number>>([]);
|
|
36
60
|
const [searchValue, setSearchValue] = useState('');
|
|
@@ -53,34 +77,41 @@ const HeaderFilter = React.memo((props: any) => {
|
|
|
53
77
|
// setSelectNodes(node);
|
|
54
78
|
// };
|
|
55
79
|
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
80
|
+
const getCurrentValue = (type: 'filter' | 'search'): FilterInput =>
|
|
81
|
+
type === 'search' ? searchValue : selectNodes;
|
|
82
|
+
|
|
83
|
+
const commitValue = (value: FilterInput) => {
|
|
84
|
+
const committed = Array.isArray(value) ? [...value] : value;
|
|
85
|
+
committedValueRef.current = committed;
|
|
86
|
+
setCommittedValue(committed);
|
|
60
87
|
};
|
|
61
88
|
|
|
62
|
-
const
|
|
89
|
+
const applyFilter = (type: 'filter' | 'search') => {
|
|
90
|
+
const value = getCurrentValue(type);
|
|
91
|
+
commitValue(value);
|
|
63
92
|
onInternalFilter({
|
|
64
93
|
dataIndex,
|
|
65
|
-
value
|
|
66
|
-
type
|
|
94
|
+
value,
|
|
95
|
+
type,
|
|
67
96
|
column,
|
|
68
97
|
});
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const reset = () => {
|
|
101
|
+
const value: FilterInput = items ? [] : '';
|
|
102
|
+
setSearchValue('');
|
|
103
|
+
setSelectNodes([]);
|
|
104
|
+
commitValue(value);
|
|
105
|
+
onInternalFilter({ dataIndex, value, column });
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const ok = (type: 'filter' | 'search') => {
|
|
109
|
+
applyFilter(type);
|
|
69
110
|
setOpen(false);
|
|
70
111
|
};
|
|
71
112
|
|
|
72
113
|
let popup: React.ReactNode;
|
|
73
114
|
|
|
74
|
-
const {
|
|
75
|
-
items,
|
|
76
|
-
icon,
|
|
77
|
-
searchable = true,
|
|
78
|
-
filterMode = 'menu',
|
|
79
|
-
// filtered,
|
|
80
|
-
// filterOnClose,
|
|
81
|
-
// onFilter,
|
|
82
|
-
} = filter;
|
|
83
|
-
|
|
84
115
|
const searchInputNode = searchable ? (
|
|
85
116
|
<Input
|
|
86
117
|
prefix={<Search size={14} strokeWidth={1.5} />}
|
|
@@ -96,7 +127,9 @@ const HeaderFilter = React.memo((props: any) => {
|
|
|
96
127
|
/>
|
|
97
128
|
) : null;
|
|
98
129
|
|
|
99
|
-
if (
|
|
130
|
+
if (render) {
|
|
131
|
+
popup = render();
|
|
132
|
+
} else if (items) {
|
|
100
133
|
let dataSource = [];
|
|
101
134
|
const inputValue = getStrLower(searchValue);
|
|
102
135
|
|
|
@@ -160,14 +193,23 @@ const HeaderFilter = React.memo((props: any) => {
|
|
|
160
193
|
return null;
|
|
161
194
|
}
|
|
162
195
|
|
|
163
|
-
const handleOpenChange = (
|
|
164
|
-
|
|
196
|
+
const handleOpenChange = (nextOpen: boolean) => {
|
|
197
|
+
if (!nextOpen && open && filterOnClose && !render) {
|
|
198
|
+
const type = items ? 'filter' : 'search';
|
|
199
|
+
const value = getCurrentValue(type);
|
|
200
|
+
if (!areFilterValuesEqual(value, committedValueRef.current)) {
|
|
201
|
+
applyFilter(type);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
setOpen(nextOpen);
|
|
165
205
|
};
|
|
166
206
|
|
|
207
|
+
const isFiltered = filtered ?? hasFilterValue(committedValue);
|
|
208
|
+
|
|
167
209
|
const renderTrigger = () => {
|
|
168
210
|
const trigger =
|
|
169
211
|
typeof icon === 'function' ? (
|
|
170
|
-
icon()
|
|
212
|
+
icon(isFiltered)
|
|
171
213
|
) : (
|
|
172
214
|
<Button
|
|
173
215
|
icon={
|
|
@@ -177,7 +219,7 @@ const HeaderFilter = React.memo((props: any) => {
|
|
|
177
219
|
<Search size={14} strokeWidth={1.5} />
|
|
178
220
|
)
|
|
179
221
|
}
|
|
180
|
-
variant={
|
|
222
|
+
variant={isFiltered ? 'filled' : undefined}
|
|
181
223
|
type="text"
|
|
182
224
|
size="small"
|
|
183
225
|
/>
|
package/src/Table/util/index.ts
CHANGED
|
@@ -9,7 +9,9 @@ export function handleColumns(columns: Array<WrapedColumnProps>) {
|
|
|
9
9
|
if (col.fixed === true || col.fixed === 'left') {
|
|
10
10
|
col.fixed = 'left';
|
|
11
11
|
col.style = { ...col.style, left: leftWidthCount };
|
|
12
|
-
|
|
12
|
+
const nextFixed = columns[i + 1]?.fixed;
|
|
13
|
+
const nextIsFixedLeft = nextFixed === true || nextFixed === 'left';
|
|
14
|
+
if (!nextIsFixedLeft) {
|
|
13
15
|
col.isFixedLeftLast = true;
|
|
14
16
|
}
|
|
15
17
|
leftWidthCount =
|