mirror of
https://github.com/immich-app/immich.git
synced 2025-12-21 01:11:16 +03:00
refactor(web): websocket events (#7152)
This commit is contained in:
42
web/src/lib/utils/eventemitter.ts
Normal file
42
web/src/lib/utils/eventemitter.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import type {
|
||||
DefaultEventsMap,
|
||||
EventsMap,
|
||||
ReservedOrUserEventNames,
|
||||
ReservedOrUserListener,
|
||||
} from '@socket.io/component-emitter';
|
||||
import type { Socket } from 'socket.io-client';
|
||||
|
||||
export function createEventEmitter<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
ReservedEvents extends EventsMap = NonNullable<unknown>,
|
||||
>(socket: Socket<ListenEvents, EmitEvents>) {
|
||||
function on<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||
ev: Ev,
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||
) {
|
||||
socket.on(ev, listener);
|
||||
return () => {
|
||||
socket.off(ev, listener);
|
||||
};
|
||||
}
|
||||
|
||||
function once<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||
ev: Ev,
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||
) {
|
||||
socket.once(ev, listener);
|
||||
return () => {
|
||||
socket.off(ev, listener);
|
||||
};
|
||||
}
|
||||
|
||||
function off<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||
ev: Ev,
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||
) {
|
||||
socket.off(ev, listener);
|
||||
}
|
||||
|
||||
return { on, once, off };
|
||||
}
|
||||
Reference in New Issue
Block a user