@rocicorp/zero 0.26.0-canary.7 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/ast-to-zql/src/ast-to-zql.d.ts.map +1 -1
- package/out/ast-to-zql/src/ast-to-zql.js +16 -27
- package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
- package/out/otel/src/log-options.d.ts +2 -2
- package/out/replicache/src/bg-interval.d.ts.map +1 -1
- package/out/replicache/src/bg-interval.js +3 -0
- package/out/replicache/src/bg-interval.js.map +1 -1
- package/out/shared/src/arrays.js +1 -1
- package/out/shared/src/arrays.js.map +1 -1
- package/out/shared/src/browser-env.js +0 -4
- package/out/shared/src/browser-env.js.map +1 -1
- package/out/shared/src/btree-set.js +4 -1
- package/out/shared/src/btree-set.js.map +1 -1
- package/out/shared/src/options.js +1 -1
- package/out/shared/src/options.js.map +1 -1
- package/out/shared/src/queue.js +1 -1
- package/out/shared/src/queue.js.map +1 -1
- package/out/z2s/src/compiler.d.ts.map +1 -1
- package/out/z2s/src/compiler.js +13 -11
- package/out/z2s/src/compiler.js.map +1 -1
- package/out/zero/package.json.js +1 -1
- package/out/zero/src/react.js +1 -3
- package/out/zero/src/react.js.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +0 -7
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/network.d.ts +3 -2
- package/out/zero-cache/src/config/network.d.ts.map +1 -1
- package/out/zero-cache/src/config/network.js +9 -2
- package/out/zero-cache/src/config/network.js.map +1 -1
- package/out/zero-cache/src/config/server-context.d.ts +16 -0
- package/out/zero-cache/src/config/server-context.d.ts.map +1 -0
- package/out/zero-cache/src/config/server-context.js +32 -0
- package/out/zero-cache/src/config/server-context.js.map +1 -0
- package/out/zero-cache/src/config/zero-config.d.ts +3 -3
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +2 -6
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/db/migration.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration.js +40 -51
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/run-transaction.d.ts +17 -0
- package/out/zero-cache/src/db/run-transaction.d.ts.map +1 -0
- package/out/zero-cache/src/db/run-transaction.js +24 -0
- package/out/zero-cache/src/db/run-transaction.js.map +1 -0
- package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
- package/out/zero-cache/src/db/transaction-pool.js +3 -3
- package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
- package/out/zero-cache/src/scripts/decommission.d.ts +1 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +2 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
- package/out/zero-cache/src/scripts/permissions.d.ts +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +6 -2
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/main.js +1 -1
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
- package/out/zero-cache/src/server/runner/run-worker.js +7 -3
- package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js +11 -9
- package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js +11 -0
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +5 -2
- package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +6 -6
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +6 -4
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +148 -54
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js +2 -1
- package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +4 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +35 -10
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +10 -0
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +6 -3
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +19 -10
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +1 -0
- package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/data.js +4 -2
- package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +3 -0
- package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +6 -4
- package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +2 -2
- package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js +30 -12
- package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +23 -3
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +1 -0
- package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js +1 -1
- package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/schema/tables.js +12 -4
- package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +11 -2
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +80 -42
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +2 -1
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +22 -17
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +10 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/schema/replication-state.js +49 -9
- package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
- package/out/zero-cache/src/services/running-state.d.ts +1 -0
- package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
- package/out/zero-cache/src/services/running-state.js +3 -0
- package/out/zero-cache/src/services/running-state.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +32 -28
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +329 -155
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +387 -345
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +68 -16
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js +13 -8
- package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/tracer.d.ts +2 -0
- package/out/zero-cache/src/services/view-syncer/tracer.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/tracer.js +7 -0
- package/out/zero-cache/src/services/view-syncer/tracer.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +58 -43
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/pg.js +0 -4
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/types/streams.d.ts +3 -1
- package/out/zero-cache/src/types/streams.d.ts.map +1 -1
- package/out/zero-cache/src/types/streams.js +1 -1
- package/out/zero-cache/src/types/streams.js.map +1 -1
- package/out/zero-cache/src/types/subscription.d.ts +7 -1
- package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
- package/out/zero-cache/src/types/subscription.js +8 -2
- package/out/zero-cache/src/types/subscription.js.map +1 -1
- package/out/zero-client/src/client/options.d.ts +7 -7
- package/out/zero-client/src/client/options.d.ts.map +1 -1
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/query-manager.js +1 -1
- package/out/zero-client/src/client/query-manager.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +5 -5
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.js +15 -17
- package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +6 -2
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +44 -8
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.d.ts +1 -1
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.d.ts +2 -9
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +15 -32
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +5 -2
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-react/src/mod.d.ts +0 -2
- package/out/zero-react/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/use-query.d.ts +6 -6
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-react/src/use-query.js +9 -2
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +5 -5
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.js.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +0 -42
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.js +1 -1
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/use-query.d.ts +4 -4
- package/out/zero-solid/src/use-query.d.ts.map +1 -1
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/use-zero.d.ts +5 -5
- package/out/zero-solid/src/use-zero.d.ts.map +1 -1
- package/out/zero-solid/src/use-zero.js.map +1 -1
- package/out/zero-types/src/default-types.d.ts +2 -0
- package/out/zero-types/src/default-types.d.ts.map +1 -1
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/builder/builder.js +6 -48
- package/out/zql/src/builder/builder.js.map +1 -1
- package/out/zql/src/builder/filter.d.ts.map +1 -1
- package/out/zql/src/builder/filter.js +0 -1
- package/out/zql/src/builder/filter.js.map +1 -1
- package/out/zql/src/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/ivm/array-view.js +6 -57
- package/out/zql/src/ivm/array-view.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts +3 -50
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +105 -358
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts +3 -3
- package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/planner/planner-builder.d.ts.map +1 -1
- package/out/zql/src/planner/planner-builder.js +1 -2
- package/out/zql/src/planner/planner-builder.js.map +1 -1
- package/out/zql/src/query/complete-ordering.js +0 -6
- package/out/zql/src/query/complete-ordering.js.map +1 -1
- package/out/zql/src/query/expression.d.ts +2 -19
- package/out/zql/src/query/expression.d.ts.map +1 -1
- package/out/zql/src/query/expression.js +6 -50
- package/out/zql/src/query/expression.js.map +1 -1
- package/out/zql/src/query/query-delegate-base.js +3 -1
- package/out/zql/src/query/query-delegate-base.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +8 -12
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-internals.js.map +1 -1
- package/out/zql/src/query/query-registry.d.ts +3 -3
- package/out/zql/src/query/query-registry.d.ts.map +1 -1
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/query.d.ts +28 -5
- package/out/zql/src/query/query.d.ts.map +1 -1
- package/out/zqlite/src/query-builder.d.ts +0 -2
- package/out/zqlite/src/query-builder.d.ts.map +1 -1
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts +10 -2
- package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +1 -1
- package/out/zqlite/src/resolve-scalar-subqueries.js +41 -9
- package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.d.ts.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +0 -1
- package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
- package/package.json +3 -5
- package/out/zero-cache/src/services/change-source/custom/sync-schema.d.ts +0 -4
- package/out/zero-cache/src/services/change-source/custom/sync-schema.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/custom/sync-schema.js +0 -14
- package/out/zero-cache/src/services/change-source/custom/sync-schema.js.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/sync-schema.d.ts +0 -5
- package/out/zero-cache/src/services/change-source/pg/sync-schema.d.ts.map +0 -1
- package/out/zero-cache/src/services/change-source/pg/sync-schema.js +0 -14
- package/out/zero-cache/src/services/change-source/pg/sync-schema.js.map +0 -1
- package/out/zero-react/src/paging-reducer.d.ts +0 -61
- package/out/zero-react/src/paging-reducer.d.ts.map +0 -1
- package/out/zero-react/src/paging-reducer.js +0 -77
- package/out/zero-react/src/paging-reducer.js.map +0 -1
- package/out/zero-react/src/use-rows.d.ts +0 -39
- package/out/zero-react/src/use-rows.d.ts.map +0 -1
- package/out/zero-react/src/use-rows.js +0 -130
- package/out/zero-react/src/use-rows.js.map +0 -1
- package/out/zero-react/src/use-zero-virtualizer.d.ts +0 -122
- package/out/zero-react/src/use-zero-virtualizer.d.ts.map +0 -1
- package/out/zero-react/src/use-zero-virtualizer.js +0 -342
- package/out/zero-react/src/use-zero-virtualizer.js.map +0 -1
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
function pagingReducer(state, action) {
|
|
2
|
-
switch (action.type) {
|
|
3
|
-
case "UPDATE_ESTIMATED_TOTAL": {
|
|
4
|
-
const newTotal = Math.max(state.estimatedTotal, action.newTotal);
|
|
5
|
-
if (newTotal === state.estimatedTotal) {
|
|
6
|
-
return state;
|
|
7
|
-
}
|
|
8
|
-
return {
|
|
9
|
-
...state,
|
|
10
|
-
estimatedTotal: newTotal
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
case "REACHED_START":
|
|
14
|
-
return { ...state, hasReachedStart: true };
|
|
15
|
-
case "REACHED_END":
|
|
16
|
-
return { ...state, hasReachedEnd: true };
|
|
17
|
-
case "UPDATE_ANCHOR":
|
|
18
|
-
return {
|
|
19
|
-
...state,
|
|
20
|
-
queryAnchor: {
|
|
21
|
-
...state.queryAnchor,
|
|
22
|
-
anchor: action.anchor
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
case "SHIFT_ANCHOR_DOWN":
|
|
26
|
-
return {
|
|
27
|
-
...state,
|
|
28
|
-
queryAnchor: {
|
|
29
|
-
...state.queryAnchor,
|
|
30
|
-
anchor: action.newAnchor
|
|
31
|
-
},
|
|
32
|
-
pendingScrollAdjustment: action.offset,
|
|
33
|
-
pagingPhase: "adjusting"
|
|
34
|
-
};
|
|
35
|
-
case "RESET_TO_TOP":
|
|
36
|
-
return {
|
|
37
|
-
...state,
|
|
38
|
-
queryAnchor: {
|
|
39
|
-
...state.queryAnchor,
|
|
40
|
-
anchor: { index: 0, kind: "forward", startRow: void 0 }
|
|
41
|
-
},
|
|
42
|
-
pendingScrollAdjustment: action.offset,
|
|
43
|
-
pagingPhase: "adjusting"
|
|
44
|
-
};
|
|
45
|
-
case "SCROLL_ADJUSTED":
|
|
46
|
-
return {
|
|
47
|
-
...state,
|
|
48
|
-
estimatedTotal: state.estimatedTotal + state.pendingScrollAdjustment,
|
|
49
|
-
pendingScrollAdjustment: 0,
|
|
50
|
-
pagingPhase: "skipping"
|
|
51
|
-
};
|
|
52
|
-
case "PAGING_COMPLETE":
|
|
53
|
-
return {
|
|
54
|
-
...state,
|
|
55
|
-
pagingPhase: "idle"
|
|
56
|
-
};
|
|
57
|
-
case "RESET_STATE":
|
|
58
|
-
return {
|
|
59
|
-
...state,
|
|
60
|
-
estimatedTotal: action.estimatedTotal,
|
|
61
|
-
hasReachedStart: action.hasReachedStart,
|
|
62
|
-
hasReachedEnd: action.hasReachedEnd,
|
|
63
|
-
queryAnchor: {
|
|
64
|
-
listContextParams: action.listContextParams,
|
|
65
|
-
anchor: action.anchor
|
|
66
|
-
},
|
|
67
|
-
pagingPhase: "skipping"
|
|
68
|
-
};
|
|
69
|
-
default: {
|
|
70
|
-
return state;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export {
|
|
75
|
-
pagingReducer
|
|
76
|
-
};
|
|
77
|
-
//# sourceMappingURL=paging-reducer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paging-reducer.js","sources":["../../../../zero-react/src/paging-reducer.ts"],"sourcesContent":["import type {Anchor} from './use-rows.ts';\n\ntype QueryAnchor<TListContextParams, TStartRow> = {\n readonly anchor: Anchor<TStartRow>;\n /**\n * Associates an anchor with list query params to coordinate state during\n * navigation. When list context params change (e.g., filter/sort changes or\n * browser back/forward navigation), the anchor and scroll position must be\n * updated atomically with the new query results.\n *\n * When `listContextParams !== queryAnchor.listContextParams`:\n * - Use history state to restore previous scroll position and anchor if\n * navigating back\n * - Use permalink anchor if loading a specific item\n * - Otherwise reset to top\n *\n * During the transition (while `!isListContextCurrent`), skip paging logic\n * and count updates to avoid querying with mismatched anchor/params or\n * calculating counts from inconsistent state.\n */\n readonly listContextParams: TListContextParams;\n};\n\nexport type PagingState<TListContextParams, TStartRow> = {\n estimatedTotal: number;\n hasReachedStart: boolean;\n hasReachedEnd: boolean;\n queryAnchor: QueryAnchor<TListContextParams, TStartRow>;\n pagingPhase: 'idle' | 'adjusting' | 'skipping';\n pendingScrollAdjustment: number;\n};\n\nexport function pagingReducer<TListContextParams, TStartRow>(\n state: PagingState<TListContextParams, TStartRow>,\n action: PagingAction<TListContextParams, TStartRow>,\n): PagingState<TListContextParams, TStartRow> {\n switch (action.type) {\n case 'UPDATE_ESTIMATED_TOTAL': {\n const newTotal = Math.max(state.estimatedTotal, action.newTotal);\n if (newTotal === state.estimatedTotal) {\n return state;\n }\n return {\n ...state,\n estimatedTotal: newTotal,\n };\n }\n\n case 'REACHED_START':\n return {...state, hasReachedStart: true};\n\n case 'REACHED_END':\n return {...state, hasReachedEnd: true};\n\n case 'UPDATE_ANCHOR':\n return {\n ...state,\n queryAnchor: {\n ...state.queryAnchor,\n anchor: action.anchor,\n },\n };\n\n case 'SHIFT_ANCHOR_DOWN':\n return {\n ...state,\n queryAnchor: {\n ...state.queryAnchor,\n anchor: action.newAnchor,\n },\n pendingScrollAdjustment: action.offset,\n pagingPhase: 'adjusting',\n };\n\n case 'RESET_TO_TOP':\n return {\n ...state,\n queryAnchor: {\n ...state.queryAnchor,\n anchor: {index: 0, kind: 'forward', startRow: undefined},\n },\n pendingScrollAdjustment: action.offset,\n pagingPhase: 'adjusting',\n };\n\n case 'SCROLL_ADJUSTED':\n return {\n ...state,\n estimatedTotal: state.estimatedTotal + state.pendingScrollAdjustment,\n pendingScrollAdjustment: 0,\n pagingPhase: 'skipping',\n };\n\n case 'PAGING_COMPLETE':\n return {\n ...state,\n pagingPhase: 'idle',\n };\n\n case 'RESET_STATE':\n return {\n ...state,\n estimatedTotal: action.estimatedTotal,\n hasReachedStart: action.hasReachedStart,\n hasReachedEnd: action.hasReachedEnd,\n queryAnchor: {\n listContextParams: action.listContextParams,\n anchor: action.anchor,\n },\n pagingPhase: 'skipping',\n };\n\n default: {\n action satisfies never;\n return state;\n }\n }\n}\n\nexport type PagingAction<TListContextParams, TStartRow> =\n | {type: 'UPDATE_ESTIMATED_TOTAL'; newTotal: number}\n | {type: 'REACHED_START'}\n | {type: 'REACHED_END'}\n | {type: 'UPDATE_ANCHOR'; anchor: Anchor<TStartRow>}\n | {\n type: 'SHIFT_ANCHOR_DOWN';\n offset: number;\n newAnchor: Anchor<TStartRow>;\n }\n | {type: 'RESET_TO_TOP'; offset: number}\n | {type: 'SCROLL_ADJUSTED'}\n | {type: 'PAGING_COMPLETE'}\n | {\n type: 'RESET_STATE';\n estimatedTotal: number;\n hasReachedStart: boolean;\n hasReachedEnd: boolean;\n anchor: Anchor<TStartRow>;\n listContextParams: TListContextParams;\n };\n"],"names":[],"mappings":"AAgCO,SAAS,cACd,OACA,QAC4C;AAC5C,UAAQ,OAAO,MAAA;AAAA,IACb,KAAK,0BAA0B;AAC7B,YAAM,WAAW,KAAK,IAAI,MAAM,gBAAgB,OAAO,QAAQ;AAC/D,UAAI,aAAa,MAAM,gBAAgB;AACrC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,gBAAgB;AAAA,MAAA;AAAA,IAEpB;AAAA,IAEA,KAAK;AACH,aAAO,EAAC,GAAG,OAAO,iBAAiB,KAAA;AAAA,IAErC,KAAK;AACH,aAAO,EAAC,GAAG,OAAO,eAAe,KAAA;AAAA,IAEnC,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,UACX,GAAG,MAAM;AAAA,UACT,QAAQ,OAAO;AAAA,QAAA;AAAA,MACjB;AAAA,IAGJ,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,UACX,GAAG,MAAM;AAAA,UACT,QAAQ,OAAO;AAAA,QAAA;AAAA,QAEjB,yBAAyB,OAAO;AAAA,QAChC,aAAa;AAAA,MAAA;AAAA,IAGjB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,UACX,GAAG,MAAM;AAAA,UACT,QAAQ,EAAC,OAAO,GAAG,MAAM,WAAW,UAAU,OAAA;AAAA,QAAS;AAAA,QAEzD,yBAAyB,OAAO;AAAA,QAChC,aAAa;AAAA,MAAA;AAAA,IAGjB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,gBAAgB,MAAM,iBAAiB,MAAM;AAAA,QAC7C,yBAAyB;AAAA,QACzB,aAAa;AAAA,MAAA;AAAA,IAGjB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,MAAA;AAAA,IAGjB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,gBAAgB,OAAO;AAAA,QACvB,iBAAiB,OAAO;AAAA,QACxB,eAAe,OAAO;AAAA,QACtB,aAAa;AAAA,UACX,mBAAmB,OAAO;AAAA,UAC1B,QAAQ,OAAO;AAAA,QAAA;AAAA,QAEjB,aAAa;AAAA,MAAA;AAAA,IAGjB,SAAS;AAEP,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { DefaultContext, DefaultSchema } from '../../zero-types/src/default-types.ts';
|
|
2
|
-
import type { QueryOrQueryRequest } from '../../zql/src/query/query-registry.ts';
|
|
3
|
-
import { type UseQueryOptions } from './use-query.tsx';
|
|
4
|
-
export type Anchor<TStartRow> = Readonly<{
|
|
5
|
-
index: number;
|
|
6
|
-
kind: 'forward';
|
|
7
|
-
startRow?: TStartRow | undefined;
|
|
8
|
-
}> | Readonly<{
|
|
9
|
-
index: number;
|
|
10
|
-
kind: 'backward';
|
|
11
|
-
startRow: TStartRow;
|
|
12
|
-
}> | Readonly<{
|
|
13
|
-
index: number;
|
|
14
|
-
kind: 'permalink';
|
|
15
|
-
id: string;
|
|
16
|
-
}>;
|
|
17
|
-
export type GetPageQuery<TRow, TStartRow> = (limit: number, start: TStartRow | null, dir: 'forward' | 'backward') => GetQueryReturnType<TRow>;
|
|
18
|
-
export type GetSingleQuery<TRow> = (id: string) => GetQueryReturnType<TRow | undefined>;
|
|
19
|
-
export type GetQueryReturnType<TReturn> = QueryOrQueryRequest<keyof DefaultSchema['tables'] & string, any, // input
|
|
20
|
-
any, // output
|
|
21
|
-
DefaultSchema, TReturn, DefaultContext>;
|
|
22
|
-
export declare function useRows<TRow, TStartRow>({ pageSize, anchor, options, getPageQuery, getSingleQuery, toStartRow, }: {
|
|
23
|
-
pageSize: number;
|
|
24
|
-
anchor: Anchor<TStartRow>;
|
|
25
|
-
options?: UseQueryOptions | undefined;
|
|
26
|
-
getPageQuery: GetPageQuery<TRow, TStartRow>;
|
|
27
|
-
getSingleQuery: GetSingleQuery<TRow>;
|
|
28
|
-
toStartRow: (row: TRow) => TStartRow;
|
|
29
|
-
}): {
|
|
30
|
-
rowAt: (index: number) => TRow | undefined;
|
|
31
|
-
rowsLength: number;
|
|
32
|
-
complete: boolean;
|
|
33
|
-
rowsEmpty: boolean;
|
|
34
|
-
atStart: boolean;
|
|
35
|
-
atEnd: boolean;
|
|
36
|
-
firstRowIndex: number;
|
|
37
|
-
permalinkNotFound: boolean;
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=use-rows.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-rows.d.ts","sourceRoot":"","sources":["../../../../zero-react/src/use-rows.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAW,KAAK,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAE/D,MAAM,MAAM,MAAM,CAAC,SAAS,IACxB,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC,GACF,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC,GACF,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC,CAAC;AAEP,MAAM,MAAM,YAAY,CAAC,IAAI,EAAE,SAAS,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,GAAG,EAAE,SAAS,GAAG,UAAU,KACxB,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAE9B,MAAM,MAAM,cAAc,CAAC,IAAI,IAAI,CACjC,EAAE,EAAE,MAAM,KACP,kBAAkB,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1C,MAAM,MAAM,kBAAkB,CAAC,OAAO,IAAI,mBAAmB,CAC3D,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,MAAM,EAEtC,GAAG,EAAE,QAAQ;AAEb,GAAG,EAAE,SAAS;AACd,aAAa,EACb,OAAO,EACP,cAAc,CACf,CAAC;AAEF,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,EACvC,QAAQ,EACR,MAAM,EACN,OAAO,EACP,YAAY,EACZ,cAAc,EACd,UAAU,GACX,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAEtC,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,UAAU,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,SAAS,CAAC;CACtC,GAAG;IACF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAoJA"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../shared/src/asserts.js";
|
|
2
|
-
import { useQuery } from "./use-query.js";
|
|
3
|
-
function useRows({
|
|
4
|
-
pageSize,
|
|
5
|
-
anchor,
|
|
6
|
-
options,
|
|
7
|
-
getPageQuery,
|
|
8
|
-
getSingleQuery,
|
|
9
|
-
toStartRow
|
|
10
|
-
}) {
|
|
11
|
-
const { kind, index: anchorIndex } = anchor;
|
|
12
|
-
let permalinkNotFound = false;
|
|
13
|
-
if (kind === "permalink") {
|
|
14
|
-
const { id } = anchor;
|
|
15
|
-
assert(id);
|
|
16
|
-
assert(pageSize % 2 === 0);
|
|
17
|
-
const halfPageSize = pageSize / 2;
|
|
18
|
-
const qItem = getSingleQuery(id);
|
|
19
|
-
const [row, resultRow] = useQuery(qItem, options);
|
|
20
|
-
const completeRow = resultRow.type === "complete";
|
|
21
|
-
const typedRow = row;
|
|
22
|
-
if (completeRow && typedRow === void 0) {
|
|
23
|
-
void useQuery(null, options);
|
|
24
|
-
void useQuery(null, options);
|
|
25
|
-
return {
|
|
26
|
-
rowAt: () => void 0,
|
|
27
|
-
rowsLength: 0,
|
|
28
|
-
complete: true,
|
|
29
|
-
rowsEmpty: true,
|
|
30
|
-
atStart: true,
|
|
31
|
-
atEnd: true,
|
|
32
|
-
firstRowIndex: anchorIndex,
|
|
33
|
-
permalinkNotFound: true
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
const start2 = typedRow && toStartRow(typedRow);
|
|
37
|
-
const qBefore = start2 && getPageQuery(halfPageSize + 1, start2, "backward");
|
|
38
|
-
const qAfter = start2 && getPageQuery(halfPageSize, start2, "forward");
|
|
39
|
-
const [rowsBefore, resultBefore] = useQuery(qBefore, options);
|
|
40
|
-
const [rowsAfter, resultAfter] = useQuery(qAfter, options);
|
|
41
|
-
const completeBefore = resultBefore.type === "complete";
|
|
42
|
-
const completeAfter = resultAfter.type === "complete";
|
|
43
|
-
const typedRowsBefore = rowsBefore;
|
|
44
|
-
const typedRowsAfter = rowsAfter;
|
|
45
|
-
const rowsBeforeLength = typedRowsBefore?.length ?? 0;
|
|
46
|
-
const rowsAfterLength = typedRowsAfter?.length ?? 0;
|
|
47
|
-
const rowsBeforeSize = Math.min(rowsBeforeLength, halfPageSize);
|
|
48
|
-
const rowsAfterSize = Math.min(rowsAfterLength, halfPageSize - 1);
|
|
49
|
-
const firstRowIndex = anchorIndex - rowsBeforeSize;
|
|
50
|
-
return {
|
|
51
|
-
rowAt: (index) => {
|
|
52
|
-
if (index === anchorIndex) {
|
|
53
|
-
return typedRow;
|
|
54
|
-
}
|
|
55
|
-
if (index > anchorIndex) {
|
|
56
|
-
if (typedRowsAfter === void 0) {
|
|
57
|
-
return void 0;
|
|
58
|
-
}
|
|
59
|
-
const i2 = index - anchorIndex - 1;
|
|
60
|
-
if (i2 >= rowsAfterSize) {
|
|
61
|
-
return void 0;
|
|
62
|
-
}
|
|
63
|
-
return typedRowsAfter[i2];
|
|
64
|
-
}
|
|
65
|
-
assert(index < anchorIndex);
|
|
66
|
-
if (typedRowsBefore === void 0) {
|
|
67
|
-
return void 0;
|
|
68
|
-
}
|
|
69
|
-
const i = anchorIndex - index - 1;
|
|
70
|
-
if (i >= rowsBeforeSize) {
|
|
71
|
-
return void 0;
|
|
72
|
-
}
|
|
73
|
-
return typedRowsBefore[i];
|
|
74
|
-
},
|
|
75
|
-
rowsLength: rowsBeforeSize + rowsAfterSize + (typedRow ? 1 : 0),
|
|
76
|
-
complete: completeRow && (typedRow === void 0 || completeBefore && completeAfter),
|
|
77
|
-
rowsEmpty: typedRow === void 0 || rowsBeforeSize === 0 && rowsAfterSize === 0,
|
|
78
|
-
atStart: completeBefore && rowsBeforeLength <= halfPageSize,
|
|
79
|
-
atEnd: completeAfter && rowsAfterLength <= halfPageSize - 1,
|
|
80
|
-
firstRowIndex,
|
|
81
|
-
permalinkNotFound
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
const { startRow: start = null } = anchor;
|
|
85
|
-
const q = getPageQuery(pageSize + 1, start, kind);
|
|
86
|
-
const [rows, result] = useQuery(q, options);
|
|
87
|
-
void useQuery(null, options);
|
|
88
|
-
void useQuery(null, options);
|
|
89
|
-
const typedRows = rows;
|
|
90
|
-
const complete = result.type === "complete";
|
|
91
|
-
const hasMoreRows = typedRows.length > pageSize;
|
|
92
|
-
const rowsLength = hasMoreRows ? pageSize : typedRows.length;
|
|
93
|
-
const rowsEmpty = typedRows.length === 0;
|
|
94
|
-
if (kind === "forward") {
|
|
95
|
-
return {
|
|
96
|
-
rowAt: (index) => index - anchorIndex < rowsLength ? typedRows[index - anchorIndex] : void 0,
|
|
97
|
-
rowsLength,
|
|
98
|
-
complete,
|
|
99
|
-
rowsEmpty,
|
|
100
|
-
atStart: start === null || anchorIndex === 0,
|
|
101
|
-
atEnd: complete && !hasMoreRows,
|
|
102
|
-
firstRowIndex: anchorIndex,
|
|
103
|
-
permalinkNotFound
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
assert(start !== null);
|
|
107
|
-
return {
|
|
108
|
-
rowAt: (index) => {
|
|
109
|
-
if (index >= anchorIndex) {
|
|
110
|
-
return void 0;
|
|
111
|
-
}
|
|
112
|
-
const i = anchorIndex - index - 1;
|
|
113
|
-
if (i < 0 || i >= rowsLength) {
|
|
114
|
-
return void 0;
|
|
115
|
-
}
|
|
116
|
-
return typedRows[i];
|
|
117
|
-
},
|
|
118
|
-
rowsLength,
|
|
119
|
-
complete,
|
|
120
|
-
rowsEmpty,
|
|
121
|
-
atStart: complete && !hasMoreRows,
|
|
122
|
-
atEnd: false,
|
|
123
|
-
firstRowIndex: anchorIndex - rowsLength,
|
|
124
|
-
permalinkNotFound
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
export {
|
|
128
|
-
useRows
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=use-rows.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-rows.js","sources":["../../../../zero-react/src/use-rows.ts"],"sourcesContent":["import {assert} from 'shared/src/asserts.ts';\nimport type {\n DefaultContext,\n DefaultSchema,\n} from '../../zero-types/src/default-types.ts';\nimport type {QueryOrQueryRequest} from '../../zql/src/query/query-registry.ts';\nimport {useQuery, type UseQueryOptions} from './use-query.tsx';\n\nexport type Anchor<TStartRow> =\n | Readonly<{\n index: number;\n kind: 'forward';\n startRow?: TStartRow | undefined;\n }>\n | Readonly<{\n index: number;\n kind: 'backward';\n startRow: TStartRow;\n }>\n | Readonly<{\n index: number;\n kind: 'permalink';\n id: string;\n }>;\n\nexport type GetPageQuery<TRow, TStartRow> = (\n limit: number,\n start: TStartRow | null,\n dir: 'forward' | 'backward',\n) => GetQueryReturnType<TRow>;\n\nexport type GetSingleQuery<TRow> = (\n id: string,\n) => GetQueryReturnType<TRow | undefined>;\n\nexport type GetQueryReturnType<TReturn> = QueryOrQueryRequest<\n keyof DefaultSchema['tables'] & string,\n // oxlint-disable-next-line no-explicit-any\n any, // input\n // oxlint-disable-next-line no-explicit-any\n any, // output\n DefaultSchema,\n TReturn,\n DefaultContext\n>;\n\nexport function useRows<TRow, TStartRow>({\n pageSize,\n anchor,\n options,\n getPageQuery,\n getSingleQuery,\n toStartRow,\n}: {\n pageSize: number;\n anchor: Anchor<TStartRow>;\n options?: UseQueryOptions | undefined;\n\n getPageQuery: GetPageQuery<TRow, TStartRow>;\n getSingleQuery: GetSingleQuery<TRow>;\n toStartRow: (row: TRow) => TStartRow;\n}): {\n rowAt: (index: number) => TRow | undefined;\n rowsLength: number;\n complete: boolean;\n rowsEmpty: boolean;\n atStart: boolean;\n atEnd: boolean;\n firstRowIndex: number;\n permalinkNotFound: boolean;\n} {\n const {kind, index: anchorIndex} = anchor;\n let permalinkNotFound = false;\n\n if (kind === 'permalink') {\n const {id} = anchor;\n assert(id);\n assert(pageSize % 2 === 0);\n\n const halfPageSize = pageSize / 2;\n\n const qItem = getSingleQuery(id);\n\n const [row, resultRow] = useQuery(qItem, options);\n const completeRow = resultRow.type === 'complete';\n\n const typedRow = row as TRow | undefined;\n\n // Early return if permalink not found to skip unnecessary queries\n if (completeRow && typedRow === undefined) {\n // Call dummy useQuery to maintain hooks call order\n void useQuery(null, options);\n void useQuery(null, options);\n\n return {\n rowAt: () => undefined,\n rowsLength: 0,\n complete: true,\n rowsEmpty: true,\n atStart: true,\n atEnd: true,\n firstRowIndex: anchorIndex,\n permalinkNotFound: true,\n };\n }\n\n const start = typedRow && toStartRow(typedRow);\n\n const qBefore = start && getPageQuery(halfPageSize + 1, start, 'backward');\n const qAfter = start && getPageQuery(halfPageSize, start, 'forward');\n\n const [rowsBefore, resultBefore] = useQuery(qBefore, options);\n const [rowsAfter, resultAfter] = useQuery(qAfter, options);\n const completeBefore = resultBefore.type === 'complete';\n const completeAfter = resultAfter.type === 'complete';\n\n const typedRowsBefore = rowsBefore as unknown as TRow[] | undefined;\n const typedRowsAfter = rowsAfter as unknown as TRow[] | undefined;\n const rowsBeforeLength = typedRowsBefore?.length ?? 0;\n const rowsAfterLength = typedRowsAfter?.length ?? 0;\n const rowsBeforeSize = Math.min(rowsBeforeLength, halfPageSize);\n const rowsAfterSize = Math.min(rowsAfterLength, halfPageSize - 1);\n\n const firstRowIndex = anchorIndex - rowsBeforeSize;\n\n return {\n rowAt: (index: number) => {\n if (index === anchorIndex) {\n return typedRow;\n }\n if (index > anchorIndex) {\n if (typedRowsAfter === undefined) {\n return undefined;\n }\n const i = index - anchorIndex - 1;\n if (i >= rowsAfterSize) {\n return undefined;\n }\n return typedRowsAfter[i];\n }\n assert(index < anchorIndex);\n if (typedRowsBefore === undefined) {\n return undefined;\n }\n const i = anchorIndex - index - 1;\n if (i >= rowsBeforeSize) {\n return undefined;\n }\n return typedRowsBefore[i];\n },\n rowsLength: rowsBeforeSize + rowsAfterSize + (typedRow ? 1 : 0),\n complete:\n completeRow &&\n (typedRow === undefined || (completeBefore && completeAfter)),\n rowsEmpty:\n typedRow === undefined || (rowsBeforeSize === 0 && rowsAfterSize === 0),\n atStart: completeBefore && rowsBeforeLength <= halfPageSize,\n atEnd: completeAfter && rowsAfterLength <= halfPageSize - 1,\n firstRowIndex: firstRowIndex,\n permalinkNotFound,\n };\n }\n\n kind satisfies 'forward' | 'backward';\n\n const {startRow: start = null} = anchor;\n\n const q = getPageQuery(pageSize + 1, start, kind);\n\n const [rows, result] = useQuery(q, options);\n // not used but needed to follow rules of hooks\n void useQuery(null, options);\n void useQuery(null, options);\n\n const typedRows = rows as unknown as TRow[];\n const complete = result.type === 'complete';\n const hasMoreRows = typedRows.length > pageSize;\n const rowsLength = hasMoreRows ? pageSize : typedRows.length;\n const rowsEmpty = typedRows.length === 0;\n\n if (kind === 'forward') {\n return {\n rowAt: (index: number) =>\n index - anchorIndex < rowsLength\n ? typedRows[index - anchorIndex]\n : undefined,\n rowsLength: rowsLength,\n complete,\n rowsEmpty: rowsEmpty,\n atStart: start === null || anchorIndex === 0,\n atEnd: complete && !hasMoreRows,\n firstRowIndex: anchorIndex,\n permalinkNotFound,\n };\n }\n\n kind satisfies 'backward';\n assert(start !== null);\n\n return {\n rowAt: (index: number) => {\n if (index >= anchorIndex) {\n return undefined;\n }\n const i = anchorIndex - index - 1;\n if (i < 0 || i >= rowsLength) {\n return undefined;\n }\n return typedRows[i];\n },\n rowsLength: rowsLength,\n complete,\n rowsEmpty: rowsEmpty,\n atStart: complete && !hasMoreRows,\n atEnd: false,\n firstRowIndex: anchorIndex - rowsLength,\n permalinkNotFound,\n };\n}\n"],"names":["start","i"],"mappings":"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"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { useVirtualizer, type Virtualizer } from '@tanstack/react-virtual';
|
|
2
|
-
import { type Key } from 'react';
|
|
3
|
-
import type { UseQueryOptions } from './use-query.tsx';
|
|
4
|
-
import { type Anchor, type GetPageQuery, type GetSingleQuery } from './use-rows.ts';
|
|
5
|
-
/**
|
|
6
|
-
* State object that captures the virtualizer's scroll position and pagination state.
|
|
7
|
-
* Used for persisting and restoring the virtualizer state across navigation or page reloads.
|
|
8
|
-
*
|
|
9
|
-
* @typeParam TStartRow - The type of the start row data used for pagination anchoring
|
|
10
|
-
*/
|
|
11
|
-
export type PermalinkHistoryState<TStartRow> = Readonly<{
|
|
12
|
-
/** The anchor point for pagination (includes position, direction, and start row data) */
|
|
13
|
-
anchor: Anchor<TStartRow>;
|
|
14
|
-
/** The scroll position in pixels from the top of the scrollable container */
|
|
15
|
-
scrollTop: number;
|
|
16
|
-
/** The estimated total number of rows in the list */
|
|
17
|
-
estimatedTotal: number;
|
|
18
|
-
/** Whether the virtualizer has reached the start of the list */
|
|
19
|
-
hasReachedStart: boolean;
|
|
20
|
-
/** Whether the virtualizer has reached the end of the list */
|
|
21
|
-
hasReachedEnd: boolean;
|
|
22
|
-
}>;
|
|
23
|
-
type TanstackUseVirtualizerOptions<TScrollElement extends Element, TItemElement extends Element> = Parameters<typeof useVirtualizer<TScrollElement, TItemElement>>[0];
|
|
24
|
-
/**
|
|
25
|
-
* Options for configuring the Zero virtualizer.
|
|
26
|
-
* Extends Tanstack Virtual's options with Zero-specific pagination and state management.
|
|
27
|
-
*
|
|
28
|
-
* @typeParam TScrollElement - The type of the scrollable container element
|
|
29
|
-
* @typeParam TItemElement - The type of the individual item elements
|
|
30
|
-
* @typeParam TListContextParams - The type of parameters that define the list's query context
|
|
31
|
-
* @typeParam TRow - The type of row data returned from queries
|
|
32
|
-
* @typeParam TStartRow - The type of data needed to anchor pagination (typically a subset of TRow)
|
|
33
|
-
*/
|
|
34
|
-
export type UseZeroVirtualizerOptions<TScrollElement extends Element, TItemElement extends Element, TListContextParams, TRow, TStartRow> = Omit<TanstackUseVirtualizerOptions<TScrollElement, TItemElement>, 'count' | 'initialOffset' | 'horizontal'> & {
|
|
35
|
-
/** Parameters that define the list's query context (filters, sort order, etc.) */
|
|
36
|
-
listContextParams: TListContextParams;
|
|
37
|
-
/** Optional ID to highlight/scroll to a specific row (permalink functionality) */
|
|
38
|
-
permalinkID?: string | null | undefined;
|
|
39
|
-
/** Function that returns a query for fetching a page of rows */
|
|
40
|
-
getPageQuery: GetPageQuery<TRow, TStartRow>;
|
|
41
|
-
/** Function that returns a query for fetching a single row by ID */
|
|
42
|
-
getSingleQuery: GetSingleQuery<TRow>;
|
|
43
|
-
/** Optional query options */
|
|
44
|
-
options?: UseQueryOptions | undefined;
|
|
45
|
-
/** Function to extract the start row data from a full row (for pagination anchoring) */
|
|
46
|
-
toStartRow: (row: TRow) => TStartRow;
|
|
47
|
-
/**
|
|
48
|
-
* Function to extract a unique key from a row, used for stable item identification.
|
|
49
|
-
* If provided, this will override {@linkcode TanstackUseVirtualizerOptions.getItemKey}
|
|
50
|
-
*/
|
|
51
|
-
getRowKey?: ((row: TRow) => Key) | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Optional current permalink state for restoring virtualizer position.
|
|
54
|
-
* If provided along with `onPermalinkStateChange`, enables state persistence.
|
|
55
|
-
* If not provided, virtualizer operates in uncontrolled mode.
|
|
56
|
-
*/
|
|
57
|
-
permalinkState?: PermalinkHistoryState<TStartRow> | null | undefined;
|
|
58
|
-
/**
|
|
59
|
-
* Optional callback invoked when the virtualizer state changes.
|
|
60
|
-
* Use this to persist state (e.g., to browser history, local storage, etc.).
|
|
61
|
-
* Called with the new state approximately 100ms after scroll/pagination changes.
|
|
62
|
-
*/
|
|
63
|
-
onPermalinkStateChange?: (state: PermalinkHistoryState<TStartRow>) => void;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Result object returned by the useZeroVirtualizer hook.
|
|
67
|
-
*
|
|
68
|
-
* @typeParam TScrollElement - The type of the scrollable container element
|
|
69
|
-
* @typeParam TItemElement - The type of the individual item elements
|
|
70
|
-
* @typeParam TRow - The type of row data returned from queries
|
|
71
|
-
*/
|
|
72
|
-
export type ZeroVirtualizerResult<TScrollElement extends Element, TItemElement extends Element, TRow> = {
|
|
73
|
-
/** The Tanstack Virtual virtualizer instance for rendering virtual items */
|
|
74
|
-
virtualizer: Virtualizer<TScrollElement, TItemElement>;
|
|
75
|
-
/** Function to get the row data at a specific index, or undefined if not loaded */
|
|
76
|
-
rowAt: (index: number) => TRow | undefined;
|
|
77
|
-
/** Whether all initially requested data has finished loading */
|
|
78
|
-
complete: boolean;
|
|
79
|
-
/** Whether the list is empty (no rows exist matching the query) */
|
|
80
|
-
rowsEmpty: boolean;
|
|
81
|
-
/** Whether the specified permalinkID was not found in the query results */
|
|
82
|
-
permalinkNotFound: boolean;
|
|
83
|
-
/** Estimated total number of rows (may be inexact until both ends are reached) */
|
|
84
|
-
estimatedTotal: number;
|
|
85
|
-
/** Exact total number of rows, or undefined if not yet known (requires reaching both ends) */
|
|
86
|
-
total: number | undefined;
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* Hook that creates a virtualized list with bidirectional pagination and state persistence.
|
|
90
|
-
*
|
|
91
|
-
* This hook combines Tanstack Virtual's efficient virtualization with Zero's reactive queries
|
|
92
|
-
* to create infinitely scrolling lists that load data on demand. It supports:
|
|
93
|
-
* - Bidirectional scrolling (load more items at top or bottom)
|
|
94
|
-
* - Permalink functionality (jump to and highlight specific items)
|
|
95
|
-
* - State persistence (restore scroll position across navigation)
|
|
96
|
-
* - Dynamic page sizing based on viewport
|
|
97
|
-
*
|
|
98
|
-
* @typeParam TScrollElement - The type of the scrollable container element
|
|
99
|
-
* @typeParam TItemElement - The type of the individual item elements
|
|
100
|
-
* @typeParam TListContextParams - The type of parameters that define the list's query context
|
|
101
|
-
* @typeParam TRow - The type of row data returned from queries
|
|
102
|
-
* @typeParam TStartRow - The type of data needed to anchor pagination
|
|
103
|
-
*
|
|
104
|
-
* @param options - Configuration options including query functions, sizing, and state management
|
|
105
|
-
* @returns An object containing the virtualizer instance, row accessor, and state flags
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```tsx
|
|
109
|
-
* const {virtualizer, rowAt, complete} = useZeroVirtualizer({
|
|
110
|
-
* estimateSize: () => 50,
|
|
111
|
-
* getScrollElement: () => scrollRef.current,
|
|
112
|
-
* listContextParams: {projectId: 'abc'},
|
|
113
|
-
* getPageQuery: (limit, start, dir) => z.query.issues.where(...).limit(limit),
|
|
114
|
-
* getSingleQuery: (id) => z.query.issues.where('id', id),
|
|
115
|
-
* toStartRow: (row) => ({id: row.id, created: row.created}),
|
|
116
|
-
* });
|
|
117
|
-
* ```
|
|
118
|
-
*/
|
|
119
|
-
export declare function useZeroVirtualizer<TScrollElement extends Element, TItemElement extends Element, TListContextParams, TRow, TStartRow>({ estimateSize, overscan, // Virtualizer defaults to 1.
|
|
120
|
-
getScrollElement, getItemKey, listContextParams, permalinkID, getPageQuery, getSingleQuery, options, toStartRow, getRowKey, permalinkState, onPermalinkStateChange, ...restVirtualizerOptions }: UseZeroVirtualizerOptions<TScrollElement, TItemElement, TListContextParams, TRow, TStartRow>): ZeroVirtualizerResult<TScrollElement, TItemElement, TRow>;
|
|
121
|
-
export {};
|
|
122
|
-
//# sourceMappingURL=use-zero-virtualizer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-zero-virtualizer.d.ts","sourceRoot":"","sources":["../../../../zero-react/src/use-zero-virtualizer.ts"],"names":[],"mappings":"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"}
|