Skip to content

Add QueryObserver state utility methods to QueryCollectionUtils - #742

Merged
KyleAMathews merged 7 commits into
mainfrom
claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5
Nov 5, 2025
Merged

Add QueryObserver state utility methods to QueryCollectionUtils#742
KyleAMathews merged 7 commits into
mainfrom
claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5

Conversation

@KyleAMathews

@KyleAMathewsKyleAMathews commented Oct 31, 2025

Copy link
Copy Markdown
Collaborator

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

changeset-botBot commented Oct 31, 2025

Copy link
Copy Markdown

🦋 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
NameType
@tanstack/query-db-collectionMinor
@tanstack/dbPatch
@tanstack/db-example-react-todoPatch
@tanstack/db-example-solid-todoPatch
@tanstack/angular-dbPatch
@tanstack/electric-db-collectionPatch
@tanstack/offline-transactionsPatch
@tanstack/powersync-db-collectionPatch
@tanstack/react-dbPatch
@tanstack/rxdb-db-collectionPatch
@tanstack/solid-dbPatch
@tanstack/svelte-dbPatch
@tanstack/trailbase-db-collectionPatch
@tanstack/vue-dbPatch
todosPatch
@tanstack/db-example-paced-mutations-demoPatch

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

pkg-pr-newBot commented Oct 31, 2025

Copy link
Copy Markdown
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

github-actionsBot commented Oct 31, 2025

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 79.1 kB

ℹ️ View Unchanged
FilenameSize
./packages/db/dist/esm/collection/change-events.js1.34 kB
./packages/db/dist/esm/collection/changes.js977 B
./packages/db/dist/esm/collection/events.js388 B
./packages/db/dist/esm/collection/index.js3.12 kB
./packages/db/dist/esm/collection/indexes.js1.1 kB
./packages/db/dist/esm/collection/lifecycle.js1.67 kB
./packages/db/dist/esm/collection/mutations.js2.26 kB
./packages/db/dist/esm/collection/state.js3.43 kB
./packages/db/dist/esm/collection/subscription.js2.42 kB
./packages/db/dist/esm/collection/sync.js2.02 kB
./packages/db/dist/esm/deferred.js207 B
./packages/db/dist/esm/errors.js3.9 kB
./packages/db/dist/esm/event-emitter.js748 B
./packages/db/dist/esm/index.js2.36 kB
./packages/db/dist/esm/indexes/auto-index.js731 B
./packages/db/dist/esm/indexes/base-index.js766 B
./packages/db/dist/esm/indexes/btree-index.js1.87 kB
./packages/db/dist/esm/indexes/lazy-index.js1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js513 B
./packages/db/dist/esm/local-only.js837 B
./packages/db/dist/esm/local-storage.js2.04 kB
./packages/db/dist/esm/optimistic-action.js359 B
./packages/db/dist/esm/paced-mutations.js496 B
./packages/db/dist/esm/proxy.js3.22 kB
./packages/db/dist/esm/query/builder/functions.js606 B
./packages/db/dist/esm/query/builder/index.js3.85 kB
./packages/db/dist/esm/query/builder/ref-proxy.js917 B
./packages/db/dist/esm/query/compiler/evaluators.js1.26 kB
./packages/db/dist/esm/query/compiler/expressions.js674 B
./packages/db/dist/esm/query/compiler/group-by.js1.78 kB
./packages/db/dist/esm/query/compiler/index.js1.95 kB
./packages/db/dist/esm/query/compiler/joins.js2 kB
./packages/db/dist/esm/query/compiler/order-by.js1.17 kB
./packages/db/dist/esm/query/compiler/select.js1.07 kB
./packages/db/dist/esm/query/ir.js673 B
./packages/db/dist/esm/query/live-query-collection.js360 B
./packages/db/dist/esm/query/live/collection-config-builder.js5 kB
./packages/db/dist/esm/query/live/collection-registry.js214 B
./packages/db/dist/esm/query/live/collection-subscriber.js1.77 kB
./packages/db/dist/esm/query/optimizer.js2.6 kB
./packages/db/dist/esm/scheduler.js1.21 kB
./packages/db/dist/esm/SortedMap.js1.18 kB
./packages/db/dist/esm/strategies/debounceStrategy.js237 B
./packages/db/dist/esm/strategies/queueStrategy.js418 B
./packages/db/dist/esm/strategies/throttleStrategy.js236 B
./packages/db/dist/esm/transactions.js2.9 kB
./packages/db/dist/esm/utils.js881 B
./packages/db/dist/esm/utils/browser-polyfills.js304 B
./packages/db/dist/esm/utils/btree.js5.61 kB
./packages/db/dist/esm/utils/comparison.js660 B
./packages/db/dist/esm/utils/index-optimization.js1.49 kB
./packages/db/dist/esm/utils/type-guards.js157 B

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

@github-actions

github-actionsBot commented Oct 31, 2025

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 3.34 kB

ℹ️ View Unchanged
FilenameSize
./packages/react-db/dist/esm/index.js225 B
./packages/react-db/dist/esm/useLiveInfiniteQuery.js1.17 kB
./packages/react-db/dist/esm/useLiveQuery.js1.11 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js431 B
./packages/react-db/dist/esm/usePacedMutations.js401 B

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

@KyleAMathews
KyleAMathewsforce-pushed the claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5 branch from 2f89188 to ca3361dCompareOctober 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
KyleAMathewsforce-pushed the claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5 branch from ca3361d to f8fd37fCompareOctober 31, 2025 20:10
@KyleAMathewsKyleAMathews moved this to Ready for review in TanStack DB 1.0.0 releaseNov 4, 2025

@samwillissamwillis left a comment

Copy link
Copy Markdown
Collaborator

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.

Comment threadpackages/db/src/types.ts
Comment threadpackages/query-db-collection/src/query.ts Outdated
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 <noreply@anthropic.com>
KyleAMathewsand others added 4 commits November 5, 2025 08:45
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Re-generate documentation after QueryCollectionUtilsImpl refactoring.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Regenerated all documentation files after running full build.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>

@samwillissamwillis left a comment

Copy link
Copy Markdown
Collaborator

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

@samwillissamwillisNov 5, 2025

Copy link
Copy Markdown
Collaborator

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 <noreply@anthropic.com>
@KyleAMathews
KyleAMathews merged commit 1367756 into mainNov 5, 2025
6 checks passed
@KyleAMathews
KyleAMathews deleted the claude/add-query-observer-utils-011CUfe3K9sLFToVas2AHHh5 branch November 5, 2025 17:27
@github-actionsgithub-actionsBot mentioned this pull request Nov 5, 2025
@KyleAMathewsKyleAMathews moved this from Ready for review to Done in TanStack DB 1.0.0 releaseNov 13, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

3 participants

@KyleAMathews@samwillis@claude