/
vshmidt
/
label-studio
Обзор
Документация
Войти
/
vshmidt
/
label-studio
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
web/libs/editor/src/utils/events.ts
64 строки
1 KB
Raul Martin
refactor: echo 27: Introducing biome (#5759)
29 апр 2024, 11:39
Не верифицирован
29 апр 2024, 11:39
2660ec9
Код
Авторство
О чём код?
type Callback = (...args: any[]) => any; export class EventInvoker { events = new Map<string, Set<Callback>>(); on(eventName: string, callback: Callback) { const eventMap = this.getEventMap(eventName); if (!eventMap.has(callback)) { eventMap.add(callback); } } off(eventName: string, callback: Callback) { const eventMap = this.getEventMap(eventName); if (eventMap.has(callback)) { eventMap.delete(callback); } } removeAll(eventName: string) { const eventMap = this.getEventMap(eventName); eventMap.clear(); } invoke(eventName: string, ...args: any[]) { const eventMap = this.getEventMap(eventName); if (eventMap.size > 0) { return Promise.all([...eventMap].map((fn) => fn(...args))); } } invokeFirst(eventName: string, ...args: any[]) { const eventMap = this.getEventMap(eventName); if (eventMap.size > 0) { const items = Array.from(eventMap); return items[0](...args); } return undefined; } hasEvent(eventName: string) { return this.getEventMap(eventName).size > 0; } private getEventMap(eventName: string) { let eventMap: Set<Callback>; if (this.events.has(eventName)) { eventMap = this.events.get(eventName)!; } else { eventMap = new Set<Callback>(); this.events.set(eventName, eventMap); } return eventMap; } }