@royaltics/ui 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.socket.md +126 -0
- package/dist/core/socket/index.d.ts +1 -0
- package/dist/core/socket/index.d.ts.map +1 -1
- package/dist/core/socket/index.js +1 -0
- package/dist/core/socket/index.js.map +1 -1
- package/dist/core/socket/socket-store.d.ts +9 -5
- package/dist/core/socket/socket-store.d.ts.map +1 -1
- package/dist/core/socket/socket-store.js +26 -36
- package/dist/core/socket/socket-store.js.map +1 -1
- package/dist/core/socket/useSocketState.d.ts +13 -0
- package/dist/core/socket/useSocketState.d.ts.map +1 -0
- package/dist/core/socket/useSocketState.js +42 -0
- package/dist/core/socket/useSocketState.js.map +1 -0
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useHttpStore.d.ts +2 -1
- package/dist/hooks/useHttpStore.d.ts.map +1 -1
- package/dist/hooks/useHttpStore.js +3 -1
- package/dist/hooks/useHttpStore.js.map +1 -1
- package/package.json +1 -1
- package/dist/providers/http-provider.d.ts +0 -22
- package/dist/providers/http-provider.d.ts.map +0 -1
- package/dist/providers/http-provider.js +0 -31
- package/dist/providers/http-provider.js.map +0 -1
- package/dist/providers/index.d.ts +0 -3
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -3
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/websocket-provider.d.ts +0 -11
- package/dist/providers/websocket-provider.d.ts.map +0 -1
- package/dist/providers/websocket-provider.js +0 -18
- package/dist/providers/websocket-provider.js.map +0 -1
package/README.socket.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# @royaltics/ui - WebSocket Store & Hooks
|
|
2
|
+
|
|
3
|
+
The WebSocket system has been refactored to use a global `Zustand` store, entirely removing the need for a `<WebSocketProviderContext>` React wrapper. This allows you to initialize socket connections anywhere in your application (even outside of React components) and strictly ties connections to the `socket.io-client` lifecycle.
|
|
4
|
+
|
|
5
|
+
## 1. Global Socket Initialization
|
|
6
|
+
To initialize your socket connection globally, call `initSocketOptions`. You should only do this once, typically in your application's entry file or authentication hook.
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { initSocketOptions } from '@royaltics/ui/hooks';
|
|
10
|
+
|
|
11
|
+
// Call this when the user logs in or app initializes
|
|
12
|
+
initSocketOptions({
|
|
13
|
+
socketUrl: 'https://socket.example.com',
|
|
14
|
+
token: 'YOUR_AUTH_TOKEN_HERE',
|
|
15
|
+
options: {
|
|
16
|
+
// Standard socket.io ManagerOptions & SocketOptions
|
|
17
|
+
reconnection: true,
|
|
18
|
+
reconnectionAttempts: 5,
|
|
19
|
+
},
|
|
20
|
+
onAuthError: (err) => {
|
|
21
|
+
// Triggered when socket.io 'connect_error' is fired.
|
|
22
|
+
// You can implement token refreshing mechanisms and then re-call `initSocketOptions({ ...newConfig })`
|
|
23
|
+
console.error("Socket authentication failed", err);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
*Note: If you call `initSocketOptions` with an empty `socketUrl` or `token`, it will automatically disconnect the socket.*
|
|
28
|
+
|
|
29
|
+
## 2. Reading Global Socket State
|
|
30
|
+
You can read the socket connection status directly using the `useSocketStore` hook anywhere in your component tree.
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { useSocketState } from '@royaltics/ui/socket';
|
|
34
|
+
|
|
35
|
+
export const ConnectionStatus = () => {
|
|
36
|
+
// You can read the status ('connected', 'disconnected', 'error', 'connecting')
|
|
37
|
+
const { status, isConnected } = useSocketState();
|
|
38
|
+
|
|
39
|
+
return <div>Socket is {isConnected ? 'Online' : 'Offline'}</div>
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 3. Emitting Events
|
|
44
|
+
The store gives you direct access to the `emit` function, completely sidestepping standard React context constraints.
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
import { useSocketState } from '@royaltics/ui/socket';
|
|
48
|
+
|
|
49
|
+
export const ChatInput = () => {
|
|
50
|
+
// Destructure what you need!
|
|
51
|
+
const { emit, isConnected } = useSocketState();
|
|
52
|
+
|
|
53
|
+
const sendMessage = () => {
|
|
54
|
+
if (!isConnected) return;
|
|
55
|
+
emit('chat:message', { text: 'Hello, world!' });
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
return <button onClick={sendMessage}>Send</button>;
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### `setToken(token)`
|
|
63
|
+
If you only need to update the authentication token without changing the `socketUrl` or other options, you can use `setToken`. This will automatically disconnect the current socket and reconnect with the new token.
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import { useSocketState } from '@royaltics/ui/socket';
|
|
67
|
+
|
|
68
|
+
export const ProfileSettings = () => {
|
|
69
|
+
const { setToken } = useSocketState();
|
|
70
|
+
|
|
71
|
+
const handleSessionRefresh = (newToken: string) => {
|
|
72
|
+
setToken(newToken);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
return <button onClick={() => handleSessionRefresh('NEW_TOKEN')}>Refresh Socket Token</button>;
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 4. Tree-Shaking & Bundle Optimization
|
|
80
|
+
To ensure that `socket.io-client` is only bundled when you actually use WebSockets, the socket logic is isolated in `@royaltics/ui/socket`.
|
|
81
|
+
|
|
82
|
+
> [!IMPORTANT]
|
|
83
|
+
> Do **NOT** import socket hooks from `@royaltics/ui/hooks`. Always use the dedicated entry point:
|
|
84
|
+
> `import { useSocketState } from '@royaltics/ui/socket';`
|
|
85
|
+
|
|
86
|
+
## 5. Listening to Events
|
|
87
|
+
We provide two tailored hooks for listening to specific Socket.io events and managing standard React lifecycles.
|
|
88
|
+
|
|
89
|
+
### `useSocketEvent`
|
|
90
|
+
Used for managing a single distinct event listener.
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
import { useSocketEvent } from '@royaltics/ui/socket';
|
|
94
|
+
|
|
95
|
+
export const NotificationToast = () => {
|
|
96
|
+
// Automatically binds/unbinds on mount/unmount
|
|
97
|
+
useSocketEvent('notification:new', (data) => {
|
|
98
|
+
console.log('Got new notification', data);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### `useSocketEvents`
|
|
106
|
+
Used when a component needs to mount a dense array of closely related events. You can easily toggle individual events using the `enabled` flag.
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
import { useSocketEvents } from '@royaltics/ui/socket';
|
|
110
|
+
|
|
111
|
+
export const ChatRoom = () => {
|
|
112
|
+
useSocketEvents([
|
|
113
|
+
{
|
|
114
|
+
event: 'chat:message',
|
|
115
|
+
onData: (message) => console.log('New Message:', message)
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
event: 'chat:typing',
|
|
119
|
+
enabled: false, // You can toggle this dynamically!
|
|
120
|
+
onData: (user) => console.log(`${user} is typing...`)
|
|
121
|
+
}
|
|
122
|
+
]);
|
|
123
|
+
|
|
124
|
+
return <div>Chat UI</div>
|
|
125
|
+
}
|
|
126
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/socket/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/socket/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/socket/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/socket/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
@@ -4,9 +4,17 @@ export interface SocketStoreState {
|
|
|
4
4
|
socket: Socket | null;
|
|
5
5
|
status: SocketStatus;
|
|
6
6
|
isConnected: boolean;
|
|
7
|
-
|
|
7
|
+
config: {
|
|
8
|
+
url: string;
|
|
9
|
+
token: string;
|
|
10
|
+
options?: Partial<ManagerOptions & SocketOptions>;
|
|
11
|
+
onAuthError?: (err: Error) => void;
|
|
12
|
+
} | null;
|
|
13
|
+
connect: (url: string, token: string, extraOptions?: Partial<ManagerOptions & SocketOptions>, onAuthError?: (err: Error) => void) => void;
|
|
8
14
|
disconnect: () => void;
|
|
15
|
+
setToken: (token: string) => void;
|
|
9
16
|
emit: (event: string, ...args: any[]) => void;
|
|
17
|
+
off: (event: string, callback?: (...args: any[]) => void) => void;
|
|
10
18
|
}
|
|
11
19
|
export interface SocketHookEvent<T = any> {
|
|
12
20
|
event: string;
|
|
@@ -14,8 +22,4 @@ export interface SocketHookEvent<T = any> {
|
|
|
14
22
|
enabled?: boolean;
|
|
15
23
|
}
|
|
16
24
|
export declare const socketStore: import("zustand").StoreApi<SocketStoreState>;
|
|
17
|
-
export declare function useSocketStore(): SocketStoreState;
|
|
18
|
-
export declare function useSocketStore<T>(selector: (state: SocketStoreState) => T): T;
|
|
19
|
-
export declare const useSocketEvent: <T = any>(event: string, callback: (...args: T[]) => void) => void;
|
|
20
|
-
export declare const useSocketEvents: (events: SocketHookEvent[]) => void;
|
|
21
25
|
//# sourceMappingURL=socket-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-store.d.ts","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"socket-store.d.ts","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;QAClD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;KACtC,GAAG,IAAI,CAAC;IACT,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;IAC1I,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9C,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,8CAgGrB,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { createStore } from 'zustand/vanilla';
|
|
2
|
-
import { useStore } from 'zustand';
|
|
3
2
|
import { io } from 'socket.io-client';
|
|
4
|
-
import { useEffect } from 'react';
|
|
5
3
|
export const socketStore = createStore((set, get) => ({
|
|
6
4
|
socket: null,
|
|
7
5
|
status: 'disconnected',
|
|
8
6
|
isConnected: false,
|
|
9
|
-
|
|
7
|
+
config: null,
|
|
8
|
+
connect: (url, token, extraOptions, onAuthError) => {
|
|
10
9
|
let { socket } = get();
|
|
11
10
|
// Prevent reconnecting if already connected to the same instance/token
|
|
12
|
-
|
|
11
|
+
// @ts-ignore: uri is private but needed for caching check
|
|
12
|
+
if (socket?.connected && socket.auth && socket.auth.token === token && socket.io.uri === url)
|
|
13
13
|
return;
|
|
14
14
|
// Clean up previous instance
|
|
15
15
|
if (socket) {
|
|
@@ -41,19 +41,28 @@ export const socketStore = createStore((set, get) => ({
|
|
|
41
41
|
newSocket.on('connect_error', (error) => {
|
|
42
42
|
console.error('[Socket.IO] Connection error:', error.message);
|
|
43
43
|
set({ status: 'error', isConnected: false });
|
|
44
|
+
if (onAuthError) {
|
|
45
|
+
onAuthError(error);
|
|
46
|
+
}
|
|
44
47
|
});
|
|
45
48
|
newSocket.on('error', (error) => {
|
|
46
49
|
console.error('[Socket.IO] Socket error:', error);
|
|
47
50
|
set({ status: 'error', isConnected: false });
|
|
48
51
|
});
|
|
49
|
-
set({ socket: newSocket });
|
|
52
|
+
set({ socket: newSocket, config: { url, token, options: extraOptions, onAuthError } });
|
|
53
|
+
},
|
|
54
|
+
setToken: (token) => {
|
|
55
|
+
const { config, connect } = get();
|
|
56
|
+
if (config && config.token !== token) {
|
|
57
|
+
connect(config.url, token, config.options, config.onAuthError);
|
|
58
|
+
}
|
|
50
59
|
},
|
|
51
60
|
disconnect: () => {
|
|
52
61
|
const { socket } = get();
|
|
53
62
|
if (socket) {
|
|
54
63
|
socket.removeAllListeners();
|
|
55
64
|
socket.disconnect();
|
|
56
|
-
set({ socket: null, status: 'disconnected', isConnected: false });
|
|
65
|
+
set({ socket: null, status: 'disconnected', isConnected: false, config: null });
|
|
57
66
|
}
|
|
58
67
|
},
|
|
59
68
|
emit: (event, ...args) => {
|
|
@@ -64,36 +73,17 @@ export const socketStore = createStore((set, get) => ({
|
|
|
64
73
|
else {
|
|
65
74
|
console.warn(`[Socket.IO] Cannot emit "${event}": socket not connected`);
|
|
66
75
|
}
|
|
76
|
+
},
|
|
77
|
+
off: (event, callback) => {
|
|
78
|
+
const { socket } = get();
|
|
79
|
+
if (socket) {
|
|
80
|
+
if (callback) {
|
|
81
|
+
socket.off(event, callback);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
socket.off(event);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
67
87
|
}
|
|
68
88
|
}));
|
|
69
|
-
export function useSocketStore(selector) {
|
|
70
|
-
return useStore(socketStore, selector || ((s) => s));
|
|
71
|
-
}
|
|
72
|
-
export const useSocketEvent = (event, callback) => {
|
|
73
|
-
const socket = useSocketStore(s => s.socket);
|
|
74
|
-
useEffect(() => {
|
|
75
|
-
if (!socket)
|
|
76
|
-
return;
|
|
77
|
-
socket.on(event, callback);
|
|
78
|
-
return () => {
|
|
79
|
-
socket.off(event, callback);
|
|
80
|
-
};
|
|
81
|
-
}, [socket, event, callback]);
|
|
82
|
-
};
|
|
83
|
-
export const useSocketEvents = (events) => {
|
|
84
|
-
const socket = useSocketStore(s => s.socket);
|
|
85
|
-
useEffect(() => {
|
|
86
|
-
if (!socket)
|
|
87
|
-
return;
|
|
88
|
-
const activeEvents = events.filter(e => e.enabled !== false);
|
|
89
|
-
activeEvents.forEach(({ event, onData }) => {
|
|
90
|
-
socket.on(event, onData);
|
|
91
|
-
});
|
|
92
|
-
return () => {
|
|
93
|
-
activeEvents.forEach(({ event, onData }) => {
|
|
94
|
-
socket.off(event, onData);
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
|
-
}, [socket, events]);
|
|
98
|
-
};
|
|
99
89
|
//# sourceMappingURL=socket-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-store.js","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"socket-store.js","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ManagerOptions, SocketOptions } from 'socket.io-client';
|
|
2
|
+
import { SocketHookEvent } from './socket-store.js';
|
|
3
|
+
export interface SocketOptionsProps {
|
|
4
|
+
socketUrl?: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
options?: Partial<ManagerOptions & SocketOptions>;
|
|
7
|
+
onAuthError?: (error: Error) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const initSocketOptions: ({ socketUrl, token, options, onAuthError }: SocketOptionsProps) => void;
|
|
10
|
+
export declare const useSocketState: () => import("./socket-store.js").SocketStoreState;
|
|
11
|
+
export declare const useSocketEvent: <T = any>(event: string, callback: (...args: T[]) => void) => void;
|
|
12
|
+
export declare const useSocketEvents: (events: SocketHookEvent[]) => void;
|
|
13
|
+
//# sourceMappingURL=useSocketState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSocketState.d.ts","sourceRoot":"","sources":["../../../src/core/socket/useSocketState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAe,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAED,eAAO,MAAM,iBAAiB,GAAI,4CAA4C,kBAAkB,SAM/F,CAAC;AAEF,eAAO,MAAM,cAAc,oDAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,SAUtF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,SAkBxD,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useStore } from 'zustand';
|
|
3
|
+
import { socketStore } from './socket-store.js';
|
|
4
|
+
export const initSocketOptions = ({ socketUrl, token, options, onAuthError }) => {
|
|
5
|
+
if (socketUrl && token) {
|
|
6
|
+
socketStore.getState().connect(socketUrl, token, options, onAuthError);
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
socketStore.getState().disconnect();
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export const useSocketState = () => {
|
|
13
|
+
return useStore(socketStore);
|
|
14
|
+
};
|
|
15
|
+
export const useSocketEvent = (event, callback) => {
|
|
16
|
+
const socket = useSocketState().socket;
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!socket)
|
|
19
|
+
return;
|
|
20
|
+
socket.on(event, callback);
|
|
21
|
+
return () => {
|
|
22
|
+
socket.off(event, callback);
|
|
23
|
+
};
|
|
24
|
+
}, [socket, event, callback]);
|
|
25
|
+
};
|
|
26
|
+
export const useSocketEvents = (events) => {
|
|
27
|
+
const socket = useSocketState().socket;
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (!socket)
|
|
30
|
+
return;
|
|
31
|
+
const activeEvents = events.filter(e => e.enabled !== false);
|
|
32
|
+
activeEvents.forEach(({ event, onData }) => {
|
|
33
|
+
socket.on(event, onData);
|
|
34
|
+
});
|
|
35
|
+
return () => {
|
|
36
|
+
activeEvents.forEach(({ event, onData }) => {
|
|
37
|
+
socket.off(event, onData);
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
}, [socket, events]);
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=useSocketState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSocketState.js","sourceRoot":"","sources":["../../../src/core/socket/useSocketState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AASjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAsB,EAAE,EAAE;IAChG,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACrB,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACJ,WAAW,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IAC/B,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,KAAa,EAAE,QAAgC,EAAE,EAAE;IACvF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,MAAM,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAE,EAAE;IACzD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,MAAM,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QAE7D,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC"}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -3,5 +3,4 @@ export { default as useNavigatorOnLine } from "./useNavigatorOnline.js";
|
|
|
3
3
|
export { default as useRouter } from "./useRouter.js";
|
|
4
4
|
export { initHttpOptions, useHttpStore, type HttpOptions } from "./useHttpStore.js";
|
|
5
5
|
export { i18nStore, useI18n, t } from "../core/i18n/i18n-store.js";
|
|
6
|
-
export { WebSocketProviderContext } from "../providers/websocket-provider.js";
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -3,5 +3,4 @@ export { default as useNavigatorOnLine } from "./useNavigatorOnline.js";
|
|
|
3
3
|
export { default as useRouter } from "./useRouter.js";
|
|
4
4
|
export { initHttpOptions, useHttpStore } from "./useHttpStore.js";
|
|
5
5
|
export { i18nStore, useI18n, t } from "../core/i18n/i18n-store.js";
|
|
6
|
-
export { WebSocketProviderContext } from "../providers/websocket-provider.js";
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -15,5 +15,6 @@ export interface HttpOptions {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
export declare const initHttpOptions: (options: HttpOptions) => void;
|
|
18
|
-
export declare
|
|
18
|
+
export declare function useHttpStore(): HttpStoreState;
|
|
19
|
+
export declare function useHttpStore<T>(selector: (state: HttpStoreState) => T): T;
|
|
19
20
|
//# sourceMappingURL=useHttpStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGtF,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAID,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,SAmCnD,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"useHttpStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGtF,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAID,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,SAmCnD,CAAC;AAEF,wBAAgB,YAAY,IAAI,cAAc,CAAC;AAC/C,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -25,5 +25,7 @@ export const initHttpOptions = (options) => {
|
|
|
25
25
|
window.addEventListener('offline', handleOffline);
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
|
-
export
|
|
28
|
+
export function useHttpStore(selector) {
|
|
29
|
+
return useStore(httpStore, selector);
|
|
30
|
+
}
|
|
29
31
|
//# sourceMappingURL=useHttpStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpStore.js","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAiC,MAAM,4BAA4B,CAAC;AACtF,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAkBzD,IAAI,wBAAwB,GAAG,KAAK,CAAC;AAErC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAE,EAAE;IACvD,IAAI,wBAAwB;QAAE,OAAO;IACrC,wBAAwB,GAAG,IAAI,CAAC;IAEhC,MAAM,EACL,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,KAAK,EACb,OAAO,GAAG,EAAE,EACZ,YAAY,GAAG,KAAK,EACpB,WAAW,EACX,SAAS,EACT,aAAa,EAAE,OAAO,EACtB,WAAW,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAEnD,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,KAAK;QACL,OAAO;QACP,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,SAAS;QACT,aAAa,EAAE,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;AACF,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useHttpStore.js","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAiC,MAAM,4BAA4B,CAAC;AACtF,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAkBzD,IAAI,wBAAwB,GAAG,KAAK,CAAC;AAErC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAE,EAAE;IACvD,IAAI,wBAAwB;QAAE,OAAO;IACrC,wBAAwB,GAAG,IAAI,CAAC;IAEhC,MAAM,EACL,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,KAAK,EACb,OAAO,GAAG,EAAE,EACZ,YAAY,GAAG,KAAK,EACpB,WAAW,EACX,SAAS,EACT,aAAa,EAAE,OAAO,EACtB,WAAW,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAEnD,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,KAAK;QACL,OAAO;QACP,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,SAAS;QACT,aAAa,EAAE,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;AACF,CAAC,CAAC;AAIF,MAAM,UAAU,YAAY,CAAI,QAAuC;IACtE,OAAO,QAAQ,CAAC,SAAS,EAAE,QAAS,CAAC,CAAC;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { RefreshTokenConfig } from '../core/http/http-store.js';
|
|
3
|
-
interface HttpProviderProps {
|
|
4
|
-
children: React.ReactNode;
|
|
5
|
-
baseUrl?: string;
|
|
6
|
-
debug?: boolean;
|
|
7
|
-
initialHeaders?: Record<string, string>;
|
|
8
|
-
skipRejected?: boolean;
|
|
9
|
-
onHttpError?: (error: Error | Response) => void;
|
|
10
|
-
onNotAuth?: (currentUrl: string) => void;
|
|
11
|
-
refreshTokenConfig?: RefreshTokenConfig;
|
|
12
|
-
queryConfig?: {
|
|
13
|
-
staleTime?: number;
|
|
14
|
-
gcTime?: number;
|
|
15
|
-
refetchOnWindowFocus?: boolean;
|
|
16
|
-
retry?: number;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export declare const HttpProvider: React.FC<HttpProviderProps>;
|
|
20
|
-
export declare const useHttpContext: () => import("../core/http/http.types.js").HttpStoreState;
|
|
21
|
-
export {};
|
|
22
|
-
//# sourceMappingURL=http-provider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-provider.d.ts","sourceRoot":"","sources":["../../src/providers/http-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EAAa,kBAAkB,EAAgB,MAAM,4BAA4B,CAAC;AAEzF,UAAU,iBAAiB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuCpD,CAAC;AAGF,eAAO,MAAM,cAAc,2DAAqC,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useMemo } from 'react';
|
|
2
|
-
import QueryManager from '../core/http/query-manager.js';
|
|
3
|
-
import { httpStore, useHttpStore } from '../core/http/http-store.js';
|
|
4
|
-
export const HttpProvider = ({ children, baseUrl = '', debug = false, initialHeaders = {}, skipRejected = false, onHttpError, onNotAuth, refreshTokenConfig, queryConfig, }) => {
|
|
5
|
-
const queryManager = useMemo(() => new QueryManager(queryConfig), []);
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
httpStore.getState().init({
|
|
8
|
-
baseUrl,
|
|
9
|
-
debug,
|
|
10
|
-
headers: initialHeaders,
|
|
11
|
-
queryManager,
|
|
12
|
-
skipRejected,
|
|
13
|
-
onHttpError,
|
|
14
|
-
onNotAuth,
|
|
15
|
-
refreshTokenConfig,
|
|
16
|
-
});
|
|
17
|
-
const handleOnline = () => httpStore.getState().setOnline(true);
|
|
18
|
-
const handleOffline = () => httpStore.getState().setOnline(false);
|
|
19
|
-
window.addEventListener('online', handleOnline);
|
|
20
|
-
window.addEventListener('offline', handleOffline);
|
|
21
|
-
return () => {
|
|
22
|
-
queryManager.destroy();
|
|
23
|
-
window.removeEventListener('online', handleOnline);
|
|
24
|
-
window.removeEventListener('offline', handleOffline);
|
|
25
|
-
};
|
|
26
|
-
}, [baseUrl, debug, initialHeaders, queryManager, skipRejected, onHttpError, onNotAuth, refreshTokenConfig]);
|
|
27
|
-
return React.createElement(React.Fragment, null, children);
|
|
28
|
-
};
|
|
29
|
-
// Legacy compatibility wrapper to avoid breaking consumers that imported useHttpContext
|
|
30
|
-
export const useHttpContext = () => useHttpStore(state => state);
|
|
31
|
-
//# sourceMappingURL=http-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-provider.js","sourceRoot":"","sources":["../../src/providers/http-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAsB,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAmBzF,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACzD,QAAQ,EACR,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,KAAK,EACb,cAAc,GAAG,EAAE,EACnB,YAAY,GAAG,KAAK,EACpB,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,WAAW,GACX,EAAE,EAAE;IACJ,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;YACzB,OAAO;YACP,KAAK;YACL,OAAO,EAAE,cAAc;YACvB,YAAY;YACZ,YAAY;YACZ,WAAW;YACX,SAAS;YACT,kBAAkB;SAClB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAElD,OAAO,GAAG,EAAE;YACX,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACtD,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE7G,OAAO,0CAAG,QAAQ,CAAI,CAAC;AACxB,CAAC,CAAC;AAEF,wFAAwF;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC"}
|
package/dist/providers/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ManagerOptions, SocketOptions } from 'socket.io-client';
|
|
3
|
-
export interface WebSocketProviderContextProps {
|
|
4
|
-
children: React.ReactNode;
|
|
5
|
-
socketUrl?: string;
|
|
6
|
-
token?: string;
|
|
7
|
-
options?: Partial<ManagerOptions & SocketOptions>;
|
|
8
|
-
}
|
|
9
|
-
export declare const WebSocketProviderContext: ({ children, socketUrl, token, options }: WebSocketProviderContextProps) => React.JSX.Element;
|
|
10
|
-
export default WebSocketProviderContext;
|
|
11
|
-
//# sourceMappingURL=websocket-provider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-provider.d.ts","sourceRoot":"","sources":["../../src/providers/websocket-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;CACrD;AAED,eAAO,MAAM,wBAAwB,GAAI,yCAAyC,6BAA6B,sBAe9G,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React, { useEffect } from 'react';
|
|
2
|
-
import { socketStore } from '../core/socket/socket-store.js';
|
|
3
|
-
export const WebSocketProviderContext = ({ children, socketUrl, token, options }) => {
|
|
4
|
-
useEffect(() => {
|
|
5
|
-
if (socketUrl && token) {
|
|
6
|
-
socketStore.getState().connect(socketUrl, token, options);
|
|
7
|
-
}
|
|
8
|
-
else {
|
|
9
|
-
socketStore.getState().disconnect();
|
|
10
|
-
}
|
|
11
|
-
return () => {
|
|
12
|
-
socketStore.getState().disconnect();
|
|
13
|
-
};
|
|
14
|
-
}, [socketUrl, token, options]); // Make sure to pass stable references for options
|
|
15
|
-
return (React.createElement(React.Fragment, null, children));
|
|
16
|
-
};
|
|
17
|
-
export default WebSocketProviderContext;
|
|
18
|
-
//# sourceMappingURL=websocket-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-provider.js","sourceRoot":"","sources":["../../src/providers/websocket-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAS7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAiC,EAAE,EAAE;IAE/G,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACrB,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACJ,WAAW,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC;QAED,OAAO,GAAG,EAAE;YACR,WAAW,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;QACxC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,kDAAkD;IAEnF,OAAO,CAAC,0CAAG,QAAQ,CAAI,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
|