@relaycast/react 4.2.0 → 5.0.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/dist/hooks/useChannel.d.ts.map +1 -1
- package/dist/hooks/useChannel.js +10 -1
- package/dist/hooks/useChannel.js.map +1 -1
- package/dist/hooks/useMessages.d.ts.map +1 -1
- package/dist/hooks/useMessages.js +11 -1
- package/dist/hooks/useMessages.js.map +1 -1
- package/dist/hooks/useThread.d.ts.map +1 -1
- package/dist/hooks/useThread.js +10 -1
- package/dist/hooks/useThread.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +21 -4
- package/dist/provider.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChannel.d.ts","sourceRoot":"","sources":["../../src/hooks/useChannel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAInE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"useChannel.d.ts","sourceRoot":"","sources":["../../src/hooks/useChannel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAInE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAwCzD"}
|
package/dist/hooks/useChannel.js
CHANGED
|
@@ -1,25 +1,34 @@
|
|
|
1
|
-
import { useContext, useEffect, useSyncExternalStore } from 'react';
|
|
1
|
+
import { useContext, useEffect, useRef, useSyncExternalStore } from 'react';
|
|
2
2
|
import { ClientContext, StoreContext } from '../context.js';
|
|
3
3
|
const EMPTY = { channel: null, members: [], loading: true, error: null };
|
|
4
4
|
export function useChannel(name) {
|
|
5
5
|
const ctx = useContext(ClientContext);
|
|
6
6
|
const store = useContext(StoreContext);
|
|
7
|
+
const requestSeq = useRef(0);
|
|
7
8
|
if (!ctx || !store)
|
|
8
9
|
throw new Error('useChannel must be used within <RelayProvider>');
|
|
9
10
|
useEffect(() => {
|
|
11
|
+
const seq = ++requestSeq.current;
|
|
10
12
|
store.updateChannelDetail(name, (prev) => ({ ...prev, loading: true }));
|
|
11
13
|
ctx.agent.channels.get(name)
|
|
12
14
|
.then((result) => {
|
|
15
|
+
if (seq !== requestSeq.current)
|
|
16
|
+
return;
|
|
13
17
|
const { members, ...channel } = result;
|
|
14
18
|
store.updateChannelDetail(name, () => ({ channel, members, loading: false, error: null }));
|
|
15
19
|
})
|
|
16
20
|
.catch((error) => {
|
|
21
|
+
if (seq !== requestSeq.current)
|
|
22
|
+
return;
|
|
17
23
|
store.updateChannelDetail(name, (prev) => ({
|
|
18
24
|
...prev,
|
|
19
25
|
loading: false,
|
|
20
26
|
error: error instanceof Error ? error : new Error(String(error)),
|
|
21
27
|
}));
|
|
22
28
|
});
|
|
29
|
+
return () => {
|
|
30
|
+
requestSeq.current += 1;
|
|
31
|
+
};
|
|
23
32
|
}, [name, ctx.agent, store]);
|
|
24
33
|
const data = useSyncExternalStore(store.subscribe, () => store.getState().channelDetails[name] ?? EMPTY);
|
|
25
34
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChannel.js","sourceRoot":"","sources":["../../src/hooks/useChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useChannel.js","sourceRoot":"","sources":["../../src/hooks/useChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAExF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAEtF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC;QACjC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAExE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;aACzB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,GAAG,KAAK,UAAU,CAAC,OAAO;gBAAE,OAAO;YACvC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;YACvC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7F,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,GAAG,KAAK,UAAU,CAAC,OAAO;gBAAE,OAAO;YACvC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzC,GAAG,IAAI;gBACP,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAE7B,MAAM,IAAI,GAAG,oBAAoB,CAC/B,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CACrD,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessages.d.ts","sourceRoot":"","sources":["../../src/hooks/useMessages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAKtE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useMessages.d.ts","sourceRoot":"","sources":["../../src/hooks/useMessages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAKtE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CA+D9D"}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
import { useContext, useEffect, useCallback, useSyncExternalStore } from 'react';
|
|
1
|
+
import { useContext, useEffect, useCallback, useRef, useSyncExternalStore } from 'react';
|
|
2
2
|
import { ClientContext, StoreContext } from '../context.js';
|
|
3
3
|
import { sortMessagesChronologically } from '../adapters/messages.js';
|
|
4
4
|
const EMPTY = { messages: [], loading: true, error: null };
|
|
5
5
|
export function useMessages(channel) {
|
|
6
6
|
const ctx = useContext(ClientContext);
|
|
7
7
|
const store = useContext(StoreContext);
|
|
8
|
+
const requestSeq = useRef(0);
|
|
8
9
|
if (!ctx || !store)
|
|
9
10
|
throw new Error('useMessages must be used within <RelayProvider>');
|
|
10
11
|
useEffect(() => {
|
|
12
|
+
const seq = ++requestSeq.current;
|
|
11
13
|
store.updateChannelMessages(channel, (prev) => ({ ...prev, loading: true }));
|
|
12
14
|
ctx.agent.messages(channel, { limit: 50 })
|
|
13
15
|
.then((messages) => {
|
|
16
|
+
if (seq !== requestSeq.current)
|
|
17
|
+
return;
|
|
14
18
|
const sortedMessages = sortMessagesChronologically(messages);
|
|
15
19
|
store.updateChannelMessages(channel, () => ({ messages: sortedMessages, loading: false, error: null }));
|
|
16
20
|
})
|
|
17
21
|
.catch((error) => {
|
|
22
|
+
if (seq !== requestSeq.current)
|
|
23
|
+
return;
|
|
18
24
|
store.updateChannelMessages(channel, (prev) => ({
|
|
19
25
|
...prev,
|
|
20
26
|
loading: false,
|
|
@@ -23,11 +29,13 @@ export function useMessages(channel) {
|
|
|
23
29
|
});
|
|
24
30
|
ctx.ws.subscribe([channel]);
|
|
25
31
|
return () => {
|
|
32
|
+
requestSeq.current += 1;
|
|
26
33
|
ctx.ws.unsubscribe([channel]);
|
|
27
34
|
};
|
|
28
35
|
}, [channel, ctx.agent, ctx.ws, store]);
|
|
29
36
|
const data = useSyncExternalStore(store.subscribe, () => store.getState().channelMessages[channel] ?? EMPTY);
|
|
30
37
|
const fetchMore = useCallback(async () => {
|
|
38
|
+
const seq = requestSeq.current;
|
|
31
39
|
const current = store.getState().channelMessages[channel];
|
|
32
40
|
if (!current || current.messages.length === 0)
|
|
33
41
|
return 0;
|
|
@@ -35,6 +43,8 @@ export function useMessages(channel) {
|
|
|
35
43
|
if (!oldest)
|
|
36
44
|
return 0;
|
|
37
45
|
const older = await ctx.agent.messages(channel, { before: oldest.id, limit: 50 });
|
|
46
|
+
if (seq !== requestSeq.current)
|
|
47
|
+
return 0;
|
|
38
48
|
if (older.length === 0)
|
|
39
49
|
return 0;
|
|
40
50
|
const sortedOlder = sortMessagesChronologically(older);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessages.js","sourceRoot":"","sources":["../../src/hooks/useMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useMessages.js","sourceRoot":"","sources":["../../src/hooks/useMessages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThread.d.ts","sourceRoot":"","sources":["../../src/hooks/useThread.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAK/D,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"useThread.d.ts","sourceRoot":"","sources":["../../src/hooks/useThread.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAK/D,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CA0C5D"}
|
package/dist/hooks/useThread.js
CHANGED
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
import { useContext, useEffect, useSyncExternalStore } from 'react';
|
|
1
|
+
import { useContext, useEffect, useRef, useSyncExternalStore } from 'react';
|
|
2
2
|
import { ClientContext, StoreContext } from '../context.js';
|
|
3
3
|
const EMPTY = { parent: null, replies: [], loading: true, error: null };
|
|
4
4
|
const IDLE = { parent: null, replies: [], loading: false, error: null };
|
|
5
5
|
export function useThread(messageId) {
|
|
6
6
|
const ctx = useContext(ClientContext);
|
|
7
7
|
const store = useContext(StoreContext);
|
|
8
|
+
const requestSeq = useRef(0);
|
|
8
9
|
if (!ctx || !store)
|
|
9
10
|
throw new Error('useThread must be used within <RelayProvider>');
|
|
10
11
|
useEffect(() => {
|
|
11
12
|
if (!messageId)
|
|
12
13
|
return;
|
|
14
|
+
const seq = ++requestSeq.current;
|
|
13
15
|
store.updateThread(messageId, (prev) => ({ ...prev, loading: true }));
|
|
14
16
|
ctx.agent.thread(messageId)
|
|
15
17
|
.then(({ parent, replies }) => {
|
|
18
|
+
if (seq !== requestSeq.current)
|
|
19
|
+
return;
|
|
16
20
|
store.updateThread(messageId, () => ({ parent, replies, loading: false, error: null }));
|
|
17
21
|
})
|
|
18
22
|
.catch((error) => {
|
|
23
|
+
if (seq !== requestSeq.current)
|
|
24
|
+
return;
|
|
19
25
|
store.updateThread(messageId, (prev) => ({
|
|
20
26
|
...prev,
|
|
21
27
|
loading: false,
|
|
22
28
|
error: error instanceof Error ? error : new Error(String(error)),
|
|
23
29
|
}));
|
|
24
30
|
});
|
|
31
|
+
return () => {
|
|
32
|
+
requestSeq.current += 1;
|
|
33
|
+
};
|
|
25
34
|
}, [messageId, ctx.agent, store]);
|
|
26
35
|
const fallback = messageId ? EMPTY : IDLE;
|
|
27
36
|
const data = useSyncExternalStore(store.subscribe, () => store.getState().threads[messageId] ?? fallback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThread.js","sourceRoot":"","sources":["../../src/hooks/useThread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useThread.js","sourceRoot":"","sources":["../../src/hooks/useThread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,KAAK,GAAe,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpF,MAAM,IAAI,GAAe,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAEpF,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAErF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,GAAG,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC;QACjC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEtE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;aACxB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,IAAI,GAAG,KAAK,UAAU,CAAC,OAAO;gBAAE,OAAO;YACvC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,GAAG,KAAK,UAAU,CAAC,OAAO;gBAAE,OAAO;YACvC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACvC,GAAG,IAAI;gBACP,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,oBAAoB,CAC/B,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,QAAQ,CACtD,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC"}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAO1D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,qBA0EpH"}
|
package/dist/provider.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo } from 'react';
|
|
2
|
+
import { useEffect, useMemo, useRef } from 'react';
|
|
3
3
|
import { RelayCast, WsClient } from '@relaycast/sdk';
|
|
4
4
|
import { ClientContext, StoreContext } from './context.js';
|
|
5
5
|
import { createStore } from './store.js';
|
|
6
6
|
import { handleServerEvent } from './reducer.js';
|
|
7
7
|
export function RelayProvider({ apiKey, agentToken, wsToken, baseUrl, channels, debug, children }) {
|
|
8
|
+
const channelKey = JSON.stringify(channels ?? []);
|
|
9
|
+
const subscribedChannels = useMemo(() => JSON.parse(channelKey), [channelKey]);
|
|
10
|
+
const subscribedChannelsRef = useRef(subscribedChannels);
|
|
8
11
|
const clients = useMemo(() => {
|
|
9
12
|
const relay = new RelayCast({ apiKey, baseUrl });
|
|
10
13
|
const agent = relay.as(agentToken);
|
|
@@ -12,14 +15,18 @@ export function RelayProvider({ apiKey, agentToken, wsToken, baseUrl, channels,
|
|
|
12
15
|
return { relay, agent, ws };
|
|
13
16
|
}, [apiKey, agentToken, wsToken, baseUrl, debug]);
|
|
14
17
|
const store = useMemo(() => createStore(), []);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
subscribedChannelsRef.current = subscribedChannels;
|
|
20
|
+
}, [subscribedChannels]);
|
|
15
21
|
useEffect(() => {
|
|
16
22
|
const { ws } = clients;
|
|
17
23
|
store.setState({ connectionStatus: 'connecting' });
|
|
18
24
|
ws.connect();
|
|
19
25
|
const offOpen = ws.on('open', () => {
|
|
20
26
|
store.setState({ connectionStatus: 'connected' });
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
const currentChannels = subscribedChannelsRef.current;
|
|
28
|
+
if (currentChannels.length > 0) {
|
|
29
|
+
ws.subscribe(currentChannels);
|
|
23
30
|
}
|
|
24
31
|
});
|
|
25
32
|
const offClose = ws.on('close', () => {
|
|
@@ -42,7 +49,17 @@ export function RelayProvider({ apiKey, agentToken, wsToken, baseUrl, channels,
|
|
|
42
49
|
store.setState({ connectionStatus: 'disconnected' });
|
|
43
50
|
ws.disconnect();
|
|
44
51
|
};
|
|
45
|
-
}, [clients, store
|
|
52
|
+
}, [clients, store]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
const { ws } = clients;
|
|
55
|
+
if (!ws.connected || subscribedChannels.length === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
ws.subscribe(subscribedChannels);
|
|
59
|
+
return () => {
|
|
60
|
+
ws.unsubscribe(subscribedChannels);
|
|
61
|
+
};
|
|
62
|
+
}, [clients, subscribedChannels]);
|
|
46
63
|
return (_jsx(ClientContext.Provider, { value: clients, children: _jsx(StoreContext.Provider, { value: store, children: children }) }));
|
|
47
64
|
}
|
|
48
65
|
//# sourceMappingURL=provider.js.map
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relaycast/react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "Headless React hooks for Relaycast real-time agent messaging",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"relaycast",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"lint": "eslint src/"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@relaycast/sdk": "
|
|
37
|
-
"@relaycast/types": "
|
|
36
|
+
"@relaycast/sdk": "5.0.1",
|
|
37
|
+
"@relaycast/types": "5.0.1",
|
|
38
38
|
"prism-react-renderer": "^2.4.1",
|
|
39
39
|
"react-markdown": "^10.1.0",
|
|
40
40
|
"remark-breaks": "^4.0.0",
|