diff --git a/src/helpers/dropdownHover.ts b/src/helpers/dropdownHover.ts index c80672a7..35a10c8e 100644 --- a/src/helpers/dropdownHover.ts +++ b/src/helpers/dropdownHover.ts @@ -106,7 +106,7 @@ export default class DropdownHover extends EventListenerBase<{ } if((this.element.style.display && enable === undefined) || enable) { - const res = this.dispatchEvent('open'); + const res = this.dispatchResultableEvent('open'); await Promise.all(res); this.element.style.display = ''; diff --git a/src/helpers/eventListenerBase.ts b/src/helpers/eventListenerBase.ts index 3eac5ff9..4bcd2f58 100644 --- a/src/helpers/eventListenerBase.ts +++ b/src/helpers/eventListenerBase.ts @@ -107,16 +107,13 @@ export default class EventListenerBase(name: T, ...args: ArgumentTypes) { + private _dispatchEvent(name: T, collectResults: boolean, ...args: ArgumentTypes) { if(this.reuseResults) { this.listenerResults[name] = args; } - const arr: Array> = []; + const arr: Array> = collectResults && []; - /* let a = e.wm.get(this)[name]; - if(!a) return arr; - const listeners = [...a]; */ const listeners = this.listeners[name]; if(listeners) { // ! this one will guarantee execution even if delete another listener during setting @@ -127,28 +124,35 @@ export default class EventListenerBase(name: T, ...args: ArgumentTypes) { + return this._dispatchEvent(name, true, ...args); + } + + // * must be protected, but who cares + public dispatchEvent(name: T, ...args: ArgumentTypes) { + this._dispatchEvent(name, false, ...args); + } + public cleanup() { this.listeners = {}; this.listenerResults = {}; diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index f51a8da9..fcdbe823 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -2933,10 +2933,7 @@ export class AppMessagesManager { return el; } - public wrapMessageActionTextNew(message: MyMessage, plain: true): string; - public wrapMessageActionTextNew(message: MyMessage, plain?: false): HTMLElement; - public wrapMessageActionTextNew(message: MyMessage, plain: boolean): HTMLElement | string; - public wrapMessageActionTextNew(message: MyMessage, plain?: boolean): HTMLElement | string { + private wrapMessageActionTextNewUnsafe(message: MyMessage, plain?: boolean) { const element: HTMLElement = plain ? undefined : document.createElement('span'); const action = 'action' in message && message.action; @@ -3134,7 +3131,7 @@ export class AppMessagesManager { if(users.length > 1) { const joined = join( - users.map((userId: UserId) => (getNameDivHTML(userId.toPeerId(), plain) as string).trim()), + users.map((userId: UserId) => getNameDivHTML(userId.toPeerId(), plain)), false, plain ); @@ -3190,6 +3187,18 @@ export class AppMessagesManager { } } + public wrapMessageActionTextNew(message: MyMessage, plain: true): string; + public wrapMessageActionTextNew(message: MyMessage, plain?: false): HTMLElement; + public wrapMessageActionTextNew(message: MyMessage, plain: boolean): HTMLElement | string; + public wrapMessageActionTextNew(message: MyMessage, plain?: boolean): HTMLElement | string { + try { + return this.wrapMessageActionTextNewUnsafe(message, plain); + } catch(err) { + this.log.error('wrapMessageActionTextNewUnsafe error:', err); + return plain ? '' : document.createElement('span'); + } + } + public reportMessages(peerId: PeerId, mids: number[], reason: ReportReason['_'], message?: string) { return apiManager.invokeApiSingle('messages.report', { peer: appPeersManager.getInputPeerById(peerId),