@visactor/vtable-plugins 1.22.4-alpha.2 → 1.22.4

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 (59) hide show
  1. package/cjs/auto-fill/rules.js +2 -1
  2. package/cjs/contextmenu/menu-manager.js +1 -2
  3. package/cjs/filter/condition-filter.d.ts +1 -3
  4. package/cjs/filter/condition-filter.js +20 -20
  5. package/cjs/filter/condition-filter.js.map +1 -1
  6. package/cjs/filter/filter-state-manager.d.ts +0 -14
  7. package/cjs/filter/filter-state-manager.js +1 -35
  8. package/cjs/filter/filter-state-manager.js.map +1 -1
  9. package/cjs/filter/filter-toolbar.d.ts +5 -4
  10. package/cjs/filter/filter-toolbar.js +30 -30
  11. package/cjs/filter/filter-toolbar.js.map +1 -1
  12. package/cjs/filter/filter.d.ts +4 -3
  13. package/cjs/filter/filter.js +15 -19
  14. package/cjs/filter/filter.js.map +1 -1
  15. package/cjs/filter/styles.d.ts +124 -2
  16. package/cjs/filter/styles.js.map +1 -1
  17. package/cjs/filter/types.d.ts +0 -27
  18. package/cjs/filter/types.js.map +1 -1
  19. package/cjs/filter/value-filter.d.ts +1 -5
  20. package/cjs/filter/value-filter.js +118 -145
  21. package/cjs/filter/value-filter.js.map +1 -1
  22. package/cjs/gantt-export-image.d.ts +0 -1
  23. package/cjs/gantt-export-image.js +2 -10
  24. package/cjs/gantt-export-image.js.map +1 -1
  25. package/cjs/master-detail-plugin/config.js +2 -2
  26. package/cjs/master-detail-plugin/config.js.map +1 -1
  27. package/cjs/table-export/csv/index.js +1 -1
  28. package/cjs/table-export/csv/index.js.map +1 -1
  29. package/dist/vtable-plugins.js +211 -9794
  30. package/dist/vtable-plugins.min.js +3 -3
  31. package/es/auto-fill/rules.js +2 -1
  32. package/es/contextmenu/menu-manager.js +1 -2
  33. package/es/filter/condition-filter.d.ts +1 -3
  34. package/es/filter/condition-filter.js +14 -14
  35. package/es/filter/condition-filter.js.map +1 -1
  36. package/es/filter/filter-state-manager.d.ts +0 -14
  37. package/es/filter/filter-state-manager.js +1 -35
  38. package/es/filter/filter-state-manager.js.map +1 -1
  39. package/es/filter/filter-toolbar.d.ts +5 -4
  40. package/es/filter/filter-toolbar.js +28 -29
  41. package/es/filter/filter-toolbar.js.map +1 -1
  42. package/es/filter/filter.d.ts +4 -3
  43. package/es/filter/filter.js +13 -21
  44. package/es/filter/filter.js.map +1 -1
  45. package/es/filter/styles.d.ts +124 -2
  46. package/es/filter/styles.js.map +1 -1
  47. package/es/filter/types.d.ts +0 -27
  48. package/es/filter/types.js.map +1 -1
  49. package/es/filter/value-filter.d.ts +1 -5
  50. package/es/filter/value-filter.js +118 -145
  51. package/es/filter/value-filter.js.map +1 -1
  52. package/es/gantt-export-image.d.ts +0 -1
  53. package/es/gantt-export-image.js +1 -11
  54. package/es/gantt-export-image.js.map +1 -1
  55. package/es/master-detail-plugin/config.js +2 -2
  56. package/es/master-detail-plugin/config.js.map +1 -1
  57. package/es/table-export/csv/index.js +1 -1
  58. package/es/table-export/csv/index.js.map +1 -1
  59. package/package.json +8 -8
@@ -7,10 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  const vutils_1 = require("@visactor/vutils"), types_1 = require("./types"), styles_1 = require("./styles");
8
8
 
