@ledvance/base 1.3.41 → 1.3.43
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/localazy.json +8 -1
- package/package.json +1 -1
- package/src/eventEmitter/LdvEventEmitter.ts +127 -0
- package/src/eventEmitter/hooks.ts +23 -0
- package/src/eventEmitter/index.ts +13 -0
- package/src/i18n/strings.ts +373 -184
- package/translateKey.txt +7 -0
package/localazy.json
CHANGED
|
@@ -1034,7 +1034,14 @@
|
|
|
1034
1034
|
"MATCH:plug_energyconsumptionswitch",
|
|
1035
1035
|
"MATCH:switchtitle_energyconsumption",
|
|
1036
1036
|
"MATCH:switchonlyonce",
|
|
1037
|
-
"MATCH:infobutton_totalenergy"
|
|
1037
|
+
"MATCH:infobutton_totalenergy",
|
|
1038
|
+
"MATCH:thermostat_maximum",
|
|
1039
|
+
"MATCH:thermostat_minimum",
|
|
1040
|
+
"MATCH:online",
|
|
1041
|
+
"MATCH:offline",
|
|
1042
|
+
"MATCH:consumption_data_field4_button_text",
|
|
1043
|
+
"MATCH:consumption_data_price_per_l_headline_text",
|
|
1044
|
+
"MATCH:consumption_data_price_per_l_description_text"
|
|
1038
1045
|
],
|
|
1039
1046
|
"replacements": {
|
|
1040
1047
|
"REGEX:% %1\\$s.*?\\)%": "{0}",
|
package/package.json
CHANGED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
type EventHandler<T = any> = (data: T) => void;
|
|
2
|
+
|
|
3
|
+
interface EventSubscription {
|
|
4
|
+
remove: () => void;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export class LdvEventEmitter {
|
|
8
|
+
private events: Map<string, Set<EventHandler>>;
|
|
9
|
+
|
|
10
|
+
constructor() {
|
|
11
|
+
this.events = new Map();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 添加事件监听器
|
|
16
|
+
* @param eventName 事件名称
|
|
17
|
+
* @param handler 事件处理函数
|
|
18
|
+
* @returns 事件订阅对象,可用于移除监听器
|
|
19
|
+
*/
|
|
20
|
+
addListener<T = any>(eventName: string, handler: EventHandler<T>): EventSubscription {
|
|
21
|
+
if (!this.events.has(eventName)) {
|
|
22
|
+
this.events.set(eventName, new Set());
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const handlers = this.events.get(eventName)!;
|
|
26
|
+
handlers.add(handler);
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
remove: () => this.removeListener(eventName, handler),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 添加事件监听器(addListener的别名)
|
|
35
|
+
*/
|
|
36
|
+
on<T = any>(eventName: string, handler: EventHandler<T>): EventSubscription {
|
|
37
|
+
return this.addListener(eventName, handler);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 添加只执行一次的事件监听器
|
|
42
|
+
* @param eventName 事件名称
|
|
43
|
+
* @param handler 事件处理函数
|
|
44
|
+
* @returns 事件订阅对象
|
|
45
|
+
*/
|
|
46
|
+
once<T = any>(eventName: string, handler: EventHandler<T>): EventSubscription {
|
|
47
|
+
const onceHandler: EventHandler<T> = (data: T) => {
|
|
48
|
+
handler(data);
|
|
49
|
+
this.removeListener(eventName, onceHandler);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return this.addListener(eventName, onceHandler);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 移除特定事件的特定监听器
|
|
57
|
+
* @param eventName 事件名称
|
|
58
|
+
* @param handler 要移除的事件处理函数
|
|
59
|
+
* @returns 是否成功移除
|
|
60
|
+
*/
|
|
61
|
+
removeListener<T = any>(eventName: string, handler: EventHandler<T>): boolean {
|
|
62
|
+
const handlers = this.events.get(eventName);
|
|
63
|
+
if (!handlers) return false;
|
|
64
|
+
|
|
65
|
+
const result = handlers.delete(handler);
|
|
66
|
+
if (handlers.size === 0) {
|
|
67
|
+
this.events.delete(eventName);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 移除特定事件的特定监听器(removeListener的别名)
|
|
75
|
+
*/
|
|
76
|
+
off<T = any>(eventName: string, handler: EventHandler<T>): boolean {
|
|
77
|
+
return this.removeListener(eventName, handler);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 移除特定事件的所有监听器
|
|
82
|
+
* @param eventName 事件名称
|
|
83
|
+
* @returns 是否成功移除
|
|
84
|
+
*/
|
|
85
|
+
removeAllListeners(eventName: string): boolean {
|
|
86
|
+
return this.events.delete(eventName);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 触发特定事件
|
|
91
|
+
* @param eventName 事件名称
|
|
92
|
+
* @param data 事件数据
|
|
93
|
+
* @returns 是否有监听器接收了事件
|
|
94
|
+
*/
|
|
95
|
+
emit<T = any>(eventName: string, data?: T): boolean {
|
|
96
|
+
const handlers = this.events.get(eventName);
|
|
97
|
+
if (!handlers || handlers.size === 0) return false;
|
|
98
|
+
|
|
99
|
+
handlers.forEach(handler => {
|
|
100
|
+
try {
|
|
101
|
+
handler(data as T);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error(`Error in event handler for "${eventName}":`, error);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 获取特定事件的监听器数量
|
|
112
|
+
* @param eventName 事件名称
|
|
113
|
+
* @returns 监听器数量
|
|
114
|
+
*/
|
|
115
|
+
listenerCount(eventName: string): number {
|
|
116
|
+
const handlers = this.events.get(eventName);
|
|
117
|
+
return handlers ? handlers.size : 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* 获取所有已注册的事件名称
|
|
122
|
+
* @returns 事件名称数组
|
|
123
|
+
*/
|
|
124
|
+
eventNames(): string[] {
|
|
125
|
+
return Array.from(this.events.keys());
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { LdvEventEmitter } from './LdvEventEmitter';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 在React函数组件中使用EventEmitter的Hook
|
|
6
|
+
* @param emitter EventEmitter实例
|
|
7
|
+
* @param eventName 要监听的事件名称
|
|
8
|
+
* @param handler 事件处理函数
|
|
9
|
+
*/
|
|
10
|
+
export function useLdvEventListener<T = any>(
|
|
11
|
+
emitter: LdvEventEmitter,
|
|
12
|
+
eventName: string,
|
|
13
|
+
handler: (data: T) => void
|
|
14
|
+
): void {
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const subscription = emitter.addListener<T>(eventName, handler);
|
|
17
|
+
|
|
18
|
+
// 在组件卸载时自动移除监听器
|
|
19
|
+
return () => {
|
|
20
|
+
subscription.remove();
|
|
21
|
+
};
|
|
22
|
+
}, [emitter, eventName, handler]);
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LdvEventEmitter } from './LdvEventEmitter';
|
|
2
|
+
import { useLdvEventListener } from './hooks';
|
|
3
|
+
|
|
4
|
+
// 创建一个全局的事件发射器实例,可在整个应用中共享
|
|
5
|
+
const ldvEventEmitter = new LdvEventEmitter();
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
LdvEventEmitter,
|
|
9
|
+
ldvEventEmitter,
|
|
10
|
+
useLdvEventListener
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default ldvEventEmitter;
|