| import { ref, onScopeDispose } from 'vue' | |
| import { wsService } from '@/services/websocket' | |
| // Global state for connection status | |
| const isConnected = ref(wsService.isConnected) | |
| // Update global state on events | |
| wsService.on('connected', () => { isConnected.value = true }) | |
| wsService.on('disconnected', () => { isConnected.value = false }) | |
| export function useWebSocket() { | |
| /** | |
| * Register a callback for a specific WebSocket event. | |
| * Automatically removes the listener when the component is unmounted or scope disposed. | |
| * | |
| * @param event The event name (e.g., 'tasks_updated') | |
| * @param callback The function to call when the event is received | |
| */ | |
| function on(event: string, callback: (data: any) => void) { | |
| wsService.on(event, callback) | |
| // Clean up when the scope (component) is disposed | |
| onScopeDispose(() => { | |
| wsService.off(event, callback) | |
| }) | |
| } | |
| return { | |
| isConnected, | |
| on, | |
| } | |
| } | |