@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.
- package/cjs/auto-fill/rules.js +2 -1
- package/cjs/contextmenu/menu-manager.js +1 -2
- package/cjs/filter/condition-filter.d.ts +1 -3
- package/cjs/filter/condition-filter.js +20 -20
- package/cjs/filter/condition-filter.js.map +1 -1
- package/cjs/filter/filter-state-manager.d.ts +0 -14
- package/cjs/filter/filter-state-manager.js +1 -35
- package/cjs/filter/filter-state-manager.js.map +1 -1
- package/cjs/filter/filter-toolbar.d.ts +5 -4
- package/cjs/filter/filter-toolbar.js +30 -30
- package/cjs/filter/filter-toolbar.js.map +1 -1
- package/cjs/filter/filter.d.ts +4 -3
- package/cjs/filter/filter.js +15 -19
- package/cjs/filter/filter.js.map +1 -1
- package/cjs/filter/styles.d.ts +124 -2
- package/cjs/filter/styles.js.map +1 -1
- package/cjs/filter/types.d.ts +0 -27
- package/cjs/filter/types.js.map +1 -1
- package/cjs/filter/value-filter.d.ts +1 -5
- package/cjs/filter/value-filter.js +118 -145
- package/cjs/filter/value-filter.js.map +1 -1
- package/cjs/gantt-export-image.d.ts +0 -1
- package/cjs/gantt-export-image.js +2 -10
- package/cjs/gantt-export-image.js.map +1 -1
- package/cjs/master-detail-plugin/config.js +2 -2
- package/cjs/master-detail-plugin/config.js.map +1 -1
- package/cjs/table-export/csv/index.js +1 -1
- package/cjs/table-export/csv/index.js.map +1 -1
- package/dist/vtable-plugins.js +211 -9794
- package/dist/vtable-plugins.min.js +3 -3
- package/es/auto-fill/rules.js +2 -1
- package/es/contextmenu/menu-manager.js +1 -2
- package/es/filter/condition-filter.d.ts +1 -3
- package/es/filter/condition-filter.js +14 -14
- package/es/filter/condition-filter.js.map +1 -1
- package/es/filter/filter-state-manager.d.ts +0 -14
- package/es/filter/filter-state-manager.js +1 -35
- package/es/filter/filter-state-manager.js.map +1 -1
- package/es/filter/filter-toolbar.d.ts +5 -4
- package/es/filter/filter-toolbar.js +28 -29
- package/es/filter/filter-toolbar.js.map +1 -1
- package/es/filter/filter.d.ts +4 -3
- package/es/filter/filter.js +13 -21
- package/es/filter/filter.js.map +1 -1
- package/es/filter/styles.d.ts +124 -2
- package/es/filter/styles.js.map +1 -1
- package/es/filter/types.d.ts +0 -27
- package/es/filter/types.js.map +1 -1
- package/es/filter/value-filter.d.ts +1 -5
- package/es/filter/value-filter.js +118 -145
- package/es/filter/value-filter.js.map +1 -1
- package/es/gantt-export-image.d.ts +0 -1
- package/es/gantt-export-image.js +1 -11
- package/es/gantt-export-image.js.map +1 -1
- package/es/master-detail-plugin/config.js +2 -2
- package/es/master-detail-plugin/config.js.map +1 -1
- package/es/table-export/csv/index.js +1 -1
- package/es/table-export/csv/index.js.map +1 -1
- package/package.json +8 -8
package/cjs/filter/filter.d.ts
CHANGED
|
@@ -2,13 +2,14 @@ import { FilterEngine } from './filter-engine';
|
|
|
2
2
|
import { FilterStateManager } from './filter-state-manager';
|
|
3
3
|
import { FilterToolbar } from './filter-toolbar';
|
|
4
4
|
import type { FilterOptions, FilterState } from './types';
|
|
5
|
-
import type { pluginsDefinition, ListTable, PivotTable, ColumnDefine } from '@visactor/vtable';
|
|
5
|
+
import type { pluginsDefinition, ListTable, PivotTable, ColumnDefine, ColumnsDefine } from '@visactor/vtable';
|
|
6
6
|
export declare class FilterPlugin implements pluginsDefinition.IVTablePlugin {
|
|
7
7
|
id: string;
|
|
8
8
|
name: string;
|
|
9
|
-
runTime: ("icon_click" | "before_init" | "before_update_option")[];
|
|
9
|
+
runTime: ("scroll" | "icon_click" | "before_init" | "before_update_option")[];
|
|
10
10
|
pluginOptions: FilterOptions;
|
|
11
11
|
table: ListTable | PivotTable;
|
|
12
|
+
columns: ColumnsDefine;
|
|
12
13
|
filterEngine: FilterEngine;
|
|
13
14
|
filterStateManager: FilterStateManager;
|
|
14
15
|
filterToolbar: FilterToolbar;
|
|
@@ -21,6 +22,6 @@ export declare class FilterPlugin implements pluginsDefinition.IVTablePlugin {
|
|
|
21
22
|
private updateFilterIcons;
|
|
22
23
|
shouldEnableFilterForColumn(field: number | string, column: ColumnDefine): boolean;
|
|
23
24
|
getFilterState(): any;
|
|
24
|
-
setFilterState(filterState
|
|
25
|
+
setFilterState(filterState?: FilterState): void;
|
|
25
26
|
release(): void;
|
|
26
27
|
}
|
package/cjs/filter/filter.js
CHANGED
|
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.FilterPlugin = void 0;
|
|
6
6
|
|
|
7
|
-
const vtable_1 = require("@visactor/vtable"), filter_engine_1 = require("./filter-engine"), filter_state_manager_1 = require("./filter-state-manager"), filter_toolbar_1 = require("./filter-toolbar"), types_1 = require("./types")
|
|
7
|
+
const vtable_1 = require("@visactor/vtable"), filter_engine_1 = require("./filter-engine"), filter_state_manager_1 = require("./filter-state-manager"), filter_toolbar_1 = require("./filter-toolbar"), types_1 = require("./types");
|
|
8
8
|
|
|
9
9
|
class FilterPlugin {
|
|
10
10
|
constructor(pluginOptions) {
|
|
11
11
|
var _a, _b, _c;
|
|
12
|
-
this.id = "filter", this.name = "Filter", this.runTime = [ vtable_1.TABLE_EVENT_TYPE.BEFORE_INIT, vtable_1.TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION, vtable_1.TABLE_EVENT_TYPE.ICON_CLICK ],
|
|
12
|
+
this.id = "filter", this.name = "Filter", this.runTime = [ vtable_1.TABLE_EVENT_TYPE.BEFORE_INIT, vtable_1.TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION, vtable_1.TABLE_EVENT_TYPE.ICON_CLICK, vtable_1.TABLE_EVENT_TYPE.SCROLL ],
|
|
13
13
|
this.id = null !== (_a = null == pluginOptions ? void 0 : pluginOptions.id) && void 0 !== _a ? _a : this.id,
|
|
14
14
|
this.pluginOptions = pluginOptions, this.pluginOptions.filterIcon = null !== (_b = pluginOptions.filterIcon) && void 0 !== _b ? _b : {
|
|
15
15
|
name: "filter-icon",
|
|
@@ -27,26 +27,25 @@ class FilterPlugin {
|
|
|
27
27
|
positionType: vtable_1.TYPES.IconPosition.right,
|
|
28
28
|
cursor: "pointer",
|
|
29
29
|
svg: '<svg t="1752821771292" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11926" width="200" height="200"><path d="M971.614323 53.05548L655.77935 412.054233C635.196622 435.434613 623.906096 465.509377 623.906096 496.583302v495.384307c0 28.975686-35.570152 43.063864-55.353551 21.781723l-159.865852-171.256294c-5.495389-5.895053-8.59279-13.688514-8.592789-21.781722V496.583302c0-31.073925-11.290526-61.148688-31.873254-84.429153L52.385677 53.05548C34.200936 32.472751 48.888611 0 76.365554 0h871.268892c27.476943 0 42.164618 32.472751 23.979877 53.05548z" fill="#416eff" p-id="11927"></path></svg>'
|
|
30
|
-
}, this.pluginOptions.filterModes && this.pluginOptions.filterModes.length || (this.pluginOptions.filterModes = [ "byValue", "byCondition" ])
|
|
31
|
-
this.pluginOptions.styles = (0, lodash_1.merge)({}, styles_1.filterStyles, pluginOptions.styles);
|
|
30
|
+
}, this.pluginOptions.filterModes && this.pluginOptions.filterModes.length || (this.pluginOptions.filterModes = [ "byValue", "byCondition" ]);
|
|
32
31
|
}
|
|
33
32
|
run(...args) {
|
|
34
33
|
var _a, _b, _c;
|
|
35
34
|
const eventArgs = args[0], runtime = args[1], table = args[2];
|
|
36
35
|
if (this.table = table, runtime === vtable_1.TABLE_EVENT_TYPE.BEFORE_INIT) this.filterEngine = new filter_engine_1.FilterEngine,
|
|
37
36
|
this.filterStateManager = new filter_state_manager_1.FilterStateManager(this.table, this.filterEngine),
|
|
38
|
-
this.filterToolbar = new filter_toolbar_1.FilterToolbar(this.table, this.filterStateManager
|
|
39
|
-
this.
|
|
40
|
-
this.filterStateManager.subscribe((() => {
|
|
41
|
-
this.updateFilterIcons(
|
|
37
|
+
this.filterToolbar = new filter_toolbar_1.FilterToolbar(this.table, this.filterStateManager),
|
|
38
|
+
this.columns = eventArgs.options.columns, this.filterToolbar.render(document.body),
|
|
39
|
+
this.updateFilterIcons(this.columns), this.filterStateManager.subscribe((() => {
|
|
40
|
+
this.updateFilterIcons(this.columns), this.table.updateColumns(this.columns, {
|
|
42
41
|
clearRowHeightCache: !1
|
|
43
42
|
});
|
|
44
43
|
})); else if (runtime === vtable_1.TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION) this.pluginOptions = Object.assign(Object.assign({}, this.pluginOptions), eventArgs.options.plugins.find((plugin => plugin.id === this.id)).pluginOptions),
|
|
45
|
-
this.handleOptionUpdate(eventArgs.options); else if (runtime === vtable_1.TABLE_EVENT_TYPE.ICON_CLICK && "filter-icon" === eventArgs.name || "filtering-icon" === eventArgs.name) {
|
|
44
|
+
this.columns = eventArgs.options.columns, this.handleOptionUpdate(eventArgs.options); else if (runtime === vtable_1.TABLE_EVENT_TYPE.ICON_CLICK && "filter-icon" === eventArgs.name || "filtering-icon" === eventArgs.name) {
|
|
46
45
|
if (3 === (null === (_a = eventArgs.event) || void 0 === _a ? void 0 : _a.which) || 2 === (null === (_b = eventArgs.event) || void 0 === _b ? void 0 : _b.button) || 2 == (2 & (null === (_c = eventArgs.event) || void 0 === _c ? void 0 : _c.buttons))) return;
|
|
47
46
|
const col = eventArgs.col, row = eventArgs.row;
|
|
48
47
|
this.filterToolbar.isVisible ? this.filterToolbar.hide() : this.filterToolbar.show(col, row, this.pluginOptions.filterModes);
|
|
49
|
-
}
|
|
48
|
+
} else runtime === vtable_1.TABLE_EVENT_TYPE.SCROLL && "horizontal" === eventArgs.scrollDirection && this.filterToolbar.adjustMenuPosition();
|
|
50
49
|
}
|
|
51
50
|
update() {
|
|
52
51
|
this.filterStateManager && this.reapplyActiveFilters();
|
|
@@ -54,7 +53,7 @@ class FilterPlugin {
|
|
|
54
53
|
handleOptionUpdate(options) {
|
|
55
54
|
const currentActiveFields = this.filterStateManager ? this.filterStateManager.getActiveFilterFields() : [];
|
|
56
55
|
this.filterStateManager && currentActiveFields.length > 0 && this.validateFilterStatesAfterUpdate(options, currentActiveFields),
|
|
57
|
-
this.updateFilterIcons(options);
|
|
56
|
+
this.updateFilterIcons(options.columns);
|
|
58
57
|
}
|
|
59
58
|
reapplyActiveFilters() {
|
|
60
59
|
this.filterStateManager.reapplyCurrentFilters();
|
|
@@ -73,9 +72,9 @@ class FilterPlugin {
|
|
|
73
72
|
});
|
|
74
73
|
}));
|
|
75
74
|
}
|
|
76
|
-
updateFilterIcons(
|
|
75
|
+
updateFilterIcons(columns = []) {
|
|
77
76
|
const filterIcon = this.pluginOptions.filterIcon, filteringIcon = this.pluginOptions.filteringIcon, isIconEqual = (a, b) => a === b || a && b && "object" == typeof a && "object" == typeof b && a.name === b.name;
|
|
78
|
-
|
|
77
|
+
columns.forEach((column => {
|
|
79
78
|
var _a;
|
|
80
79
|
const shouldShow = this.shouldEnableFilterForColumn(column.field, column), isFiltering = !!(null === (_a = this.filterStateManager.getFilterState(column.field)) || void 0 === _a ? void 0 : _a.enable);
|
|
81
80
|
let icons = (icons => icons ? Array.isArray(icons) ? icons : [ icons ] : [])(column.headerIcon);
|
|
@@ -108,13 +107,10 @@ class FilterPlugin {
|
|
|
108
107
|
};
|
|
109
108
|
}
|
|
110
109
|
setFilterState(filterState) {
|
|
111
|
-
|
|
112
|
-
this.filterStateManager.dispatch({
|
|
110
|
+
this.filterStateManager && (this.filterStateManager.dispatch({
|
|
113
111
|
type: types_1.FilterActionType.CLEAR_ALL_FILTERS,
|
|
114
112
|
payload: {}
|
|
115
|
-
})
|
|
116
|
-
this.table.columns;
|
|
117
|
-
Object.entries(filterState.filters).forEach((([, config]) => {
|
|
113
|
+
}), filterState && filterState.filters && Object.entries(filterState.filters).forEach((([, config]) => {
|
|
118
114
|
config.enable && this.filterStateManager.dispatch({
|
|
119
115
|
type: types_1.FilterActionType.ADD_FILTER,
|
|
120
116
|
payload: {
|
|
@@ -126,7 +122,7 @@ class FilterPlugin {
|
|
|
126
122
|
enable: !0
|
|
127
123
|
}
|
|
128
124
|
});
|
|
129
|
-
}));
|
|
125
|
+
})));
|
|
130
126
|
}
|
|
131
127
|
release() {
|
|
132
128
|
this.table = null, this.filterEngine = null, this.filterStateManager = null, this.filterToolbar = null;
|
package/cjs/filter/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/filter/filter.ts"],"names":[],"mappings":"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","file":"filter.js","sourcesContent":["import { TABLE_EVENT_TYPE, TYPES } from '@visactor/vtable';\nimport { FilterEngine } from './filter-engine';\nimport { FilterStateManager } from './filter-state-manager';\nimport { FilterToolbar } from './filter-toolbar';\nimport type { FilterOptions, FilterConfig, FilterState } from './types';\nimport { FilterActionType } from './types';\nimport type {\n ListTableConstructorOptions,\n pluginsDefinition,\n ListTable,\n PivotTable,\n BaseTableAPI,\n ColumnDefine\n} from '@visactor/vtable';\nimport { filterStyles } from './styles';\nimport { merge } from 'lodash';\n\n/**\n * 筛选插件,负责初始化筛选引擎、状态管理器和工具栏\n */\nexport class FilterPlugin implements pluginsDefinition.IVTablePlugin {\n id = `filter`;\n name = 'Filter';\n runTime = [TABLE_EVENT_TYPE.BEFORE_INIT, TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION, TABLE_EVENT_TYPE.ICON_CLICK];\n\n pluginOptions: FilterOptions;\n\n table: ListTable | PivotTable;\n\n filterEngine: FilterEngine;\n filterStateManager: FilterStateManager;\n filterToolbar: FilterToolbar;\n\n constructor(pluginOptions: FilterOptions) {\n this.id = pluginOptions?.id ?? this.id;\n this.pluginOptions = pluginOptions;\n this.pluginOptions.filterIcon = pluginOptions.filterIcon ?? {\n name: 'filter-icon',\n type: 'svg',\n width: 12,\n height: 12,\n positionType: TYPES.IconPosition.right,\n cursor: 'pointer',\n svg: '<svg t=\"1752821809070\" class=\"icon\" viewBox=\"0 0 1664 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"12092\" width=\"200\" height=\"200\"><path d=\"M89.6 179.2A89.6 89.6 0 0 1 89.6 0h1408a89.6 89.6 0 0 1 0 179.2H89.6z m256 384a89.6 89.6 0 0 1 0-179.2h896a89.6 89.6 0 0 1 0 179.2h-896z m256 384a89.6 89.6 0 0 1 0-179.2h384a89.6 89.6 0 0 1 0 179.2h-384z\" fill=\"#93a2b9\" p-id=\"12093\"></path></svg>'\n };\n this.pluginOptions.filteringIcon = pluginOptions.filteringIcon ?? {\n name: 'filtering-icon',\n type: 'svg',\n width: 12,\n height: 12,\n positionType: TYPES.IconPosition.right,\n cursor: 'pointer',\n svg: '<svg t=\"1752821771292\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"11926\" width=\"200\" height=\"200\"><path d=\"M971.614323 53.05548L655.77935 412.054233C635.196622 435.434613 623.906096 465.509377 623.906096 496.583302v495.384307c0 28.975686-35.570152 43.063864-55.353551 21.781723l-159.865852-171.256294c-5.495389-5.895053-8.59279-13.688514-8.592789-21.781722V496.583302c0-31.073925-11.290526-61.148688-31.873254-84.429153L52.385677 53.05548C34.200936 32.472751 48.888611 0 76.365554 0h871.268892c27.476943 0 42.164618 32.472751 23.979877 53.05548z\" fill=\"#416eff\" p-id=\"11927\"></path></svg>'\n };\n if (!this.pluginOptions.filterModes || !this.pluginOptions.filterModes.length) {\n this.pluginOptions.filterModes = ['byValue', 'byCondition'];\n }\n this.pluginOptions.styles = merge({}, filterStyles, pluginOptions.styles);\n }\n\n run(...args: any[]) {\n const eventArgs = args[0];\n const runtime = args[1];\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable | PivotTable;\n\n if (runtime === TABLE_EVENT_TYPE.BEFORE_INIT) {\n this.filterEngine = new FilterEngine();\n this.filterStateManager = new FilterStateManager(this.table, this.filterEngine);\n this.filterToolbar = new FilterToolbar(this.table, this.filterStateManager, this.pluginOptions.styles);\n\n this.filterToolbar.render(document.body);\n this.updateFilterIcons(eventArgs.options);\n this.filterStateManager.subscribe(() => {\n this.updateFilterIcons(eventArgs.options);\n (this.table as ListTable).updateColumns(eventArgs.options.columns, {\n clearRowHeightCache: false\n });\n });\n } else if (runtime === TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION) {\n this.pluginOptions = {\n ...this.pluginOptions,\n ...(eventArgs.options.plugins as FilterPlugin[]).find(plugin => plugin.id === this.id).pluginOptions\n };\n this.handleOptionUpdate(eventArgs.options);\n } else if (\n (runtime === TABLE_EVENT_TYPE.ICON_CLICK && eventArgs.name === 'filter-icon') ||\n eventArgs.name === 'filtering-icon'\n ) {\n const isRightClick =\n eventArgs.event?.which === 3 || eventArgs.event?.button === 2 || (eventArgs.event?.buttons & 2) === 2;\n // 如果是右键点击,直接返回不处理\n if (isRightClick) {\n return;\n }\n\n const col = eventArgs.col;\n const row = eventArgs.row;\n if (this.filterToolbar.isVisible) {\n this.filterToolbar.hide();\n } else {\n this.filterToolbar.show(col, row, this.pluginOptions.filterModes);\n }\n }\n }\n\n update() {\n if (this.filterStateManager) {\n this.reapplyActiveFilters();\n }\n }\n\n /**\n * 处理选项更新事件\n */\n private handleOptionUpdate(options: ListTableConstructorOptions): void {\n const currentActiveFields = this.filterStateManager ? this.filterStateManager.getActiveFilterFields() : [];\n\n // 验证筛选状态一致性\n if (this.filterStateManager && currentActiveFields.length > 0) {\n this.validateFilterStatesAfterUpdate(options, currentActiveFields);\n }\n\n // 更新筛选图标\n this.updateFilterIcons(options);\n }\n\n /**\n * 重新应用所有激活的筛选状态\n * 在 updateOption 后调用,因为 updateOption 会全量更新表格\n */\n private reapplyActiveFilters(): void {\n this.filterStateManager.reapplyCurrentFilters();\n }\n\n /**\n * 验证更新后的筛选状态一致性\n */\n private validateFilterStatesAfterUpdate(\n options: ListTableConstructorOptions,\n activeFields: (string | number)[]\n ): void {\n const columns = options.columns;\n const fieldsToRemove: (string | number)[] = [];\n\n activeFields.forEach(field => {\n const column = columns.find(col => col.field === field);\n\n // 检查该列是否仍然应该启用筛选\n if (!column || !this.shouldEnableFilterForColumn(field, column)) {\n fieldsToRemove.push(field);\n }\n });\n\n // 清除不再有效的筛选状态\n fieldsToRemove.forEach(field => {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: { field }\n });\n });\n }\n\n /**\n * 更新所有列的筛选图标状态\n * 根据列的筛选启用状态,添加或移除筛选图标\n */\n private updateFilterIcons(options) {\n const filterIcon = this.pluginOptions.filterIcon;\n const filteringIcon = this.pluginOptions.filteringIcon;\n\n const isIconEqual = (a, b) =>\n a === b || (a && b && typeof a === 'object' && typeof b === 'object' && a.name === b.name);\n\n const toIconList = icons => (icons ? (Array.isArray(icons) ? icons : [icons]) : []);\n\n const compactIcons = list => (list.length === 0 ? undefined : list.length === 1 ? list[0] : list);\n\n options.columns.forEach(column => {\n const shouldShow = this.shouldEnableFilterForColumn(column.field, column);\n const isFiltering = !!this.filterStateManager.getFilterState(column.field)?.enable;\n let icons = toIconList(column.headerIcon);\n\n if (shouldShow) {\n if (isFiltering) {\n if (!icons.some(icon => isIconEqual(icon, filteringIcon))) {\n icons = icons.filter(icon => !isIconEqual(icon, filterIcon));\n icons.push(filteringIcon);\n }\n } else {\n if (!icons.some(icon => isIconEqual(icon, filterIcon))) {\n icons = icons.filter(icon => !isIconEqual(icon, filteringIcon));\n icons.push(filterIcon);\n }\n }\n } else {\n icons = icons.filter(icon => !isIconEqual(icon, filterIcon));\n }\n\n column.headerIcon = compactIcons(icons);\n });\n }\n\n /**\n * 判断指定列是否应该启用筛选功能\n */\n shouldEnableFilterForColumn(field: number | string, column: ColumnDefine): boolean {\n // 如果是空白列,不适用筛选\n if (!column.title) {\n return false;\n }\n\n // 首先检查列级别的 filter 属性(最高优先级)\n const columnWithFilter = column as any;\n if (columnWithFilter.filter !== undefined) {\n return !!columnWithFilter.filter;\n }\n\n // 如果有自定义的启用钩子函数,使用钩子函数的结果\n if (this.pluginOptions.enableFilter) {\n return this.pluginOptions.enableFilter(field, column);\n }\n\n // 如果没有钩子函数,使用默认启用配置\n if (this.pluginOptions.defaultEnabled !== undefined) {\n return this.pluginOptions.defaultEnabled;\n }\n\n // 默认情况,所有列都启用筛选\n return true;\n }\n\n /**\n * 获取当前的筛选状态\n * 用于保存配置时获取筛选状态\n */\n getFilterState(): any {\n if (!this.filterStateManager) {\n return null;\n }\n\n const state = this.filterStateManager.getAllFilterStates();\n const serializedState: Record<string | number, any> = {};\n\n // 将 Map 转换为普通对象以便序列化\n state.filters.forEach((config: FilterConfig, field: string | number) => {\n serializedState[field] = {\n enable: config.enable,\n field: config.field,\n type: config.type,\n values: config.values,\n operator: config.operator,\n condition: config.condition\n };\n });\n\n return {\n filters: serializedState\n };\n }\n\n /**\n * 设置筛选状态\n * 用于从保存的配置中恢复筛选状态\n */\n setFilterState(filterState: FilterState): void {\n if (!this.filterStateManager || !filterState || !filterState.filters) {\n console.warn('setFilterState: 无效的筛选状态或状态管理器未初始化');\n return;\n }\n\n // 清除当前所有筛选\n this.filterStateManager.dispatch({\n type: FilterActionType.CLEAR_ALL_FILTERS,\n payload: {}\n });\n\n const columns = (this.table as ListTable).columns;\n\n // 恢复每个筛选配置\n Object.entries(filterState.filters).forEach(([, config]: [string, any]) => {\n if (config.enable) {\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: config.field,\n type: config.type,\n values: config.values,\n operator: config.operator,\n condition: config.condition,\n enable: true\n }\n });\n }\n });\n }\n\n release() {\n this.table = null;\n this.filterEngine = null;\n this.filterStateManager = null;\n this.filterToolbar = null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/filter/filter.ts"],"names":[],"mappings":"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","file":"filter.js","sourcesContent":["import { TABLE_EVENT_TYPE, TYPES } from '@visactor/vtable';\nimport { FilterEngine } from './filter-engine';\nimport { FilterStateManager } from './filter-state-manager';\nimport { FilterToolbar } from './filter-toolbar';\nimport type { FilterOptions, FilterConfig, FilterState } from './types';\nimport { FilterActionType } from './types';\nimport type {\n ListTableConstructorOptions,\n pluginsDefinition,\n ListTable,\n PivotTable,\n BaseTableAPI,\n ColumnDefine,\n ColumnsDefine\n} from '@visactor/vtable';\n\n/**\n * 筛选插件,负责初始化筛选引擎、状态管理器和工具栏\n */\nexport class FilterPlugin implements pluginsDefinition.IVTablePlugin {\n id = `filter`;\n name = 'Filter';\n runTime = [\n TABLE_EVENT_TYPE.BEFORE_INIT,\n TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION,\n TABLE_EVENT_TYPE.ICON_CLICK,\n TABLE_EVENT_TYPE.SCROLL\n ];\n\n pluginOptions: FilterOptions;\n\n table: ListTable | PivotTable;\n columns: ColumnsDefine;\n\n filterEngine: FilterEngine;\n filterStateManager: FilterStateManager;\n filterToolbar: FilterToolbar;\n\n constructor(pluginOptions: FilterOptions) {\n this.id = pluginOptions?.id ?? this.id;\n this.pluginOptions = pluginOptions;\n this.pluginOptions.filterIcon = pluginOptions.filterIcon ?? {\n name: 'filter-icon',\n type: 'svg',\n width: 12,\n height: 12,\n positionType: TYPES.IconPosition.right,\n cursor: 'pointer',\n svg: '<svg t=\"1752821809070\" class=\"icon\" viewBox=\"0 0 1664 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"12092\" width=\"200\" height=\"200\"><path d=\"M89.6 179.2A89.6 89.6 0 0 1 89.6 0h1408a89.6 89.6 0 0 1 0 179.2H89.6z m256 384a89.6 89.6 0 0 1 0-179.2h896a89.6 89.6 0 0 1 0 179.2h-896z m256 384a89.6 89.6 0 0 1 0-179.2h384a89.6 89.6 0 0 1 0 179.2h-384z\" fill=\"#93a2b9\" p-id=\"12093\"></path></svg>'\n };\n this.pluginOptions.filteringIcon = pluginOptions.filteringIcon ?? {\n name: 'filtering-icon',\n type: 'svg',\n width: 12,\n height: 12,\n positionType: TYPES.IconPosition.right,\n cursor: 'pointer',\n svg: '<svg t=\"1752821771292\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"11926\" width=\"200\" height=\"200\"><path d=\"M971.614323 53.05548L655.77935 412.054233C635.196622 435.434613 623.906096 465.509377 623.906096 496.583302v495.384307c0 28.975686-35.570152 43.063864-55.353551 21.781723l-159.865852-171.256294c-5.495389-5.895053-8.59279-13.688514-8.592789-21.781722V496.583302c0-31.073925-11.290526-61.148688-31.873254-84.429153L52.385677 53.05548C34.200936 32.472751 48.888611 0 76.365554 0h871.268892c27.476943 0 42.164618 32.472751 23.979877 53.05548z\" fill=\"#416eff\" p-id=\"11927\"></path></svg>'\n };\n if (!this.pluginOptions.filterModes || !this.pluginOptions.filterModes.length) {\n this.pluginOptions.filterModes = ['byValue', 'byCondition'];\n }\n }\n\n run(...args: any[]) {\n const eventArgs = args[0];\n const runtime = args[1];\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable | PivotTable;\n\n if (runtime === TABLE_EVENT_TYPE.BEFORE_INIT) {\n this.filterEngine = new FilterEngine();\n this.filterStateManager = new FilterStateManager(this.table, this.filterEngine);\n this.filterToolbar = new FilterToolbar(this.table, this.filterStateManager);\n this.columns = eventArgs.options.columns;\n\n this.filterToolbar.render(document.body);\n this.updateFilterIcons(this.columns);\n this.filterStateManager.subscribe(() => {\n this.updateFilterIcons(this.columns);\n (this.table as ListTable).updateColumns(this.columns, {\n clearRowHeightCache: false\n });\n });\n } else if (runtime === TABLE_EVENT_TYPE.BEFORE_UPDATE_OPTION) {\n this.pluginOptions = {\n ...this.pluginOptions,\n ...(eventArgs.options.plugins as FilterPlugin[]).find(plugin => plugin.id === this.id).pluginOptions\n };\n this.columns = eventArgs.options.columns;\n this.handleOptionUpdate(eventArgs.options);\n } else if (\n (runtime === TABLE_EVENT_TYPE.ICON_CLICK && eventArgs.name === 'filter-icon') ||\n eventArgs.name === 'filtering-icon'\n ) {\n const isRightClick =\n eventArgs.event?.which === 3 || eventArgs.event?.button === 2 || (eventArgs.event?.buttons & 2) === 2;\n // 如果是右键点击,直接返回不处理\n if (isRightClick) {\n return;\n }\n\n const col = eventArgs.col;\n const row = eventArgs.row;\n if (this.filterToolbar.isVisible) {\n this.filterToolbar.hide();\n } else {\n this.filterToolbar.show(col, row, this.pluginOptions.filterModes);\n }\n } else if (runtime === TABLE_EVENT_TYPE.SCROLL) {\n if (eventArgs.scrollDirection === 'horizontal') {\n this.filterToolbar.adjustMenuPosition();\n }\n }\n }\n\n update() {\n if (this.filterStateManager) {\n this.reapplyActiveFilters();\n }\n }\n\n /**\n * 处理选项更新事件\n */\n private handleOptionUpdate(options: ListTableConstructorOptions): void {\n const currentActiveFields = this.filterStateManager ? this.filterStateManager.getActiveFilterFields() : [];\n\n // 验证筛选状态一致性\n if (this.filterStateManager && currentActiveFields.length > 0) {\n this.validateFilterStatesAfterUpdate(options, currentActiveFields);\n }\n\n // 更新筛选图标\n this.updateFilterIcons(options.columns);\n }\n\n /**\n * 重新应用所有激活的筛选状态\n * 在 updateOption 后调用,因为 updateOption 会全量更新表格\n */\n private reapplyActiveFilters(): void {\n this.filterStateManager.reapplyCurrentFilters();\n }\n\n /**\n * 验证更新后的筛选状态一致性\n */\n private validateFilterStatesAfterUpdate(\n options: ListTableConstructorOptions,\n activeFields: (string | number)[]\n ): void {\n const columns = options.columns;\n const fieldsToRemove: (string | number)[] = [];\n\n activeFields.forEach(field => {\n const column = columns.find(col => col.field === field);\n\n // 检查该列是否仍然应该启用筛选\n if (!column || !this.shouldEnableFilterForColumn(field, column)) {\n fieldsToRemove.push(field);\n }\n });\n\n // 清除不再有效的筛选状态\n fieldsToRemove.forEach(field => {\n this.filterStateManager.dispatch({\n type: FilterActionType.REMOVE_FILTER,\n payload: { field }\n });\n });\n }\n\n /**\n * 更新所有列的筛选图标状态\n * 根据列的筛选启用状态,添加或移除筛选图标\n */\n private updateFilterIcons(columns: ColumnsDefine = []) {\n const filterIcon = this.pluginOptions.filterIcon;\n const filteringIcon = this.pluginOptions.filteringIcon;\n\n const isIconEqual = (a, b) =>\n a === b || (a && b && typeof a === 'object' && typeof b === 'object' && a.name === b.name);\n\n const toIconList = icons => (icons ? (Array.isArray(icons) ? icons : [icons]) : []);\n\n const compactIcons = list => (list.length === 0 ? undefined : list.length === 1 ? list[0] : list);\n\n columns.forEach(column => {\n const shouldShow = this.shouldEnableFilterForColumn(column.field, column);\n const isFiltering = !!this.filterStateManager.getFilterState(column.field)?.enable;\n let icons = toIconList(column.headerIcon);\n\n if (shouldShow) {\n if (isFiltering) {\n if (!icons.some(icon => isIconEqual(icon, filteringIcon))) {\n icons = icons.filter(icon => !isIconEqual(icon, filterIcon));\n icons.push(filteringIcon);\n }\n } else {\n if (!icons.some(icon => isIconEqual(icon, filterIcon))) {\n icons = icons.filter(icon => !isIconEqual(icon, filteringIcon));\n icons.push(filterIcon);\n }\n }\n } else {\n icons = icons.filter(icon => !isIconEqual(icon, filterIcon));\n }\n\n column.headerIcon = compactIcons(icons);\n });\n }\n\n /**\n * 判断指定列是否应该启用筛选功能\n */\n shouldEnableFilterForColumn(field: number | string, column: ColumnDefine): boolean {\n // 如果是空白列,不适用筛选\n if (!column.title) {\n return false;\n }\n\n // 首先检查列级别的 filter 属性(最高优先级)\n const columnWithFilter = column as any;\n if (columnWithFilter.filter !== undefined) {\n return !!columnWithFilter.filter;\n }\n\n // 如果有自定义的启用钩子函数,使用钩子函数的结果\n if (this.pluginOptions.enableFilter) {\n return this.pluginOptions.enableFilter(field, column);\n }\n\n // 如果没有钩子函数,使用默认启用配置\n if (this.pluginOptions.defaultEnabled !== undefined) {\n return this.pluginOptions.defaultEnabled;\n }\n\n // 默认情况,所有列都启用筛选\n return true;\n }\n\n /**\n * 获取当前的筛选状态\n * 用于保存配置时获取筛选状态\n */\n getFilterState(): any {\n if (!this.filterStateManager) {\n return null;\n }\n\n const state = this.filterStateManager.getAllFilterStates();\n const serializedState: Record<string | number, any> = {};\n\n // 将 Map 转换为普通对象以便序列化\n state.filters.forEach((config: FilterConfig, field: string | number) => {\n serializedState[field] = {\n enable: config.enable,\n field: config.field,\n type: config.type,\n values: config.values,\n operator: config.operator,\n condition: config.condition\n };\n });\n\n return {\n filters: serializedState\n };\n }\n\n /**\n * 设置筛选状态\n * 用于从保存的配置中恢复筛选状态\n */\n setFilterState(filterState?: FilterState): void {\n if (!this.filterStateManager) {\n console.warn('setFilterState: 状态管理器未初始化');\n return;\n }\n\n // 清除当前所有筛选\n this.filterStateManager.dispatch({\n type: FilterActionType.CLEAR_ALL_FILTERS,\n payload: {}\n });\n\n // 若传入参数为空,则重置筛选状态\n if (!filterState || !filterState.filters) {\n return;\n }\n\n // 恢复每个筛选配置\n Object.entries(filterState.filters).forEach(([, config]: [string, any]) => {\n if (config.enable) {\n this.filterStateManager.dispatch({\n type: FilterActionType.ADD_FILTER,\n payload: {\n field: config.field,\n type: config.type,\n values: config.values,\n operator: config.operator,\n condition: config.condition,\n enable: true\n }\n });\n }\n });\n }\n\n release() {\n this.table = null;\n this.filterEngine = null;\n this.filterStateManager = null;\n this.filterToolbar = null;\n }\n}\n"]}
|
package/cjs/filter/styles.d.ts
CHANGED
|
@@ -1,4 +1,126 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export declare const filterStyles: {
|
|
2
|
+
filterMenu: {
|
|
3
|
+
display: string;
|
|
4
|
+
position: string;
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
border: string;
|
|
7
|
+
boxShadow: string;
|
|
8
|
+
zIndex: string;
|
|
9
|
+
};
|
|
10
|
+
filterPanel: {
|
|
11
|
+
padding: string;
|
|
12
|
+
display: string;
|
|
13
|
+
};
|
|
14
|
+
searchContainer: {
|
|
15
|
+
padding: string;
|
|
16
|
+
};
|
|
17
|
+
searchInput: {
|
|
18
|
+
width: string;
|
|
19
|
+
padding: string;
|
|
20
|
+
border: string;
|
|
21
|
+
borderRadius: string;
|
|
22
|
+
fontSize: string;
|
|
23
|
+
boxSizing: string;
|
|
24
|
+
};
|
|
25
|
+
optionsContainer: {
|
|
26
|
+
maxHeight: string;
|
|
27
|
+
overflowY: string;
|
|
28
|
+
marginTop: string;
|
|
29
|
+
};
|
|
30
|
+
optionItem: {
|
|
31
|
+
display: string;
|
|
32
|
+
justifyContent: string;
|
|
33
|
+
alignItems: string;
|
|
34
|
+
padding: string;
|
|
35
|
+
};
|
|
36
|
+
optionLabel: {
|
|
37
|
+
display: string;
|
|
38
|
+
alignItems: string;
|
|
39
|
+
cursor: string;
|
|
40
|
+
flexGrow: string;
|
|
41
|
+
fontWeight: string;
|
|
42
|
+
};
|
|
43
|
+
checkbox: {
|
|
44
|
+
marginRight: string;
|
|
45
|
+
};
|
|
46
|
+
countSpan: {
|
|
47
|
+
color: string;
|
|
48
|
+
fontSize: string;
|
|
49
|
+
};
|
|
50
|
+
tabsContainer: {
|
|
51
|
+
display: string;
|
|
52
|
+
justifyContent: string;
|
|
53
|
+
borderBottom: string;
|
|
54
|
+
};
|
|
55
|
+
tabStyle: (isActive: boolean) => {
|
|
56
|
+
backgroundColor: string;
|
|
57
|
+
border: string;
|
|
58
|
+
flex: string;
|
|
59
|
+
padding: string;
|
|
60
|
+
cursor: string;
|
|
61
|
+
fontSize: string;
|
|
62
|
+
fontWeight: string;
|
|
63
|
+
color: string;
|
|
64
|
+
borderBottom: string;
|
|
65
|
+
};
|
|
66
|
+
footerContainer: {
|
|
67
|
+
display: string;
|
|
68
|
+
justifyContent: string;
|
|
69
|
+
alignItems: string;
|
|
70
|
+
padding: string;
|
|
71
|
+
borderTop: string;
|
|
72
|
+
backgroundColor: string;
|
|
73
|
+
};
|
|
74
|
+
footerButton: (isPrimary: boolean) => {
|
|
75
|
+
padding: string;
|
|
76
|
+
border: string;
|
|
77
|
+
borderRadius: string;
|
|
78
|
+
cursor: string;
|
|
79
|
+
marginLeft: string;
|
|
80
|
+
backgroundColor: string;
|
|
81
|
+
color: string;
|
|
82
|
+
borderColor: string;
|
|
83
|
+
};
|
|
84
|
+
clearLink: {
|
|
85
|
+
color: string;
|
|
86
|
+
textDecoration: string;
|
|
87
|
+
};
|
|
88
|
+
buttonStyle: (isPrimary?: boolean) => {
|
|
89
|
+
padding: string;
|
|
90
|
+
border: string;
|
|
91
|
+
borderRadius: string;
|
|
92
|
+
cursor: string;
|
|
93
|
+
marginLeft: string;
|
|
94
|
+
backgroundColor: string;
|
|
95
|
+
color: string;
|
|
96
|
+
borderColor: string;
|
|
97
|
+
};
|
|
98
|
+
conditionContainer: {
|
|
99
|
+
marginBottom: string;
|
|
100
|
+
padding: string;
|
|
101
|
+
};
|
|
102
|
+
formLabel: {
|
|
103
|
+
display: string;
|
|
104
|
+
marginBottom: string;
|
|
105
|
+
fontWeight: string;
|
|
106
|
+
};
|
|
107
|
+
operatorSelect: {
|
|
108
|
+
width: string;
|
|
109
|
+
padding: string;
|
|
110
|
+
marginBottom: string;
|
|
111
|
+
border: string;
|
|
112
|
+
borderRadius: string;
|
|
113
|
+
boxSizing: string;
|
|
114
|
+
};
|
|
115
|
+
rangeInputContainer: {
|
|
116
|
+
display: string;
|
|
117
|
+
alignItems: string;
|
|
118
|
+
gap: string;
|
|
119
|
+
};
|
|
120
|
+
addLabel: {
|
|
121
|
+
display: string;
|
|
122
|
+
padding: string;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
3
125
|
export declare function applyStyles(element: HTMLElement, styles: Record<string, string>): void;
|
|
4
126
|
export declare function createElement<K extends keyof HTMLElementTagNameMap>(tag: K, attributes?: Record<string, string>, children?: (HTMLElement | string)[]): HTMLElementTagNameMap[K];
|
package/cjs/filter/styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/filter/styles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/filter/styles.ts"],"names":[],"mappings":"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","file":"styles.js","sourcesContent":["/**\n * 筛选组件样式定义\n */\nexport const filterStyles = {\n // 筛选菜单\n filterMenu: {\n display: 'none',\n position: 'absolute',\n backgroundColor: 'white',\n border: '1px solid #ccc',\n boxShadow: '0 4px 8px rgba(0,0,0,0.15)',\n zIndex: '100'\n },\n\n // 筛选面板\n filterPanel: {\n padding: '10px',\n display: 'block'\n },\n\n // 搜索容器\n searchContainer: {\n padding: '5px'\n },\n\n // 搜索输入框\n searchInput: {\n width: '100%',\n padding: '8px 10px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n fontSize: '14px',\n boxSizing: 'border-box'\n },\n\n // 选项容器\n optionsContainer: {\n maxHeight: '200px',\n overflowY: 'auto',\n marginTop: '10px'\n },\n\n // 筛选选项项\n optionItem: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '8px 5px'\n },\n\n // 筛选选项标签\n optionLabel: {\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n flexGrow: '1',\n fontWeight: 'normal'\n },\n\n // 复选框\n checkbox: {\n marginRight: '10px'\n },\n\n // 计数标签\n countSpan: {\n color: '#888',\n fontSize: '12px'\n },\n\n // 标签容器\n tabsContainer: {\n display: 'flex',\n justifyContent: 'space-around',\n borderBottom: '1px solid #e0e0e0'\n },\n\n // 标签样式\n tabStyle: (isActive: boolean) => ({\n backgroundColor: 'transparent',\n border: 'none',\n flex: '1',\n padding: '10px 15px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: isActive ? 'bold' : 'normal',\n color: isActive ? '#007bff' : '#666',\n borderBottom: isActive ? '3px solid #007bff' : '2px solid transparent'\n }),\n\n // 页脚容器\n footerContainer: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '10px 15px',\n borderTop: '1px solid #e0e0e0',\n backgroundColor: '#f8f9fa'\n },\n\n footerButton: (isPrimary: boolean) => ({\n padding: '6px 12px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'pointer',\n marginLeft: '5px',\n backgroundColor: isPrimary ? '#007bff' : 'white',\n color: isPrimary ? 'white' : '#333',\n borderColor: isPrimary ? '#007bff' : '#ccc'\n }),\n\n // 清除链接\n clearLink: {\n color: '#007bff',\n textDecoration: 'none'\n },\n\n // 按钮样式\n buttonStyle: (isPrimary: boolean = false) => ({\n padding: '6px 12px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'pointer',\n marginLeft: '5px',\n backgroundColor: isPrimary ? '#007bff' : 'white',\n color: isPrimary ? 'white' : '#333',\n borderColor: isPrimary ? '#007bff' : '#ccc'\n }),\n\n // === 条件筛选相关样式 ===\n\n // 条件筛选容器\n conditionContainer: {\n marginBottom: '15px',\n padding: '10px'\n },\n\n // 表单标签样式\n formLabel: {\n display: 'block',\n marginBottom: '8px',\n fontWeight: 'bold'\n },\n\n // 操作符选择框样式\n operatorSelect: {\n width: '100%',\n padding: '8px',\n marginBottom: '15px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n boxSizing: 'border-box'\n },\n\n rangeInputContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px'\n },\n\n addLabel: {\n display: 'none',\n padding: '0 5px'\n }\n};\n\n/**\n * 应用样式到DOM元素\n */\nexport function applyStyles(element: HTMLElement, styles: Record<string, string>) {\n Object.entries(styles).forEach(([prop, value]) => {\n element.style[prop as any] = value;\n });\n}\n\n/**\n * 创建DOM元素的辅助函数\n */\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n attributes: Record<string, string> = {},\n children: (HTMLElement | string)[] = []\n): HTMLElementTagNameMap[K] {\n const element = document.createElement(tag);\n\n Object.entries(attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n\n children.forEach(child => {\n if (typeof child === 'string') {\n element.appendChild(document.createTextNode(child));\n } else {\n element.appendChild(child);\n }\n });\n\n return element;\n}\n"]}
|
package/cjs/filter/types.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export interface FilterOptions {
|
|
|
6
6
|
enableFilter?: (field: number | string, column: TYPES.ColumnDefine) => boolean;
|
|
7
7
|
defaultEnabled?: boolean;
|
|
8
8
|
filterModes?: FilterMode[];
|
|
9
|
-
styles?: FilterStyles;
|
|
10
9
|
}
|
|
11
10
|
export type FilterMode = 'byValue' | 'byCondition';
|
|
12
11
|
export interface FilterState {
|
|
@@ -54,29 +53,3 @@ export declare enum FilterOperatorCategory {
|
|
|
54
53
|
CHECKBOX = "checkbox",
|
|
55
54
|
RADIO = "radio"
|
|
56
55
|
}
|
|
57
|
-
interface StaticStyles {
|
|
58
|
-
filterMenu?: Record<string, string>;
|
|
59
|
-
filterPanel?: Record<string, string>;
|
|
60
|
-
searchContainer?: Record<string, string>;
|
|
61
|
-
searchInput?: Record<string, string>;
|
|
62
|
-
optionsContainer?: Record<string, string>;
|
|
63
|
-
optionItem?: Record<string, string>;
|
|
64
|
-
optionLabel?: Record<string, string>;
|
|
65
|
-
checkbox?: Record<string, string>;
|
|
66
|
-
countSpan?: Record<string, string>;
|
|
67
|
-
tabsContainer?: Record<string, string>;
|
|
68
|
-
footerContainer?: Record<string, string>;
|
|
69
|
-
clearLink?: Record<string, string>;
|
|
70
|
-
conditionContainer?: Record<string, string>;
|
|
71
|
-
formLabel?: Record<string, string>;
|
|
72
|
-
operatorSelect?: Record<string, string>;
|
|
73
|
-
rangeInputContainer?: Record<string, string>;
|
|
74
|
-
addLabel?: Record<string, string>;
|
|
75
|
-
}
|
|
76
|
-
interface FunctionStyles {
|
|
77
|
-
tabStyle?: (isActive: boolean) => Record<string, string>;
|
|
78
|
-
footerButton?: (isPrimary: boolean) => Record<string, string>;
|
|
79
|
-
buttonStyle?: (isPrimary?: boolean) => Record<string, string>;
|
|
80
|
-
}
|
|
81
|
-
export type FilterStyles = StaticStyles & FunctionStyles;
|
|
82
|
-
export {};
|
package/cjs/filter/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/filter/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/filter/types.ts"],"names":[],"mappings":";;;AAiCA,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,mEAAU,CAAA;IACV,yEAAa,CAAA;IACb,yEAAa,CAAA;IACb,yEAAa,CAAA;IACb,2EAAc,CAAA;IACd,iFAAiB,CAAA;IACjB,yEAAa,CAAA;AACf,CAAC,EARW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAQ3B;AA2CD,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,qCAAW,CAAA;IACX,uCAAa,CAAA;IACb,2CAAiB,CAAA;IACjB,yCAAe,CAAA;IACf,+CAAqB,CAAA;IACrB,yCAAe,CAAA;AACjB,CAAC,EAPW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAOjC","file":"types.js","sourcesContent":["import type { TYPES } from '@visactor/vtable';\n\nexport interface FilterOptions {\n /** 筛选器 ID,用于唯一标识筛选器 */\n id?: string;\n /** 筛选器图标 */\n filterIcon?: TYPES.ColumnIconOption;\n /** 筛选器激活图标 */\n filteringIcon?: TYPES.ColumnIconOption;\n /** 筛选功能启用钩子函数,返回指定列是否启用筛选功能 */\n enableFilter?: (field: number | string, column: TYPES.ColumnDefine) => boolean;\n /** 默认是否启用筛选(当 enableFilter 未定义时使用) */\n defaultEnabled?: boolean;\n /** 是否展示按条件筛选,按值筛选 UI */\n filterModes?: FilterMode[];\n}\n\nexport type FilterMode = 'byValue' | 'byCondition';\n\nexport interface FilterState {\n filters: Map<string | number, FilterConfig>;\n // activeFilters: string[]; // 激活的筛选器的 ID 列表\n}\n\nexport interface FilterConfig {\n enable: boolean; // 是否启用筛选\n field: string | number; // 对应表格列,同时作为筛选配置的唯一标识\n type: 'byValue' | 'byCondition'; // 筛选类型\n values?: any[]; // 按值筛选时的值列表\n operator?: FilterOperator; // 按条件筛选时的操作符\n condition?: any; // 按条件筛选时的具体条件\n}\n\nexport enum FilterActionType {\n ADD_FILTER,\n REMOVE_FILTER,\n UPDATE_FILTER,\n ENABLE_FILTER,\n DISABLE_FILTER,\n CLEAR_ALL_FILTERS,\n APPLY_FILTERS\n}\n\nexport interface FilterAction {\n type: FilterActionType;\n payload: any;\n}\n\nexport interface ValueFilterOptionDom {\n id: string;\n originalValue: any;\n itemContainer: HTMLDivElement;\n checkbox: HTMLInputElement;\n countSpan: HTMLSpanElement;\n}\n\nexport type FilterOperator =\n // 通用\n | 'equals'\n | 'notEquals'\n // 数值\n | 'greaterThan'\n | 'lessThan'\n | 'greaterThanOrEqual'\n | 'lessThanOrEqual'\n | 'between'\n | 'notBetween'\n // 文本\n | 'contains'\n | 'notContains'\n | 'startsWith'\n | 'notStartsWith'\n | 'endsWith'\n | 'notEndsWith'\n // 复选框 | 单选框\n | 'isChecked'\n | 'isUnchecked';\n\nexport interface OperatorOption {\n value: FilterOperator;\n label: string;\n category: FilterOperatorCategory;\n}\n\nexport enum FilterOperatorCategory {\n ALL = 'all',\n TEXT = 'text',\n NUMBER = 'number',\n COLOR = 'color',\n CHECKBOX = 'checkbox',\n RADIO = 'radio'\n}\n"]}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { ListTable, PivotTable } from '@visactor/vtable';
|
|
2
|
-
import type { FilterStyles } from './types';
|
|
3
2
|
import type { FilterStateManager } from './filter-state-manager';
|
|
4
3
|
export declare class ValueFilter {
|
|
5
4
|
private table;
|
|
6
5
|
private filterStateManager;
|
|
7
|
-
private styles;
|
|
8
6
|
private uniqueKeys;
|
|
9
7
|
private displayToRawValueMap;
|
|
10
8
|
private selectedField;
|
|
@@ -13,13 +11,11 @@ export declare class ValueFilter {
|
|
|
13
11
|
private filterByValueSearchInput;
|
|
14
12
|
private selectAllCheckbox;
|
|
15
13
|
private filterItemsContainer;
|
|
16
|
-
constructor(table: ListTable | PivotTable, filterStateManager: FilterStateManager
|
|
14
|
+
constructor(table: ListTable | PivotTable, filterStateManager: FilterStateManager);
|
|
17
15
|
private updateUI;
|
|
18
16
|
setSelectedField(fieldId: string | number): void;
|
|
19
17
|
collectUniqueColumnValues(fieldId: string | number): void;
|
|
20
|
-
private updateCandidateCounts;
|
|
21
18
|
private onValueSelect;
|
|
22
|
-
private isValueVisible;
|
|
23
19
|
private toggleSelectAll;
|
|
24
20
|
private onSearch;
|
|
25
21
|
private initFilterStateFromTableData;
|