/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails oncall+recoil * @flow strict-local * @format */ 'use strict'; import type { TransactionInterface } from '../core/Recoil_AtomicUpdates'; import type { RecoilState, RecoilValue } from '../core/Recoil_RecoilValue'; import type { Store } from '../core/Recoil_State'; const { atomicUpdater } = require('../core/Recoil_AtomicUpdates'); const { batchUpdates } = require('../core/Recoil_Batching'); const { DEFAULT_VALUE } = require('../core/Recoil_Node'); const { useStoreRef } = require('../core/Recoil_RecoilRoot'); const { refreshRecoilValue, setRecoilValue } = require('../core/Recoil_RecoilValueInterface'); const { Snapshot, cloneSnapshot } = require('../core/Recoil_Snapshot'); const { gotoSnapshot } = require('./Recoil_SnapshotHooks'); const { useCallback } = require('react'); const err = require('recoil-shared/util/Recoil_err'); const invariant = require('recoil-shared/util/Recoil_invariant'); const lazyProxy = require('recoil-shared/util/Recoil_lazyProxy'); export type RecoilCallbackInterface = $ReadOnly<{ set: (RecoilState, ((T) => T) | T) => void, reset: (RecoilState) => void, refresh: (RecoilValue) => void, snapshot: Snapshot, gotoSnapshot: (Snapshot) => void, transact_UNSTABLE: ((TransactionInterface) => void) => void, }>; declare class Sentinel {} const SENTINEL = new Sentinel(); declare function recoilCallback, Return, ExtraInterface>(store: Store, fn: ({ ...ExtraInterface, ...RecoilCallbackInterface, }) => (...Args) => Return, args: Args, extraInterface?: ExtraInterface): Return; declare function useRecoilCallback, Return>(fn: (RecoilCallbackInterface) => (...Args) => Return, deps?: $ReadOnlyArray): (...Args) => Return; module.exports = { recoilCallback, useRecoilCallback };