@rainbow-oh/yee-c 0.8.12 → 0.8.13

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 (67) hide show
  1. package/dist/cjs/Table/col-group.d.ts +2 -2
  2. package/dist/cjs/Table/col-group.js +1 -1
  3. package/dist/cjs/Table/demo/sorter-callback.js +3 -2
  4. package/dist/cjs/Table/demo/sorter.js +3 -2
  5. package/dist/cjs/Table/hooks/useExpand.d.ts +2 -2
  6. package/dist/cjs/Table/hooks/useFilter.d.ts +8 -2
  7. package/dist/cjs/Table/hooks/useFilter.js +36 -22
  8. package/dist/cjs/Table/hooks/usePagination.js +8 -8
  9. package/dist/cjs/Table/hooks/useSelection.d.ts +3 -3
  10. package/dist/cjs/Table/hooks/useSelection.js +8 -9
  11. package/dist/cjs/Table/hooks/useSorter.d.ts +6 -3
  12. package/dist/cjs/Table/hooks/useSorter.js +193 -87
  13. package/dist/cjs/Table/interface.d.ts +10 -7
  14. package/dist/cjs/Table/table.js +51 -45
  15. package/dist/cjs/Table/tbody/index.js +13 -5
  16. package/dist/cjs/Table/tbody/lazy-row.js +6 -3
  17. package/dist/cjs/Table/tbody/row.js +5 -4
  18. package/dist/cjs/Table/theader/cell.js +4 -0
  19. package/dist/cjs/Table/theader/filter.js +52 -20
  20. package/dist/cjs/Table/util/index.js +5 -3
  21. package/dist/cjs/style/themes.css +1 -1
  22. package/dist/cjs/style/variables.css +1 -1
  23. package/dist/cjs/version.d.ts +1 -1
  24. package/dist/cjs/version.js +1 -1
  25. package/dist/esm/Table/col-group.d.ts +2 -2
  26. package/dist/esm/Table/col-group.js +1 -1
  27. package/dist/esm/Table/demo/sorter-callback.js +3 -2
  28. package/dist/esm/Table/demo/sorter.js +3 -2
  29. package/dist/esm/Table/hooks/useExpand.d.ts +2 -2
  30. package/dist/esm/Table/hooks/useFilter.d.ts +8 -2
  31. package/dist/esm/Table/hooks/useFilter.js +52 -32
  32. package/dist/esm/Table/hooks/usePagination.js +8 -10
  33. package/dist/esm/Table/hooks/useSelection.d.ts +3 -3
  34. package/dist/esm/Table/hooks/useSelection.js +16 -11
  35. package/dist/esm/Table/hooks/useSorter.d.ts +6 -3
  36. package/dist/esm/Table/hooks/useSorter.js +218 -105
  37. package/dist/esm/Table/interface.d.ts +10 -7
  38. package/dist/esm/Table/table.js +42 -47
  39. package/dist/esm/Table/tbody/index.js +8 -5
  40. package/dist/esm/Table/tbody/lazy-row.js +7 -3
  41. package/dist/esm/Table/tbody/row.js +7 -6
  42. package/dist/esm/Table/theader/cell.js +7 -1
  43. package/dist/esm/Table/theader/filter.js +75 -27
  44. package/dist/esm/Table/util/index.js +6 -3
  45. package/dist/esm/style/themes.css +1 -1
  46. package/dist/esm/style/variables.css +1 -1
  47. package/dist/esm/version.d.ts +1 -1
  48. package/dist/esm/version.js +1 -1
  49. package/dist/umd/yee-c.min.js +1 -1
  50. package/package.json +1 -1
  51. package/src/Table/col-group.tsx +1 -1
  52. package/src/Table/demo/sorter-callback.tsx +3 -2
  53. package/src/Table/demo/sorter.tsx +3 -2
  54. package/src/Table/hooks/useExpand.ts +3 -3
  55. package/src/Table/hooks/useFilter.ts +47 -23
  56. package/src/Table/hooks/usePagination.ts +9 -10
  57. package/src/Table/hooks/useSelection.ts +18 -20
  58. package/src/Table/hooks/useSorter.ts +236 -82
  59. package/src/Table/interface.ts +19 -7
  60. package/src/Table/table.tsx +54 -49
  61. package/src/Table/tbody/index.tsx +14 -5
  62. package/src/Table/tbody/lazy-row.tsx +6 -3
  63. package/src/Table/tbody/row.tsx +5 -4
  64. package/src/Table/theader/cell.tsx +10 -0
  65. package/src/Table/theader/filter.tsx +64 -22
  66. package/src/Table/util/index.ts +3 -1
  67. package/src/version.ts +1 -1
