@ancon/wildcat-utils 1.21.0 → 1.21.1
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/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { SignalRHubName, SignalRSignalName } from '@ancon/wildcat-types';
|
|
2
2
|
import { SignalRConfig, SignalREventListener } from './types';
|
|
3
3
|
declare type SignalRConfigArg = Omit<SignalRConfig, 'hub'>;
|
|
4
|
-
declare type ReduxSelectorsArg<RootState = unknown> = {
|
|
4
|
+
declare type ReduxSelectorsArg<RootState = unknown> = Partial<{
|
|
5
5
|
clientIdSelector: (state: RootState) => string | null;
|
|
6
6
|
isSignalROnlineSelector: (state: RootState) => boolean;
|
|
7
|
-
}
|
|
8
|
-
declare type ReduxActionsArg = {
|
|
7
|
+
}>;
|
|
8
|
+
declare type ReduxActionsArg = Partial<{
|
|
9
9
|
setIsSignalROnlineAction: (payload: {
|
|
10
10
|
isSignalROnline: boolean;
|
|
11
11
|
}) => unknown;
|
|
12
|
-
}
|
|
12
|
+
}>;
|
|
13
13
|
declare type ReduxHooksArg = Partial<{
|
|
14
14
|
useAppDispatch: () => (action: unknown) => unknown;
|
|
15
15
|
useAppStore: <T = {}>() => {
|
|
@@ -17,7 +17,7 @@ declare type ReduxHooksArg = Partial<{
|
|
|
17
17
|
};
|
|
18
18
|
useAppSelector: <T extends (...args: any[]) => any>(selector: T) => ReturnType<T>;
|
|
19
19
|
}>;
|
|
20
|
-
declare function createUseSignalRHook(signalRConfig: SignalRConfigArg, selectors
|
|
20
|
+
declare function createUseSignalRHook<RootState = unknown>(signalRConfig: SignalRConfigArg, selectors?: ReduxSelectorsArg<RootState>, actions?: ReduxActionsArg, hooks?: ReduxHooksArg): (hub: SignalRHubName) => {
|
|
21
21
|
isHubConnected: boolean;
|
|
22
22
|
join: (group: string) => Promise<void>;
|
|
23
23
|
leave: (group: string) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("react"),
|
|
1
|
+
"use strict";const e=require("react"),f=require("react-redux"),U=require("./SignalR.js");require("@microsoft/signalr");require("@ancon/wildcat-types");require("../shared/wait.js");require("../api/generateBackoffWithEqualJitter.js");require("../number/randomIntFromInterval.js");function M(k,q,H,h){const{signalRApiUrl:A,logger:O,enableLogging:m}=k,{clientIdSelector:D,isSignalROnlineSelector:s}=q??{},{setIsSignalROnlineAction:u}=H??{},{useAppStore:w=f.useStore,useAppDispatch:x=f.useDispatch,useAppSelector:y=f.useSelector}=h??{};return function(G){const n=e.useRef(new U({signalRApiUrl:A,hub:G,logger:O,enableLogging:m})),o=w(),a=x(),g=y(D??(()=>{})),[r,j]=e.useState(!1),[c,v]=e.useState(!1),b=e.useRef(r),l=e.useCallback(()=>{(s==null?void 0:s(o.getState()))===!1&&u&&a(u({isSignalROnline:!0})),c||v(!0)},[a,c,o]),R=l,S=e.useCallback(()=>{(s==null?void 0:s(o.getState()))===!0&&u&&a(u({isSignalROnline:!1})),c&&v(!1)},[a,c,o]),p=e.useCallback(async t=>{n.current.groups.indexOf(t)<0&&await n.current.joinGroup(t)},[]),C=e.useCallback(async t=>{n.current.groups.indexOf(t)>=0&&await n.current.leaveGroup(t)},[]),E=e.useCallback((t,i,d)=>n.current.addSignalListener(t,i,d),[]),L=e.useCallback((t,i)=>n.current.removeSignalListener(t,i),[]),I=e.useCallback(()=>n.current.getHubConnectionId(),[]);return e.useEffect(()=>{b.current=r},[r]),e.useEffect(()=>{const t=n.current.addEventListener("connected",l),i=n.current.addEventListener("reconnected",R),d=n.current.addEventListener("disconnected",S);return b.current||j(!0),()=>{t(),i(),d()}},[l,S,R]),e.useEffect(()=>{n.current.setClientId(g||void 0)},[g]),e.useEffect(()=>{async function t(){await n.current.connect()}r&&t()},[r]),e.useEffect(()=>()=>{n.current.leaveAllGroups().then(()=>{n.current.disconnect()})},[n]),e.useMemo(()=>({isHubConnected:c,join:p,leave:C,subscribe:E,unsubscribe:L,getHubConnectionId:I}),[c,p,C,E,L,I])}}module.exports=M;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useRef as
|
|
1
|
+
import { useRef as C, useState as H, useCallback as t, useEffect as o, useMemo as z } from "react";
|
|
2
2
|
import { useStore as B, useDispatch as F, useSelector as J } from "react-redux";
|
|
3
3
|
import K from "./SignalR.mjs";
|
|
4
4
|
import "@microsoft/signalr";
|
|
@@ -6,70 +6,71 @@ import "@ancon/wildcat-types";
|
|
|
6
6
|
import "../shared/wait.mjs";
|
|
7
7
|
import "../api/generateBackoffWithEqualJitter.mjs";
|
|
8
8
|
import "../number/randomIntFromInterval.mjs";
|
|
9
|
-
function $(
|
|
10
|
-
const { signalRApiUrl: w, logger: x, enableLogging: y } =
|
|
9
|
+
function $(h, A, O, D) {
|
|
10
|
+
const { signalRApiUrl: w, logger: x, enableLogging: y } = h, { clientIdSelector: G, isSignalROnlineSelector: r } = A ?? {}, { setIsSignalROnlineAction: u } = O ?? {}, {
|
|
11
11
|
useAppStore: j = B,
|
|
12
12
|
useAppDispatch: k = F,
|
|
13
13
|
useAppSelector: U = J
|
|
14
14
|
} = D ?? {};
|
|
15
15
|
return function(M) {
|
|
16
|
-
const e =
|
|
16
|
+
const e = C(
|
|
17
17
|
new K({
|
|
18
18
|
signalRApiUrl: w,
|
|
19
19
|
hub: M,
|
|
20
20
|
logger: x,
|
|
21
21
|
enableLogging: y
|
|
22
22
|
})
|
|
23
|
-
),
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
), a = j(), d = k(), g = U(G ?? (() => {
|
|
24
|
+
})), [c, q] = H(!1), [s, p] = H(!1), v = C(c), l = t(() => {
|
|
25
|
+
(r == null ? void 0 : r(a.getState())) === !1 && u && d(u({ isSignalROnline: !0 })), s || p(!0);
|
|
26
|
+
}, [d, s, a]), m = l, R = t(() => {
|
|
27
|
+
(r == null ? void 0 : r(a.getState())) === !0 && u && d(u({ isSignalROnline: !1 })), s && p(!1);
|
|
28
|
+
}, [d, s, a]), S = t(async (n) => {
|
|
28
29
|
e.current.groups.indexOf(n) < 0 && await e.current.joinGroup(n);
|
|
29
30
|
}, []), b = t(async (n) => {
|
|
30
31
|
e.current.groups.indexOf(n) >= 0 && await e.current.leaveGroup(n);
|
|
31
32
|
}, []), L = t(
|
|
32
|
-
(n,
|
|
33
|
+
(n, i, f) => e.current.addSignalListener(
|
|
33
34
|
n,
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
i,
|
|
36
|
+
f
|
|
36
37
|
),
|
|
37
38
|
[]
|
|
38
39
|
), I = t(
|
|
39
|
-
(n,
|
|
40
|
+
(n, i) => e.current.removeSignalListener(n, i),
|
|
40
41
|
[]
|
|
41
42
|
), E = t(
|
|
42
43
|
() => e.current.getHubConnectionId(),
|
|
43
44
|
[]
|
|
44
45
|
);
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
}, [
|
|
46
|
+
return o(() => {
|
|
47
|
+
v.current = c;
|
|
48
|
+
}, [c]), o(() => {
|
|
48
49
|
const n = e.current.addEventListener(
|
|
49
50
|
"connected",
|
|
50
|
-
|
|
51
|
-
),
|
|
51
|
+
l
|
|
52
|
+
), i = e.current.addEventListener(
|
|
52
53
|
"reconnected",
|
|
53
|
-
|
|
54
|
-
),
|
|
54
|
+
m
|
|
55
|
+
), f = e.current.addEventListener(
|
|
55
56
|
"disconnected",
|
|
56
|
-
|
|
57
|
+
R
|
|
57
58
|
);
|
|
58
|
-
return
|
|
59
|
-
n(),
|
|
59
|
+
return v.current || q(!0), () => {
|
|
60
|
+
n(), i(), f();
|
|
60
61
|
};
|
|
61
62
|
}, [
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
]),
|
|
66
|
-
e.current.setClientId(
|
|
67
|
-
}, [
|
|
63
|
+
l,
|
|
64
|
+
R,
|
|
65
|
+
m
|
|
66
|
+
]), o(() => {
|
|
67
|
+
e.current.setClientId(g || void 0);
|
|
68
|
+
}, [g]), o(() => {
|
|
68
69
|
async function n() {
|
|
69
70
|
await e.current.connect();
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
}, [
|
|
72
|
+
c && n();
|
|
73
|
+
}, [c]), o(
|
|
73
74
|
() => () => {
|
|
74
75
|
e.current.leaveAllGroups().then(() => {
|
|
75
76
|
e.current.disconnect();
|
|
@@ -78,14 +79,14 @@ function $(H, h, A, D) {
|
|
|
78
79
|
[e]
|
|
79
80
|
), z(
|
|
80
81
|
() => ({
|
|
81
|
-
isHubConnected:
|
|
82
|
-
join:
|
|
82
|
+
isHubConnected: s,
|
|
83
|
+
join: S,
|
|
83
84
|
leave: b,
|
|
84
85
|
subscribe: L,
|
|
85
86
|
unsubscribe: I,
|
|
86
87
|
getHubConnectionId: E
|
|
87
88
|
}),
|
|
88
|
-
[
|
|
89
|
+
[s, S, b, L, I, E]
|
|
89
90
|
);
|
|
90
91
|
};
|
|
91
92
|
}
|