teamplay 0.3.17 → 0.3.18
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/index.js +6 -1
- package/orm/Signal.js +1 -1
- package/package.json +8 -8
- package/react/helpers.js +6 -0
- package/react/useSub.js +15 -6
- package/react/wrapIntoSuspense.js +2 -0
package/index.js
CHANGED
|
@@ -14,7 +14,12 @@ export { GLOBAL_ROOT_ID } from './orm/Root.js'
|
|
|
14
14
|
export const $ = _getRootSignal({ rootId: GLOBAL_ROOT_ID, rootFunction: universal$ })
|
|
15
15
|
export default $
|
|
16
16
|
export { default as sub } from './orm/sub.js'
|
|
17
|
-
export {
|
|
17
|
+
export {
|
|
18
|
+
default as useSub,
|
|
19
|
+
useAsyncSub,
|
|
20
|
+
setUseDeferredValue as __setUseDeferredValue,
|
|
21
|
+
setDefaultDefer as __setDefaultDefer
|
|
22
|
+
} from './react/useSub.js'
|
|
18
23
|
export { default as observer } from './react/observer.js'
|
|
19
24
|
export { connection, setConnection, getConnection, fetchOnly, setFetchOnly, publicOnly, setPublicOnly } from './orm/connection.js'
|
|
20
25
|
export { useId, useNow, useScheduleUpdate, useTriggerUpdate } from './react/helpers.js'
|
package/orm/Signal.js
CHANGED
|
@@ -109,7 +109,7 @@ export default class Signal extends Function {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
getCollection () {
|
|
112
|
-
if (this[SEGMENTS].length === 0) throw Error('Can\'t get the
|
|
112
|
+
if (this[SEGMENTS].length === 0) throw Error('Can\'t get the collection of the root signal')
|
|
113
113
|
if (this[SEGMENTS][0] === AGGREGATIONS) {
|
|
114
114
|
return getAggregationCollectionName(this[SEGMENTS])
|
|
115
115
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "teamplay",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "Full-stack signals ORM with multiplayer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@nx-js/observer-util": "^4.1.3",
|
|
26
|
-
"@teamplay/backend": "^0.3.
|
|
27
|
-
"@teamplay/cache": "^0.3.
|
|
28
|
-
"@teamplay/channel": "^0.3.
|
|
29
|
-
"@teamplay/debug": "^0.3.
|
|
30
|
-
"@teamplay/schema": "^0.3.
|
|
31
|
-
"@teamplay/utils": "^0.3.
|
|
26
|
+
"@teamplay/backend": "^0.3.18",
|
|
27
|
+
"@teamplay/cache": "^0.3.18",
|
|
28
|
+
"@teamplay/channel": "^0.3.18",
|
|
29
|
+
"@teamplay/debug": "^0.3.18",
|
|
30
|
+
"@teamplay/schema": "^0.3.18",
|
|
31
|
+
"@teamplay/utils": "^0.3.18",
|
|
32
32
|
"diff-match-patch": "^1.0.5",
|
|
33
33
|
"events": "^3.3.0",
|
|
34
34
|
"json0-ot-diff": "^1.1.2",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
"license": "MIT",
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "5c3e2b44f536b53adfc94ead762834ab2e907858"
|
|
67
67
|
}
|
package/react/helpers.js
CHANGED
|
@@ -46,6 +46,12 @@ export function useScheduleUpdate () {
|
|
|
46
46
|
return context.scheduleUpdate
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
export function useDefer () {
|
|
50
|
+
const context = useContext(ComponentMetaContext)
|
|
51
|
+
if (!context) throw Error(ERRORS.useScheduleUpdate)
|
|
52
|
+
return context.defer
|
|
53
|
+
}
|
|
54
|
+
|
|
49
55
|
export function useCache (key) {
|
|
50
56
|
const context = useContext(ComponentMetaContext)
|
|
51
57
|
if (!context) throw Error(ERRORS.useCache)
|
package/react/useSub.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { useRef, useDeferredValue } from 'react'
|
|
2
2
|
import sub from '../orm/sub.js'
|
|
3
|
-
import { useScheduleUpdate, useCache } from './helpers.js'
|
|
3
|
+
import { useScheduleUpdate, useCache, useDefer } from './helpers.js'
|
|
4
4
|
import executionContextTracker from './executionContextTracker.js'
|
|
5
5
|
|
|
6
6
|
let TEST_THROTTLING = false
|
|
7
7
|
|
|
8
8
|
// experimental feature to leverage useDeferredValue() to handle re-subscriptions.
|
|
9
9
|
// Currently it does lead to issues with extra rerenders and requires further investigation
|
|
10
|
-
let USE_DEFERRED_VALUE =
|
|
10
|
+
let USE_DEFERRED_VALUE = true
|
|
11
|
+
// by default we want to defer stuff if possible instead of throwing promises
|
|
12
|
+
let DEFAULT_DEFER = true
|
|
11
13
|
|
|
12
14
|
export function useAsyncSub (signal, params, options) {
|
|
13
15
|
return useSub(signal, params, { ...options, async: true })
|
|
@@ -22,12 +24,16 @@ export default function useSub (signal, params, options) {
|
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
// version of sub() which works as a react hook and throws promise for Suspense
|
|
25
|
-
export function useSubDeferred (signal, params, { async = false } = {}) {
|
|
27
|
+
export function useSubDeferred (signal, params, { async = false, defer } = {}) {
|
|
26
28
|
const $signalRef = useRef() // eslint-disable-line react-hooks/rules-of-hooks
|
|
27
29
|
const scheduleUpdate = useScheduleUpdate()
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
const observerDefer = useDefer()
|
|
31
|
+
defer ??= observerDefer ?? DEFAULT_DEFER
|
|
32
|
+
if (defer) {
|
|
33
|
+
signal = useDeferredValue(signal) // eslint-disable-line react-hooks/rules-of-hooks
|
|
34
|
+
params = useDeferredValue(params ? JSON.stringify(params) : undefined) // eslint-disable-line react-hooks/rules-of-hooks
|
|
35
|
+
params = params != null ? JSON.parse(params) : undefined
|
|
36
|
+
}
|
|
31
37
|
const promiseOrSignal = params != null ? sub(signal, params) : sub(signal)
|
|
32
38
|
// 1. if it's a promise, throw it so that Suspense can catch it and wait for subscription to finish
|
|
33
39
|
if (promiseOrSignal.then) {
|
|
@@ -97,6 +103,9 @@ export function resetTestThrottling () {
|
|
|
97
103
|
export function setUseDeferredValue (value) {
|
|
98
104
|
USE_DEFERRED_VALUE = value
|
|
99
105
|
}
|
|
106
|
+
export function setDefaultDefer (value) {
|
|
107
|
+
DEFAULT_DEFER = value
|
|
108
|
+
}
|
|
100
109
|
|
|
101
110
|
// throttle to simulate slow network
|
|
102
111
|
function maybeThrottle (promise) {
|
|
@@ -17,6 +17,7 @@ function destroyAdm (adm) {
|
|
|
17
17
|
export default function wrapIntoSuspense ({
|
|
18
18
|
Component,
|
|
19
19
|
forwardRef,
|
|
20
|
+
defer,
|
|
20
21
|
suspenseProps = DEFAULT_SUSPENSE_PROPS
|
|
21
22
|
} = {}) {
|
|
22
23
|
if (!suspenseProps?.fallback) throw Error(ERRORS.noFallback)
|
|
@@ -62,6 +63,7 @@ export default function wrapIntoSuspense ({
|
|
|
62
63
|
componentMetaRef.current = {
|
|
63
64
|
componentId,
|
|
64
65
|
createdAt: Date.now(),
|
|
66
|
+
defer,
|
|
65
67
|
triggerUpdate: () => adm.onStoreChange?.(),
|
|
66
68
|
scheduleUpdate: promise => adm.scheduleUpdate?.(promise),
|
|
67
69
|
cache: {
|