@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.
Files changed (82) hide show
  1. package/dist/cjs/Pagination/style/index.less +4 -0
  2. package/dist/cjs/Spin/demo/types.js +1 -1
  3. package/dist/cjs/Spin/indicator.js +4 -2
  4. package/dist/cjs/Spin/style/index.less +2 -8
  5. package/dist/cjs/Table/col-group.d.ts +2 -2
  6. package/dist/cjs/Table/col-group.js +1 -1
  7. package/dist/cjs/Table/demo/sorter-callback.js +3 -2
  8. package/dist/cjs/Table/demo/sorter.js +3 -2
  9. package/dist/cjs/Table/hooks/useExpand.d.ts +2 -2
  10. package/dist/cjs/Table/hooks/useFilter.d.ts +8 -2
  11. package/dist/cjs/Table/hooks/useFilter.js +36 -22
  12. package/dist/cjs/Table/hooks/usePagination.js +8 -8
  13. package/dist/cjs/Table/hooks/useSelection.d.ts +3 -3
  14. package/dist/cjs/Table/hooks/useSelection.js +8 -9
  15. package/dist/cjs/Table/hooks/useSorter.d.ts +6 -3
  16. package/dist/cjs/Table/hooks/useSorter.js +193 -87
  17. package/dist/cjs/Table/interface.d.ts +10 -7
  18. package/dist/cjs/Table/table.js +51 -45
  19. package/dist/cjs/Table/tbody/index.js +13 -5
  20. package/dist/cjs/Table/tbody/lazy-row.js +6 -3
  21. package/dist/cjs/Table/tbody/row.js +5 -4
  22. package/dist/cjs/Table/theader/cell.js +4 -0
  23. package/dist/cjs/Table/theader/filter.js +52 -20
  24. package/dist/cjs/Table/util/index.js +5 -3
  25. package/dist/cjs/style/themes.css +1 -1
  26. package/dist/cjs/style/variables.css +1 -1
  27. package/dist/cjs/version.d.ts +1 -1
  28. package/dist/cjs/version.js +1 -1
  29. package/dist/esm/Pagination/style/index.less +4 -0
  30. package/dist/esm/Spin/demo/types.js +6 -3
  31. package/dist/esm/Spin/indicator.js +4 -2
  32. package/dist/esm/Spin/style/index.less +2 -8
  33. package/dist/esm/Table/col-group.d.ts +2 -2
  34. package/dist/esm/Table/col-group.js +1 -1
  35. package/dist/esm/Table/demo/sorter-callback.js +3 -2
  36. package/dist/esm/Table/demo/sorter.js +3 -2
  37. package/dist/esm/Table/hooks/useExpand.d.ts +2 -2
  38. package/dist/esm/Table/hooks/useFilter.d.ts +8 -2
  39. package/dist/esm/Table/hooks/useFilter.js +52 -32
  40. package/dist/esm/Table/hooks/usePagination.js +8 -10
  41. package/dist/esm/Table/hooks/useSelection.d.ts +3 -3
  42. package/dist/esm/Table/hooks/useSelection.js +16 -11
  43. package/dist/esm/Table/hooks/useSorter.d.ts +6 -3
  44. package/dist/esm/Table/hooks/useSorter.js +218 -105
  45. package/dist/esm/Table/interface.d.ts +10 -7
  46. package/dist/esm/Table/table.js +42 -47
  47. package/dist/esm/Table/tbody/index.js +8 -5
  48. package/dist/esm/Table/tbody/lazy-row.js +7 -3
  49. package/dist/esm/Table/tbody/row.js +7 -6
  50. package/dist/esm/Table/theader/cell.js +7 -1
  51. package/dist/esm/Table/theader/filter.js +75 -27
  52. package/dist/esm/Table/util/index.js +6 -3
  53. package/dist/esm/style/themes.css +1 -1
  54. package/dist/esm/style/variables.css +1 -1
  55. package/dist/esm/version.d.ts +1 -1
  56. package/dist/esm/version.js +1 -1
  57. package/dist/umd/yee-c.min.css +1 -1
  58. package/dist/umd/yee-c.min.js +1 -1
  59. package/package.json +1 -1
  60. package/src/Pagination/style/index.less +4 -0
  61. package/src/Spin/demo/types.tsx +3 -3
  62. package/src/Spin/index.en-US.md +2 -8
  63. package/src/Spin/index.zh-CN.md +2 -8
  64. package/src/Spin/indicator.tsx +2 -0
  65. package/src/Spin/style/index.less +2 -8
  66. package/src/Table/col-group.tsx +1 -1
  67. package/src/Table/demo/sorter-callback.tsx +3 -2
  68. package/src/Table/demo/sorter.tsx +3 -2
  69. package/src/Table/hooks/useExpand.ts +3 -3
  70. package/src/Table/hooks/useFilter.ts +47 -23
  71. package/src/Table/hooks/usePagination.ts +9 -10
  72. package/src/Table/hooks/useSelection.ts +18 -20
  73. package/src/Table/hooks/useSorter.ts +236 -82
  74. package/src/Table/interface.ts +19 -7
  75. package/src/Table/table.tsx +54 -49
  76. package/src/Table/tbody/index.tsx +14 -5
  77. package/src/Table/tbody/lazy-row.tsx +6 -3
  78. package/src/Table/tbody/row.tsx +5 -4
  79. package/src/Table/theader/cell.tsx +10 -0
  80. package/src/Table/theader/filter.tsx +64 -22
  81. package/src/Table/util/index.ts +3 -1
  82. package/src/version.ts +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rainbow-oh/yee-c",
