UNPKG

react-native-onyx

Version:

State management for React Native

159 lines (158 loc) 7.17 kB
import * as Logger from './Logger'; import type { CollectionKeyBase, ConnectOptions, InitOptions, Mapping, OnyxKey, OnyxMergeCollectionInput, OnyxMergeInput, OnyxMultiSetInput, OnyxSetInput, OnyxUpdate } from './types'; import type { Connection } from './OnyxConnectionManager'; /** Initialize the store with actions and listening for storage events */ declare function init({ keys, initialKeyStates, evictableKeys, maxCachedKeysCount, shouldSyncMultipleInstances, debugSetState, enablePerformanceMetrics, skippableCollectionMemberIDs, }: InitOptions): void; /** * Connects to an Onyx key given the options passed and listens to its changes. * * @example * ```ts * const connection = Onyx.connect({ * key: ONYXKEYS.SESSION, * callback: onSessionChange, * }); * ``` * * @param connectOptions The options object that will define the behavior of the connection. * @param connectOptions.key The Onyx key to subscribe to. * @param connectOptions.callback A function that will be called when the Onyx data we are subscribed changes. * @param connectOptions.waitForCollectionCallback If set to `true`, it will return the entire collection to the callback as a single object. * @param connectOptions.withOnyxInstance The `withOnyx` class instance to be internally passed. **Only used inside `withOnyx()` HOC.** * @param connectOptions.statePropertyName The name of the component's prop that is connected to the Onyx key. **Only used inside `withOnyx()` HOC.** * @param connectOptions.displayName The component's display name. **Only used inside `withOnyx()` HOC.** * @param connectOptions.selector This will be used to subscribe to a subset of an Onyx key's data. **Only used inside `useOnyx()` hook or `withOnyx()` HOC.** * Using this setting on `useOnyx()` or `withOnyx()` can have very positive performance benefits because the component will only re-render * when the subset of data changes. Otherwise, any change of data on any property would normally * cause the component to re-render (and that can be expensive from a performance standpoint). * @returns The connection object to use when calling `Onyx.disconnect()`. */ declare function connect<TKey extends OnyxKey>(connectOptions: ConnectOptions<TKey>): Connection; /** * Disconnects and removes the listener from the Onyx key. * * @example * ```ts * const connection = Onyx.connect({ * key: ONYXKEYS.SESSION, * callback: onSessionChange, * }); * * Onyx.disconnect(connection); * ``` * * @param connection Connection object returned by calling `Onyx.connect()`. */ declare function disconnect(connection: Connection): void; /** * Write a value to our store with the given key * * @param key ONYXKEY to set * @param value value to store */ declare function set<TKey extends OnyxKey>(key: TKey, value: OnyxSetInput<TKey>): Promise<void>; /** * Sets multiple keys and values * * @example Onyx.multiSet({'key1': 'a', 'key2': 'b'}); * * @param data object keyed by ONYXKEYS and the values to set */ declare function multiSet(data: OnyxMultiSetInput): Promise<void>; /** * Merge a new value into an existing value at a key. * * The types of values that can be merged are `Object` and `Array`. To set another type of value use `Onyx.set()`. * Values of type `Object` get merged with the old value, whilst for `Array`'s we simply replace the current value with the new one. * * Calls to `Onyx.merge()` are batched so that any calls performed in a single tick will stack in a queue and get * applied in the order they were called. Note: `Onyx.set()` calls do not work this way so use caution when mixing * `Onyx.merge()` and `Onyx.set()`. * * @example * Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Joe']); // -> ['Joe'] * Onyx.merge(ONYXKEYS.EMPLOYEE_LIST, ['Jack']); // -> ['Joe', 'Jack'] * Onyx.merge(ONYXKEYS.POLICY, {id: 1}); // -> {id: 1} * Onyx.merge(ONYXKEYS.POLICY, {name: 'My Workspace'}); // -> {id: 1, name: 'My Workspace'} */ declare function merge<TKey extends OnyxKey>(key: TKey, changes: OnyxMergeInput<TKey>): Promise<void>; /** * Merges a collection based on their keys * * @example * * Onyx.mergeCollection(ONYXKEYS.COLLECTION.REPORT, { * [`${ONYXKEYS.COLLECTION.REPORT}1`]: report1, * [`${ONYXKEYS.COLLECTION.REPORT}2`]: report2, * }); * * @param collectionKey e.g. `ONYXKEYS.COLLECTION.REPORT` * @param collection Object collection keyed by individual collection member keys and values */ declare function mergeCollection<TKey extends CollectionKeyBase, TMap>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey, TMap>): Promise<void>; /** * Clear out all the data in the store * * Note that calling Onyx.clear() and then Onyx.set() on a key with a default * key state may store an unexpected value in Storage. * * E.g. * Onyx.clear(); * Onyx.set(ONYXKEYS.DEFAULT_KEY, 'default'); * Storage.getItem(ONYXKEYS.DEFAULT_KEY) * .then((storedValue) => console.log(storedValue)); * null is logged instead of the expected 'default' * * Onyx.set() might call Storage.setItem() before Onyx.clear() calls * Storage.setItem(). Use Onyx.merge() instead if possible. Onyx.merge() calls * Onyx.get(key) before calling Storage.setItem() via Onyx.set(). * Storage.setItem() from Onyx.clear() will have already finished and the merged * value will be saved to storage after the default value. * * @param keysToPreserve is a list of ONYXKEYS that should not be cleared with the rest of the data */ declare function clear(keysToPreserve?: OnyxKey[]): Promise<void>; /** * Insert API responses and lifecycle data into Onyx * * @param data An array of objects with update expressions * @returns resolves when all operations are complete */ declare function update(data: OnyxUpdate[]): Promise<void>; /** * Sets a collection by replacing all existing collection members with new values. * Any existing collection members not included in the new data will be removed. * * @example * Onyx.setCollection(ONYXKEYS.COLLECTION.REPORT, { * [`${ONYXKEYS.COLLECTION.REPORT}1`]: report1, * [`${ONYXKEYS.COLLECTION.REPORT}2`]: report2, * }); * * @param collectionKey e.g. `ONYXKEYS.COLLECTION.REPORT` * @param collection Object collection keyed by individual collection member keys and values */ declare function setCollection<TKey extends CollectionKeyBase, TMap>(collectionKey: TKey, collection: OnyxMergeCollectionInput<TKey, TMap>): Promise<void>; declare const Onyx: { METHOD: { readonly SET: "set"; readonly MERGE: "merge"; readonly MERGE_COLLECTION: "mergecollection"; readonly SET_COLLECTION: "setcollection"; readonly MULTI_SET: "multiset"; readonly CLEAR: "clear"; }; connect: typeof connect; disconnect: typeof disconnect; set: typeof set; multiSet: typeof multiSet; merge: typeof merge; mergeCollection: typeof mergeCollection; setCollection: typeof setCollection; update: typeof update; clear: typeof clear; init: typeof init; registerLogger: typeof Logger.registerLogger; }; export default Onyx; export type { OnyxUpdate, Mapping, ConnectOptions };