@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
package/package.json
CHANGED
package/src/Spin/demo/types.tsx
CHANGED
|
@@ -5,17 +5,17 @@ export default () => {
|
|
|
5
5
|
return (
|
|
6
6
|
<Space direction="vertical">
|
|
7
7
|
<Space>
|
|
8
|
-
<Spin variant="dot" />
|
|
8
|
+
<Spin variant="dot" color="error"/>
|
|
9
9
|
<span>dot</span>
|
|
10
10
|
</Space>
|
|
11
11
|
|
|
12
12
|
<Space>
|
|
13
|
-
<Spin variant="ring" />
|
|
13
|
+
<Spin variant="ring" color="error"/>
|
|
14
14
|
<span>ring</span>
|
|
15
15
|
</Space>
|
|
16
16
|
|
|
17
17
|
<Space>
|
|
18
|
-
<Spin variant="spokes" />
|
|
18
|
+
<Spin variant="spokes" color="error"/>
|
|
19
19
|
<span>spokes</span>
|
|
20
20
|
</Space>
|
|
21
21
|
</Space>
|
package/src/Spin/index.en-US.md
CHANGED
|
@@ -52,12 +52,6 @@ Used for page and block loading status.
|
|
|
52
52
|
|
|
53
53
|
| Type | Description |
|
|
54
54
|
| --- | --- |
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
| bars | Bars type |
|
|
58
|
-
| bubbles | Bubbles type |
|
|
59
|
-
| cubes | Cubes type |
|
|
60
|
-
| cylon | Cylon type |
|
|
61
|
-
| spin | Spin type |
|
|
62
|
-
| spinningBubbles | Spinning bubbles type |
|
|
55
|
+
| dot | dot circle |
|
|
56
|
+
| ring | rotating circle |
|
|
63
57
|
| spokes | Spokes type |
|
package/src/Spin/index.zh-CN.md
CHANGED
|
@@ -52,12 +52,6 @@ toc: 'content'
|
|
|
52
52
|
|
|
53
53
|
| 类型 | 描述 |
|
|
54
54
|
| --- | --- |
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
| bars | 条形类型 |
|
|
58
|
-
| bubbles | 气泡类型 |
|
|
59
|
-
| cubes | 方块类型 |
|
|
60
|
-
| cylon | 赛隆类型 |
|
|
61
|
-
| spin | 旋转类型 |
|
|
62
|
-
| spinningBubbles | 旋转气泡类型 |
|
|
55
|
+
| dot | 原点旋转 |
|
|
56
|
+
| ring | 圆环转圈 |
|
|
63
57
|
| spokes | 辐条类型 |
|
package/src/Spin/indicator.tsx
CHANGED
|
@@ -60,6 +60,7 @@ const SpokesSpinner: React.FC<SpinProps> = (props) => {
|
|
|
60
60
|
styles,
|
|
61
61
|
width,
|
|
62
62
|
height,
|
|
63
|
+
color
|
|
63
64
|
} = props;
|
|
64
65
|
|
|
65
66
|
const containerSize = sizeMap[size];
|
|
@@ -86,6 +87,7 @@ const SpokesSpinner: React.FC<SpinProps> = (props) => {
|
|
|
86
87
|
style={{
|
|
87
88
|
transform: `rotate(${i * (360 / count)}deg)`,
|
|
88
89
|
animationDelay: `${(i * 1) / count}s`,
|
|
90
|
+
backgroundColor: color,
|
|
89
91
|
}}
|
|
90
92
|
/>
|
|
91
93
|
))}
|
|
@@ -43,10 +43,7 @@
|
|
|
43
43
|
display: block;
|
|
44
44
|
border-style: solid;
|
|
45
45
|
border-color: var(--yee-color-bg-layout, rgba(0, 0, 0, 8%));
|
|
46
|
-
border-top-color: var(
|
|
47
|
-
--yee-spin-default-color,
|
|
48
|
-
var(--yee-color-primary, #1677ff)
|
|
49
|
-
);
|
|
46
|
+
border-top-color: var(--m-indicator-dot-bg-color);
|
|
50
47
|
border-radius: 50%;
|
|
51
48
|
animation: yee-spin-ring-rotate 0.8s linear infinite;
|
|
52
49
|
}
|
|
@@ -67,10 +64,7 @@
|
|
|
67
64
|
height: 40%;
|
|
68
65
|
margin-left: -1px;
|
|
69
66
|
transform-origin: center bottom;
|
|
70
|
-
background-color: var(
|
|
71
|
-
--yee-spin-default-color,
|
|
72
|
-
var(--yee-color-primary, #1677ff)
|
|
73
|
-
);
|
|
67
|
+
background-color: var(--m-indicator-dot-bg-color);
|
|
74
68
|
border-radius: 1px;
|
|
75
69
|
animation: yee-spin-spokes-fade 1.2s linear infinite;
|
|
76
70
|
}
|
package/src/Table/col-group.tsx
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import useMergedState from '../../hooks/useMergedState';
|
|
2
|
-
import { ExpandableType } from '../interface';
|
|
2
|
+
import { ExpandableType, SelectionKeyType } from '../interface';
|
|
3
3
|
|
|
4
4
|
export default function useExpand(
|
|
5
5
|
expandable: ExpandableType | undefined,
|
|
6
|
-
allKeys:
|
|
7
|
-
getRowKey: (record: Record<string, any>) =>
|
|
6
|
+
allKeys: SelectionKeyType[],
|
|
7
|
+
getRowKey: (record: Record<string, any>) => SelectionKeyType,
|
|
8
8
|
) {
|
|
9
9
|
const {
|
|
10
10
|
expandedRowKeys, // keys
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useMemo, useState } from 'react';
|
|
1
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import type { ColumnProps, FilterValue } from '../interface';
|
|
2
3
|
|
|
3
|
-
type FilterValue = string | number;
|
|
4
4
|
type FilterInput = FilterValue | FilterValue[];
|
|
5
5
|
|
|
6
6
|
type FilterOptions = {
|
|
@@ -21,42 +21,65 @@ const normalizeValue = (value: unknown) =>
|
|
|
21
21
|
|
|
22
22
|
export default function useFilter({
|
|
23
23
|
data,
|
|
24
|
+
columns,
|
|
24
25
|
}: {
|
|
25
26
|
data: Array<Record<string, unknown>>;
|
|
27
|
+
columns: ColumnProps[];
|
|
26
28
|
}) {
|
|
27
29
|
const [filterRecords, setFilterRecords] = useState<Array<FilterRecord>>([]);
|
|
30
|
+
const columnMap = useMemo(
|
|
31
|
+
() =>
|
|
32
|
+
new Map(
|
|
33
|
+
columns.flatMap((column) =>
|
|
34
|
+
column.dataIndex ? [[column.dataIndex, column] as const] : [],
|
|
35
|
+
),
|
|
36
|
+
),
|
|
37
|
+
[columns],
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
setFilterRecords((current) => {
|
|
42
|
+
const next = current.filter(({ dataIndex }) => columnMap.has(dataIndex));
|
|
43
|
+
return next.length === current.length ? current : next;
|
|
44
|
+
});
|
|
45
|
+
}, [columnMap]);
|
|
46
|
+
|
|
28
47
|
const onFilter = ({ value, dataIndex }: FilterOptions) => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
(item) => item.dataIndex !== dataIndex,
|
|
33
|
-
);
|
|
34
|
-
} else {
|
|
35
|
-
let exited = false;
|
|
36
|
-
newFilterMap = newFilterMap.map((item) => {
|
|
37
|
-
if (item.dataIndex === dataIndex) {
|
|
38
|
-
exited = true;
|
|
39
|
-
return { ...item, value };
|
|
40
|
-
}
|
|
41
|
-
return item;
|
|
42
|
-
});
|
|
43
|
-
if (!exited) {
|
|
44
|
-
newFilterMap.push({ dataIndex, value });
|
|
48
|
+
setFilterRecords((current) => {
|
|
49
|
+
if (isEmptyFilterValue(value)) {
|
|
50
|
+
return current.filter((item) => item.dataIndex !== dataIndex);
|
|
45
51
|
}
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
|
|
53
|
+
const index = current.findIndex((item) => item.dataIndex === dataIndex);
|
|
54
|
+
if (index === -1) {
|
|
55
|
+
return [...current, { dataIndex, value }];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return current.map((item, itemIndex) =>
|
|
59
|
+
itemIndex === index ? { ...item, value } : item,
|
|
60
|
+
);
|
|
61
|
+
});
|
|
48
62
|
};
|
|
49
63
|
|
|
50
64
|
const filtered = useMemo(() => {
|
|
51
65
|
const handled = filterRecords.filter(
|
|
52
66
|
({ dataIndex, value }) =>
|
|
53
|
-
Boolean(dataIndex) &&
|
|
67
|
+
Boolean(dataIndex) &&
|
|
68
|
+
columnMap.has(dataIndex) &&
|
|
69
|
+
!isEmptyFilterValue(value),
|
|
54
70
|
);
|
|
55
71
|
if (!handled.length) {
|
|
56
72
|
return data;
|
|
57
73
|
}
|
|
58
74
|
return data.filter((item) => {
|
|
59
|
-
return handled.
|
|
75
|
+
return handled.every(({ dataIndex, value }) => {
|
|
76
|
+
const customFilter = columnMap.get(dataIndex)?.filter?.onFilter;
|
|
77
|
+
if (customFilter) {
|
|
78
|
+
return Array.isArray(value)
|
|
79
|
+
? value.some((filterValue) => customFilter(filterValue, item))
|
|
80
|
+
: customFilter(value, item);
|
|
81
|
+
}
|
|
82
|
+
|
|
60
83
|
const targetValue = normalizeValue(item[dataIndex]);
|
|
61
84
|
|
|
62
85
|
if (Array.isArray(value)) {
|
|
@@ -68,10 +91,11 @@ export default function useFilter({
|
|
|
68
91
|
return targetValue.includes(normalizeValue(value));
|
|
69
92
|
});
|
|
70
93
|
});
|
|
71
|
-
}, [data, filterRecords]);
|
|
94
|
+
}, [columnMap, data, filterRecords]);
|
|
72
95
|
|
|
73
96
|
return {
|
|
74
97
|
data: filtered,
|
|
98
|
+
filterRecords,
|
|
75
99
|
onFilter,
|
|
76
100
|
};
|
|
77
101
|
}
|
|
@@ -81,16 +81,6 @@ export default function usePagination({
|
|
|
81
81
|
});
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
if (pagination === false) {
|
|
85
|
-
return {
|
|
86
|
-
pageData: data,
|
|
87
|
-
current: 1,
|
|
88
|
-
pageSize: data.length,
|
|
89
|
-
pagination: false,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
94
84
|
const pageData = useMemo(() => {
|
|
95
85
|
const total = data.length;
|
|
96
86
|
if (total <= mergedPageSize) return data;
|
|
@@ -103,6 +93,15 @@ export default function usePagination({
|
|
|
103
93
|
return data.slice(start, start + mergedPageSize);
|
|
104
94
|
}, [data, meregdCurrent, mergedPageSize]);
|
|
105
95
|
|
|
96
|
+
if (pagination === false) {
|
|
97
|
+
return {
|
|
98
|
+
pageData: data,
|
|
99
|
+
current: 1,
|
|
100
|
+
pageSize: data.length,
|
|
101
|
+
pagination: false,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
106
105
|
return {
|
|
107
106
|
pageData,
|
|
108
107
|
current: meregdCurrent,
|
|
@@ -11,7 +11,7 @@ export default function useSelection({
|
|
|
11
11
|
}: {
|
|
12
12
|
pageData: Array<Record<string, unknown>>;
|
|
13
13
|
dataSource: Array<Record<string, unknown>>;
|
|
14
|
-
getRowKey: (record: Record<string, unknown>) =>
|
|
14
|
+
getRowKey: (record: Record<string, unknown>) => SelectionKeyType;
|
|
15
15
|
allKeys: Array<SelectionKeyType>;
|
|
16
16
|
rowSelection?: RowSelectionType;
|
|
17
17
|
}) {
|
|
@@ -43,29 +43,25 @@ export default function useSelection({
|
|
|
43
43
|
onChange?.(rowKeys as any, rowRecords);
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
const getDisabledKeys = () => {
|
|
46
|
+
const getDisabledKeys = (): SelectionKeyType[] => {
|
|
47
|
+
if (disabled === true) {
|
|
48
|
+
return pageData.map((record) => getRowKey(record));
|
|
49
|
+
}
|
|
47
50
|
if (Array.isArray(disabled)) {
|
|
48
|
-
return
|
|
51
|
+
return pageData
|
|
52
|
+
.filter((_, index) => disabled[index])
|
|
53
|
+
.map((record) => getRowKey(record));
|
|
49
54
|
}
|
|
50
55
|
if (typeof disabled === 'function') {
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
.filter((record, index) => disabled(record, index))
|
|
55
|
-
.map((record) => getRowKey(record))
|
|
56
|
-
);
|
|
56
|
+
return pageData
|
|
57
|
+
.filter((record, index) => disabled(record, index))
|
|
58
|
+
.map((record) => getRowKey(record));
|
|
57
59
|
}
|
|
58
60
|
return [];
|
|
59
61
|
};
|
|
60
62
|
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
Array.isArray(pageData) && pageData.map((record) => getRowKey(record))
|
|
64
|
-
);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
const disabledKeys = getDisabledKeys() as Array<string>;
|
|
68
|
-
const pageDataRowKeys = getPageDataRowKeys() as Array<string>;
|
|
63
|
+
const disabledKeys = getDisabledKeys();
|
|
64
|
+
const pageDataRowKeys = pageData.map((record) => getRowKey(record));
|
|
69
65
|
|
|
70
66
|
const isCheckedAll = () => {
|
|
71
67
|
const filtered = pageDataRowKeys.filter(
|
|
@@ -109,7 +105,7 @@ export default function useSelection({
|
|
|
109
105
|
setMergedSelectedRowKeys(rowKeys);
|
|
110
106
|
|
|
111
107
|
onChange?.(rowKeys, rowRecords);
|
|
112
|
-
onSelectAll?.(rowKeys
|
|
108
|
+
onSelectAll?.(checked, rowKeys, rowRecords);
|
|
113
109
|
};
|
|
114
110
|
|
|
115
111
|
const onRadioCheck = (checked: boolean, key: number | string) => {
|
|
@@ -118,8 +114,10 @@ export default function useSelection({
|
|
|
118
114
|
onChange?.([key as any], record as any);
|
|
119
115
|
};
|
|
120
116
|
|
|
121
|
-
const handleChange = (
|
|
122
|
-
|
|
117
|
+
const handleChange = (
|
|
118
|
+
event: ChangeEvent<HTMLInputElement>,
|
|
119
|
+
key: SelectionKeyType,
|
|
120
|
+
) => {
|
|
123
121
|
const checked = event.target.checked;
|
|
124
122
|
if (type === 'checkbox') {
|
|
125
123
|
onCheck(checked, key);
|