import { HDict, HVal } from 'haystack-core';
import { PointWriteFunc } from './useHaystackPoint';
import { Resolvable } from './Resolvable';
/**
 * A hook to use a value from an haystack-server as react state.
 *
 * This hook should be used when input flexibility is required.
 * It is meant to abstract how data is actually retrieved/polled/written, enabling at the same time a data driven approach.
 *
 * It takes a ResolvableDict that contains the record data and a meta tag that indicates how to interact with that record to poll and write an HVal.
 * @see ResolvableDict for the options available.
 *
 * IMPORTANT: this hook requires a ClientContext to work. @see https://github.com/j2inn/haystack-nclient
 *
 * @example <caption>Here’s a usage example:</caption>
 * const [point] = useReadByFilter('point and temp and zone and sp').grid // One-shot reading the first point that matches the filter
 *
 * //Adding meta data to the dict (this could be done server side)
 * const resolvableDict1 = point?.newCopy().set('meta', {resolveType: 'point'}) as Resolvable<HNum>
 * const resolvableDict2 = point?.newCopy().set('meta', {resolveType: 'tag', readTag: 'precision'}) as Resolvable<HNum>
 *
 * // The actual state used depends on the metadata in the dict:
 * const [pointValue, setPointValue, point] = useResolveHaystackValue<HNum>(resolvableDict1)
 * const [pointPrecision, setPointPrecision, point] = useResolveHaystackValue<HNum>(resolvableDict2)
 *
 * @param resolvable Resolvable containing a record and metadata on how to resolve the value or the value itself.
 * @param pollRate poll rate for the value subscription. Expressed in seconds. Default is 5.
 * @returns a resolved value and a function to update it on the server, if the value is not resolved it is passed through.
 */
export declare function useResolveHaystackValue<Value extends HVal>(resolvable?: Resolvable<Value>): [Optional<Value>, PointWriteFunc<Value> | undefined, Optional<HDict>];
type Optional<Value> = Value | undefined | null;
export {};
