From a527b0b076744c1da0f681868fcd16ff24db1c86 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Mon, 13 Jan 2025 16:26:06 +0100 Subject: [PATCH] fix(types): add typings for EventBus Signed-off-by: Maksim Sukharev --- src/init.js | 2 +- src/services/EventBus.ts | 13 ++++----- src/types/eventBusTypes.ts | 56 ++++++++++++++++++++++++++++++++++++++ src/utils/signaling.js | 2 +- 4 files changed, 63 insertions(+), 10 deletions(-) create mode 100644 src/types/eventBusTypes.ts diff --git a/src/init.js b/src/init.js index cd8b5c01adc9..318db19c6ca9 100644 --- a/src/init.js +++ b/src/init.js @@ -57,7 +57,7 @@ EventBus.on('signaling-join-room', (payload) => { store.dispatch('updateLastJoinedConversationToken', token) }) -EventBus.on('signaling-recording-status-changed', (token, status) => { +EventBus.on('signaling-recording-status-changed', ([token, status]) => { store.dispatch('setConversationProperties', { token, properties: { callRecording: status } }) if (status !== CALL.RECORDING.FAILED) { diff --git a/src/services/EventBus.ts b/src/services/EventBus.ts index 6d9ac15fc7c6..1959e2a018c5 100644 --- a/src/services/EventBus.ts +++ b/src/services/EventBus.ts @@ -4,15 +4,12 @@ */ import mitt from 'mitt' -import type { Emitter, EventType, Handler, WildcardHandler } from 'mitt' -type Events = Record -type GenericEventHandler = Handler | WildcardHandler -type ExtendedEmitter = Emitter & { - once(type: Key, handler: Handler): void - once(type: '*', handler: WildcardHandler): void - _onceHandlers: Map> -} +import type { + Events, + GenericEventHandler, + ExtendedEmitter, +} from '../types/eventBusTypes.ts' export const EventBus: ExtendedEmitter = mitt() as ExtendedEmitter diff --git a/src/types/eventBusTypes.ts b/src/types/eventBusTypes.ts new file mode 100644 index 000000000000..3dc246613d25 --- /dev/null +++ b/src/types/eventBusTypes.ts @@ -0,0 +1,56 @@ +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +// import type { components, operations } from './openapi/openapi-full.ts' + +import type { Emitter, EventType, Handler, WildcardHandler } from 'mitt' +import type { Route } from 'vue-router' + +import type { ChatMessage, Conversation, Participant } from './index.ts' +import type { components } from './openapi/openapi-full.ts' + +// List of used events across the app +export type Events = Record & { + 'audio-player-ended': number, + 'conversations-received': { singleConversation: boolean }, + 'deleted-session-detected': void, + 'duplicate-session-detected': void, + 'editing-message': void, + 'editing-message-processing': { messageId: number, value: boolean }, + 'focus-chat-input': void, + 'focus-message': number, // TODO: listener method can receive ...[messageId, smooth, highlightAnimation] + 'forbidden-route': { error: string }, + 'joined-conversation': { token: string }, + 'message-height-changed': { heightDiff: number }, + 'poll-drafts-open': void, + 'poll-editor-open': number, + 'refresh-peer-list': void, + 'retry-message': number, + 'route-change': { from: Route, to: Route }, + 'scroll-chat-to-bottom': { smooth?: boolean, force?: boolean }, + 'should-refresh-chat-messages': void, + 'should-refresh-conversations': { token: string, properties: Partial } | { all: true } | void, + 'signaling-join-call': [string, number], + 'signaling-join-call-failed': [string, { meta: components['schemas']['OCSMeta'], data: { error: string } }], + 'signaling-join-room': [string], + 'signaling-participant-list-changed': void, + 'signaling-recording-status-changed': [string, number], + 'signaling-servers-updated': { server: string, verify: boolean }[], + 'signaling-users-changed': [(Partial & ({ sessionId: string } | { nextcloudSessionId: string }))[]], + 'signaling-users-in-room': [{ sessionId: string, userId: string }[]], + 'smart-picker-open': void, + 'switch-to-conversation': { token: string }, + 'talk:poll-added': { token: string, message: ChatMessage }, + 'upload-discard': void, + 'upload-finished': void, + 'upload-start': void, +} + +// Extended event for mitt() library +export type GenericEventHandler = Handler | WildcardHandler +export type ExtendedEmitter = Emitter & { + once(type: Key, handler: Handler): void + once(type: '*', handler: WildcardHandler): void + _onceHandlers: Map> +} diff --git a/src/utils/signaling.js b/src/utils/signaling.js index ff146a6d202a..44eb9197e183 100644 --- a/src/utils/signaling.js +++ b/src/utils/signaling.js @@ -1417,7 +1417,7 @@ Signaling.Standalone.prototype.processRoomMessageEvent = function(token, data) { EventBus.emit('should-refresh-chat-messages') break case 'recording': - EventBus.emit('signaling-recording-status-changed', token, data.recording.status) + EventBus.emit('signaling-recording-status-changed', [token, data.recording.status]) break default: console.error('Unknown room message event', data)