diff --git a/.changeset/famous-deers-marry.md b/.changeset/famous-deers-marry.md new file mode 100644 index 0000000000..9a15509723 --- /dev/null +++ b/.changeset/famous-deers-marry.md @@ -0,0 +1,8 @@ +--- +'@urql/preact': patch +'@urql/svelte': patch +'urql': patch +'@urql/vue': patch +--- + +Fix subscription handlers to not receive `null` values. diff --git a/packages/preact-urql/src/hooks/useSubscription.ts b/packages/preact-urql/src/hooks/useSubscription.ts index 4321a96562..b4e1570ba5 100644 --- a/packages/preact-urql/src/hooks/useSubscription.ts +++ b/packages/preact-urql/src/hooks/useSubscription.ts @@ -282,7 +282,7 @@ export function useSubscription< 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 diff --git a/packages/react-urql/src/hooks/useSubscription.ts b/packages/react-urql/src/hooks/useSubscription.ts index 822fcda5fc..6e254e887f 100644 --- a/packages/react-urql/src/hooks/useSubscription.ts +++ b/packages/react-urql/src/hooks/useSubscription.ts @@ -266,10 +266,14 @@ export function useSubscription< 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; } diff --git a/packages/svelte-urql/src/subscriptionStore.ts b/packages/svelte-urql/src/subscriptionStore.ts index dc0fb9235f..d663dd4bd7 100644 --- a/packages/svelte-urql/src/subscriptionStore.ts +++ b/packages/svelte-urql/src/subscriptionStore.ts @@ -183,7 +183,7 @@ export function subscriptionStore< ), scan((result: OperationResultState, partial) => { const data = - partial.data !== undefined + partial.data != null ? typeof handler === 'function' ? handler(result.data, partial.data) : partial.data diff --git a/packages/vue-urql/src/useSubscription.ts b/packages/vue-urql/src/useSubscription.ts index acd230737b..ddd1fff51e 100644 --- a/packages/vue-urql/src/useSubscription.ts +++ b/packages/vue-urql/src/useSubscription.ts @@ -306,9 +306,9 @@ export function callUseSubscription< 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;