UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

30 lines (29 loc) 1.71 kB
import { JsonObject } from '../../utils/json-pointer'; import { SharedStateId } from '../../../../shared/helpers/useSharedState'; import type { Path } from '../../types'; import { FilterData, VisibleDataHandler } from '../../DataContext/Context'; type PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}` ? Key extends keyof T ? Rest extends '' ? T[Key] : PathImpl<T[Key], Rest> : never : T[P & keyof T]; export type PathType<T, P extends string> = P extends `/${infer Rest}` ? PathImpl<T, Rest> : never; export type UseDataReturnUpdate<Data> = <P extends Path>(path: P, value: ((value: PathType<Data, P>) => unknown) | unknown) => void; export type UseDataReturnGetValue<Data> = <P extends Path>(path: P) => PathType<Data, P> | any; export type UseDataReturnFilterData<Data> = (filterDataHandler: FilterData, data?: Data) => Partial<Data>; export type UseDataReturnVisibleData<Data> = VisibleDataHandler<Data>; type UseDataReturn<Data> = { data: Data; set: (newData: Data) => void; update: UseDataReturnUpdate<Data>; remove: (path: Path) => void; getValue: UseDataReturnGetValue<Data>; filterData: UseDataReturnFilterData<Data>; reduceToVisibleFields: UseDataReturnVisibleData<Data>; }; /** * Custom hook that provides form data management functionality. * * @template Data - The type of data being managed. * @param {SharedStateId} id - The identifier for the data. * @param {Data} initialData - The initial data value (optional). * @returns {UseDataReturn<Data>} An object containing the data and data management functions. */ export default function useData<Data = JsonObject>(id?: SharedStateId, initialData?: Data): UseDataReturn<Data>; export {};