3
- "version": "0.8.12",
3
+ "version": "0.8.14",
4
4
  "description": "yee basic components",
5
5
  "keywords": [
6
6
  "react",
@@ -30,6 +30,10 @@
30
30
  margin-right: 0;
31
31
  }
32
32
 
33
+ &-total {
34
+ white-space: nowrap;
35
+ }
36
+
33
37
  &-prev,
34
38
  &-next {
35
39
  // border: var(--yee-pagination-item-border-width) solid var(--yee-pagination-item-border-color);
@@ -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>
@@ -52,12 +52,6 @@ Used for page and block loading status.
52
52
 
53
53
  | Type | Description |
54
54
  | --- | --- |
55
- | blank | Blank type |
56
- | balls | Balls type |
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 |
@@ -52,12 +52,6 @@ toc: 'content'
52
52
 
53
53
  | 类型 | 描述 |
54
54
  | --- | --- |
55
- | blank | 空白类型 |
56
- | balls | 小球类型 |
57
- | bars | 条形类型 |
58
- | bubbles | 气泡类型 |
59
- | cubes | 方块类型 |
60
- | cylon | 赛隆类型 |
61
- | spin | 旋转类型 |
62
- | spinningBubbles | 旋转气泡类型 |
55
+ | dot | 原点旋转 |
56
+ | ring | 圆环转圈 |
63
57
  | spokes | 辐条类型 |
@@ -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
  }
@@ -39,4 +39,4 @@ const ColGroup = React.memo(({ columns }: TableColGroupProps) => {
39
39
 
40
40
  ColGroup.displayName = 'ColGroup';
41
41
 
42
- export default React.memo(ColGroup);
42
+ export default ColGroup;
@@ -23,8 +23,9 @@ export default () => {
23
23
  title: 'Score',
24
24
  dataIndex: 'score',
25
25
  key: 'score',
26
- sorter: true,
27
- defaultSortOrder: 'descend' as const,
26
+ sorter: {
27
+ defaultSortOrder: 'descend' as const,
28
+ },
28
29
  },
29
30
  {
30
31
  title: 'Address',
@@ -13,8 +13,9 @@ export default () => {
13
13
  title: 'Age',
14
14
  dataIndex: 'age',
15
15
  key: 'age',
16
- sorter: true,
17
- defaultSortOrder: 'descend' as const,
16
+ sorter: {
17
+ defaultSortOrder: 'descend' as const,
18
+ },
18
19
  },
19
20
  {
20
21
  title: 'Address',
@@ -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: string[],
7
- getRowKey: (record: Record<string, any>) => string,
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
- let newFilterMap = [...filterRecords];
30
- if (isEmptyFilterValue(value)) {
31
- newFilterMap = newFilterMap.filter(
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
- setFilterRecords(newFilterMap);
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) && !isEmptyFilterValue(value),
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.some(({ dataIndex, value }) => {
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>) => string;
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 disabled;
51
+ return pageData
52
+ .filter((_, index) => disabled[index])
53
+ .map((record) => getRowKey(record));
49
54
  }
50
55
  if (typeof disabled === 'function') {
51
- return (
52
- Array.isArray(pageData) &&
53
- pageData
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 getPageDataRowKeys = () => {
62
- return (
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 as any, rowRecords as any, checked);
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 = (event: ChangeEvent<HTMLInputElement>) => {
122
- const key = event.target.value;
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);