Skip to content

Conversation

@KyleAMathews
Copy link
Collaborator

Add a where callback option to SubscribeChangesOptions that allows filtering changes using query builder functions (eq, gt, and, etc.) with a row proxy, instead of requiring manual IR construction with PropRef.

Before:

import { eq, PropRef } from "@tanstack/db"
collection.subscribeChanges(callback, {
  whereExpression: eq(new PropRef(["status"]), "active")
})

After:

import { eq } from "@tanstack/db"
collection.subscribeChanges(callback, {
  where: (row) => eq(row.status, "active")
})

Changes:

  • Add generic where callback to SubscribeChangesOptions<T>
  • Compile where callback to whereExpression in CollectionChangesManager
  • Update JSDoc examples to show correct usage
  • Add tests for single and multiple condition filtering

🎯 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).

Add a `where` callback option to `SubscribeChangesOptions` that allows
filtering changes using query builder functions (eq, gt, and, etc.)
with a row proxy, instead of requiring manual IR construction with
PropRef.

Before:
```ts
import { eq, PropRef } from "@tanstack/db"
collection.subscribeChanges(callback, {
  whereExpression: eq(new PropRef(["status"]), "active")
})
```

After:
```ts
import { eq } from "@tanstack/db"
collection.subscribeChanges(callback, {
  where: (row) => eq(row.status, "active")
})
```

Changes:
- Add generic `where` callback to `SubscribeChangesOptions<T>`
- Compile `where` callback to `whereExpression` in CollectionChangesManager
- Update JSDoc examples to show correct usage
- Add tests for single and multiple condition filtering
@changeset-bot
Copy link

changeset-bot bot commented Dec 1, 2025

🦋 Changeset detected

Latest commit: 459b741

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

This PR includes changesets to release 11 packages
Name Type
@tanstack/db Patch
@tanstack/angular-db Patch
@tanstack/db-collection-e2e Patch
@tanstack/electric-db-collection 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

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 Dec 1, 2025

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 459b741

@github-actions
Copy link
Contributor

github-actions bot commented Dec 1, 2025

Size Change: +239 B (+0.27%)

Total Size: 87.4 kB

Filename Size Change
./packages/db/dist/esm/collection/changes.js 1.14 kB +160 B (+16.38%) ⚠️
./packages/db/dist/esm/collection/index.js 3.32 kB +79 B (+2.44%)
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.38 kB
./packages/db/dist/esm/collection/events.js 388 B
./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 Dec 1, 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

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.

3 participants