From 925920538473c7ce069553dc7dd2765762504ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E6=96=8C?= Date: Wed, 20 Nov 2024 20:29:53 +0800 Subject: [PATCH] fix store subscription for `prop in store` cases (#7071) track store modifications in `has()` cases --- .changeset/proud-carrots-grab.md | 5 +++++ packages/qwik/src/core/state/store.ts | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 .changeset/proud-carrots-grab.md diff --git a/.changeset/proud-carrots-grab.md b/.changeset/proud-carrots-grab.md new file mode 100644 index 00000000000..8f1f62312b0 --- /dev/null +++ b/.changeset/proud-carrots-grab.md @@ -0,0 +1,5 @@ +--- +'@builder.io/qwik': patch +--- + +Fix: add subscription when doing `"prop" in store` diff --git a/packages/qwik/src/core/state/store.ts b/packages/qwik/src/core/state/store.ts index e5db4c72bec..08d9050740a 100644 --- a/packages/qwik/src/core/state/store.ts +++ b/packages/qwik/src/core/state/store.ts @@ -192,15 +192,23 @@ export class ReadWriteProxyHandler implements ProxyHandler { return true; } - has(target: TargetType, property: string | symbol): boolean { - if (property === QOjectTargetSymbol) { + has(target: TargetType, prop: string | symbol): boolean { + if (prop === QOjectTargetSymbol) { return true; } + const invokeCtx = tryGetInvokeContext(); + if (typeof prop === 'string' && invokeCtx) { + const subscriber = invokeCtx.$subscriber$; + if (subscriber) { + const isA = isArray(target); + this.$manager$.$addSub$(subscriber, isA ? undefined : prop); + } + } const hasOwnProperty = Object.prototype.hasOwnProperty; - if (hasOwnProperty.call(target, property)) { + if (hasOwnProperty.call(target, prop)) { return true; } - if (typeof property === 'string' && hasOwnProperty.call(target, _IMMUTABLE_PREFIX + property)) { + if (typeof prop === 'string' && hasOwnProperty.call(target, _IMMUTABLE_PREFIX + prop)) { return true; } return false;