Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.

fix(bindings): Fix handlers for subscriptions receiving null (#3581)

Changed files
+18 -6
.changeset
packages
preact-urql
src
react-urql
src
svelte-urql
vue-urql
+8
.changeset/famous-deers-marry.md
···
+
---
+
'@urql/preact': patch
+
'@urql/svelte': patch
+
'urql': patch
+
'@urql/vue': patch
+
---
+
+
Fix subscription handlers to not receive `null` values.
+1 -1
packages/preact-urql/src/hooks/useSubscription.ts
···
const { current: handler } = handlerRef;
// If a handler has been passed, it's used to merge new data in
const data =
-
partial.data !== undefined
+
partial.data != null
? typeof handler === 'function'
? handler(result.data, partial.data)
: partial.data
+6 -2
packages/react-urql/src/hooks/useSubscription.ts
···
deferDispatch(setState, state => {
const nextResult = computeNextState(state[1], result);
if (state[1] === nextResult) return state;
-
if (handlerRef.current && state[1].data !== nextResult.data) {
+
if (
+
handlerRef.current &&
+
nextResult.data != null &&
+
state[1].data !== nextResult.data
+
) {
nextResult.data = handlerRef.current(
state[1].data,
-
nextResult.data!
+
nextResult.data
) as any;
}
+1 -1
packages/svelte-urql/src/subscriptionStore.ts
···
),
scan((result: OperationResultState<Result, Variables>, partial) => {
const data =
-
partial.data !== undefined
+
partial.data != null
? typeof handler === 'function'
? handler(result.data, partial.data)
: partial.data
+2 -2
packages/vue-urql/src/useSubscription.ts
···
subscribe(result => {
fetching.value = true;
data.value =
-
result.data !== undefined
+
result.data != null
? typeof scanHandler.value === 'function'
-
? scanHandler.value(data.value as any, result.data!)
+
? scanHandler.value(data.value as any, result.data)
: result.data
: (result.data as any);
error.value = result.error;