import { GetRecoilValue, RecoilState, SerializableParam, SetRecoilState } from 'recoil'; export interface ICreateGetterSetterSelector { defaultValue: ValueType; getData: (data: ObjectType | undefined, get: GetRecoilValue) => ValueType; key: string; setData: (data: ObjectType | undefined, newValue: ValueType, set: SetRecoilState, get: GetRecoilValue) => ObjectType | undefined; state: RecoilState; } /** * Creates a Recoil selector that can be used to get and set data from a Recoil state. * This becomes particularly useful when your request to a service is stored in Recoil and you want to get or set a small piece of that state. * This helper makes creating such a selector a lot easier and reduces the amount of boilerplate code you need to write. * ## Example * Example on using createGetterSetterSelector for a request that needs to get and set the Limit property. * ```typescript * const limitSearchOrders = createGetterSetterSelector({ * key: 'OrdersList:Request:Limit', * state: ordersListState.request, * defaultValue: 10, * getData: (request) => request?.PageConfig?.Limit, * setData: (request, newValue) => ({ * ...request, * PageConfig: { ...request?.PageConfig, Limit: newValue }, * }), *}); * ``` */ export declare const createGetterSetterSelector: ({ defaultValue, getData, key, setData, state, }: ICreateGetterSetterSelector) => RecoilState; export interface ICreateGetterSetterSelectorFamily { defaultValue: ValueType; getData: (data: ObjectType | undefined, get: GetRecoilValue, params?: FamilyParam) => ValueType; key: string; setData: (data: ObjectType | undefined, newValue: ValueType, set: SetRecoilState, get: GetRecoilValue, params?: FamilyParam) => ObjectType | undefined; state: (params: FamilyParam) => RecoilState; } /** * Creates a Recoil selectorFamily that can be used to get and set data from a Recoil state. * This becomes particularly useful when your request to a service is stored in Recoil and you want to get or set a small piece of that state. * This helper makes creating such a selectorFamily a lot easier and reduces the amount of boilerplate code you need to write. * Keep in mind, this will create a family of selectors. * ## Example * Example on using createGetterSetterSelectorFamily for a request that needs to get and set the OrderID property. * ```typescript * const orderShipmentsOrderIDRequestSelector = createGetterSetterSelectorFamily< * EVA.Core.ListOrderShipments, * number | undefined, * number | undefined, * >({ * recoilKey: 'OrderShipments:Request:OrderID', * state: orderShipmentsState.request, * getData: (request) => request?.OrderID, * setData: (request, newValue) => { * if (newValue) { * return { * ...request, * OrderID: newValue, * }; * } else { * return request; * }, * }); * ``` */ export declare const createGetterSetterSelectorFamily: ({ defaultValue, getData, key, setData, state, }: ICreateGetterSetterSelectorFamily) => (param: FamilyParam) => RecoilState; //# sourceMappingURL=create-selectors.d.ts.map