9
9
  class ValueFilter {
10
- constructor(table, filterStateManager, styles) {
10
+ constructor(table, filterStateManager) {
11
11
  this.uniqueKeys = new Map, this.displayToRawValueMap = new Map, this.valueFilterOptionList = new Map,
12
- this.table = table, this.filterStateManager = filterStateManager, this.styles = styles,
13
- this.filterStateManager.subscribe((state => {
12
+ this.table = table, this.filterStateManager = filterStateManager, this.filterStateManager.subscribe((state => {
14
13
  const filterState = state.filters.get(this.selectedField);
15
14
  filterState && "byValue" === filterState.type && this.updateUI(filterState);
16
15
  }));
@@ -22,166 +21,144 @@ class ValueFilter {
22
21
  this.selectedField = fieldId, this.collectUniqueColumnValues(fieldId);
23
22
  }
24
23
  collectUniqueColumnValues(fieldId) {
25
- if (this.uniqueKeys.has(fieldId)) return;
26
- const displayToRawMap = new Map;
27
- let targetCol = -1;
24
+ var _a;
25
+ const isEnable = null === (_a = this.filterStateManager.getFilterState(fieldId)) || void 0 === _a ? void 0 : _a.enable, displayValueMap = new Map, rawToDisplayMap = new Map, displayToRawMap = new Map;
26
+ let targetCol = -1, targetRow = -1;
28
27
  for (let col = 0; col < this.table.colCount; col++) {
29
28
  for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) if (!this.table.internalProps.layoutMap.isHeader(col, row)) {
30
29
  const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);
31
30
  if (bodyInfo && bodyInfo.field === fieldId) {
32
- targetCol = col;
31
+ targetCol = col, targetRow = row;
33
32
  break;
34
33
  }
35
34
  }
36
35
  if (-1 !== targetCol) break;
37
36
  }
38
- const records = this.table.internalProps.records, recordsLength = records.length;
39
- for (let i = 0; i < recordsLength; i++) {
40
- let rawValue, displayValue;
41
- if (-1 !== targetCol) {
42
- const row = this.table.columnHeaderLevelCount + i;
43
- rawValue = records[i][fieldId];
44
- const bodyInfo = this.table.internalProps.layoutMap.getBody(targetCol, row);
45
- displayValue = bodyInfo && "fieldFormat" in bodyInfo && bodyInfo.fieldFormat && "function" == typeof bodyInfo.fieldFormat ? bodyInfo.fieldFormat({
46
- [fieldId]: rawValue
47
- }) : rawValue;
48
- } else rawValue = records[i][fieldId], displayValue = rawValue;
49
- null == rawValue || displayToRawMap.has(displayValue) || displayToRawMap.set(displayValue, rawValue);
37
+ if (isEnable) {
38
+ const records = this.table.internalProps.records, recordsLength = records.length;
39
+ for (let i = 0; i < recordsLength; i++) {
40
+ let rawValue, displayValue;
41
+ if (-1 !== targetCol) {
42
+ const row = this.table.columnHeaderLevelCount + i;
43
+ rawValue = records[i][fieldId];
44
+ const bodyInfo = this.table.internalProps.layoutMap.getBody(targetCol, row);
45
+ displayValue = bodyInfo && "fieldFormat" in bodyInfo && bodyInfo.fieldFormat && "function" == typeof bodyInfo.fieldFormat ? bodyInfo.fieldFormat({
46
+ [fieldId]: rawValue
47
+ }) : rawValue;
48
+ }
49
+ null != rawValue && (displayValueMap.set(displayValue, (displayValueMap.get(displayValue) || 0) + 1),
50
+ rawToDisplayMap.set(rawValue, displayValue), displayToRawMap.set(displayValue, rawValue));
51
+ }
52
+ } else {
53
+ const currentLength = this.table.internalProps.dataSource.length;
54
+ for (let i = 0; i < currentLength; i++) {
55
+ let rawValue, displayValue;
56
+ if (-1 !== targetCol) {
57
+ const row = this.table.columnHeaderLevelCount + i;
58
+ row < this.table.rowCount && (rawValue = this.table.getCellOriginValue(targetCol, row),
59
+ displayValue = this.table.getCellValue(targetCol, row));
60
+ } else rawValue = this.table.getFieldData(String(fieldId), -1 !== targetCol ? targetCol : 0, this.table.columnHeaderLevelCount + i),
61
+ displayValue = rawValue;
62
+ null != rawValue && (displayValueMap.set(displayValue, (displayValueMap.get(displayValue) || 0) + 1),
63
+ rawToDisplayMap.set(rawValue, displayValue), displayToRawMap.set(displayValue, rawValue));
64
+ }
50
65
  }
51
66
  this.displayToRawValueMap.set(fieldId, displayToRawMap);
52
- const uniqueValues = Array.from(displayToRawMap.entries()).map((([displayValue, rawValue]) => ({
67
+ const uniqueValues = Array.from(displayValueMap.entries()).map((([displayValue, count]) => ({
53
68
  value: displayValue,
54
- count: 0,
55
- rawValue: rawValue
69
+ count: count,
70
+ rawValue: displayToRawMap.get(displayValue)
56
71
  })));
57
72
  this.uniqueKeys.set(fieldId, uniqueValues);
58
73
  }
59
- updateCandidateCounts(fieldId) {
60
- const uniqueValues = this.uniqueKeys.get(fieldId);
61
- if (!uniqueValues) return;
62
- const filter = this.filterStateManager.getFilterState(fieldId), dataSource = (null == filter ? void 0 : filter.enable) ? this.table.internalProps.records : this.table.internalProps.dataSource;
63
- let targetCol = -1;
64
- for (let col = 0; col < this.table.colCount; col++) {
65
- for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) if (!this.table.internalProps.layoutMap.isHeader(col, row)) {
66
- const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);
67
- if (bodyInfo && bodyInfo.field === fieldId) {
68
- targetCol = col;
69
- break;
70
- }
71
- }
72
- if (-1 !== targetCol) break;
73
- }
74
- const dataLength = dataSource.length, countMap = new Map;
75
- for (let i = 0; i < dataLength; i++) {
76
- let displayValue;
77
- if (-1 !== targetCol) {
78
- const row = this.table.columnHeaderLevelCount + i;
79
- row < this.table.rowCount && (displayValue = this.table.getCellValue(targetCol, row));
80
- } else displayValue = this.table.getFieldData(String(fieldId), -1 !== targetCol ? targetCol : 0, this.table.columnHeaderLevelCount + i);
81
- null != displayValue && countMap.set(displayValue, (countMap.get(displayValue) || 0) + 1);
82
- }
83
- uniqueValues.forEach((item => {
84
- item.count = countMap.get(item.value) || 0;
85
- }));
86
- }
87
74
  onValueSelect(fieldId, displayValue, selected) {
88
75
  const displayToRawMap = this.displayToRawValueMap.get(fieldId), rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue, filter = this.filterStateManager.getFilterState(fieldId);
89
- let updatedValues;
90
- filter ? (updatedValues = selected ? [ ...filter.values || [], rawValue ] : (filter.values || []).filter((v => v !== rawValue)),
91
- this.filterStateManager.dispatch({
92
- type: types_1.FilterActionType.UPDATE_FILTER,
93
- payload: {
94
- field: fieldId,
95
- values: updatedValues
96
- }
97
- })) : (updatedValues = selected ? [ rawValue ] : [], this.filterStateManager.dispatch({
76
+ if (filter) {
77
+ const updatedValues = selected ? [ ...filter.values || [], rawValue ] : (filter.values || []).filter((v => v !== rawValue));
78
+ this.filterStateManager.dispatch({
79
+ type: types_1.FilterActionType.UPDATE_FILTER,
80
+ payload: {
81
+ field: fieldId,
82
+ values: updatedValues
83
+ }
84
+ });
85
+ } else this.filterStateManager.dispatch({
98
86
  type: types_1.FilterActionType.ADD_FILTER,
99
87
  payload: {
100
88
  field: fieldId,
101
89
  type: "byValue",
102
- values: updatedValues
90
+ values: [ rawValue ]
103
91
  }
104
- }));
105
- }
106
- isValueVisible(displayValue, keyword) {
107
- if (!keyword) return !0;
108
- const filterKeywords = keyword.toUpperCase().split(" ").filter((s => s)), txtValue = String(displayValue).toUpperCase();
109
- return filterKeywords.some((keyword => txtValue.includes(keyword)));
92
+ });
110
93
  }
111
94
  toggleSelectAll(fieldId, selected) {
112
- const currentKeyword = this.filterStateManager.getCurrentSearchKeyword(fieldId), stableCandidates = this.filterStateManager.getStableCandidateValues(fieldId), displayToRawMap = this.displayToRawValueMap.get(fieldId), visibleRawValues = stableCandidates.filter((candidate => this.isValueVisible(candidate.value, currentKeyword))).map((candidate => displayToRawMap ? displayToRawMap.get(candidate.value) : candidate.value)), filter = this.filterStateManager.getFilterState(fieldId), currentValues = new Set((null == filter ? void 0 : filter.values) || []);
113
- let updatedValues;
114
- updatedValues = selected ? Array.from(new Set([ ...currentValues, ...visibleRawValues ])) : Array.from(currentValues).filter((value => !visibleRawValues.includes(value))),
115
- filter ? this.filterStateManager.dispatch({
116
- type: types_1.FilterActionType.UPDATE_FILTER,
117
- payload: {
118
- field: fieldId,
119
- values: updatedValues
120
- }
121
- }) : this.filterStateManager.dispatch({
95
+ var _a;
96
+ const filter = this.filterStateManager.getFilterState(fieldId), rawValuesToUpdate = selected && (null === (_a = this.uniqueKeys.get(fieldId)) || void 0 === _a ? void 0 : _a.map((item => item.rawValue))) || [];
97
+ if (filter) {
98
+ const updatedValues = selected ? rawValuesToUpdate : [];
99
+ this.filterStateManager.dispatch({
100
+ type: types_1.FilterActionType.UPDATE_FILTER,
101
+ payload: {
102
+ field: fieldId,
103
+ values: updatedValues
104
+ }
105
+ });
106
+ } else this.filterStateManager.dispatch({
122
107
  type: types_1.FilterActionType.ADD_FILTER,
123
108
  payload: {
124
109
  field: fieldId,
125
110
  type: "byValue",
126
- values: updatedValues,
111
+ values: rawValuesToUpdate,
127
112
  enable: !0
128
113
  }
129
114
  });
130
115
  }
131
116
  onSearch(fieldId, value) {
132
- this.filterStateManager.updateSearchKeyword(fieldId, value);
133
- const items = this.valueFilterOptionList.get(fieldId), filterKeywords = value.toUpperCase().split(" ").filter((s => s));
117
+ const filterKeywords = value.toUpperCase().split(" ").filter((s => s)), items = this.valueFilterOptionList.get(fieldId);
134
118
  for (const item of items) {
135
- const txtValue = item.id.toUpperCase() || "", match = filterKeywords.some((keyword => txtValue.includes(keyword))), isVisible = 0 === filterKeywords.length || match;
136
- item.itemContainer.style.display = isVisible ? "flex" : "none";
119
+ const txtValue = item.id.toUpperCase() || "", match = filterKeywords.some((keyword => txtValue.includes(keyword)));
120
+ item.itemContainer.style.display = 0 === filterKeywords.length || match ? "flex" : "none";
137
121
  }
138
122
  }
139
123
  initFilterStateFromTableData(fieldId) {
140
- var _a, _b;
141
- const filter = this.filterStateManager.getFilterState(fieldId);
142
- if (null == filter ? void 0 : filter.enable) {
143
- const selectedRawValues = new Set, displayToRawMap = this.displayToRawValueMap.get(fieldId);
144
- let targetCol = -1;
145
- for (let col = 0; col < this.table.colCount; col++) {
146
- for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) if (!this.table.internalProps.layoutMap.isHeader(col, row)) {
147
- const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);
148
- if (bodyInfo && bodyInfo.field === fieldId) {
149
- targetCol = col;
150
- break;
151
- }
124
+ const filter = this.filterStateManager.getFilterState(fieldId), selectedRawValues = new Set, displayToRawMap = this.displayToRawValueMap.get(fieldId);
125
+ let targetCol = -1;
126
+ for (let col = 0; col < this.table.colCount; col++) {
127
+ for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) if (!this.table.internalProps.layoutMap.isHeader(col, row)) {
128
+ const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);
129
+ if (bodyInfo && bodyInfo.field === fieldId) {
130
+ targetCol = col;
131
+ break;
152
132
  }
153
- if (-1 !== targetCol) break;
154
- }
155
- const currentLength = this.table.internalProps.dataSource.length;
156
- for (let i = 0; i < currentLength; i++) {
157
- let displayValue, rawValue;
158
- if (-1 !== targetCol) {
159
- const row = this.table.columnHeaderLevelCount + i;
160
- row < this.table.rowCount && (displayValue = this.table.getCellValue(targetCol, row),
161
- rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue);
162
- } else displayValue = this.table.getFieldData(String(fieldId), -1 !== targetCol ? targetCol : 0, this.table.columnHeaderLevelCount + i),
163
- rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;
164
- null != rawValue && selectedRawValues.add(rawValue);
165
133
  }
166
- !(0, vutils_1.arrayEqual)(filter.values, Array.from(selectedRawValues)) && this.filterStateManager.dispatch({
167
- type: types_1.FilterActionType.UPDATE_FILTER,
168
- payload: {
169
- field: fieldId,
170
- values: Array.from(selectedRawValues)
171
- }
172
- });
173
- } else if (!filter) {
174
- const availableRawValues = (null === (_b = null === (_a = this.uniqueKeys.get(fieldId)) || void 0 === _a ? void 0 : _a.filter((item => item.count > 0))) || void 0 === _b ? void 0 : _b.map((item => item.rawValue)).filter((v => null != v))) || [];
175
- this.filterStateManager.dispatch({
176
- type: types_1.FilterActionType.ADD_FILTER,
177
- payload: {
178
- field: fieldId,
179
- type: "byValue",
180
- values: availableRawValues,
181
- enable: !1
182
- }
183
- });
134
+ if (-1 !== targetCol) break;
135
+ }
136
+ const currentLength = this.table.internalProps.dataSource.length;
137
+ for (let i = 0; i < currentLength; i++) {
138
+ let displayValue, rawValue;
139
+ if (-1 !== targetCol) {
140
+ const row = this.table.columnHeaderLevelCount + i;
141
+ row < this.table.rowCount && (displayValue = this.table.getCellValue(targetCol, row),
142
+ rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue);
143
+ } else displayValue = this.table.getFieldData(String(fieldId), -1 !== targetCol ? targetCol : 0, this.table.columnHeaderLevelCount + i),
144
+ rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;
145
+ null != rawValue && selectedRawValues.add(rawValue);
184
146
  }
147
+ (!filter || !(0, vutils_1.arrayEqual)(filter.values, Array.from(selectedRawValues))) && (filter ? this.filterStateManager.dispatch({
148
+ type: types_1.FilterActionType.UPDATE_FILTER,
149
+ payload: {
150
+ field: fieldId,
151
+ type: "byValue",
152
+ values: Array.from(selectedRawValues)
153
+ }
154
+ }) : this.filterStateManager.dispatch({
155
+ type: types_1.FilterActionType.ADD_FILTER,
156
+ payload: {
157
+ field: fieldId,
158
+ type: "byValue",
159
+ values: Array.from(selectedRawValues)
160
+ }
161
+ }));
185
162
  }
186
163
  syncCheckboxesWithFilterState(filter) {
187
164
  if (!filter) return;
@@ -191,7 +168,7 @@ class ValueFilter {
191
168
  const displayValue = optionDom.originalValue, rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;
192
169
  optionDom.checkbox.checked = selectedRawValues.some((v => v === rawValue));
193
170
  const count = (null === (_b = null === (_a = this.uniqueKeys.get(filter.field)) || void 0 === _a ? void 0 : _a.find((key => String(key.value) === optionDom.id))) || void 0 === _b ? void 0 : _b.count) || 0;
194
- optionDom.checkbox.disabled = 0 === count;
171
+ optionDom.countSpan.textContent = String(count), optionDom.itemContainer.style.display = 0 === count ? "none" : "flex";
195
172
  }));
196
173
  }
197
174
  syncSelectAllWithFilterState(filter) {
@@ -204,14 +181,14 @@ class ValueFilter {
204
181
  this.selectAllCheckbox.indeterminate = !0);
205
182
  }
206
183
  applyFilter(fieldId = this.selectedField) {
207
- var _a;
208
- const visibleSelectedKeys = Array.from(this.filterStateManager.getVisibleSelectedValues(fieldId));
209
- visibleSelectedKeys.length > 0 && visibleSelectedKeys.length < (null === (_a = this.uniqueKeys.get(fieldId)) || void 0 === _a ? void 0 : _a.length) ? this.filterStateManager.dispatch({
184
+ var _a, _b;
185
+ const selectedKeys = (null === (_a = this.filterStateManager.getFilterState(fieldId)) || void 0 === _a ? void 0 : _a.values) || [];
186
+ selectedKeys.length > 0 && selectedKeys.length < (null === (_b = this.uniqueKeys.get(fieldId)) || void 0 === _b ? void 0 : _b.length) ? this.filterStateManager.dispatch({
210
187
  type: types_1.FilterActionType.APPLY_FILTERS,
211
188
  payload: {
212
189
  field: fieldId,
213
190
  type: "byValue",
214
- values: visibleSelectedKeys,
191
+ values: selectedKeys,
215
192
  enable: !0
216
193
  }
217
194
  }) : this.filterStateManager.dispatch({
@@ -230,20 +207,20 @@ class ValueFilter {
230
207
  }), this.hide();
231
208
  }
232
209
  render(container) {
233
- this.filterByValuePanel = document.createElement("div"), (0, styles_1.applyStyles)(this.filterByValuePanel, this.styles.filterPanel);
210
+ this.filterByValuePanel = document.createElement("div"), (0, styles_1.applyStyles)(this.filterByValuePanel, styles_1.filterStyles.filterPanel);
234
211
  const searchContainer = document.createElement("div");
235
- (0, styles_1.applyStyles)(searchContainer, this.styles.searchContainer), this.filterByValueSearchInput = document.createElement("input"),
236
- this.filterByValueSearchInput.type = "text", this.filterByValueSearchInput.placeholder = "可使用空格分隔多个关键词",
237
- (0, styles_1.applyStyles)(this.filterByValueSearchInput, this.styles.searchInput),
212
+ (0, styles_1.applyStyles)(searchContainer, styles_1.filterStyles.searchContainer),
213
+ this.filterByValueSearchInput = document.createElement("input"), this.filterByValueSearchInput.type = "text",
214
+ this.filterByValueSearchInput.placeholder = "可使用空格分隔多个关键词", (0, styles_1.applyStyles)(this.filterByValueSearchInput, styles_1.filterStyles.searchInput),
238
215
  searchContainer.appendChild(this.filterByValueSearchInput);
239
216
  const optionsContainer = document.createElement("div");
240
- (0, styles_1.applyStyles)(optionsContainer, this.styles.optionsContainer);
217
+ (0, styles_1.applyStyles)(optionsContainer, styles_1.filterStyles.optionsContainer);
241
218
  const selectAllItemDiv = document.createElement("div");
242
- (0, styles_1.applyStyles)(selectAllItemDiv, this.styles.optionItem);
219
+ (0, styles_1.applyStyles)(selectAllItemDiv, styles_1.filterStyles.optionItem);
243
220
  const selectAllLabel = document.createElement("label");
244
- (0, styles_1.applyStyles)(selectAllLabel, this.styles.optionLabel), this.selectAllCheckbox = document.createElement("input"),
221
+ (0, styles_1.applyStyles)(selectAllLabel, styles_1.filterStyles.optionLabel), this.selectAllCheckbox = document.createElement("input"),
245
222
  this.selectAllCheckbox.type = "checkbox", this.selectAllCheckbox.checked = !0, (0,
246
- styles_1.applyStyles)(this.selectAllCheckbox, this.styles.checkbox), selectAllLabel.append(this.selectAllCheckbox, " 全选"),
223
+ styles_1.applyStyles)(this.selectAllCheckbox, styles_1.filterStyles.checkbox), selectAllLabel.append(this.selectAllCheckbox, " 全选"),
247
224
  selectAllItemDiv.appendChild(selectAllLabel), this.filterItemsContainer = document.createElement("div"),
248
225
  optionsContainer.append(selectAllItemDiv, this.filterItemsContainer), this.filterByValuePanel.append(searchContainer, optionsContainer),
249
226
  container.appendChild(this.filterByValuePanel), this.bindEventForFilterByValue();
@@ -255,14 +232,14 @@ class ValueFilter {
255
232
  const selectedRawValues = (null === (_a = this.filterStateManager.getFilterState(field)) || void 0 === _a ? void 0 : _a.values) || [], selectedRawValueSet = new Set(selectedRawValues), itemDomList = [];
256
233
  null === (_b = this.uniqueKeys.get(field)) || void 0 === _b || _b.forEach((({value: value, count: count, rawValue: rawValue}) => {
257
234
  const itemDiv = document.createElement("div");
258
- (0, styles_1.applyStyles)(itemDiv, this.styles.optionItem), itemDiv.style.display = "flex";
235
+ (0, styles_1.applyStyles)(itemDiv, styles_1.filterStyles.optionItem);
259
236
  const label = document.createElement("label");
260
- (0, styles_1.applyStyles)(label, this.styles.optionLabel);
237
+ (0, styles_1.applyStyles)(label, styles_1.filterStyles.optionLabel);
261
238
  const checkbox = document.createElement("input");
262
239
  checkbox.type = "checkbox", checkbox.value = String(value), checkbox.checked = selectedRawValueSet.has(rawValue),
263
- checkbox.disabled = 0 === count, (0, styles_1.applyStyles)(checkbox, this.styles.checkbox);
240
+ (0, styles_1.applyStyles)(checkbox, styles_1.filterStyles.checkbox);
264
241
  const countSpan = document.createElement("span");
265
- countSpan.textContent = String(count), (0, styles_1.applyStyles)(countSpan, this.styles.countSpan),
242
+ countSpan.textContent = String(count), (0, styles_1.applyStyles)(countSpan, styles_1.filterStyles.countSpan),
266
243
  label.append(checkbox, ` ${value}`), itemDiv.append(label, countSpan), this.filterItemsContainer.appendChild(itemDiv);
267
244
  const itemDom = {
268
245
  id: String(value),
@@ -291,11 +268,7 @@ class ValueFilter {
291
268
  }));
292
269
  }
293
270
  show() {
294
- this.collectUniqueColumnValues(this.selectedField), this.updateCandidateCounts(this.selectedField),
295
- this.initFilterStateFromTableData(this.selectedField);
296
- const uniqueValues = this.uniqueKeys.get(this.selectedField), displayToRawMap = this.displayToRawValueMap.get(this.selectedField);
297
- uniqueValues && displayToRawMap && this.filterStateManager.initializeFilterMenuState(this.selectedField, uniqueValues, displayToRawMap),
298
- this.filterByValueSearchInput && (this.filterByValueSearchInput.value = ""), this.renderFilterOptions(this.selectedField),
271
+ this.initFilterStateFromTableData(this.selectedField), this.renderFilterOptions(this.selectedField),
299
272
  this.filterByValuePanel.style.display = "block";
300
273
  }
301
274
  hide() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/filter/value-filter.ts"],"names":[],"mappings":"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","file":"value-filter.js","sourcesContent":["import type { ListTable, PivotTable } from '@visactor/vtable';\nimport { arrayEqual } from '@visactor/vutils';\nimport type { FilterConfig, ValueFilterOptionDom, FilterState, FilterStyles } from './types';\nimport { FilterActionType } from './types';\nimport type { FilterStateManager } from './filter-state-manager';\nimport { applyStyles } from './styles';\n\nexport class ValueFilter {\n private table: ListTable | PivotTable;\n private filterStateManager: FilterStateManager;\n private styles: FilterStyles;\n private uniqueKeys = new Map<string | number, Array<{ value: any; count: number; rawValue: any }>>();\n private displayToRawValueMap = new Map<string | number, Map<any, any>>();\n private selectedField: string | number;\n\n private valueFilterOptionList: Map<string | number, ValueFilterOptionDom[]> = new Map();\n private filterByValuePanel: HTMLElement;\n private filterByValueSearchInput: HTMLInputElement;\n private selectAllCheckbox: HTMLInputElement;\n private filterItemsContainer: HTMLElement;\n\n constructor(table: ListTable | PivotTable, filterStateManager: FilterStateManager, styles: FilterStyles) {\n this.table = table;\n this.filterStateManager = filterStateManager;\n this.styles = styles;\n\n this.filterStateManager.subscribe((state: FilterState) => {\n const filterState = state.filters.get(this.selectedField);\n if (filterState && filterState.type === 'byValue') {\n this.updateUI(filterState);\n }\n });\n }\n\n private updateUI(filterState: FilterConfig): void {\n this.syncCheckboxesWithFilterState(filterState);\n this.syncSelectAllWithFilterState(filterState);\n }\n\n setSelectedField(fieldId: string | number): void {\n this.selectedField = fieldId;\n this.collectUniqueColumnValues(fieldId);\n }\n\n collectUniqueColumnValues(fieldId: string | number): void {\n // 如果已经收集过,直接返回\n if (this.uniqueKeys.has(fieldId)) {\n return;\n }\n\n const displayToRawMap = new Map<any, any>(); // displayValue -> rawValue\n\n // 找到第一个匹配字段的列位置,用于获取格式化数据\n let targetCol = -1;\n for (let col = 0; col < this.table.colCount; col++) {\n for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) {\n if (!this.table.internalProps.layoutMap.isHeader(col, row)) {\n const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);\n if (bodyInfo && bodyInfo.field === fieldId) {\n targetCol = col;\n break;\n }\n }\n }\n if (targetCol !== -1) {\n break;\n }\n }\n\n // 从原始数据收集候选值(不计数,只收集唯一值)\n const records = this.table.internalProps.records;\n const recordsLength = records.length;\n\n for (let i = 0; i < recordsLength; i++) {\n let rawValue;\n let displayValue;\n if (targetCol !== -1) {\n const row = this.table.columnHeaderLevelCount + i;\n const currentRecord = records[i];\n // 获取原始数据\n rawValue = currentRecord[fieldId];\n // 获取格式化显示数据\n const bodyInfo = this.table.internalProps.layoutMap.getBody(targetCol, row);\n if (\n bodyInfo &&\n 'fieldFormat' in bodyInfo &&\n bodyInfo.fieldFormat &&\n typeof bodyInfo.fieldFormat === 'function'\n ) {\n displayValue = bodyInfo.fieldFormat({ [fieldId]: rawValue });\n } else {\n displayValue = rawValue;\n }\n } else {\n rawValue = records[i][fieldId];\n displayValue = rawValue;\n }\n\n if (rawValue !== undefined && rawValue !== null && !displayToRawMap.has(displayValue)) {\n displayToRawMap.set(displayValue, rawValue);\n }\n }\n\n // 保存显示值到原始值的映射关系\n this.displayToRawValueMap.set(fieldId, displayToRawMap);\n\n // 转换为所需格式,包含显示值、计数和原始值(count = 0 占位,后续会更新)\n const uniqueValues = Array.from(displayToRawMap.entries()).map(([displayValue, rawValue]) => ({\n value: displayValue, // UI显示的格式化值\n count: 0, // 计数占位,后续会根据筛选状态动态计算\n rawValue: rawValue // 对应的原始值\n }));\n\n this.uniqueKeys.set(fieldId, uniqueValues);\n }\n\n /**\n * 更新候选值列表的计数(基于当前筛选状态选择数据源)\n * - 未筛选列:使用当前表格数据(dataSource)计算计数\n * - 已筛选列:使用原始数据(records)计算计数\n */\n private updateCandidateCounts(fieldId: string | number): void {\n const uniqueValues = this.uniqueKeys.get(fieldId);\n if (!uniqueValues) {\n return;\n }\n\n // 判断当前列是否已启用筛选\n const filter = this.filterStateManager.getFilterState(fieldId);\n const isFiltered = filter?.enable;\n\n // 根据筛选状态选择数据源\n const dataSource = isFiltered\n ? this.table.internalProps.records // 已筛选:使用原始数据\n : this.table.internalProps.dataSource; // 未筛选:使用当前表格数据\n\n // 找到第一个匹配字段的列位置,用于获取格式化数据\n let targetCol = -1;\n for (let col = 0; col < this.table.colCount; col++) {\n for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) {\n if (!this.table.internalProps.layoutMap.isHeader(col, row)) {\n const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);\n if (bodyInfo && bodyInfo.field === fieldId) {\n targetCol = col;\n break;\n }\n }\n }\n if (targetCol !== -1) {\n break;\n }\n }\n\n // 计算每个候选值的计数\n const dataLength = dataSource.length;\n const countMap = new Map<any, number>();\n\n for (let i = 0; i < dataLength; i++) {\n let displayValue;\n if (targetCol !== -1) {\n const row = this.table.columnHeaderLevelCount + i;\n if (row < this.table.rowCount) {\n displayValue = this.table.getCellValue(targetCol, row);\n }\n } else {\n displayValue = this.table.getFieldData(\n String(fieldId),\n targetCol !== -1 ? targetCol : 0,\n this.table.columnHeaderLevelCount + i\n );\n }\n\n if (displayValue !== undefined && displayValue !== null) {\n countMap.set(displayValue, (countMap.get(displayValue) || 0) + 1);\n }\n }\n\n // 更新计数\n uniqueValues.forEach(item => {\n item.count = countMap.get(item.value) || 0;\n });\n }\n\n private onValueSelect(fieldId: string | number, displayValue: any, selected: boolean): void {\n // 获取显示值对应的原始值\n const displayToRawMap = this.displayToRawValueMap.get(fieldId);\n const rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n\n // 更新筛选状态\n const filter = this.filterStateManager.getFilterState(fieldId);\n let updatedValues: any[];\n if (!filter) {\n updatedValues = selected ? [rawValue] : [];\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: updatedValues\n }\n });\n } else {\n updatedValues = selected\n ? [...(filter.values || []), rawValue]\n : (filter.values || []).filter(v => v !== rawValue);\n this.filterStateManager.dispatch({\n type: FilterActionType.UPDATE_FILTER,\n payload: {\n field: fieldId,\n values: updatedValues\n }\n });\n }\n }\n\n /**\n * 检查值在当前搜索关键词下是否可见\n */\n private isValueVisible(displayValue: any, keyword: string): boolean {\n if (!keyword) {\n return true;\n }\n\n const filterKeywords = keyword\n .toUpperCase()\n .split(' ')\n .filter(s => s);\n\n const txtValue = String(displayValue).toUpperCase();\n return filterKeywords.some(keyword => txtValue.includes(keyword));\n }\n\n private toggleSelectAll(fieldId: string | number, selected: boolean): void {\n // 获取当前可见的值进行全选/取消全选\n const currentKeyword = this.filterStateManager.getCurrentSearchKeyword(fieldId);\n const stableCandidates = this.filterStateManager.getStableCandidateValues(fieldId);\n const displayToRawMap = this.displayToRawValueMap.get(fieldId);\n\n // 找出当前可见的所有值\n const visibleRawValues = stableCandidates\n .filter(candidate => this.isValueVisible(candidate.value, currentKeyword))\n .map(candidate => (displayToRawMap ? displayToRawMap.get(candidate.value) : candidate.value));\n\n const filter = this.filterStateManager.getFilterState(fieldId);\n const currentValues = new Set(filter?.values || []);\n\n let updatedValues: any[];\n if (selected) {\n // 全选:将可见的值添加到当前选中值中\n updatedValues = Array.from(new Set([...currentValues, ...visibleRawValues]));\n } else {\n // 取消全选:从当前选中值中移除可见的值\n updatedValues = Array.from(currentValues).filter(value => !visibleRawValues.includes(value));\n }\n\n if (!filter) {\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: updatedValues,\n enable: true\n }\n });\n } else {\n this.filterStateManager.dispatch({\n type: FilterActionType.UPDATE_FILTER,\n payload: {\n field: fieldId,\n values: updatedValues\n }\n });\n }\n }\n\n private onSearch(fieldId: string | number, value: string): void {\n // 更新 FilterStateManager 中的搜索关键词\n this.filterStateManager.updateSearchKeyword(fieldId, value);\n\n // 更新UI显示\n const items = this.valueFilterOptionList.get(fieldId);\n const filterKeywords = value\n .toUpperCase()\n .split(' ')\n .filter(s => s);\n\n for (const item of items) {\n const txtValue = item.id.toUpperCase() || '';\n const match = filterKeywords.some(keyword => txtValue.includes(keyword));\n const isVisible = filterKeywords.length === 0 || match;\n\n item.itemContainer.style.display = isVisible ? 'flex' : 'none';\n }\n }\n\n /**\n * 根据当前表格中的数据,初始化或更新 filter 的被选状态\n * 如果筛选已启用(enable=true),收集当前显示的数据作为选中项\n * 如果筛选未启用,初始化为所有值都选中\n */\n private initFilterStateFromTableData(fieldId: string | number): void {\n const filter = this.filterStateManager.getFilterState(fieldId);\n const isEnable = filter?.enable;\n\n // 如果筛选已启用,使用当前显示的数据作为选中值\n if (isEnable) {\n const selectedRawValues = new Set();\n const displayToRawMap = this.displayToRawValueMap.get(fieldId);\n\n // 找到第一个匹配字段的列位置,用于获取格式化数据\n let targetCol = -1;\n for (let col = 0; col < this.table.colCount; col++) {\n for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) {\n if (!this.table.internalProps.layoutMap.isHeader(col, row)) {\n const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);\n if (bodyInfo && bodyInfo.field === fieldId) {\n targetCol = col;\n break;\n }\n }\n }\n if (targetCol !== -1) {\n break;\n }\n }\n\n // 收集当前显示的数据对应的原始值\n const dataSource = this.table.internalProps.dataSource;\n const currentLength = dataSource.length;\n\n for (let i = 0; i < currentLength; i++) {\n let displayValue;\n let rawValue;\n if (targetCol !== -1) {\n const row = this.table.columnHeaderLevelCount + i;\n if (row < this.table.rowCount) {\n // 获取格式化显示值\n displayValue = this.table.getCellValue(targetCol, row);\n // 通过映射获取对应的原始值\n rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n }\n } else {\n displayValue = this.table.getFieldData(\n String(fieldId),\n targetCol !== -1 ? targetCol : 0,\n this.table.columnHeaderLevelCount + i\n );\n rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n }\n\n if (rawValue !== undefined && rawValue !== null) {\n selectedRawValues.add(rawValue);\n }\n }\n\n const hasChanged = !arrayEqual(filter.values, Array.from(selectedRawValues));\n if (hasChanged) {\n this.filterStateManager.dispatch({\n type: FilterActionType.UPDATE_FILTER,\n payload: {\n field: fieldId,\n values: Array.from(selectedRawValues)\n }\n });\n }\n } else {\n // 如果筛选未启用,初始化为计数>0的值都选中(但不启用筛选)\n if (!filter) {\n const availableRawValues =\n this.uniqueKeys\n .get(fieldId)\n ?.filter(item => item.count > 0) // 只选中计数>0的值\n ?.map(item => item.rawValue)\n .filter(v => v !== undefined && v !== null) || [];\n\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: availableRawValues,\n enable: false // 初始状态为未启用\n }\n });\n }\n }\n }\n\n /**\n * 根据 filter 的数据状态,更新 UI\n */\n private syncCheckboxesWithFilterState(filter: FilterConfig): void {\n if (!filter) {\n return;\n }\n const selectedRawValues = filter.values || [];\n const displayToRawMap = this.displayToRawValueMap.get(filter.field);\n const optionDomList = this.valueFilterOptionList.get(filter.field);\n\n optionDomList?.forEach(optionDom => {\n // optionDom.id 是显示值,需要转换为原始值进行比较\n const displayValue = optionDom.originalValue;\n const rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n\n // 检查原始值是否在选中的原始值列表中\n optionDom.checkbox.checked = selectedRawValues.some(v => v === rawValue);\n\n // 同步禁用状态:计数为0时禁用复选框\n const count = this.uniqueKeys.get(filter.field)?.find(key => String(key.value) === optionDom.id)?.count || 0;\n optionDom.checkbox.disabled = count === 0;\n });\n }\n\n /**\n * 根据 filter 的数据状态,更新 UI\n */\n private syncSelectAllWithFilterState(filter: FilterConfig): void {\n if (!filter || !filter.values) {\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = false;\n return;\n }\n\n const uniqueValuesCount = this.uniqueKeys.get(filter.field)?.length || 0;\n if (uniqueValuesCount === 0) {\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = false;\n } else if (filter.values.length === 0) {\n // 没有选中任何值\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = false;\n } else if (filter.values.length === uniqueValuesCount) {\n // 所有值都被选中\n this.selectAllCheckbox.checked = true;\n this.selectAllCheckbox.indeterminate = false;\n } else {\n // 部分值被选中\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = true;\n }\n }\n\n applyFilter(fieldId: string | number = this.selectedField): void {\n // 获取当前搜索过滤后可见的选中值\n const visibleSelectedKeys = Array.from(this.filterStateManager.getVisibleSelectedValues(fieldId));\n\n if (visibleSelectedKeys.length > 0 && visibleSelectedKeys.length < this.uniqueKeys.get(fieldId)?.length) {\n this.filterStateManager.dispatch({\n type: FilterActionType.APPLY_FILTERS,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: visibleSelectedKeys,\n enable: true\n }\n });\n } else {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: {\n field: fieldId\n }\n });\n }\n }\n\n clearFilter(fieldId: string | number): void {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: {\n field: fieldId\n }\n });\n\n this.hide();\n }\n\n render(container: HTMLElement): void {\n // === 按值筛选的菜单内容 ===\n this.filterByValuePanel = document.createElement('div');\n applyStyles(this.filterByValuePanel, this.styles.filterPanel);\n\n // -- 搜索栏 ---\n const searchContainer = document.createElement('div');\n applyStyles(searchContainer, this.styles.searchContainer);\n\n this.filterByValueSearchInput = document.createElement('input');\n this.filterByValueSearchInput.type = 'text';\n this.filterByValueSearchInput.placeholder = '可使用空格分隔多个关键词';\n applyStyles(this.filterByValueSearchInput, this.styles.searchInput);\n\n searchContainer.appendChild(this.filterByValueSearchInput);\n\n // --- 筛选选项 ---\n const optionsContainer = document.createElement('div');\n applyStyles(optionsContainer, this.styles.optionsContainer);\n\n const selectAllItemDiv = document.createElement('div');\n applyStyles(selectAllItemDiv, this.styles.optionItem);\n\n const selectAllLabel = document.createElement('label');\n applyStyles(selectAllLabel, this.styles.optionLabel);\n\n this.selectAllCheckbox = document.createElement('input');\n this.selectAllCheckbox.type = 'checkbox';\n this.selectAllCheckbox.checked = true; // 默认全选\n applyStyles(this.selectAllCheckbox, this.styles.checkbox);\n\n selectAllLabel.append(this.selectAllCheckbox, ' 全选');\n selectAllItemDiv.appendChild(selectAllLabel);\n\n this.filterItemsContainer = document.createElement('div'); // 筛选条目的容器,后续应动态 appendChild\n\n optionsContainer.append(selectAllItemDiv, this.filterItemsContainer);\n this.filterByValuePanel.append(searchContainer, optionsContainer);\n\n container.appendChild(this.filterByValuePanel);\n\n this.bindEventForFilterByValue();\n }\n\n private renderFilterOptions(field: string | number): void {\n this.filterItemsContainer.innerHTML = '';\n this.valueFilterOptionList.delete(field);\n this.valueFilterOptionList.set(field, []);\n\n const selectedRawValues = this.filterStateManager.getFilterState(field)?.values || [];\n // 为了优化复杂度,将原始值转换为Set进行快速查找\n const selectedRawValueSet = new Set(selectedRawValues);\n\n const itemDomList: ValueFilterOptionDom[] = [];\n this.uniqueKeys.get(field)?.forEach(({ value, count, rawValue }) => {\n const itemDiv = document.createElement('div');\n applyStyles(itemDiv, this.styles.optionItem);\n itemDiv.style.display = 'flex';\n\n const label = document.createElement('label');\n applyStyles(label, this.styles.optionLabel);\n\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.value = String(value); // 显示值作为checkbox的value\n // 使用原始值进行选中状态判断,优化为O(1)复杂度\n checkbox.checked = selectedRawValueSet.has(rawValue);\n // 计数为0时禁用复选框(不可选中)\n checkbox.disabled = count === 0;\n applyStyles(checkbox, this.styles.checkbox);\n\n const countSpan = document.createElement('span');\n countSpan.textContent = String(count);\n applyStyles(countSpan, this.styles.countSpan);\n\n label.append(checkbox, ` ${value}`); // UI显示格式化值\n itemDiv.append(label, countSpan);\n this.filterItemsContainer.appendChild(itemDiv);\n\n const itemDom: ValueFilterOptionDom = {\n id: String(value), // 显示值作为id,用于UI交互\n originalValue: value,\n itemContainer: itemDiv,\n checkbox: checkbox,\n countSpan: countSpan\n };\n\n itemDomList.push(itemDom);\n });\n\n this.valueFilterOptionList.set(field, itemDomList);\n }\n\n bindEventForFilterByValue(): void {\n // 事件委托:搜索框的 keyup 事件\n this.filterByValuePanel.addEventListener('keyup', (event: KeyboardEvent) => {\n const target = event.target;\n if (target instanceof HTMLInputElement && target.type === 'text') {\n const value = target.value;\n this.onSearch(this.selectedField, value);\n }\n });\n\n // 事件委托:复选框的 change 事件\n this.filterByValuePanel.addEventListener('change', (event: Event) => {\n const target = event.target;\n if (target instanceof HTMLInputElement && target.type === 'checkbox') {\n if (target === this.selectAllCheckbox) {\n this.toggleSelectAll(this.selectedField, this.selectAllCheckbox.checked);\n } else {\n const checkbox = target;\n const checked = checkbox.checked;\n const value = this.valueFilterOptionList\n .get(this.selectedField)\n ?.find(item => item.id === checkbox.value)?.originalValue;\n this.onValueSelect(this.selectedField, value, checked);\n }\n }\n });\n }\n\n show(): void {\n // 1. 收集候选值(来自原始数据)\n this.collectUniqueColumnValues(this.selectedField);\n\n // 2. 更新计数(根据筛选状态选择数据源)\n this.updateCandidateCounts(this.selectedField);\n\n // 3. 初始化筛选状态(必须在 renderFilterOptions 之前执行)\n this.initFilterStateFromTableData(this.selectedField);\n\n // 4. 初始化筛选菜单状态,确保候选值列表稳定,并清空搜索关键词\n const uniqueValues = this.uniqueKeys.get(this.selectedField);\n const displayToRawMap = this.displayToRawValueMap.get(this.selectedField);\n if (uniqueValues && displayToRawMap) {\n this.filterStateManager.initializeFilterMenuState(this.selectedField, uniqueValues, displayToRawMap);\n }\n\n // 5. 清空搜索框\n if (this.filterByValueSearchInput) {\n this.filterByValueSearchInput.value = '';\n }\n\n // 6. 渲染选项(此时状态已经初始化完成)\n this.renderFilterOptions(this.selectedField);\n this.filterByValuePanel.style.display = 'block';\n }\n\n hide(): void {\n this.filterByValuePanel.style.display = 'none';\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/filter/value-filter.ts"],"names":[],"mappings":";;;AACA,6CAA8C;AAE9C,mCAA2C;AAE3C,qCAAqD;AAErD,MAAa,WAAW;IAatB,YAAY,KAA6B,EAAE,kBAAsC;QAVzE,eAAU,GAAG,IAAI,GAAG,EAAwE,CAAC;QAC7F,yBAAoB,GAAG,IAAI,GAAG,EAAkC,CAAC;QAGjE,0BAAqB,GAAiD,IAAI,GAAG,EAAE,CAAC;QAOtF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAE7C,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,KAAkB,EAAE,EAAE;YACvD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE;gBACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,WAAyB;QACxC,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,OAAwB;QACvC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,yBAAyB,CAAC,OAAwB;;QAChD,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,0CAAE,MAAM,CAAC;QACzE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAe,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAY,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAY,CAAC;QAG5C,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAClD,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;gBAClF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;oBAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACtE,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,EAAE;wBAC1C,SAAS,GAAG,GAAG,CAAC;wBAChB,SAAS,GAAG,GAAG,CAAC;wBAChB,MAAM;qBACP;iBACF;aACF;YACD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;gBACpB,MAAM;aACP;SACF;QAED,IAAI,QAAQ,EAAE;YAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;YACjD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,QAAQ,CAAC;gBACb,IAAI,YAAY,CAAC;gBACjB,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;oBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC;oBAClD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAEjC,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;oBAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC5E,IACE,QAAQ;wBACR,aAAa,IAAI,QAAQ;wBACzB,QAAQ,CAAC,WAAW;wBACpB,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU,EAC1C;wBAEA,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAC9D;yBAAM;wBACL,YAAY,GAAG,QAAQ,CAAC;qBACzB;iBACF;gBAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;oBAC/C,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChF,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;oBAC5C,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;iBAC7C;aACF;SACF;aAAM;YAEL,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;YACvD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;YAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,QAAQ,CAAC;gBACb,IAAI,YAAY,CAAC;gBACjB,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;oBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC;oBAClD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;wBAE7B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;wBAEzD,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;qBACxD;iBACF;qBAAM;oBACL,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAChC,MAAM,CAAC,OAAO,CAAC,EACf,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAChC,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CACtC,CAAC;oBACF,YAAY,GAAG,QAAQ,CAAC;iBACzB;gBAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;oBAC/C,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChF,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;oBAC5C,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;iBAC7C;aACF;SACF;QAGD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAGxD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACzF,KAAK,EAAE,YAAY;YACnB,KAAK;YACL,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;SAC5C,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IAEO,aAAa,CAAC,OAAwB,EAAE,YAAiB,EAAE,QAAiB;QAElF,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAEpF,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,UAAU;gBACjC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,CAAC,QAAQ,CAAC;iBACnB;aACF,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,aAAa,GAAG,QAAQ;gBAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;gBACtC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,aAAa;gBACpC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,MAAM,EAAE,aAAa;iBACtB;aACF,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,eAAe,CAAC,OAAwB,EAAE,QAAiB;;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,0CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,UAAU;gBACjC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,aAAa;gBACpC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,MAAM,EAAE,aAAa;iBACtB;aACF,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,QAAQ,CAAC,OAAwB,EAAE,KAAa;QACtD,MAAM,cAAc,GAAG,KAAK;aACzB,WAAW,EAAE;aACb,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;SAC3F;IACH,CAAC;IAKO,4BAA4B,CAAC,OAAwB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAG/D,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAClD,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;gBAClF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;oBAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACtE,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,EAAE;wBAC1C,SAAS,GAAG,GAAG,CAAC;wBAChB,MAAM;qBACP;iBACF;aACF;YACD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;gBACpB,MAAM;aACP;SACF;QAGD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;QACvD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,YAAY,CAAC;YACjB,IAAI,QAAQ,CAAC;YACb,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC;gBAClD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAE7B,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAEvD,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;iBAC/E;aACF;iBAAM;gBACL,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CACpC,MAAM,CAAC,OAAO,CAAC,EACf,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAChC,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CACtC,CAAC;gBACF,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;aAC/E;YAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;gBAC/C,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACjC;SACF;QAED,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,IAAA,mBAAU,EAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QACD,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,aAAa;gBACpC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;iBACtC;aACF,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,UAAU;gBACjC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;iBACtC;aACF,CAAC,CAAC;SACJ;IACH,CAAC;IAKO,6BAA6B,CAAC,MAAoB;QACxD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAC,SAAS,CAAC,EAAE;;YAEjC,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC;YAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAGpF,SAAS,CAAC,QAAQ,CAAC,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;YAEzE,MAAM,KAAK,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,0CAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC,0CAAE,KAAK,KAAI,CAAC,CAAC;YAC7G,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAKO,4BAA4B,CAAC,MAAoB;;QACvD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAC;YAC7C,OAAO;SACR;QAED,MAAM,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,0CAAE,MAAM,KAAI,CAAC,CAAC;QACzE,IAAI,iBAAiB,KAAK,CAAC,EAAE;YAC3B,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9C;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAErC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9C;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,iBAAiB,EAAE;YAErD,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9C;aAAM;YAEL,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7C;IACH,CAAC;IAED,WAAW,CAAC,UAA2B,IAAI,CAAC,aAAa;;QACvD,MAAM,YAAY,GAAG,CAAA,MAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,0CAAE,MAAM,KAAI,EAAE,CAAC;QACnF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,IAAG,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,0CAAE,MAAM,CAAA,EAAE;YACzF,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,aAAa;gBACpC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,wBAAgB,CAAC,aAAa;gBACpC,OAAO,EAAE;oBACP,KAAK,EAAE,OAAO;iBACf;aACF,CAAC,CAAC;SACJ;IACH,CAAC;IAED,WAAW,CAAC,OAAwB;QAClC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YAC/B,IAAI,EAAE,wBAAgB,CAAC,aAAa;YACpC,OAAO,EAAE;gBACP,KAAK,EAAE,OAAO;aACf;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,MAAM,CAAC,SAAsB;QAE3B,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,IAAA,oBAAW,EAAC,IAAI,CAAC,kBAAkB,EAAE,qBAAY,CAAC,WAAW,CAAC,CAAC;QAG/D,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtD,IAAA,oBAAW,EAAC,eAAe,EAAE,qBAAY,CAAC,eAAe,CAAC,CAAC;QAE3D,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,wBAAwB,CAAC,IAAI,GAAG,MAAM,CAAC;QAC5C,IAAI,CAAC,wBAAwB,CAAC,WAAW,GAAG,cAAc,CAAC;QAC3D,IAAA,oBAAW,EAAC,IAAI,CAAC,wBAAwB,EAAE,qBAAY,CAAC,WAAW,CAAC,CAAC;QAErE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAG3D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAA,oBAAW,EAAC,gBAAgB,EAAE,qBAAY,CAAC,gBAAgB,CAAC,CAAC;QAE7D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAA,oBAAW,EAAC,gBAAgB,EAAE,qBAAY,CAAC,UAAU,CAAC,CAAC;QAEvD,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,IAAA,oBAAW,EAAC,cAAc,EAAE,qBAAY,CAAC,WAAW,CAAC,CAAC;QAEtD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,UAAU,CAAC;QACzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;QACtC,IAAA,oBAAW,EAAC,IAAI,CAAC,iBAAiB,EAAE,qBAAY,CAAC,QAAQ,CAAC,CAAC;QAE3D,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACrD,gBAAgB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE7C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1D,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAElE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE/C,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAEO,mBAAmB,CAAC,KAAsB;;QAChD,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE1C,MAAM,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,0CAAE,MAAM,KAAI,EAAE,CAAC;QAEtF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEvD,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,MAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,0CAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAA,oBAAW,EAAC,OAAO,EAAE,qBAAY,CAAC,UAAU,CAAC,CAAC;YAE9C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAA,oBAAW,EAAC,KAAK,EAAE,qBAAY,CAAC,WAAW,CAAC,CAAC;YAE7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACjD,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;YAC3B,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAE/B,QAAQ,CAAC,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAA,oBAAW,EAAC,QAAQ,EAAE,qBAAY,CAAC,QAAQ,CAAC,CAAC;YAE7C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACjD,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACtC,IAAA,oBAAW,EAAC,SAAS,EAAE,qBAAY,CAAC,SAAS,CAAC,CAAC;YAE/C,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAyB;gBACpC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;gBACjB,aAAa,EAAE,KAAK;gBACpB,aAAa,EAAE,OAAO;gBACtB,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,SAAS;aACrB,CAAC;YAEF,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,yBAAyB;QAEvB,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAoB,EAAE,EAAE;YACzE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,MAAM,YAAY,gBAAgB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;gBAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;aAC1C;QACH,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAY,EAAE,EAAE;;YAClE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,MAAM,YAAY,gBAAgB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;gBACpE,IAAI,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE;oBACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;iBAC1E;qBAAM;oBACL,MAAM,QAAQ,GAAG,MAAM,CAAC;oBACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;oBACjC,MAAM,KAAK,GAAG,MAAA,MAAA,IAAI,CAAC,qBAAqB;yBACrC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,0CACtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAC,0CAAE,aAAa,CAAC;oBAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;iBACxD;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAClD,CAAC;IAED,IAAI;QACF,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACjD,CAAC;CACF;AAtfD,kCAsfC","file":"value-filter.js","sourcesContent":["import type { ListTable, PivotTable } from '@visactor/vtable';\nimport { arrayEqual } from '@visactor/vutils';\nimport type { FilterConfig, ValueFilterOptionDom, FilterState } from './types';\nimport { FilterActionType } from './types';\nimport type { FilterStateManager } from './filter-state-manager';\nimport { applyStyles, filterStyles } from './styles';\n\nexport class ValueFilter {\n private table: ListTable | PivotTable;\n private filterStateManager: FilterStateManager;\n private uniqueKeys = new Map<string | number, Array<{ value: any; count: number; rawValue: any }>>();\n private displayToRawValueMap = new Map<string | number, Map<any, any>>();\n private selectedField: string | number;\n\n private valueFilterOptionList: Map<string | number, ValueFilterOptionDom[]> = new Map();\n private filterByValuePanel: HTMLElement;\n private filterByValueSearchInput: HTMLInputElement;\n private selectAllCheckbox: HTMLInputElement;\n private filterItemsContainer: HTMLElement;\n\n constructor(table: ListTable | PivotTable, filterStateManager: FilterStateManager) {\n this.table = table;\n this.filterStateManager = filterStateManager;\n\n this.filterStateManager.subscribe((state: FilterState) => {\n const filterState = state.filters.get(this.selectedField);\n if (filterState && filterState.type === 'byValue') {\n this.updateUI(filterState);\n }\n });\n }\n\n private updateUI(filterState: FilterConfig): void {\n this.syncCheckboxesWithFilterState(filterState);\n this.syncSelectAllWithFilterState(filterState);\n }\n\n setSelectedField(fieldId: string | number): void {\n this.selectedField = fieldId;\n this.collectUniqueColumnValues(fieldId);\n }\n\n collectUniqueColumnValues(fieldId: string | number): void {\n const isEnable = this.filterStateManager.getFilterState(fieldId)?.enable;\n const displayValueMap = new Map<any, number>();\n const rawToDisplayMap = new Map<any, any>();\n const displayToRawMap = new Map<any, any>();\n\n // 找到第一个匹配字段的列位置,用于获取格式化数据\n let targetCol = -1;\n let targetRow = -1;\n for (let col = 0; col < this.table.colCount; col++) {\n for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) {\n if (!this.table.internalProps.layoutMap.isHeader(col, row)) {\n const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);\n if (bodyInfo && bodyInfo.field === fieldId) {\n targetCol = col;\n targetRow = row;\n break;\n }\n }\n }\n if (targetCol !== -1) {\n break;\n }\n }\n\n if (isEnable) {\n // 如果已应用筛选,则从原始数据收集\n const records = this.table.internalProps.records;\n const recordsLength = records.length;\n\n for (let i = 0; i < recordsLength; i++) {\n let rawValue;\n let displayValue;\n if (targetCol !== -1) {\n const row = this.table.columnHeaderLevelCount + i;\n const currentRecord = records[i];\n // 获取原始数据\n rawValue = currentRecord[fieldId];\n // 获取格式化显示数据\n const bodyInfo = this.table.internalProps.layoutMap.getBody(targetCol, row);\n if (\n bodyInfo &&\n 'fieldFormat' in bodyInfo &&\n bodyInfo.fieldFormat &&\n typeof bodyInfo.fieldFormat === 'function'\n ) {\n // displayValue = bodyInfo.fieldFormat(rawValue, targetCol, row, this.table);\n displayValue = bodyInfo.fieldFormat({ [fieldId]: rawValue });\n } else {\n displayValue = rawValue;\n }\n }\n\n if (rawValue !== undefined && rawValue !== null) {\n displayValueMap.set(displayValue, (displayValueMap.get(displayValue) || 0) + 1);\n rawToDisplayMap.set(rawValue, displayValue);\n displayToRawMap.set(displayValue, rawValue);\n }\n }\n } else {\n // 如果未筛选,则从当前表格数据收集\n const dataSource = this.table.internalProps.dataSource;\n const currentLength = dataSource.length;\n\n for (let i = 0; i < currentLength; i++) {\n let rawValue;\n let displayValue;\n if (targetCol !== -1) {\n const row = this.table.columnHeaderLevelCount + i;\n if (row < this.table.rowCount) {\n // 获取原始数据\n rawValue = this.table.getCellOriginValue(targetCol, row);\n // 获取格式化显示数据\n displayValue = this.table.getCellValue(targetCol, row);\n }\n } else {\n rawValue = this.table.getFieldData(\n String(fieldId),\n targetCol !== -1 ? targetCol : 0,\n this.table.columnHeaderLevelCount + i\n );\n displayValue = rawValue; // 如果没有格式化函数,显示值等于原始值\n }\n\n if (rawValue !== undefined && rawValue !== null) {\n displayValueMap.set(displayValue, (displayValueMap.get(displayValue) || 0) + 1);\n rawToDisplayMap.set(rawValue, displayValue);\n displayToRawMap.set(displayValue, rawValue);\n }\n }\n }\n\n // 保存显示值到原始值的映射关系\n this.displayToRawValueMap.set(fieldId, displayToRawMap);\n\n // 转换为所需格式,包含显示值、计数和原始值\n const uniqueValues = Array.from(displayValueMap.entries()).map(([displayValue, count]) => ({\n value: displayValue, // UI显示的格式化值\n count,\n rawValue: displayToRawMap.get(displayValue) // 对应的原始值\n }));\n\n this.uniqueKeys.set(fieldId, uniqueValues);\n }\n\n private onValueSelect(fieldId: string | number, displayValue: any, selected: boolean): void {\n // 获取显示值对应的原始值\n const displayToRawMap = this.displayToRawValueMap.get(fieldId);\n const rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n\n const filter = this.filterStateManager.getFilterState(fieldId);\n if (!filter) {\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: [rawValue] // 使用原始值\n }\n });\n } else {\n const updatedValues = selected\n ? [...(filter.values || []), rawValue] // 使用原始值\n : (filter.values || []).filter(v => v !== rawValue); // 使用原始值进行比较\n this.filterStateManager.dispatch({\n type: FilterActionType.UPDATE_FILTER,\n payload: {\n field: fieldId,\n values: updatedValues\n }\n });\n }\n }\n\n private toggleSelectAll(fieldId: string | number, selected: boolean): void {\n const filter = this.filterStateManager.getFilterState(fieldId);\n // 获取所有原始值用于全选/取消全选\n const rawValuesToUpdate = selected ? this.uniqueKeys.get(fieldId)?.map(item => item.rawValue) || [] : [];\n if (!filter) {\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: rawValuesToUpdate, // 使用原始值\n enable: true\n }\n });\n } else {\n const updatedValues = selected ? rawValuesToUpdate : [];\n this.filterStateManager.dispatch({\n type: FilterActionType.UPDATE_FILTER,\n payload: {\n field: fieldId,\n values: updatedValues // 使用原始值\n }\n });\n }\n }\n\n private onSearch(fieldId: string | number, value: string): void {\n const filterKeywords = value\n .toUpperCase()\n .split(' ')\n .filter(s => s);\n const items = this.valueFilterOptionList.get(fieldId);\n\n for (const item of items) {\n const txtValue = item.id.toUpperCase() || '';\n const match = filterKeywords.some(keyword => txtValue.includes(keyword));\n item.itemContainer.style.display = filterKeywords.length === 0 || match ? 'flex' : 'none';\n }\n }\n\n /**\n * 根据当前表格中的数据,更新 filter 的被选状态 selectedKeys\n */\n private initFilterStateFromTableData(fieldId: string | number): void {\n const filter = this.filterStateManager.getFilterState(fieldId);\n const selectedRawValues = new Set();\n const displayToRawMap = this.displayToRawValueMap.get(fieldId);\n\n // 找到第一个匹配字段的列位置,用于获取格式化数据\n let targetCol = -1;\n for (let col = 0; col < this.table.colCount; col++) {\n for (let row = this.table.columnHeaderLevelCount; row < this.table.rowCount; row++) {\n if (!this.table.internalProps.layoutMap.isHeader(col, row)) {\n const bodyInfo = this.table.internalProps.layoutMap.getBody(col, row);\n if (bodyInfo && bodyInfo.field === fieldId) {\n targetCol = col;\n break;\n }\n }\n }\n if (targetCol !== -1) {\n break;\n }\n }\n\n // 收集当前显示的数据对应的原始值\n const dataSource = this.table.internalProps.dataSource;\n const currentLength = dataSource.length;\n\n for (let i = 0; i < currentLength; i++) {\n let displayValue;\n let rawValue;\n if (targetCol !== -1) {\n const row = this.table.columnHeaderLevelCount + i;\n if (row < this.table.rowCount) {\n // 获取格式化显示值\n displayValue = this.table.getCellValue(targetCol, row);\n // 通过映射获取对应的原始值\n rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n }\n } else {\n displayValue = this.table.getFieldData(\n String(fieldId),\n targetCol !== -1 ? targetCol : 0,\n this.table.columnHeaderLevelCount + i\n );\n rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n }\n\n if (rawValue !== undefined && rawValue !== null) {\n selectedRawValues.add(rawValue);\n }\n }\n\n const hasChanged = !filter || !arrayEqual(filter.values, Array.from(selectedRawValues));\n if (!hasChanged) {\n return;\n }\n if (filter) {\n this.filterStateManager.dispatch({\n type: FilterActionType.UPDATE_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: Array.from(selectedRawValues) // 使用原始值\n }\n });\n } else {\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: Array.from(selectedRawValues) // 使用原始值\n }\n });\n }\n }\n\n /**\n * 根据 filter 的数据状态,更新 UI\n */\n private syncCheckboxesWithFilterState(filter: FilterConfig): void {\n if (!filter) {\n return;\n }\n const selectedRawValues = filter.values || [];\n const displayToRawMap = this.displayToRawValueMap.get(filter.field);\n const optionDomList = this.valueFilterOptionList.get(filter.field);\n\n optionDomList?.forEach(optionDom => {\n // optionDom.id 是显示值,需要转换为原始值进行比较\n const displayValue = optionDom.originalValue;\n const rawValue = displayToRawMap ? displayToRawMap.get(displayValue) : displayValue;\n\n // 检查原始值是否在选中的原始值列表中\n optionDom.checkbox.checked = selectedRawValues.some(v => v === rawValue);\n\n const count = this.uniqueKeys.get(filter.field)?.find(key => String(key.value) === optionDom.id)?.count || 0;\n optionDom.countSpan.textContent = String(count);\n optionDom.itemContainer.style.display = count === 0 ? 'none' : 'flex';\n });\n }\n\n /**\n * 根据 filter 的数据状态,更新 UI\n */\n private syncSelectAllWithFilterState(filter: FilterConfig): void {\n if (!filter || !filter.values) {\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = false;\n return;\n }\n\n const uniqueValuesCount = this.uniqueKeys.get(filter.field)?.length || 0;\n if (uniqueValuesCount === 0) {\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = false;\n } else if (filter.values.length === 0) {\n // 没有选中任何值\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = false;\n } else if (filter.values.length === uniqueValuesCount) {\n // 所有值都被选中\n this.selectAllCheckbox.checked = true;\n this.selectAllCheckbox.indeterminate = false;\n } else {\n // 部分值被选中\n this.selectAllCheckbox.checked = false;\n this.selectAllCheckbox.indeterminate = true;\n }\n }\n\n applyFilter(fieldId: string | number = this.selectedField): void {\n const selectedKeys = this.filterStateManager.getFilterState(fieldId)?.values || [];\n if (selectedKeys.length > 0 && selectedKeys.length < this.uniqueKeys.get(fieldId)?.length) {\n this.filterStateManager.dispatch({\n type: FilterActionType.APPLY_FILTERS,\n payload: {\n field: fieldId,\n type: 'byValue',\n values: selectedKeys,\n enable: true\n }\n });\n } else {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: {\n field: fieldId\n }\n });\n }\n }\n\n clearFilter(fieldId: string | number): void {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: {\n field: fieldId\n }\n });\n\n this.hide();\n }\n\n render(container: HTMLElement): void {\n // === 按值筛选的菜单内容 ===\n this.filterByValuePanel = document.createElement('div');\n applyStyles(this.filterByValuePanel, filterStyles.filterPanel);\n\n // -- 搜索栏 ---\n const searchContainer = document.createElement('div');\n applyStyles(searchContainer, filterStyles.searchContainer);\n\n this.filterByValueSearchInput = document.createElement('input');\n this.filterByValueSearchInput.type = 'text';\n this.filterByValueSearchInput.placeholder = '可使用空格分隔多个关键词';\n applyStyles(this.filterByValueSearchInput, filterStyles.searchInput);\n\n searchContainer.appendChild(this.filterByValueSearchInput);\n\n // --- 筛选选项 ---\n const optionsContainer = document.createElement('div');\n applyStyles(optionsContainer, filterStyles.optionsContainer);\n\n const selectAllItemDiv = document.createElement('div');\n applyStyles(selectAllItemDiv, filterStyles.optionItem);\n\n const selectAllLabel = document.createElement('label');\n applyStyles(selectAllLabel, filterStyles.optionLabel);\n\n this.selectAllCheckbox = document.createElement('input');\n this.selectAllCheckbox.type = 'checkbox';\n this.selectAllCheckbox.checked = true; // 默认全选\n applyStyles(this.selectAllCheckbox, filterStyles.checkbox);\n\n selectAllLabel.append(this.selectAllCheckbox, ' 全选');\n selectAllItemDiv.appendChild(selectAllLabel);\n\n this.filterItemsContainer = document.createElement('div'); // 筛选条目的容器,后续应动态 appendChild\n\n optionsContainer.append(selectAllItemDiv, this.filterItemsContainer);\n this.filterByValuePanel.append(searchContainer, optionsContainer);\n\n container.appendChild(this.filterByValuePanel);\n\n this.bindEventForFilterByValue();\n }\n\n private renderFilterOptions(field: string | number): void {\n this.filterItemsContainer.innerHTML = '';\n this.valueFilterOptionList.delete(field);\n this.valueFilterOptionList.set(field, []);\n\n const selectedRawValues = this.filterStateManager.getFilterState(field)?.values || [];\n // 为了优化复杂度,将原始值转换为Set进行快速查找\n const selectedRawValueSet = new Set(selectedRawValues);\n\n const itemDomList: ValueFilterOptionDom[] = [];\n this.uniqueKeys.get(field)?.forEach(({ value, count, rawValue }) => {\n const itemDiv = document.createElement('div');\n applyStyles(itemDiv, filterStyles.optionItem);\n\n const label = document.createElement('label');\n applyStyles(label, filterStyles.optionLabel);\n\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.value = String(value); // 显示值作为checkbox的value\n // 使用原始值进行选中状态判断,优化为O(1)复杂度\n checkbox.checked = selectedRawValueSet.has(rawValue);\n applyStyles(checkbox, filterStyles.checkbox);\n\n const countSpan = document.createElement('span');\n countSpan.textContent = String(count);\n applyStyles(countSpan, filterStyles.countSpan);\n\n label.append(checkbox, ` ${value}`); // UI显示格式化值\n itemDiv.append(label, countSpan);\n this.filterItemsContainer.appendChild(itemDiv);\n\n const itemDom: ValueFilterOptionDom = {\n id: String(value), // 显示值作为id,用于UI交互\n originalValue: value,\n itemContainer: itemDiv,\n checkbox: checkbox,\n countSpan: countSpan\n };\n\n itemDomList.push(itemDom);\n });\n\n this.valueFilterOptionList.set(field, itemDomList);\n }\n\n bindEventForFilterByValue(): void {\n // 事件委托:搜索框的 keyup 事件\n this.filterByValuePanel.addEventListener('keyup', (event: KeyboardEvent) => {\n const target = event.target;\n if (target instanceof HTMLInputElement && target.type === 'text') {\n const value = target.value;\n this.onSearch(this.selectedField, value);\n }\n });\n\n // 事件委托:复选框的 change 事件\n this.filterByValuePanel.addEventListener('change', (event: Event) => {\n const target = event.target;\n if (target instanceof HTMLInputElement && target.type === 'checkbox') {\n if (target === this.selectAllCheckbox) {\n this.toggleSelectAll(this.selectedField, this.selectAllCheckbox.checked);\n } else {\n const checkbox = target;\n const checked = checkbox.checked;\n const value = this.valueFilterOptionList\n .get(this.selectedField)\n ?.find(item => item.id === checkbox.value)?.originalValue;\n this.onValueSelect(this.selectedField, value, checked);\n }\n }\n });\n }\n\n show(): void {\n this.initFilterStateFromTableData(this.selectedField);\n this.renderFilterOptions(this.selectedField);\n this.filterByValuePanel.style.display = 'block';\n }\n\n hide(): void {\n this.filterByValuePanel.style.display = 'none';\n }\n}\n"]}
@@ -16,7 +16,6 @@ export declare class ExportGanttPlugin implements IGanttPlugin {
16
16
  id: string;
17
17
  name: string;
18
18
  private _gantt;
19
- constructor();
20
19
  run(...args: any[]): void;
21
20
  exportToImage(options?: ExportOptions): Promise<string | undefined>;
22
21
  exportToBase64(options?: Omit<ExportOptions, 'download'>): Promise<string | undefined>;
@@ -53,18 +53,11 @@ Object.defineProperty(exports, "__esModule", {
53
53
  value: !0
54
54
  }), exports.ExportGanttPlugin = void 0;
55
55
 
56
- const vrender_1 = require("@visactor/vtable/es/vrender"), checkGanttDependency = () => {
57
- try {
58
- return require.resolve("@visactor/vtable-gantt"), !0;
59
- } catch (e) {
60
- return !1;
61
- }
62
- };
56
+ const vrender_1 = require("@visactor/vtable/es/vrender");
63
57
 
64
58
  class ExportGanttPlugin {
65
59
  constructor() {
66
- this.id = "gantt-export-helper", this.name = "Gantt Export Helper", this._gantt = null,
67
- checkGanttDependency();
60
+ this.id = "gantt-export-helper", this.name = "Gantt Export Helper", this._gantt = null;
68
61
  }
69
62
  run(...args) {
70
63
  const ganttInstance = args[0];
@@ -73,7 +66,6 @@ class ExportGanttPlugin {
73
66
  exportToImage(options = {}) {
74
67
  var _a;
75
68
  return __awaiter(this, void 0, void 0, (function*() {
76
- if (!checkGanttDependency()) return;
77
69
  if (!this._gantt) return;
78
70
  const {fileName: fileName = "gantt-export", type: type = "png", quality: quality = 1, backgroundColor: backgroundColor = "#ffffff", scale: scale = window.devicePixelRatio || 1, download: download = !0} = options;
79
71
  try {