Skip to content

Conversation

@KyleAMathews
Copy link
Collaborator

@KyleAMathews KyleAMathews commented Oct 31, 2025

Adds new utility methods to QueryCollectionUtils to expose TanStack Query's QueryObserver state, addressing user request for visibility into sync status:

New utils exposed:

  • isFetching() - Check if query is currently fetching (initial or background)
  • isRefetching() - Check if query is refetching in background
  • isLoading() - Check if query is loading for first time
  • dataUpdatedAt() - Get timestamp of last successful data update
  • fetchStatus() - Get current fetch status ('fetching' | 'paused' | 'idle')

This allows users to:

  • Show loading indicators during background refetches
  • Implement "Last updated X minutes ago" UI patterns
  • Understand sync behavior beyond just error states

Converted error state utilities from methods to getters:

  • lastError() → lastError
  • isError() → isError
  • errorCount() → errorCount

Resolves user request from Discord where status is always 'ready' after initial load, making it impossible to know if background refetches are happening.

@changeset-bot
Copy link

changeset-bot bot commented Oct 31, 2025

🦋 Changeset detected

Latest commit: 50c5d1a

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

This PR includes changesets to release 16 packages
Name Type
@tanstack/query-db-collection Minor
@tanstack/db Patch
@tanstack/db-example-react-todo Patch
@tanstack/db-example-solid-todo Patch
@tanstack/angular-db Patch
@tanstack/electric-db-collection Patch
@tanstack/offline-transactions Patch
@tanstack/powersync-db-collection Patch
@tanstack/react-db Patch
@tanstack/rxdb-db-collection Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db Patch
todos Patch
@tanstack/db-example-paced-mutations-demo 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 Oct 31, 2025

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 3b4a50b

@github-actions
Copy link
Contributor

github-actions bot commented Oct 31, 2025

Size Change: 0 B

Total Size: 79.1 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.34 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.12 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.26 kB
./packages/db/dist/esm/collection/state.js 3.43 kB
./packages/db/dist/esm/collection/subscription.js 2.42 kB
./packages/db/dist/esm/collection/sync.js 2.02 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 3.9 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.36 kB
./packages/db/dist/esm/indexes/auto-index.js 731 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.04 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.22 kB
./packages/db/dist/esm/query/builder/functions.js 606 B
./packages/db/dist/esm/query/builder/index.js 3.85 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 917 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.26 kB
./packages/db/dist/esm/query/compiler/expressions.js 674 B
./packages/db/dist/esm/query/compiler/group-by.js 1.78 kB
./packages/db/dist/esm/query/compiler/index.js 1.95 kB
./packages/db/dist/esm/query/compiler/joins.js 2 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.17 kB
./packages/db/dist/esm/query/compiler/select.js 1.07 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 kB
./packages/db/dist/esm/query/live/collection-registry.js 214 B
./packages/db/dist/esm/query/live/collection-subscriber.js 1.77 kB
./packages/db/dist/esm/query/optimizer.js 2.6 kB
./packages/db/dist/esm/scheduler.js 1.21 kB
./packages/db/dist/esm/SortedMap.js 1.18 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 237 B
./packages/db/dist/esm/strategies/queueStrategy.js 418 B
./packages/db/dist/esm/strategies/throttleStrategy.js 236 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 660 B
./packages/db/dist/esm/utils/index-optimization.js 1.49 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 Oct 31, 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

@KyleAMathews KyleAMathews force-pushed the claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5 branch from 2f89188 to ca3361d Compare October 31, 2025 20:07
…tters

Adds new utilities to expose TanStack Query's QueryObserver state:
- isFetching: Check if query is currently fetching
- isRefetching: Check if query is refetching in background
- isLoading: Check if query is loading for first time
- dataUpdatedAt: Timestamp of last successful data update
- fetchStatus: Current fetch status ('fetching' | 'paused' | 'idle')

BREAKING CHANGE: Error state utilities are now getters instead of methods:
- collection.utils.lastError() → collection.utils.lastError
- collection.utils.isError() → collection.utils.isError
- collection.utils.errorCount() → collection.utils.errorCount
@KyleAMathews KyleAMathews force-pushed the claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5 branch from ca3361d to f8fd37f Compare October 31, 2025 20:10
@KyleAMathews KyleAMathews moved this to Ready for review in 1.0.0 release Nov 4, 2025
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.

Looking very good, much prefer this to the previous and the widening of the types for the utils.

Just a comment above on the class being a closure.

Addresses PR feedback from samwillis: refactor QueryCollectionUtilsImpl
class to be extracted outside the function scope with required state
passed through the constructor instead of relying on closure patterns.

This improves code architecture by making dependencies explicit and
avoiding nested class definitions within functions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
KyleAMathews and others added 4 commits November 5, 2025 08:45
Re-generate documentation after QueryCollectionUtilsImpl refactoring.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Regenerated all documentation files after running full build.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
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.

Aside: it will create some merge conflicts with the query driven sync PR #763, hopefully not too painful, but to keep in mind.

}

/**
* Implementation class for QueryCollectionUtils that maintains proper closure
Copy link
Collaborator

@samwillis samwillis Nov 5, 2025

Choose a reason for hiding this comment

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

that maintains proper closure

its not a colure any more...

Update QueryCollectionUtilsImpl class comment to accurately reflect
that it now uses explicit dependency injection instead of closure.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@KyleAMathews KyleAMathews merged commit 1367756 into main Nov 5, 2025
6 checks passed
@KyleAMathews KyleAMathews deleted the claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5 branch November 5, 2025 17:27
@github-actions github-actions bot mentioned this pull request Nov 5, 2025
@KyleAMathews KyleAMathews moved this from Ready for review to Done in 1.0.0 release Nov 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants