Store
Table of contents
A store of records.
class Store<R extends UnknownRecord = UnknownRecord, Props = unknown> {}
Constructs a new instance of the Store
class
Name | Description |
---|---|
|
|
Properties
Get an array of all values in the store.
allRecords: () => R[]
Removes all records from the store.
clear: () => void
Create a computed cache.
createComputedCache: <Result, Record extends R = R>(
name: string,
derive: (record: Record) => Result | undefined,
isEqual?: ((a: Record, b: Record) => boolean) | undefined
) => ComputedCache<Result, Record>
Name | Description |
---|---|
| The name of the derivation cache. |
| A function used to derive the value of the cache. |
Create a computed cache from a selector
createSelectedComputedCache: <Selection, Result, Record extends R = R>(
name: string,
selector: (record: Record) => Selection | undefined,
derive: (input: Selection) => Result | undefined
) => ComputedCache<Result, Record>
Name | Description |
---|---|
| The name of the derivation cache. |
| A function that returns a subset of the original shape |
| A function used to derive the value of the cache. |
Get the value of a store record by its id.
get: <K extends IdOf<R>>(id: K) => RecordFromId<K> | undefined
Name | Description |
---|---|
| The id of the record to get. |
Get whether the record store has a id.
has: <K extends IdOf<R>>(id: K) => boolean
Name | Description |
---|---|
| The id of the record to check. |
An atom containing the store's history.
readonly history: Atom<number, RecordsDiff<R>>
The random id of the store.
readonly id: string
Add a new listener to the store.
listen: (
onHistory: StoreListener<R>,
filters?: Partial<StoreListenerFilters>
) => () => void
Name | Description |
---|---|
| The listener to call when the store updates. |
| Filters to apply to the listener. |
Merge changes from a remote source without triggering listeners.
mergeRemoteChanges: (fn: () => void) => void
Name | Description |
---|---|
| A function that merges the external changes. |
readonly props: Props
Add some records to the store. It's an error if they already exist.
put: (records: R[], phaseOverride?: 'initialize') => void
Name | Description |
---|---|
| The records to add. |
A StoreQueries instance for this store.
readonly query: StoreQueries<R>
Remove some records from the store via their ids.
remove: (ids: IdOf<R>[]) => void
Name | Description |
---|---|
| The ids of the records to remove. |
readonly schema: StoreSchema<R, Props>
readonly scopedTypes: {
readonly [K in RecordScope]: ReadonlySet<R['typeName']>
}
Creates a JSON payload from the record store.
serialize: (scope?: 'all' | RecordScope) => SerializedStore<R>
Name | Description |
---|---|
| The scope of records to serialize. Defaults to 'document'. |
readonly sideEffects: StoreSideEffects<R>
Get the value of a store record by its id without updating its epoch.
unsafeGetWithoutCapture: <K extends IdOf<R>>(
id: K
) => RecordFromId<K> | undefined
Name | Description |
---|---|
| The id of the record to get. |
Update a record. To update multiple records at once, use the update
method of the
TypedStore
class.
update: <K extends IdOf<R>>(
id: K,
updater: (record: RecordFromId<K>) => RecordFromId<K>
) => void
Name | Description |
---|---|
| The id of the record to update. |
| A function that updates the record. |
Methods
applyDiff(
diff: RecordsDiff<R>,
{
runCallbacks,
ignoreEphemeralKeys,
}?: {
ignoreEphemeralKeys?: boolean
runCallbacks?: boolean
}
): void
Name | Description |
---|---|
|
|
|
|
void
dispose(): void
Run fn
and return a RecordsDiff of the changes that occurred as a result.
extractingChanges(fn: () => void): RecordsDiff<R>
Name | Description |
---|---|
|
|
RecordsDiff<R>
Filters out non-document changes from a diff. Returns null if there are no changes left.
filterChangesByScope(
change: RecordsDiff<R>,
scope: RecordScope
): {
added: { [K in IdOf<R>]: R }
removed: { [K in IdOf<R>]: R }
updated: { [K_1 in IdOf<R>]: [from: R, to: R] }
} | null
Name | Description |
---|---|
|
the records diff |
|
|
{
added: { [K in IdOf<R>]: R }
removed: { [K in IdOf<R>]: R }
updated: { [K_1 in IdOf<R>]: [from: R, to: R] }
} | null
getSnapshot(scope?: 'all' | RecordScope): StoreSnapshot<R>
Name | Description |
---|---|
|
|
StoreSnapshot<R>
Get a serialized snapshot of the store and its schema.
const snapshot = store.getStoreSnapshot()
store.loadStoreSnapshot(snapshot)
getStoreSnapshot(scope?: 'all' | RecordScope): StoreSnapshot<R>
Name | Description |
---|---|
|
The scope of records to serialize. Defaults to 'document'. |
StoreSnapshot<R>
loadSnapshot(snapshot: StoreSnapshot<R>): void
Name | Description |
---|---|
|
|
void
Load a serialized snapshot.
const snapshot = store.getStoreSnapshot()
store.loadStoreSnapshot(snapshot)
loadStoreSnapshot(snapshot: StoreSnapshot<R>): void
Name | Description |
---|---|
|
The snapshot to load. |
void
Migrate a serialized snapshot of the store and its schema.
const snapshot = store.getSnapshot()
store.migrateSnapshot(snapshot)
migrateSnapshot(snapshot: StoreSnapshot<R>): StoreSnapshot<R>
Name | Description |
---|---|
|
The snapshot to load. |
StoreSnapshot<R>
validate(
phase: 'createRecord' | 'initialize' | 'tests' | 'updateRecord'
): void
Name | Description |
---|---|
|
|
void