| 7 | } |
| 8 | |
| 9 | export function useEvent() { |
| 10 | const sdk = useSDK() |
| 11 | |
| 12 | function subscribe(handler: (event: Event, metadata: EventMetadata) => void) { |
| 13 | return sdk.event.on("event", (event) => { |
| 14 | if (event.payload.type === "sync") { |
| 15 | return |
| 16 | } |
| 17 | |
| 18 | handler(event.payload, { directory: event.directory, workspace: event.workspace }) |
| 19 | }) |
| 20 | } |
| 21 | |
| 22 | function on<T extends Event["type"]>( |
| 23 | type: T, |
| 24 | handler: (event: Extract<Event, { type: T }>, metadata: EventMetadata) => void, |
| 25 | ) { |
| 26 | return subscribe((event: Event, metadata: EventMetadata) => { |
| 27 | if (event.type !== type) return |
| 28 | handler(event as Extract<Event, { type: T }>, metadata) |
| 29 | }) |
| 30 | } |
| 31 | |
| 32 | return { |
| 33 | subscribe, |
| 34 | on, |
| 35 | } |
| 36 | } |