@visactor/vtable-sheet 1.22.13-alpha.1 → 1.23.0
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/components/sheet-tab-event-handler.js +1 -1
- package/cjs/components/sheet-tab-event-handler.js.map +1 -1
- package/cjs/components/vtable-sheet.d.ts +18 -12
- package/cjs/components/vtable-sheet.js +77 -48
- package/cjs/components/vtable-sheet.js.map +1 -1
- package/cjs/core/WorkSheet.d.ts +12 -7
- package/cjs/core/WorkSheet.js +38 -67
- package/cjs/core/WorkSheet.js.map +1 -1
- package/cjs/core/table-plugins.d.ts +1 -1
- package/cjs/core/table-plugins.js +45 -24
- package/cjs/core/table-plugins.js.map +1 -1
- package/cjs/event/base-event-manager.d.ts +21 -0
- package/cjs/event/base-event-manager.js +58 -0
- package/cjs/event/base-event-manager.js.map +1 -0
- package/cjs/event/dom-event-manager.d.ts +10 -0
- package/cjs/event/dom-event-manager.js +31 -0
- package/cjs/event/dom-event-manager.js.map +1 -0
- package/cjs/event/event-interfaces.d.ts +46 -0
- package/cjs/event/event-interfaces.js +6 -0
- package/cjs/event/event-interfaces.js.map +1 -0
- package/cjs/event/event-performance.d.ts +20 -0
- package/cjs/event/event-performance.js +94 -0
- package/cjs/event/event-performance.js.map +1 -0
- package/cjs/event/event-validator.d.ts +10 -0
- package/cjs/event/event-validator.js +78 -0
- package/cjs/event/event-validator.js.map +1 -0
- package/cjs/event/formula-event-utils.d.ts +30 -0
- package/cjs/event/formula-event-utils.js +69 -0
- package/cjs/event/formula-event-utils.js.map +1 -0
- package/cjs/event/index.d.ts +9 -0
- package/cjs/event/index.js +78 -0
- package/cjs/event/index.js.map +1 -0
- package/cjs/event/spreadsheet-event-manager.d.ts +27 -0
- package/cjs/event/spreadsheet-event-manager.js +143 -0
- package/cjs/event/spreadsheet-event-manager.js.map +1 -0
- package/cjs/event/table-event-relay.d.ts +30 -0
- package/cjs/event/table-event-relay.js +105 -0
- package/cjs/event/table-event-relay.js.map +1 -0
- package/cjs/event/vtable-sheet-event-bus.d.ts +23 -0
- package/cjs/event/vtable-sheet-event-bus.js +75 -0
- package/cjs/event/vtable-sheet-event-bus.js.map +1 -0
- package/cjs/event/worksheet-event-manager.d.ts +28 -0
- package/cjs/event/worksheet-event-manager.js +82 -0
- package/cjs/event/worksheet-event-manager.js.map +1 -0
- package/cjs/formula/formula-engine.js +7 -4
- package/cjs/formula/formula-engine.js.map +1 -1
- package/cjs/formula/formula-range-selector.d.ts +3 -3
- package/cjs/formula/formula-range-selector.js +4 -4
- package/cjs/formula/formula-range-selector.js.map +1 -1
- package/cjs/formula/index.js +1 -2
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/managers/formula-manager.d.ts +1 -0
- package/cjs/managers/formula-manager.js +33 -2
- package/cjs/managers/formula-manager.js.map +1 -1
- package/cjs/managers/menu-manager.d.ts +2 -0
- package/cjs/managers/menu-manager.js +32 -7
- package/cjs/managers/menu-manager.js.map +1 -1
- package/cjs/managers/sheet-manager.d.ts +4 -1
- package/cjs/managers/sheet-manager.js +40 -5
- package/cjs/managers/sheet-manager.js.map +1 -1
- package/cjs/managers/tab-drag-manager.js +2 -2
- package/cjs/managers/tab-drag-manager.js.map +1 -1
- package/cjs/sheet-helper.d.ts +11 -12
- package/cjs/sheet-helper.js +18 -23
- package/cjs/sheet-helper.js.map +1 -1
- package/cjs/styles/sheet-tab.js +2 -1
- package/cjs/ts-types/formula.js +1 -2
- package/cjs/ts-types/index.d.ts +1 -1
- package/cjs/ts-types/index.js +3 -3
- package/cjs/ts-types/index.js.map +1 -1
- package/cjs/ts-types/spreadsheet-events.d.ts +195 -0
- package/cjs/ts-types/spreadsheet-events.js +26 -0
- package/cjs/ts-types/spreadsheet-events.js.map +1 -0
- package/dist/vtable-sheet.js +1240 -366
- package/dist/vtable-sheet.min.js +1 -1
- package/es/components/sheet-tab-event-handler.js +1 -1
- package/es/components/sheet-tab-event-handler.js.map +1 -1
- package/es/components/vtable-sheet.d.ts +18 -12
- package/es/components/vtable-sheet.js +84 -51
- package/es/components/vtable-sheet.js.map +1 -1
- package/es/core/WorkSheet.d.ts +12 -7
- package/es/core/WorkSheet.js +38 -69
- package/es/core/WorkSheet.js.map +1 -1
- package/es/core/table-plugins.d.ts +1 -1
- package/es/core/table-plugins.js +45 -24
- package/es/core/table-plugins.js.map +1 -1
- package/es/event/base-event-manager.d.ts +21 -0
- package/es/event/base-event-manager.js +52 -0
- package/es/event/base-event-manager.js.map +1 -0
- package/es/event/dom-event-manager.d.ts +10 -0
- package/es/event/dom-event-manager.js +23 -0
- package/es/event/dom-event-manager.js.map +1 -0
- package/es/event/event-interfaces.d.ts +46 -0
- package/es/event/event-interfaces.js +2 -0
- package/es/event/event-interfaces.js.map +1 -0
- package/es/event/event-performance.d.ts +20 -0
- package/es/event/event-performance.js +86 -0
- package/es/event/event-performance.js.map +1 -0
- package/es/event/event-validator.d.ts +10 -0
- package/es/event/event-validator.js +70 -0
- package/es/event/event-validator.js.map +1 -0
- package/es/event/formula-event-utils.d.ts +30 -0
- package/es/event/formula-event-utils.js +61 -0
- package/es/event/formula-event-utils.js.map +1 -0
- package/es/event/index.d.ts +9 -0
- package/es/event/index.js +16 -0
- package/es/event/index.js.map +1 -0
- package/es/event/spreadsheet-event-manager.d.ts +27 -0
- package/es/event/spreadsheet-event-manager.js +137 -0
- package/es/event/spreadsheet-event-manager.js.map +1 -0
- package/es/event/table-event-relay.d.ts +30 -0
- package/es/event/table-event-relay.js +97 -0
- package/es/event/table-event-relay.js.map +1 -0
- package/es/event/vtable-sheet-event-bus.d.ts +23 -0
- package/es/event/vtable-sheet-event-bus.js +67 -0
- package/es/event/vtable-sheet-event-bus.js.map +1 -0
- package/es/event/worksheet-event-manager.d.ts +28 -0
- package/es/event/worksheet-event-manager.js +76 -0
- package/es/event/worksheet-event-manager.js.map +1 -0
- package/es/formula/formula-engine.js +7 -4
- package/es/formula/formula-engine.js.map +1 -1
- package/es/formula/formula-range-selector.d.ts +3 -3
- package/es/formula/formula-range-selector.js +5 -3
- package/es/formula/formula-range-selector.js.map +1 -1
- package/es/formula/index.js +1 -2
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/managers/formula-manager.d.ts +1 -0
- package/es/managers/formula-manager.js +33 -2
- package/es/managers/formula-manager.js.map +1 -1
- package/es/managers/menu-manager.d.ts +2 -0
- package/es/managers/menu-manager.js +32 -7
- package/es/managers/menu-manager.js.map +1 -1
- package/es/managers/sheet-manager.d.ts +4 -1
- package/es/managers/sheet-manager.js +39 -5
- package/es/managers/sheet-manager.js.map +1 -1
- package/es/managers/tab-drag-manager.js +2 -2
- package/es/managers/tab-drag-manager.js.map +1 -1
- package/es/sheet-helper.d.ts +11 -12
- package/es/sheet-helper.js +13 -16
- package/es/sheet-helper.js.map +1 -1
- package/es/styles/sheet-tab.js +2 -1
- package/es/ts-types/formula.js +1 -2
- package/es/ts-types/index.d.ts +1 -1
- package/es/ts-types/index.js +2 -2
- package/es/ts-types/index.js.map +1 -1
- package/es/ts-types/spreadsheet-events.d.ts +195 -0
- package/es/ts-types/spreadsheet-events.js +23 -0
- package/es/ts-types/spreadsheet-events.js.map +1 -0
- package/package.json +7 -7
- package/cjs/event/event-manager.d.ts +0 -28
- package/cjs/event/event-manager.js +0 -62
- package/cjs/event/event-manager.js.map +0 -1
- package/cjs/event/event-target.d.ts +0 -12
- package/cjs/event/event-target.js +0 -50
- package/cjs/event/event-target.js.map +0 -1
- package/cjs/ts-types/event.d.ts +0 -90
- package/cjs/ts-types/event.js +0 -11
- package/cjs/ts-types/event.js.map +0 -1
- package/cjs/ts-types/events.d.ts +0 -1
- package/cjs/ts-types/events.js +0 -1
- package/cjs/ts-types/events.js.map +0 -1
- package/es/event/event-manager.d.ts +0 -28
- package/es/event/event-manager.js +0 -54
- package/es/event/event-manager.js.map +0 -1
- package/es/event/event-target.d.ts +0 -12
- package/es/event/event-target.js +0 -42
- package/es/event/event-target.js.map +0 -1
- package/es/ts-types/event.d.ts +0 -90
- package/es/ts-types/event.js +0 -7
- package/es/ts-types/event.js.map +0 -1
- package/es/ts-types/events.d.ts +0 -1
- package/es/ts-types/events.js +0 -1
- package/es/ts-types/events.js.map +0 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.FormulaEventUtils = exports.SpreadSheetEventManager = exports.WorkSheetEventManager = exports.TableEventRelay = exports.EventPerformanceOptimizer = exports.EventValidator = exports.VTableSheetEventBus = exports.BaseEventManager = void 0;
|
|
6
|
+
|
|
7
|
+
var base_event_manager_1 = require("./base-event-manager");
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "BaseEventManager", {
|
|
10
|
+
enumerable: !0,
|
|
11
|
+
get: function() {
|
|
12
|
+
return base_event_manager_1.BaseEventManager;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
var vtable_sheet_event_bus_1 = require("./vtable-sheet-event-bus");
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "VTableSheetEventBus", {
|
|
19
|
+
enumerable: !0,
|
|
20
|
+
get: function() {
|
|
21
|
+
return vtable_sheet_event_bus_1.VTableSheetEventBus;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
var event_validator_1 = require("./event-validator");
|
|
26
|
+
|
|
27
|
+
Object.defineProperty(exports, "EventValidator", {
|
|
28
|
+
enumerable: !0,
|
|
29
|
+
get: function() {
|
|
30
|
+
return event_validator_1.EventValidator;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
var event_performance_1 = require("./event-performance");
|
|
35
|
+
|
|
36
|
+
Object.defineProperty(exports, "EventPerformanceOptimizer", {
|
|
37
|
+
enumerable: !0,
|
|
38
|
+
get: function() {
|
|
39
|
+
return event_performance_1.EventPerformanceOptimizer;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
var table_event_relay_1 = require("./table-event-relay");
|
|
44
|
+
|
|
45
|
+
Object.defineProperty(exports, "TableEventRelay", {
|
|
46
|
+
enumerable: !0,
|
|
47
|
+
get: function() {
|
|
48
|
+
return table_event_relay_1.TableEventRelay;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
var worksheet_event_manager_1 = require("./worksheet-event-manager");
|
|
53
|
+
|
|
54
|
+
Object.defineProperty(exports, "WorkSheetEventManager", {
|
|
55
|
+
enumerable: !0,
|
|
56
|
+
get: function() {
|
|
57
|
+
return worksheet_event_manager_1.WorkSheetEventManager;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
var spreadsheet_event_manager_1 = require("./spreadsheet-event-manager");
|
|
62
|
+
|
|
63
|
+
Object.defineProperty(exports, "SpreadSheetEventManager", {
|
|
64
|
+
enumerable: !0,
|
|
65
|
+
get: function() {
|
|
66
|
+
return spreadsheet_event_manager_1.SpreadSheetEventManager;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var formula_event_utils_1 = require("./formula-event-utils");
|
|
71
|
+
|
|
72
|
+
Object.defineProperty(exports, "FormulaEventUtils", {
|
|
73
|
+
enumerable: !0,
|
|
74
|
+
get: function() {
|
|
75
|
+
return formula_event_utils_1.FormulaEventUtils;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event/index.ts"],"names":[],"mappings":";;;AAKA,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,mEAA+D;AAAtD,6HAAA,mBAAmB,OAAA;AAC5B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,yDAAgE;AAAvD,8HAAA,yBAAyB,OAAA;AAGlC,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AACxB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AAChC,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA","file":"index.js","sourcesContent":["/**\n * 事件模块导出\n */\n\n// 基础类和接口\nexport { BaseEventManager } from './base-event-manager';\nexport { VTableSheetEventBus } from './vtable-sheet-event-bus';\nexport { EventValidator } from './event-validator';\nexport { EventPerformanceOptimizer } from './event-performance';\n\n// 事件管理器\nexport { TableEventRelay } from './table-event-relay';\nexport { WorkSheetEventManager } from './worksheet-event-manager';\nexport { SpreadSheetEventManager } from './spreadsheet-event-manager';\nexport { FormulaEventUtils } from './formula-event-utils';\n\n// 接口定义\nexport type {\n IEventBus,\n IEventManager,\n IEventSource,\n IWorksheetEventSource,\n ISpreadsheetEventSource,\n IEventValidator,\n EventManagerConfig,\n EventStatistics\n} from './event-interfaces';\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type SpreadSheetEventMap } from '../ts-types/spreadsheet-events';
|
|
2
|
+
import { BaseEventManager } from './base-event-manager';
|
|
3
|
+
import type { ISpreadsheetEventSource } from './event-interfaces';
|
|
4
|
+
export declare class SpreadSheetEventManager extends BaseEventManager<SpreadSheetEventMap> {
|
|
5
|
+
private spreadsheet;
|
|
6
|
+
constructor(spreadsheet: ISpreadsheetEventSource);
|
|
7
|
+
protected getEventTypes(): string[];
|
|
8
|
+
emitReady(): void;
|
|
9
|
+
emitDestroyed(): void;
|
|
10
|
+
emitResized(width: number, height: number): void;
|
|
11
|
+
emitSheetAdded(sheetKey: string, sheetTitle: string, index: number): void;
|
|
12
|
+
emitSheetRemoved(sheetKey: string, sheetTitle: string, index: number): void;
|
|
13
|
+
emitSheetRenamed(sheetKey: string, oldTitle: string, newTitle: string): void;
|
|
14
|
+
emitSheetActivated(sheetKey: string, sheetTitle: string, previousSheetKey?: string, previousSheetTitle?: string): void;
|
|
15
|
+
emitSheetDeactivated(sheetKey: string, sheetTitle: string): void;
|
|
16
|
+
emitSheetMoved(sheetKey: string, fromIndex: number, toIndex: number): void;
|
|
17
|
+
emitSheetVisibilityChanged(sheetKey: string, visible: boolean): void;
|
|
18
|
+
emitImportStart(fileType: 'xlsx' | 'xls' | 'csv'): void;
|
|
19
|
+
emitImportCompleted(fileType: 'xlsx' | 'xls' | 'csv', sheetCount?: number): void;
|
|
20
|
+
emitImportError(fileType: 'xlsx' | 'xls' | 'csv', error: string | Error): void;
|
|
21
|
+
emitExportStart(fileType: 'xlsx' | 'csv', allSheets: boolean): void;
|
|
22
|
+
emitExportCompleted(fileType: 'xlsx' | 'csv', allSheets: boolean, sheetCount?: number): void;
|
|
23
|
+
emitExportError(fileType: 'xlsx' | 'csv', allSheets: boolean, error: string | Error): void;
|
|
24
|
+
emitCrossSheetReferenceUpdated(sourceSheetKey: string, targetSheetKeys: string[], affectedFormulaCount: number): void;
|
|
25
|
+
emitCrossSheetFormulaCalculateStart(): void;
|
|
26
|
+
emitCrossSheetFormulaCalculateEnd(): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.SpreadSheetEventManager = void 0;
|
|
6
|
+
|
|
7
|
+
const spreadsheet_events_1 = require("../ts-types/spreadsheet-events"), base_event_manager_1 = require("./base-event-manager");
|
|
8
|
+
|
|
9
|
+
class SpreadSheetEventManager extends base_event_manager_1.BaseEventManager {
|
|
10
|
+
constructor(spreadsheet) {
|
|
11
|
+
super(spreadsheet.getEventBus()), this.spreadsheet = spreadsheet;
|
|
12
|
+
}
|
|
13
|
+
getEventTypes() {
|
|
14
|
+
return Array.from(spreadsheet_events_1.SPREADSHEET_EVENT_TYPES);
|
|
15
|
+
}
|
|
16
|
+
emitReady() {
|
|
17
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SPREADSHEET_READY, void 0);
|
|
18
|
+
}
|
|
19
|
+
emitDestroyed() {
|
|
20
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SPREADSHEET_DESTROYED, void 0);
|
|
21
|
+
}
|
|
22
|
+
emitResized(width, height) {
|
|
23
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SPREADSHEET_RESIZED, {
|
|
24
|
+
width: width,
|
|
25
|
+
height: height
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
emitSheetAdded(sheetKey, sheetTitle, index) {
|
|
29
|
+
const event = {
|
|
30
|
+
sheetKey: sheetKey,
|
|
31
|
+
sheetTitle: sheetTitle,
|
|
32
|
+
index: index
|
|
33
|
+
};
|
|
34
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_ADDED, event);
|
|
35
|
+
}
|
|
36
|
+
emitSheetRemoved(sheetKey, sheetTitle, index) {
|
|
37
|
+
const event = {
|
|
38
|
+
sheetKey: sheetKey,
|
|
39
|
+
sheetTitle: sheetTitle,
|
|
40
|
+
index: index
|
|
41
|
+
};
|
|
42
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_REMOVED, event);
|
|
43
|
+
}
|
|
44
|
+
emitSheetRenamed(sheetKey, oldTitle, newTitle) {
|
|
45
|
+
const event = {
|
|
46
|
+
sheetKey: sheetKey,
|
|
47
|
+
oldTitle: oldTitle,
|
|
48
|
+
newTitle: newTitle
|
|
49
|
+
};
|
|
50
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_RENAMED, event);
|
|
51
|
+
}
|
|
52
|
+
emitSheetActivated(sheetKey, sheetTitle, previousSheetKey, previousSheetTitle) {
|
|
53
|
+
const event = {
|
|
54
|
+
sheetKey: sheetKey,
|
|
55
|
+
sheetTitle: sheetTitle,
|
|
56
|
+
previousSheetKey: previousSheetKey,
|
|
57
|
+
previousSheetTitle: previousSheetTitle
|
|
58
|
+
};
|
|
59
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_ACTIVATED, event);
|
|
60
|
+
}
|
|
61
|
+
emitSheetDeactivated(sheetKey, sheetTitle) {
|
|
62
|
+
const event = {
|
|
63
|
+
sheetKey: sheetKey,
|
|
64
|
+
sheetTitle: sheetTitle
|
|
65
|
+
};
|
|
66
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_DEACTIVATED, event);
|
|
67
|
+
}
|
|
68
|
+
emitSheetMoved(sheetKey, fromIndex, toIndex) {
|
|
69
|
+
const event = {
|
|
70
|
+
sheetKey: sheetKey,
|
|
71
|
+
fromIndex: fromIndex,
|
|
72
|
+
toIndex: toIndex
|
|
73
|
+
};
|
|
74
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_MOVED, event);
|
|
75
|
+
}
|
|
76
|
+
emitSheetVisibilityChanged(sheetKey, visible) {
|
|
77
|
+
const event = {
|
|
78
|
+
sheetKey: sheetKey,
|
|
79
|
+
visible: visible
|
|
80
|
+
};
|
|
81
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_VISIBILITY_CHANGED, event);
|
|
82
|
+
}
|
|
83
|
+
emitImportStart(fileType) {
|
|
84
|
+
const event = {
|
|
85
|
+
fileType: fileType
|
|
86
|
+
};
|
|
87
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.IMPORT_START, event);
|
|
88
|
+
}
|
|
89
|
+
emitImportCompleted(fileType, sheetCount) {
|
|
90
|
+
const event = {
|
|
91
|
+
fileType: fileType,
|
|
92
|
+
sheetCount: sheetCount
|
|
93
|
+
};
|
|
94
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.IMPORT_COMPLETED, event);
|
|
95
|
+
}
|
|
96
|
+
emitImportError(fileType, error) {
|
|
97
|
+
const event = {
|
|
98
|
+
fileType: fileType,
|
|
99
|
+
error: error
|
|
100
|
+
};
|
|
101
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.IMPORT_ERROR, event);
|
|
102
|
+
}
|
|
103
|
+
emitExportStart(fileType, allSheets) {
|
|
104
|
+
const event = {
|
|
105
|
+
fileType: fileType,
|
|
106
|
+
allSheets: allSheets
|
|
107
|
+
};
|
|
108
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.EXPORT_START, event);
|
|
109
|
+
}
|
|
110
|
+
emitExportCompleted(fileType, allSheets, sheetCount) {
|
|
111
|
+
const event = {
|
|
112
|
+
fileType: fileType,
|
|
113
|
+
allSheets: allSheets,
|
|
114
|
+
sheetCount: sheetCount
|
|
115
|
+
};
|
|
116
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.EXPORT_COMPLETED, event);
|
|
117
|
+
}
|
|
118
|
+
emitExportError(fileType, allSheets, error) {
|
|
119
|
+
const event = {
|
|
120
|
+
fileType: fileType,
|
|
121
|
+
allSheets: allSheets,
|
|
122
|
+
error: error
|
|
123
|
+
};
|
|
124
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.EXPORT_ERROR, event);
|
|
125
|
+
}
|
|
126
|
+
emitCrossSheetReferenceUpdated(sourceSheetKey, targetSheetKeys, affectedFormulaCount) {
|
|
127
|
+
const event = {
|
|
128
|
+
sourceSheetKey: sourceSheetKey,
|
|
129
|
+
targetSheetKeys: targetSheetKeys,
|
|
130
|
+
affectedFormulaCount: affectedFormulaCount
|
|
131
|
+
};
|
|
132
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.CROSS_SHEET_REFERENCE_UPDATED, event);
|
|
133
|
+
}
|
|
134
|
+
emitCrossSheetFormulaCalculateStart() {
|
|
135
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.CROSS_SHEET_FORMULA_CALCULATE_START, void 0);
|
|
136
|
+
}
|
|
137
|
+
emitCrossSheetFormulaCalculateEnd() {
|
|
138
|
+
this.emit(spreadsheet_events_1.VTableSheetEventType.CROSS_SHEET_FORMULA_CALCULATE_END, void 0);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
exports.SpreadSheetEventManager = SpreadSheetEventManager;
|
|
143
|
+
//# sourceMappingURL=spreadsheet-event-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event/spreadsheet-event-manager.ts"],"names":[],"mappings":"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","file":"spreadsheet-event-manager.js","sourcesContent":["/**\n * SpreadSheet 层事件管理器\n * 管理电子表格应用级别的事件\n */\n\nimport {\n VTableSheetEventType,\n SPREADSHEET_EVENT_TYPES,\n type SpreadSheetEventMap,\n type SheetAddedEvent,\n type SheetRemovedEvent,\n type SheetRenamedEvent,\n type SheetActivatedEvent,\n type SheetMovedEvent,\n type SheetVisibilityChangedEvent,\n type ImportEvent,\n type ExportEvent,\n type CrossSheetReferenceEvent\n} from '../ts-types/spreadsheet-events';\nimport { BaseEventManager } from './base-event-manager';\nimport type { IEventBus, ISpreadsheetEventSource } from './event-interfaces';\n\n/**\n * SpreadSheet 事件管理器\n * 负责管理电子表格应用级别的事件监听和触发\n */\nexport class SpreadSheetEventManager extends BaseEventManager<SpreadSheetEventMap> {\n /** 关联的 VTableSheet 实例 */\n private spreadsheet: ISpreadsheetEventSource;\n\n constructor(spreadsheet: ISpreadsheetEventSource) {\n super(spreadsheet.getEventBus());\n this.spreadsheet = spreadsheet;\n }\n\n /**\n * 获取事件类型列表\n * 使用集中化的事件定义,新增事件只需要修改 spreadsheet-events.ts 文件\n */\n protected getEventTypes(): string[] {\n return Array.from(SPREADSHEET_EVENT_TYPES);\n }\n\n /**\n * 触发电子表格准备就绪事件\n */\n emitReady(): void {\n this.emit(VTableSheetEventType.SPREADSHEET_READY, undefined);\n }\n\n /**\n * 触发电子表格销毁事件\n */\n emitDestroyed(): void {\n this.emit(VTableSheetEventType.SPREADSHEET_DESTROYED, undefined);\n }\n\n /**\n * 触发电子表格尺寸改变事件\n */\n emitResized(width: number, height: number): void {\n this.emit(VTableSheetEventType.SPREADSHEET_RESIZED, { width, height });\n }\n\n /**\n * 触发工作表添加事件\n */\n emitSheetAdded(sheetKey: string, sheetTitle: string, index: number): void {\n const event: SheetAddedEvent = {\n sheetKey,\n sheetTitle,\n index\n };\n this.emit(VTableSheetEventType.SHEET_ADDED, event);\n }\n\n /**\n * 触发工作表移除事件\n */\n emitSheetRemoved(sheetKey: string, sheetTitle: string, index: number): void {\n const event: SheetRemovedEvent = {\n sheetKey,\n sheetTitle,\n index\n };\n this.emit(VTableSheetEventType.SHEET_REMOVED, event);\n }\n\n /**\n * 触发工作表重命名事件\n */\n emitSheetRenamed(sheetKey: string, oldTitle: string, newTitle: string): void {\n const event: SheetRenamedEvent = {\n sheetKey,\n oldTitle,\n newTitle\n };\n this.emit(VTableSheetEventType.SHEET_RENAMED, event);\n }\n\n /**\n * 触发工作表激活事件\n */\n emitSheetActivated(\n sheetKey: string,\n sheetTitle: string,\n previousSheetKey?: string,\n previousSheetTitle?: string\n ): void {\n const event: SheetActivatedEvent = {\n sheetKey,\n sheetTitle,\n previousSheetKey,\n previousSheetTitle\n };\n this.emit(VTableSheetEventType.SHEET_ACTIVATED, event);\n }\n emitSheetDeactivated(sheetKey: string, sheetTitle: string): void {\n const event: SheetActivatedEvent = {\n sheetKey,\n sheetTitle\n };\n this.emit(VTableSheetEventType.SHEET_DEACTIVATED, event);\n }\n /**\n * 触发工作表移动事件\n */\n emitSheetMoved(sheetKey: string, fromIndex: number, toIndex: number): void {\n const event: SheetMovedEvent = {\n sheetKey,\n fromIndex,\n toIndex\n };\n this.emit(VTableSheetEventType.SHEET_MOVED, event);\n }\n\n /**\n * 触发工作表可见性改变事件\n */\n emitSheetVisibilityChanged(sheetKey: string, visible: boolean): void {\n const event: SheetVisibilityChangedEvent = {\n sheetKey,\n visible\n };\n this.emit(VTableSheetEventType.SHEET_VISIBILITY_CHANGED, event);\n }\n\n /**\n * 触发导入开始事件\n */\n emitImportStart(fileType: 'xlsx' | 'xls' | 'csv'): void {\n const event: ImportEvent = {\n fileType\n };\n this.emit(VTableSheetEventType.IMPORT_START, event);\n }\n\n /**\n * 触发导入完成事件\n */\n emitImportCompleted(fileType: 'xlsx' | 'xls' | 'csv', sheetCount?: number): void {\n const event: ImportEvent = {\n fileType,\n sheetCount\n };\n this.emit(VTableSheetEventType.IMPORT_COMPLETED, event);\n }\n\n /**\n * 触发导入失败事件\n */\n emitImportError(fileType: 'xlsx' | 'xls' | 'csv', error: string | Error): void {\n const event: ImportEvent = {\n fileType,\n error\n };\n this.emit(VTableSheetEventType.IMPORT_ERROR, event);\n }\n\n /**\n * 触发导出开始事件\n */\n emitExportStart(fileType: 'xlsx' | 'csv', allSheets: boolean): void {\n const event: ExportEvent = {\n fileType,\n allSheets\n };\n this.emit(VTableSheetEventType.EXPORT_START, event);\n }\n\n /**\n * 触发导出完成事件\n */\n emitExportCompleted(fileType: 'xlsx' | 'csv', allSheets: boolean, sheetCount?: number): void {\n const event: ExportEvent = {\n fileType,\n allSheets,\n sheetCount\n };\n this.emit(VTableSheetEventType.EXPORT_COMPLETED, event);\n }\n\n /**\n * 触发导出失败事件\n */\n emitExportError(fileType: 'xlsx' | 'csv', allSheets: boolean, error: string | Error): void {\n const event: ExportEvent = {\n fileType,\n allSheets,\n error\n };\n this.emit(VTableSheetEventType.EXPORT_ERROR, event);\n }\n\n /**\n * 触发跨工作表引用更新事件\n */\n emitCrossSheetReferenceUpdated(\n sourceSheetKey: string,\n targetSheetKeys: string[],\n affectedFormulaCount: number\n ): void {\n const event: CrossSheetReferenceEvent = {\n sourceSheetKey,\n targetSheetKeys,\n affectedFormulaCount\n };\n this.emit(VTableSheetEventType.CROSS_SHEET_REFERENCE_UPDATED, event);\n }\n\n /**\n * 触发跨工作表公式计算开始事件\n */\n emitCrossSheetFormulaCalculateStart(): void {\n this.emit(VTableSheetEventType.CROSS_SHEET_FORMULA_CALCULATE_START, undefined);\n }\n\n /**\n * 触发跨工作表公式计算结束事件\n */\n emitCrossSheetFormulaCalculateEnd(): void {\n this.emit(VTableSheetEventType.CROSS_SHEET_FORMULA_CALCULATE_END, undefined);\n }\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ListTable } from '@visactor/vtable';
|
|
2
|
+
import type { TableEventHandlersEventArgumentMap } from '@visactor/vtable/es/ts-types/events';
|
|
3
|
+
import type { ISpreadsheetEventSource } from './event-interfaces';
|
|
4
|
+
type EventCallback = (...args: any[]) => void;
|
|
5
|
+
export interface EnhancedTableEvent {
|
|
6
|
+
sheetKey: string;
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
export declare class TableEventRelay {
|
|
10
|
+
private _tableEventMap;
|
|
11
|
+
private vtableSheet;
|
|
12
|
+
private boundSheets;
|
|
13
|
+
private cleanupCallbacks;
|
|
14
|
+
constructor(vtableSheet: ISpreadsheetEventSource);
|
|
15
|
+
onTableEvent<K extends keyof TableEventHandlersEventArgumentMap>(type: K, callback: (event: TableEventHandlersEventArgumentMap[K] & {
|
|
16
|
+
sheetKey: string;
|
|
17
|
+
}) => void): void;
|
|
18
|
+
offTableEvent(type: string, callback?: EventCallback): void;
|
|
19
|
+
private cleanupWrappedCallbacks;
|
|
20
|
+
bindSheetEvents(sheetKey: string, tableInstance: ListTable): void;
|
|
21
|
+
private bindSheetEvent;
|
|
22
|
+
private bindToAllSheets;
|
|
23
|
+
unbindSheetEvents(sheetKey: string, tableInstance: ListTable): void;
|
|
24
|
+
private unbindFromAllSheets;
|
|
25
|
+
getRegisteredEventTypes(): string[];
|
|
26
|
+
getListenerCount(type: string): number;
|
|
27
|
+
clearAllListeners(): void;
|
|
28
|
+
destroy(): void;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.TableEventRelay = void 0;
|
|
6
|
+
|
|
7
|
+
class TableEventRelay {
|
|
8
|
+
constructor(vtableSheet) {
|
|
9
|
+
this._tableEventMap = {}, this.boundSheets = new Set, this.cleanupCallbacks = new Map,
|
|
10
|
+
this.vtableSheet = vtableSheet;
|
|
11
|
+
}
|
|
12
|
+
onTableEvent(type, callback) {
|
|
13
|
+
this._tableEventMap[type] || (this._tableEventMap[type] = []);
|
|
14
|
+
this._tableEventMap[type].some((item => item.callback === callback)) || (this._tableEventMap[type].push({
|
|
15
|
+
callback: callback,
|
|
16
|
+
wrappedCallbacks: new Map
|
|
17
|
+
}), this.bindToAllSheets(type));
|
|
18
|
+
}
|
|
19
|
+
offTableEvent(type, callback) {
|
|
20
|
+
if (this._tableEventMap[type]) if (callback) {
|
|
21
|
+
const index = this._tableEventMap[type].findIndex((h => h.callback === callback));
|
|
22
|
+
if (index >= 0) {
|
|
23
|
+
const handler = this._tableEventMap[type][index];
|
|
24
|
+
this.cleanupWrappedCallbacks(handler, type), this._tableEventMap[type].splice(index, 1),
|
|
25
|
+
0 === this._tableEventMap[type].length && (delete this._tableEventMap[type], this.unbindFromAllSheets(type));
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
this._tableEventMap[type].forEach((handler => {
|
|
29
|
+
this.cleanupWrappedCallbacks(handler, type);
|
|
30
|
+
})), delete this._tableEventMap[type], this.unbindFromAllSheets(type);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
cleanupWrappedCallbacks(handler, eventType) {
|
|
34
|
+
handler.wrappedCallbacks.forEach(((wrappedCallback, sheetKey) => {
|
|
35
|
+
const worksheet = this.vtableSheet.workSheetInstances.get(sheetKey);
|
|
36
|
+
(null == worksheet ? void 0 : worksheet.tableInstance) && worksheet.tableInstance.off(eventType, wrappedCallback);
|
|
37
|
+
})), handler.wrappedCallbacks.clear();
|
|
38
|
+
}
|
|
39
|
+
bindSheetEvents(sheetKey, tableInstance) {
|
|
40
|
+
if (this.boundSheets.has(sheetKey)) return;
|
|
41
|
+
for (const eventType in this._tableEventMap) this.bindSheetEvent(sheetKey, tableInstance, eventType);
|
|
42
|
+
this.boundSheets.add(sheetKey);
|
|
43
|
+
this.cleanupCallbacks.set(sheetKey, (() => {
|
|
44
|
+
this.unbindSheetEvents(sheetKey, tableInstance), this.boundSheets.delete(sheetKey),
|
|
45
|
+
this.cleanupCallbacks.delete(sheetKey);
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
bindSheetEvent(sheetKey, tableInstance, eventType) {
|
|
49
|
+
(this._tableEventMap[eventType] || []).forEach((handler => {
|
|
50
|
+
if (handler.wrappedCallbacks.has(sheetKey)) {
|
|
51
|
+
const oldCallback = handler.wrappedCallbacks.get(sheetKey);
|
|
52
|
+
tableInstance.off(eventType, oldCallback);
|
|
53
|
+
}
|
|
54
|
+
const wrappedCallback = (...args) => {
|
|
55
|
+
const enhancedEvent = Object.assign({
|
|
56
|
+
sheetKey: sheetKey
|
|
57
|
+
}, args[0]);
|
|
58
|
+
handler.callback(enhancedEvent);
|
|
59
|
+
};
|
|
60
|
+
handler.wrappedCallbacks.set(sheetKey, wrappedCallback), tableInstance.on(eventType, wrappedCallback);
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
bindToAllSheets(eventType) {
|
|
64
|
+
this.vtableSheet.workSheetInstances.forEach(((worksheet, sheetKey) => {
|
|
65
|
+
worksheet.tableInstance && this.bindSheetEvent(sheetKey, worksheet.tableInstance, eventType);
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
unbindSheetEvents(sheetKey, tableInstance) {
|
|
69
|
+
for (const eventType in this._tableEventMap) {
|
|
70
|
+
(this._tableEventMap[eventType] || []).forEach((handler => {
|
|
71
|
+
const wrappedCallback = handler.wrappedCallbacks.get(sheetKey);
|
|
72
|
+
wrappedCallback && (tableInstance.off(eventType, wrappedCallback), handler.wrappedCallbacks.delete(sheetKey));
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
unbindFromAllSheets(eventType) {
|
|
77
|
+
this.vtableSheet.workSheetInstances.forEach(((worksheet, sheetKey) => {
|
|
78
|
+
if (worksheet.tableInstance) {
|
|
79
|
+
(this._tableEventMap[eventType] || []).forEach((handler => {
|
|
80
|
+
const wrappedCallback = handler.wrappedCallbacks.get(sheetKey);
|
|
81
|
+
wrappedCallback && (worksheet.tableInstance.off(eventType, wrappedCallback), handler.wrappedCallbacks.delete(sheetKey));
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
getRegisteredEventTypes() {
|
|
87
|
+
return Object.keys(this._tableEventMap);
|
|
88
|
+
}
|
|
89
|
+
getListenerCount(type) {
|
|
90
|
+
var _a;
|
|
91
|
+
return (null === (_a = this._tableEventMap[type]) || void 0 === _a ? void 0 : _a.length) || 0;
|
|
92
|
+
}
|
|
93
|
+
clearAllListeners() {
|
|
94
|
+
for (const cleanup of this.cleanupCallbacks.values()) cleanup();
|
|
95
|
+
this.vtableSheet.workSheetInstances.forEach(((worksheet, sheetKey) => {
|
|
96
|
+
worksheet.tableInstance && this.unbindSheetEvents(sheetKey, worksheet.tableInstance);
|
|
97
|
+
})), this._tableEventMap = {}, this.boundSheets.clear(), this.cleanupCallbacks.clear();
|
|
98
|
+
}
|
|
99
|
+
destroy() {
|
|
100
|
+
this.clearAllListeners();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
exports.TableEventRelay = TableEventRelay;
|
|
105
|
+
//# sourceMappingURL=table-event-relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event/table-event-relay.ts"],"names":[],"mappings":"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","file":"table-event-relay.js","sourcesContent":["/**\n * Table 事件中转器\n * 核心功能:\n * 1. 在 VTableSheet 层注册事件监听器\n * 2. 在每个 WorkSheet 初始化时,自动绑定事件到其 tableInstance\n * 3. 当事件触发时,自动附带 sheetKey 信息\n */\n\nimport type { ListTable } from '@visactor/vtable';\nimport type { TableEventHandlersEventArgumentMap } from '@visactor/vtable/es/ts-types/events';\nimport type { ISpreadsheetEventSource } from './event-interfaces';\n\ntype EventCallback = (...args: any[]) => void;\n\ninterface EventHandler {\n callback: (event: any) => void;\n /** 存储每个sheet的包装回调,避免内存泄漏 */\n wrappedCallbacks: Map<string, EventCallback>;\n}\n\n/**\n * 增强的事件对象,自动附带 sheetKey\n */\nexport interface EnhancedTableEvent {\n /** 触发事件的 sheet key */\n sheetKey: string;\n /** 原始 VTable 事件的所有属性 */\n [key: string]: any;\n}\n\n/**\n * Table 事件中转器类(用于 VTableSheet)\n *\n * 在 VTableSheet 层统一管理所有 sheet 的 table 事件\n * 当任何 sheet 触发事件时,自动附带 sheetKey 信息\n */\nexport class TableEventRelay {\n /** 事件映射表 - 存储用户注册的监听器 */\n private _tableEventMap: Record<string, EventHandler[]> = {};\n\n /** VTableSheet 引用 */\n private vtableSheet: ISpreadsheetEventSource;\n\n /** 跟踪已绑定的sheet,防止重复绑定 */\n private boundSheets: Set<string> = new Set();\n\n /** 清理监听器,防止内存泄漏 */\n private cleanupCallbacks: Map<string, () => void> = new Map();\n\n constructor(vtableSheet: ISpreadsheetEventSource) {\n this.vtableSheet = vtableSheet;\n }\n\n /**\n * 注册 Table 事件监听器(在 VTableSheet 层)\n *\n * 会监听所有 sheet 的 tableInstance 事件,并在回调时自动附带 sheetKey\n *\n * @example\n * ```typescript\n * // 在 VTableSheet 层注册\n * sheet.onTableEvent('click_cell', (event) => {\n * // event.sheetKey 告诉你是哪个 sheet\n * // event 的其他属性是原始 VTable 事件\n * console.log(`Sheet ${event.sheetKey} 的单元格 [${event.row}, ${event.col}] 被点击`);\n * });\n * ```\n */\n onTableEvent<K extends keyof TableEventHandlersEventArgumentMap>(\n type: K,\n callback: (event: TableEventHandlersEventArgumentMap[K] & { sheetKey: string }) => void\n ): void {\n if (!this._tableEventMap[type]) {\n this._tableEventMap[type] = [];\n }\n\n // 检查是否已经注册过该回调,避免重复注册\n const existingCallbacks = this._tableEventMap[type];\n const isAlreadyRegistered = existingCallbacks.some(item => item.callback === callback);\n\n if (!isAlreadyRegistered) {\n this._tableEventMap[type].push({\n callback,\n wrappedCallbacks: new Map<string, EventCallback>()\n });\n\n // 为所有已存在的 sheet 绑定事件\n this.bindToAllSheets(type);\n }\n }\n\n /**\n * 移除 Table 事件监听器\n *\n * @param type 事件类型\n * @param callback 回调函数(可选,不传则移除该类型的所有监听器)\n */\n offTableEvent(type: string, callback?: EventCallback): void {\n if (!this._tableEventMap[type]) {\n return;\n }\n\n if (!callback) {\n // 移除所有监听器\n const handlers = this._tableEventMap[type];\n // 先清理所有包装回调\n handlers.forEach(handler => {\n this.cleanupWrappedCallbacks(handler, type);\n });\n\n delete this._tableEventMap[type];\n // 从所有 sheet 解绑\n this.unbindFromAllSheets(type);\n } else {\n // 移除特定监听器\n const index = this._tableEventMap[type].findIndex(h => h.callback === callback);\n if (index >= 0) {\n const handler = this._tableEventMap[type][index];\n // 清理该监听器的包装回调\n this.cleanupWrappedCallbacks(handler, type);\n\n this._tableEventMap[type].splice(index, 1);\n\n if (this._tableEventMap[type].length === 0) {\n delete this._tableEventMap[type];\n // 从所有 sheet 解绑\n this.unbindFromAllSheets(type);\n }\n }\n }\n }\n\n /**\n * 清理包装回调,避免内存泄漏\n */\n private cleanupWrappedCallbacks(handler: EventHandler, eventType: string): void {\n handler.wrappedCallbacks.forEach((wrappedCallback, sheetKey) => {\n const worksheet = this.vtableSheet.workSheetInstances.get(sheetKey);\n if (worksheet?.tableInstance) {\n worksheet.tableInstance.off(eventType as any, wrappedCallback);\n }\n });\n handler.wrappedCallbacks.clear();\n }\n\n /**\n * 为特定 sheet 绑定事件\n * 在 WorkSheet 初始化时调用\n *\n * @param sheetKey sheet 的 key\n * @param tableInstance VTable 的 ListTable 实例\n * @internal\n */\n bindSheetEvents(sheetKey: string, tableInstance: ListTable): void {\n // 防止重复绑定\n if (this.boundSheets.has(sheetKey)) {\n console.warn(`[TableEventRelay] Sheet ${sheetKey} 已经绑定过事件,跳过重复绑定`);\n return;\n }\n\n // 为这个 sheet 绑定所有已注册的事件\n for (const eventType in this._tableEventMap) {\n this.bindSheetEvent(sheetKey, tableInstance, eventType);\n }\n\n this.boundSheets.add(sheetKey);\n\n // 注册清理回调,当sheet销毁时自动清理\n const cleanup = () => {\n this.unbindSheetEvents(sheetKey, tableInstance);\n this.boundSheets.delete(sheetKey);\n this.cleanupCallbacks.delete(sheetKey);\n };\n\n this.cleanupCallbacks.set(sheetKey, cleanup);\n }\n\n /**\n * 为特定 sheet 绑定单个事件类型\n *\n * @param sheetKey sheet 的 key\n * @param tableInstance VTable 的 ListTable 实例\n * @param eventType 事件类型\n * @private\n */\n private bindSheetEvent(sheetKey: string, tableInstance: ListTable, eventType: string): void {\n const handlers = this._tableEventMap[eventType] || [];\n\n handlers.forEach(handler => {\n // 检查是否已经绑定过这个事件\n if (handler.wrappedCallbacks.has(sheetKey)) {\n // 如果已经绑定过,先解绑旧的\n const oldCallback = handler.wrappedCallbacks.get(sheetKey)!;\n tableInstance.off(eventType as any, oldCallback);\n }\n\n // 创建包装函数,自动附带 sheetKey\n const wrappedCallback = (...args: any[]) => {\n // 增强事件对象,添加 sheetKey\n const enhancedEvent: EnhancedTableEvent = {\n sheetKey: sheetKey,\n ...args[0] // 原始事件对象的所有属性\n };\n\n // 调用用户的回调,传入增强后的事件对象\n handler.callback(enhancedEvent);\n };\n\n // 保存包装函数的引用,用于后续解绑\n handler.wrappedCallbacks.set(sheetKey, wrappedCallback);\n\n // 绑定到 tableInstance(VTable 的 on 方法不支持 query 参数)\n tableInstance.on(eventType as any, wrappedCallback);\n });\n }\n\n /**\n * 为所有已存在的 sheet 绑定事件\n * 在用户注册新事件时调用\n *\n * @param eventType 事件类型\n * @private\n */\n private bindToAllSheets(eventType: string): void {\n this.vtableSheet.workSheetInstances.forEach((worksheet, sheetKey) => {\n if (worksheet.tableInstance) {\n this.bindSheetEvent(sheetKey, worksheet.tableInstance, eventType);\n }\n });\n }\n\n /**\n * 从特定 sheet 解绑事件\n * 在 WorkSheet 销毁时调用\n *\n * @param sheetKey sheet 的 key\n * @param tableInstance VTable 的 ListTable 实例\n * @internal\n */\n unbindSheetEvents(sheetKey: string, tableInstance: ListTable): void {\n // 解绑所有事件\n for (const eventType in this._tableEventMap) {\n const handlers = this._tableEventMap[eventType] || [];\n\n handlers.forEach(handler => {\n const wrappedCallback = handler.wrappedCallbacks.get(sheetKey);\n if (wrappedCallback) {\n tableInstance.off(eventType as any, wrappedCallback);\n handler.wrappedCallbacks.delete(sheetKey);\n }\n });\n }\n }\n\n /**\n * 从所有 sheet 解绑特定事件类型\n *\n * @param eventType 事件类型\n * @private\n */\n private unbindFromAllSheets(eventType: string): void {\n this.vtableSheet.workSheetInstances.forEach((worksheet, sheetKey) => {\n if (worksheet.tableInstance) {\n const handlers = this._tableEventMap[eventType] || [];\n handlers.forEach(handler => {\n const wrappedCallback = handler.wrappedCallbacks.get(sheetKey);\n if (wrappedCallback) {\n worksheet.tableInstance.off(eventType as any, wrappedCallback);\n handler.wrappedCallbacks.delete(sheetKey);\n }\n });\n }\n });\n }\n\n /**\n * 获取所有已注册的事件类型\n */\n getRegisteredEventTypes(): string[] {\n return Object.keys(this._tableEventMap);\n }\n\n /**\n * 获取特定事件类型的监听器数量\n */\n getListenerCount(type: string): number {\n return this._tableEventMap[type]?.length || 0;\n }\n\n /**\n * 清除所有事件监听器\n */\n clearAllListeners(): void {\n // 执行所有清理回调\n for (const cleanup of this.cleanupCallbacks.values()) {\n cleanup();\n }\n\n // 从所有 sheet 解绑\n this.vtableSheet.workSheetInstances.forEach((worksheet, sheetKey) => {\n if (worksheet.tableInstance) {\n this.unbindSheetEvents(sheetKey, worksheet.tableInstance);\n }\n });\n\n // 清空状态\n this._tableEventMap = {};\n this.boundSheets.clear();\n this.cleanupCallbacks.clear();\n }\n\n /**\n * 销毁事件中转器\n * 彻底清理所有资源,防止内存泄漏\n */\n destroy(): void {\n this.clearAllListeners();\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EventEmitter as EventEmitterType } from '@visactor/vutils';
|
|
2
|
+
export interface EventBusOptions {
|
|
3
|
+
enableErrorBoundary?: boolean;
|
|
4
|
+
enablePerformanceMonitoring?: boolean;
|
|
5
|
+
maxListeners?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class VTableSheetEventBus {
|
|
8
|
+
private eventBus;
|
|
9
|
+
private options;
|
|
10
|
+
private performanceMetrics;
|
|
11
|
+
private wrappedCallbacks;
|
|
12
|
+
constructor(options?: EventBusOptions);
|
|
13
|
+
on(eventType: string, callback: (...args: any[]) => void): void;
|
|
14
|
+
off(eventType: string, callback?: (...args: any[]) => void): void;
|
|
15
|
+
emit(eventType: string, ...args: any[]): void;
|
|
16
|
+
once(eventType: string, callback: (...args: any[]) => void): void;
|
|
17
|
+
removeAllListeners(eventType?: string): void;
|
|
18
|
+
listenerCount(eventType: string): number;
|
|
19
|
+
getPerformanceMetrics(eventType?: string): Map<string, number[]>;
|
|
20
|
+
getEventEmitter(): EventEmitterType;
|
|
21
|
+
private createErrorBoundary;
|
|
22
|
+
private recordPerformanceMetric;
|
|
23
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.VTableSheetEventBus = void 0;
|
|
6
|
+
|
|
7
|
+
const vutils_1 = require("@visactor/vutils");
|
|
8
|
+
|
|
9
|
+
class VTableSheetEventBus {
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
this.performanceMetrics = new Map, this.wrappedCallbacks = new WeakMap, this.options = Object.assign({
|
|
12
|
+
enableErrorBoundary: !0,
|
|
13
|
+
enablePerformanceMonitoring: !1,
|
|
14
|
+
maxListeners: 100
|
|
15
|
+
}, options), this.eventBus = new vutils_1.EventEmitter, this.options.maxListeners && "function" == typeof this.eventBus.setMaxListeners && this.eventBus.setMaxListeners(this.options.maxListeners);
|
|
16
|
+
}
|
|
17
|
+
on(eventType, callback) {
|
|
18
|
+
const wrappedCallback = this.options.enableErrorBoundary ? this.createErrorBoundary(callback, eventType) : callback;
|
|
19
|
+
this.eventBus.on(eventType, wrappedCallback), this.wrappedCallbacks.set(callback, wrappedCallback);
|
|
20
|
+
}
|
|
21
|
+
off(eventType, callback) {
|
|
22
|
+
if (callback) {
|
|
23
|
+
const wrappedCallback = this.wrappedCallbacks.get(callback);
|
|
24
|
+
wrappedCallback ? (this.eventBus.off(eventType, wrappedCallback), this.wrappedCallbacks.delete(callback)) : this.eventBus.off(eventType, callback);
|
|
25
|
+
} else this.eventBus.off(eventType), this.wrappedCallbacks = new WeakMap;
|
|
26
|
+
}
|
|
27
|
+
emit(eventType, ...args) {
|
|
28
|
+
const startTime = this.options.enablePerformanceMonitoring ? performance.now() : 0;
|
|
29
|
+
try {
|
|
30
|
+
this.eventBus.emit(eventType, ...args);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
if (!this.options.enableErrorBoundary) throw error;
|
|
33
|
+
} finally {
|
|
34
|
+
if (this.options.enablePerformanceMonitoring) {
|
|
35
|
+
const duration = performance.now() - startTime;
|
|
36
|
+
this.recordPerformanceMetric(eventType, duration);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
once(eventType, callback) {
|
|
41
|
+
const wrappedCallback = this.options.enableErrorBoundary ? this.createErrorBoundary(callback, eventType, !0) : callback;
|
|
42
|
+
this.eventBus.once(eventType, wrappedCallback), this.wrappedCallbacks.set(callback, wrappedCallback);
|
|
43
|
+
}
|
|
44
|
+
removeAllListeners(eventType) {
|
|
45
|
+
eventType ? (this.eventBus.removeAllListeners(eventType), this.performanceMetrics.delete(eventType)) : (this.eventBus.removeAllListeners(),
|
|
46
|
+
this.performanceMetrics.clear());
|
|
47
|
+
}
|
|
48
|
+
listenerCount(eventType) {
|
|
49
|
+
return this.eventBus.listenerCount(eventType);
|
|
50
|
+
}
|
|
51
|
+
getPerformanceMetrics(eventType) {
|
|
52
|
+
if (eventType) {
|
|
53
|
+
const metrics = new Map, eventMetrics = this.performanceMetrics.get(eventType);
|
|
54
|
+
return eventMetrics && metrics.set(eventType, [ ...eventMetrics ]), metrics;
|
|
55
|
+
}
|
|
56
|
+
return new Map(this.performanceMetrics);
|
|
57
|
+
}
|
|
58
|
+
getEventEmitter() {
|
|
59
|
+
return this.eventBus;
|
|
60
|
+
}
|
|
61
|
+
createErrorBoundary(callback, eventType, isOnce = !1) {
|
|
62
|
+
return (...args) => {
|
|
63
|
+
try {
|
|
64
|
+
callback(...args);
|
|
65
|
+
} catch (error) {}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
recordPerformanceMetric(eventType, duration) {
|
|
69
|
+
this.performanceMetrics.has(eventType) || this.performanceMetrics.set(eventType, []);
|
|
70
|
+
const metrics = this.performanceMetrics.get(eventType);
|
|
71
|
+
metrics.push(duration), metrics.length > 100 && metrics.shift();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
exports.VTableSheetEventBus = VTableSheetEventBus;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/event/vtable-sheet-event-bus.ts"],"names":[],"mappings":"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","file":"vtable-sheet-event-bus.js","sourcesContent":["/**\n * 统一事件总线\n * 为整个VTableSheet组件提供单一的事件管理入口\n */\n\nimport { EventEmitter } from '@visactor/vutils';\nimport type { EventEmitter as EventEmitterType } from '@visactor/vutils';\n\nexport interface EventBusOptions {\n /** 是否启用错误边界 */\n enableErrorBoundary?: boolean;\n /** 是否启用性能监控 */\n enablePerformanceMonitoring?: boolean;\n /** 事件监听器最大数量限制 */\n maxListeners?: number;\n}\n\nexport class VTableSheetEventBus {\n private eventBus: EventEmitterType;\n private options: EventBusOptions;\n private performanceMetrics: Map<string, number[]> = new Map();\n private wrappedCallbacks: WeakMap<Function, Function> = new WeakMap();\n\n constructor(options: EventBusOptions = {}) {\n this.options = {\n enableErrorBoundary: true,\n enablePerformanceMonitoring: false,\n maxListeners: 100,\n ...options\n };\n\n this.eventBus = new EventEmitter();\n\n // VUtils EventEmitter might not have setMaxListeners method\n if (this.options.maxListeners && typeof (this.eventBus as any).setMaxListeners === 'function') {\n (this.eventBus as any).setMaxListeners(this.options.maxListeners);\n }\n }\n\n /**\n * 监听事件(带错误边界)\n */\n on(eventType: string, callback: (...args: any[]) => void): void {\n const wrappedCallback = this.options.enableErrorBoundary ? this.createErrorBoundary(callback, eventType) : callback;\n\n this.eventBus.on(eventType, wrappedCallback);\n this.wrappedCallbacks.set(callback, wrappedCallback);\n }\n\n /**\n * 取消监听事件\n */\n off(eventType: string, callback?: (...args: any[]) => void): void {\n if (callback) {\n // 查找包装后的回调\n const wrappedCallback = this.wrappedCallbacks.get(callback);\n if (wrappedCallback) {\n this.eventBus.off(eventType, wrappedCallback as any);\n this.wrappedCallbacks.delete(callback);\n } else {\n // 如果没有找到包装后的回调,尝试直接移除\n this.eventBus.off(eventType, callback);\n }\n } else {\n this.eventBus.off(eventType);\n // 清理所有包装回调映射\n this.wrappedCallbacks = new WeakMap();\n }\n }\n\n /**\n * 触发事件(带性能监控)\n */\n emit(eventType: string, ...args: any[]): void {\n const startTime = this.options.enablePerformanceMonitoring ? performance.now() : 0;\n\n try {\n this.eventBus.emit(eventType, ...args);\n } catch (error) {\n if (this.options.enableErrorBoundary) {\n console.error(`[VTableSheetEventBus] Error emitting event '${eventType}':`, error);\n } else {\n throw error;\n }\n } finally {\n if (this.options.enablePerformanceMonitoring) {\n const duration = performance.now() - startTime;\n this.recordPerformanceMetric(eventType, duration);\n }\n }\n }\n\n /**\n * 监听一次性事件(带错误边界)\n */\n once(eventType: string, callback: (...args: any[]) => void): void {\n const wrappedCallback = this.options.enableErrorBoundary\n ? this.createErrorBoundary(callback, eventType, true)\n : callback;\n\n this.eventBus.once(eventType, wrappedCallback);\n this.wrappedCallbacks.set(callback, wrappedCallback);\n }\n\n /**\n * 移除所有监听\n */\n removeAllListeners(eventType?: string): void {\n if (eventType) {\n this.eventBus.removeAllListeners(eventType);\n this.performanceMetrics.delete(eventType);\n } else {\n this.eventBus.removeAllListeners();\n this.performanceMetrics.clear();\n }\n }\n\n /**\n * 获取指定事件的监听器数量\n */\n listenerCount(eventType: string): number {\n return this.eventBus.listenerCount(eventType);\n }\n\n /**\n * 获取事件性能指标\n */\n getPerformanceMetrics(eventType?: string): Map<string, number[]> {\n if (eventType) {\n const metrics = new Map<string, number[]>();\n const eventMetrics = this.performanceMetrics.get(eventType);\n if (eventMetrics) {\n metrics.set(eventType, [...eventMetrics]);\n }\n return metrics;\n }\n return new Map(this.performanceMetrics);\n }\n\n /**\n * 获取底层EventEmitter实例(用于兼容需要直接访问的场景)\n */\n getEventEmitter(): EventEmitterType {\n return this.eventBus;\n }\n\n /**\n * 创建错误边界包装函数\n */\n private createErrorBoundary(\n callback: (...args: any[]) => void,\n eventType: string,\n isOnce = false\n ): (...args: any[]) => void {\n return (...args: any[]) => {\n try {\n callback(...args);\n } catch (error) {\n console.error(\n `[VTableSheetEventBus] Error in ${isOnce ? 'once' : 'on'} listener for event '${eventType}':`,\n error\n );\n // 可以选择是否重新抛出错误,这里选择吞掉错误以保证系统稳定性\n }\n };\n }\n\n /**\n * 记录性能指标\n */\n private recordPerformanceMetric(eventType: string, duration: number): void {\n if (!this.performanceMetrics.has(eventType)) {\n this.performanceMetrics.set(eventType, []);\n }\n\n const metrics = this.performanceMetrics.get(eventType)!;\n metrics.push(duration);\n\n // 保持最近100次记录\n if (metrics.length > 100) {\n metrics.shift();\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type WorkSheetEventMap } from '../ts-types/spreadsheet-events';
|
|
2
|
+
import { BaseEventManager } from './base-event-manager';
|
|
3
|
+
import type { IWorksheetEventSource } from './event-interfaces';
|
|
4
|
+
export declare class WorkSheetEventManager extends BaseEventManager<WorkSheetEventMap> {
|
|
5
|
+
private worksheet;
|
|
6
|
+
constructor(worksheet: IWorksheetEventSource);
|
|
7
|
+
protected getEventTypes(): string[];
|
|
8
|
+
on<K extends keyof WorkSheetEventMap>(type: K, callback: (event: WorkSheetEventMap[K]) => void): void;
|
|
9
|
+
off<K extends keyof WorkSheetEventMap>(type: K, callback?: (event: WorkSheetEventMap[K]) => void): void;
|
|
10
|
+
emit<K extends keyof WorkSheetEventMap>(type: K, event: WorkSheetEventMap[K]): void;
|
|
11
|
+
emitFormulaCalculateStart(formulaCount?: number): void;
|
|
12
|
+
emitFormulaCalculateEnd(formulaCount?: number, duration?: number): void;
|
|
13
|
+
emitFormulaError(cell: {
|
|
14
|
+
row: number;
|
|
15
|
+
col: number;
|
|
16
|
+
sheet: string;
|
|
17
|
+
}, formula: string, error: string | Error): void;
|
|
18
|
+
emitFormulaDependencyChanged(): void;
|
|
19
|
+
emitFormulaAdded(cell: {
|
|
20
|
+
row: number;
|
|
21
|
+
col: number;
|
|
22
|
+
}, formula?: string): void;
|
|
23
|
+
emitFormulaRemoved(cell: {
|
|
24
|
+
row: number;
|
|
25
|
+
col: number;
|
|
26
|
+
}, formula?: string): void;
|
|
27
|
+
emitDataLoaded(rowCount: number, colCount: number): void;
|
|
28
|
+
}
|