@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 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
@@ -4,7 +4,7 @@
4
4
  "name": "@ledvance/base",
5
5
  "pid": [],
6
6
  "uiid": "",
7
- "version": "1.3.41",
7
+ "version": "1.3.43",
8
8
  "scripts": {
9
9
  "prepublishOnly": "python update-localazy.py"
10
10
  },
@@ -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;