Files
modrinth/apps/app-frontend/src/providers/app-events.ts
T
Calum H. 579109a478 refactor: app event bus (#6985)
* refactor: app event bus

* fix: use messagepack + cleanup

* fix: use postcard

* fix: lint

* fix: import gate

* fix: prettierignore + lint

* fix: lint

* fix: rev
2026-08-13 16:33:06 +00:00

20 lines
685 B
TypeScript

import { createContext } from '@modrinth/ui'
import type { AppEvent } from '@/generated/app-events/AppEvent'
export type AppEventType = AppEvent['type']
export type AppEventPayload<Type extends AppEventType> = Extract<
AppEvent,
{ type: Type }
>['payload']
export type AppEventHandler<Type extends AppEventType> = (
payload: AppEventPayload<Type>,
) => void | Promise<void>
export interface AppEvents {
on<Type extends AppEventType>(type: Type, handler: AppEventHandler<Type>): () => void
once<Type extends AppEventType>(type: Type, handler: AppEventHandler<Type>): () => void
}
export const [injectAppEvents, provideAppEvents] = createContext<AppEvents>('root', 'appEvents')