Skip to content

Conversation

@KyleAMathews
Copy link
Collaborator

When useLiveQuery's query function returns null or undefined, the query is effectively "disabled" - there's no async operation to wait for. The hook should be considered "ready" immediately since there's nothing loading.

This change updates isReady to return true (instead of false) when status is 'disabled', matching user expectations when conditionally enabling queries.

Fixes #883

🎯 Changes

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm test:pr.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

When useLiveQuery's query function returns null or undefined, the query
is effectively "disabled" - there's no async operation to wait for. The
hook should be considered "ready" immediately since there's nothing loading.

This change updates isReady to return true (instead of false) when status
is 'disabled', matching user expectations when conditionally enabling queries.

Fixes #883
@changeset-bot
Copy link

changeset-bot bot commented Nov 21, 2025

🦋 Changeset detected

Latest commit: 2d3e7ec

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 5 packages
Name Type
@tanstack/react-db Patch
@tanstack/solid-db Patch
@tanstack/vue-db Patch
@tanstack/svelte-db Patch
@tanstack/angular-db Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 21, 2025

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@886

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@886

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@886

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@886

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@886

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@886

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@886

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@886

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@886

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@886

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@886

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@886

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@886

commit: 2d3e7ec

@github-actions
Copy link
Contributor

github-actions bot commented Nov 21, 2025

Size Change: 0 B

Total Size: 87.1 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.38 kB
./packages/db/dist/esm/collection/changes.js 977 B
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.24 kB
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.67 kB
./packages/db/dist/esm/collection/mutations.js 2.31 kB
./packages/db/dist/esm/collection/state.js 3.43 kB
./packages/db/dist/esm/collection/subscription.js 2.55 kB
./packages/db/dist/esm/collection/sync.js 2.37 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 4.19 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.64 kB
./packages/db/dist/esm/indexes/auto-index.js 742 B
./packages/db/dist/esm/indexes/base-index.js 766 B
./packages/db/dist/esm/indexes/btree-index.js 1.87 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 513 B
./packages/db/dist/esm/local-only.js 837 B
./packages/db/dist/esm/local-storage.js 2.1 kB
./packages/db/dist/esm/optimistic-action.js 359 B
./packages/db/dist/esm/paced-mutations.js 496 B
./packages/db/dist/esm/proxy.js 3.75 kB
./packages/db/dist/esm/query/builder/functions.js 733 B
./packages/db/dist/esm/query/builder/index.js 3.96 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 917 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.35 kB
./packages/db/dist/esm/query/compiler/expressions.js 430 B
./packages/db/dist/esm/query/compiler/group-by.js 1.8 kB
./packages/db/dist/esm/query/compiler/index.js 1.96 kB
./packages/db/dist/esm/query/compiler/joins.js 2 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.25 kB
./packages/db/dist/esm/query/compiler/select.js 1.07 kB
./packages/db/dist/esm/query/expression-helpers.js 1.43 kB
./packages/db/dist/esm/query/ir.js 673 B
./packages/db/dist/esm/query/live-query-collection.js 360 B
./packages/db/dist/esm/query/live/collection-config-builder.js 5.33 kB
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/collection-subscriber.js 1.74 kB
./packages/db/dist/esm/query/live/internal.js 130 B
./packages/db/dist/esm/query/optimizer.js 2.56 kB
./packages/db/dist/esm/query/predicate-utils.js 2.91 kB
./packages/db/dist/esm/query/subset-dedupe.js 921 B
./packages/db/dist/esm/scheduler.js 1.3 kB
./packages/db/dist/esm/SortedMap.js 1.18 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 247 B
./packages/db/dist/esm/strategies/queueStrategy.js 428 B
./packages/db/dist/esm/strategies/throttleStrategy.js 246 B
./packages/db/dist/esm/transactions.js 2.9 kB
./packages/db/dist/esm/utils.js 881 B
./packages/db/dist/esm/utils/browser-polyfills.js 304 B
./packages/db/dist/esm/utils/btree.js 5.61 kB
./packages/db/dist/esm/utils/comparison.js 852 B
./packages/db/dist/esm/utils/index-optimization.js 1.51 kB
./packages/db/dist/esm/utils/type-guards.js 157 B

compressed-size-action::db-package-size

@github-actions
Copy link
Contributor

github-actions bot commented Nov 21, 2025

Size Change: 0 B

Total Size: 3.34 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 225 B
./packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.17 kB
./packages/react-db/dist/esm/useLiveQuery.js 1.11 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js 431 B
./packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

Extended the fix for disabled queries to solid-db, vue-db, and svelte-db.
All frameworks now properly handle when query functions return null/undefined
by:
- Returning null for the collection
- Setting status to 'disabled'
- Returning isReady: true (since there's nothing to wait for)

This provides a consistent API across all framework packages and fixes the
common conditional query pattern.

Related to #883
Added explicit TypeScript overloads to support returning null/undefined
from query functions across all framework packages:
- solid-db: useLiveQuery
- vue-db: useLiveQuery
- svelte-db: useLiveQuery
- angular-db: injectLiveQuery

This makes the disabled query pattern type-safe, allowing developers to
conditionally enable queries with proper type inference.

Related to #883
Copy link
Collaborator

@samwillis samwillis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, but we should add tests for the vue, svelte, solid and angular implementation of the disabled queries.

KyleAMathews and others added 5 commits December 2, 2025 07:26
Added tests to verify that disabled queries (returning null/undefined)
properly return isReady: true. Solid tests pass. Vue tests added but
need additional debugging of the reactive deps implementation.

Related to #883 - addressing Sam's review feedback
- Updated InjectLiveQueryResult interface to support nullable collection and disabled status
- Fixed isReady computed to return true when status is 'disabled'
- Added TypeScript overloads for query functions that can return null/undefined
- Added tests for disabled query functionality with reactive params
- Added check for query functions that return null/undefined
- Sets status to 'disabled' when collection is null
- Fixed isReady to return true for disabled status
- Added tests but marked as skipped due to Vue reactivity limitations
- TODO: Need different test pattern that works with Vue's reactivity system
claude and others added 2 commits December 2, 2025 15:46
- Fixed toValue() being called on query functions, which was treating them as getters
- Wrapped query functions to handle null/undefined returns without double-invocation
- All 25 tests now passing including disabled query tests
- Performance improvement: query function only called once by createLiveQueryCollection
@KyleAMathews KyleAMathews merged commit e12514a into main Dec 3, 2025
7 checks passed
@KyleAMathews KyleAMathews deleted the claude/fix-isready-livequery-01PFttL3FVr31ovRVWXJk9xz branch December 3, 2025 14:29
@github-actions github-actions bot mentioned this pull request Dec 3, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Dec 4, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Returning early in a useLiveQuery should set isReady to true

4 participants