@@ -24,7 +24,7 @@ export interface ExpandableType {
24
24
  /**
25
25
  * Default expanded rows
26
26
  */
27
- defaultExpandedRowKeys?: string[]; // Default expanded rows
27
+ defaultExpandedRowKeys?: SelectionKeyType[]; // Default expanded rows
28
28
  /**
29
29
  * Expanded rows
30
30
  */
@@ -57,6 +57,7 @@ export interface ExpandableType {
57
57
  }
58
58
 
59
59
  export type SelectionKeyType = string | number;
60
+ export type FilterValue = string | number;
60
61
 
61
62
  export type ColumnSemanticType = 'inner' | 'action';
62
63
 
@@ -210,7 +211,7 @@ export interface ColumnProps {
210
211
  /**
211
212
  * Filter callback function
212
213
  */
213
- onFilter?: (value: string, record: Record<string, any>) => boolean;
214
+ onFilter?: (value: FilterValue, record: Record<string, any>) => boolean;
214
215
  };
215
216
  /**
216
217
  * Sorter config
@@ -221,9 +222,13 @@ export interface ColumnProps {
221
222
  /**
222
223
  * Sort function
223
224
  */
224
- sort?: () => number | boolean;
225
+ sort?: (
226
+ a: Record<string, unknown>,
227
+ b: Record<string, unknown>,
228
+ ) => number;
225
229
  /**
226
- * Whether to support multi-column sort, if set to a number, it indicates the number of sortable columns
230
+ * Enable multi-column sorting. A positive number limits the active
231
+ * sorters; when exceeded, the earliest activated sorter is removed.
227
232
  */
228
233
  multiple?: boolean | number;
229
234
  /**
@@ -405,6 +410,7 @@ export interface TableRowProps {
405
410
  pageSize: number;
406
411
  index: number;
407
412
  record: Record<string, any>;
413
+ rowKeyValue: SelectionKeyType;
408
414
  columns: ColumnProps[];
409
415
  expandable?: ExpandableType;
410
416
  expandedRowKeys?: Array<string | number>;
@@ -436,7 +442,10 @@ export interface TableRowProps {
436
442
  index: number;
437
443
  }) => void;
438
444
  // Checkbox or Radio onChange event
439
- onSelectionChange: (event: ChangeEvent<HTMLInputElement>) => void;
445
+ onSelectionChange: (
446
+ event: ChangeEvent<HTMLInputElement>,
447
+ key: SelectionKeyType,
448
+ ) => void;
440
449
  }
441
450
 
442
451
  type LazyLoadType = {
@@ -452,7 +461,10 @@ export interface LazyRowProps extends TableRowProps {
452
461
  lazyLoad?: boolean | LazyLoadType;
453
462
  }
454
463
 
455
- export interface TableBodyProps extends Omit<LazyRowProps, 'index' | 'record'> {
464
+ export interface TableBodyProps extends Omit<
465
+ LazyRowProps,
466
+ 'index' | 'record' | 'rowKeyValue'
467
+ > {
456
468
  pageData: Array<Record<string, any>>;
457
469
  noData?: React.ReactNode;
458
470
  }
@@ -619,7 +631,7 @@ export interface TableProps
619
631
  * Set the unique key for rows
620
632
  * @default id
621
633
  */
622
- rowKey?: string | ((record: Record<string, any>) => string);
634
+ rowKey?: string | ((record: Record<string, any>) => SelectionKeyType);
623
635
  /**
624
636
  * Summary bar
625
637
  */
@@ -83,15 +83,28 @@ const Table = React.forwardRef<HTMLDivElement, TableProps>((baseprops, ref) => {
83
83
  });
84
84
 
85
85
  // Filter
86
- const { data: filteredData, onFilter: onFilterInternal } = useFilter({
86
+ const {
87
+ data: filteredData,
88
+ filterRecords,
89
+ onFilter: onFilterInternal,
90
+ } = useFilter({
87
91
  data: dataSource,
92
+ columns: wrapedColumns,
88
93
  });
89
94
 
95
+ const filters = useMemo(
96
+ () =>
97
+ Object.fromEntries(
98
+ filterRecords.map(({ dataIndex, value }) => [dataIndex, value]),
99
+ ),
100
+ [filterRecords],
101
+ );
102
+
90
103
  // Sort
91
104
  const {
92
105
  data: sortedData,
93
106
  sorters,
94
- onSort,
107
+ onSort: onSortInternal,
95
108
  } = useSorter({ data: filteredData, columns: wrapedColumns });
96
109
  // Pagination
97
110
  const { pageData, current, pageSize, pagination } = usePagination({
@@ -102,7 +115,7 @@ const Table = React.forwardRef<HTMLDivElement, TableProps>((baseprops, ref) => {
102
115
  onChange({
103
116
  pagination: info,
104
117
  sorter: sorters,
105
- filters: undefined, // TODO: Extract filter info from onFilterInternal
118
+ filters,
106
119
  currentDataSource: sortedData,
107
120
  action: 'paginate',
108
121
  });
@@ -110,6 +123,20 @@ const Table = React.forwardRef<HTMLDivElement, TableProps>((baseprops, ref) => {
110
123
  : undefined,
111
124
  });
112
125
 
126
+ const handleSort = React.useCallback(
127
+ (dataIndex: string) => {
128
+ const next = onSortInternal(dataIndex);
129
+ onChange?.({
130
+ pagination: pagination === false ? undefined : { current, pageSize },
131
+ sorter: next.sorters,
132
+ filters,
133
+ currentDataSource: next.data,
134
+ action: 'sort',
135
+ });
136
+ },
137
+ [onSortInternal, onChange, pagination, current, pageSize, filters],
138
+ );
139
+
113
140
  // Expanded row data
114
141
  const { expandedRowKeys, onExpand } = useExpand(
115
142
  expandable,
@@ -124,8 +151,8 @@ const Table = React.forwardRef<HTMLDivElement, TableProps>((baseprops, ref) => {
124
151
  onChange: onSelectionChange,
125
152
  } = useSelection({ pageData, dataSource, getRowKey, rowSelection, allKeys });
126
153
 
127
- // Track previous values to determine what action triggered onChange
128
- const prevSortersRef = useRef<typeof sorters>({});
154
+ // Track filter changes to emit onChange after filtered data is recalculated
155
+ const prevFilterRecordsRef = useRef(filterRecords);
129
156
  const contentWrapperRef = useRef<HTMLDivElement>(null);
130
157
  const contentRef = useRef<HTMLDivElement>(null);
131
158
  const [horizontalScroll, setHorizontalScroll] = React.useState({
@@ -156,51 +183,29 @@ const Table = React.forwardRef<HTMLDivElement, TableProps>((baseprops, ref) => {
156
183
  );
157
184
  }, []);
158
185
 
159
- // Wrap onFilter to trigger onChange
160
- const onFilter = React.useCallback(
161
- (...args: Parameters<typeof onFilterInternal>) => {
162
- onFilterInternal(...args);
163
- // Trigger onChange for filter action
164
- if (onChange) {
165
- onChange({
166
- pagination: pagination === false ? undefined : { current, pageSize },
167
- sorter: sorters,
168
- filters: undefined, // TODO: Extract filter info from args
169
- currentDataSource: filteredData,
170
- action: 'filter',
171
- });
172
- }
173
- },
174
- [
175
- onChange,
176
- pagination,
177
- current,
178
- pageSize,
179
- sorters,
180
- filteredData,
181
- onFilterInternal,
182
- ],
183
- );
184
-
185
- // Trigger onChange when sorter, pagination, or filter changes
186
186
  useEffect(() => {
187
+ if (prevFilterRecordsRef.current === filterRecords) return;
188
+
189
+ prevFilterRecordsRef.current = filterRecords;
187
190
  if (!onChange) return;
188
191
 
189
- // Check if sorters changed
190
- const sortersChanged =
191
- JSON.stringify(prevSortersRef.current) !== JSON.stringify(sorters);
192
- if (sortersChanged && prevSortersRef.current !== sorters) {
193
- prevSortersRef.current = sorters;
194
- onChange({
195
- pagination: pagination === false ? undefined : { current, pageSize },
196
- sorter: sorters,
197
- filters: undefined,
198
- currentDataSource: sortedData,
199
- action: 'sort',
200
- });
201
- return;
202
- }
203
- }, [sorters, current, pageSize, pageData, sortedData, onChange]);
192
+ onChange({
193
+ pagination: pagination === false ? undefined : { current, pageSize },
194
+ sorter: sorters,
195
+ filters,
196
+ currentDataSource: sortedData,
197
+ action: 'filter',
198
+ });
199
+ }, [
200
+ filterRecords,
201
+ filters,
202
+ sortedData,
203
+ pagination,
204
+ current,
205
+ pageSize,
206
+ sorters,
207
+ onChange,
208
+ ]);
204
209
 
205
210
  useEffect(() => {
206
211
  updateHorizontalScroll();
@@ -245,9 +250,9 @@ const Table = React.forwardRef<HTMLDivElement, TableProps>((baseprops, ref) => {
245
250
  headerRows={headerRows}
246
251
  checkedAll={checkedAll}
247
252
  sorters={sorters}
248
- onSort={onSort}
253
+ onSort={handleSort}
249
254
  onCheckAll={onCheckAll}
250
- onInternalFilter={onFilter}
255
+ onInternalFilter={onFilterInternal}
251
256
  />
252
257
  );
253
258
  };
@@ -31,19 +31,27 @@ const TableBody: React.FC<TableBodyProps> = (props) => {
31
31
 
32
32
  const getRenderRows = () => {
33
33
  if (lazyLoad) {
34
- return <LazyRow {...rest} pageData={pageData} columns={columns} />;
34
+ return (
35
+ <LazyRow
36
+ {...rest}
37
+ pageData={pageData}
38
+ columns={columns}
39
+ resolveRowKey={resolveRowKey}
40
+ />
41
+ );
35
42
  }
36
43
  return pageData.map((record: Record<string, any>, index: number) => {
44
+ const resolvedRowKey = resolveRowKey(record);
45
+
37
46
  // 整行接管:由外部组件渲染 <tr> + 单元格(可放拖拽手柄等)
38
47
  if (RowRenderer) {
39
- const rk = resolveRowKey(record);
40
48
  return (
41
49
  <RowRenderer
42
- key={rk ?? index}
50
+ key={resolvedRowKey ?? index}
43
51
  record={record}
44
52
  index={index}
45
53
  columns={columns}
46
- rowKey={rk}
54
+ rowKey={resolvedRowKey}
47
55
  />
48
56
  );
49
57
  }
@@ -52,8 +60,9 @@ const TableBody: React.FC<TableBodyProps> = (props) => {
52
60
  {...rest}
53
61
  columns={columns}
54
62
  record={record}
63
+ rowKeyValue={resolvedRowKey}
55
64
  index={index}
56
- key={`row-${record.key || index}`}
65
+ key={resolvedRowKey ?? `row-${index}`}
57
66
  />
58
67
  );
59
68
  });
@@ -6,7 +6,7 @@ const createBlank = (size: number, key: string) => {
6
6
  : [];
7
7
  };
8
8
  const LazyRow = (props: any) => {
9
- const { range, pageData, columns, ...rest } = props;
9
+ const { range, pageData, columns, resolveRowKey, ...rest } = props;
10
10
  const { start, end } = range;
11
11
  let result: any = [];
12
12
  const pl = pageData.length;
@@ -14,13 +14,16 @@ const LazyRow = (props: any) => {
14
14
  result = result.concat(startBlank);
15
15
 
16
16
  for (let i = start; i < (end > pl ? pl : end); i++) {
17
+ const record = pageData[i];
18
+ const rowKeyValue = resolveRowKey(record);
17
19
  result.push(
18
20
  <TableRow
19
21
  {...rest}
20
22
  columns={columns}
21
- record={pageData[i]}
23
+ record={record}
24
+ rowKeyValue={rowKeyValue}
22
25
  index={i}
23
- key={'row-' + i}
26
+ key={rowKeyValue ?? `row-${i}`}
24
27
  />,
25
28
  );
26
29
  }
@@ -14,6 +14,7 @@ const TableRow: React.FC<TableRowProps> = (props) => {
14
14
  const {
15
15
  index,
16
16
  record,
17
+ rowKeyValue,
17
18
  columns,
18
19
  highlight,
19
20
  stripe,
@@ -30,10 +31,10 @@ const TableRow: React.FC<TableRowProps> = (props) => {
30
31
  ...rest
31
32
  } = props;
32
33
 
33
- const { prefixCls, rowKey } = useContext(TableCtx);
34
+ const { prefixCls } = useContext(TableCtx);
34
35
 
35
36
  const expanded = expandedRowKeys?.includes(
36
- expandedKeyType === 'index' ? index + 1 : record[rowKey],
37
+ expandedKeyType === 'index' ? index + 1 : rowKeyValue,
37
38
  );
38
39
 
39
40
  const high = React.useMemo(() => {
@@ -57,7 +58,6 @@ const TableRow: React.FC<TableRowProps> = (props) => {
57
58
 
58
59
  const getSelection = (column: WrapedColumnProps) => {
59
60
  const { type, disabled: colDisabled, onCell } = column;
60
- const rowKeyValue = record[rowKey];
61
61
  const props = (onCell?.(record, index) || {}) as Record<string, unknown>;
62
62
  const checked = selectedRowKeys?.includes(rowKeyValue);
63
63
 
@@ -75,7 +75,8 @@ const TableRow: React.FC<TableRowProps> = (props) => {
75
75
  const commonProps = {
76
76
  checked,
77
77
  value: rowKeyValue,
78
- onChange: onSelectionChange,
78
+ onChange: (event: React.ChangeEvent<HTMLInputElement>) =>
79
+ onSelectionChange(event, rowKeyValue),
79
80
  disabled,
80
81
  ...props,
81
82
  };
@@ -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 reset = () => {
57
- setSearchValue('');
58
- setSelectNodes([]);
59
- onInternalFilter({ dataIndex, value: '', column });
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 ok = (type?: 'filter' | 'search') => {
89
+ const applyFilter = (type: 'filter' | 'search') => {
90
+ const value = getCurrentValue(type);
91
+ commitValue(value);
63
92
  onInternalFilter({
64
93
  dataIndex,
65
- value: type === 'search' ? searchValue : selectNodes,
66
- type: 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 (items) {
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 = (o: boolean) => {
164
- setOpen(o);
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={selectNodes.length || searchValue ? 'filled' : undefined}
222
+ variant={isFiltered ? 'filled' : undefined}
181
223
  type="text"
182
224
  size="small"
183
225
  />
@@ -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
- if (!columns[i + 1].fixed) {
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 =
package/src/version.ts CHANGED
@@ -4,7 +4,7 @@ declare global {
4
4
  }
5
5
  }
6
6
 
7
- export const version = "0.8.12";
7
+ export const version = "0.8.13";
8
8
 
9
9
  if (typeof window !== 'undefined') {
10
10
  window.__yee_c_version__ = version;