|
@@ -1,34 +1,19 @@
|
|
|
import { useEffect } from 'react';
|
|
import { useEffect } from 'react';
|
|
|
import { useQueryClient } from '@tanstack/react-query';
|
|
import { useQueryClient } from '@tanstack/react-query';
|
|
|
|
|
|
|
|
-import { WebSocketClient } from '@/api/websocket';
|
|
|
|
|
|
|
+import { getSharedWebSocketClient } from '@/api/websocket';
|
|
|
import { keys } from '@/api/queryKeys';
|
|
import { keys } from '@/api/queryKeys';
|
|
|
import { isRecentLocalInvalidate } from '@/api/invalidationTracker';
|
|
import { isRecentLocalInvalidate } from '@/api/invalidationTracker';
|
|
|
|
|
|
|
|
type Handler = (payload: unknown) => void;
|
|
type Handler = (payload: unknown) => void;
|
|
|
|
|
|
|
|
-interface SharedClient {
|
|
|
|
|
- connect(): void;
|
|
|
|
|
- on(event: string, fn: Handler): void;
|
|
|
|
|
- off(event: string, fn: Handler): void;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-let sharedClient: SharedClient | null = null;
|
|
|
|
|
-
|
|
|
|
|
-function getSharedClient(): SharedClient {
|
|
|
|
|
- if (sharedClient) return sharedClient;
|
|
|
|
|
- const basePath = (typeof window !== 'undefined' && window.X_UI_BASE_PATH) || '';
|
|
|
|
|
- sharedClient = new WebSocketClient(basePath) as SharedClient;
|
|
|
|
|
- return sharedClient;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
let invalidateTimer: number | null = null;
|
|
let invalidateTimer: number | null = null;
|
|
|
|
|
|
|
|
export function useWebSocketBridge() {
|
|
export function useWebSocketBridge() {
|
|
|
const queryClient = useQueryClient();
|
|
const queryClient = useQueryClient();
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
- const client = getSharedClient();
|
|
|
|
|
|
|
+ const client = getSharedWebSocketClient();
|
|
|
|
|
|
|
|
const onInvalidate: Handler = (payload) => {
|
|
const onInvalidate: Handler = (payload) => {
|
|
|
const p = payload as { type?: string } | undefined;
|
|
const p = payload as { type?: string } | undefined;
|