UNPKG

@hookform/lenses

Version:

Type-safe lenses for React Hook Form that enable precise control over nested form state. Build reusable form components with composable operations, array handling, and full TypeScript support.

1 lines 4.58 kB
{"version":3,"sources":["../../src/rhf/index.ts","../../src/rhf/useFieldArray.ts"],"sourcesContent":["export * from './useFieldArray';\n","import { useMemo } from 'react';\nimport {\n type FieldArray,\n type FieldArrayPath,\n type FieldArrayWithId,\n type FieldValues,\n useFieldArray as useFieldArrayOriginal,\n type UseFieldArrayProps as UseFieldArrayPropsOriginal,\n type UseFieldArrayReturn,\n} from 'react-hook-form';\n\nexport interface UseFieldArrayProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends FieldArrayPath<TFieldValues> = FieldArrayPath<TFieldValues>,\n TKeyName extends string = 'id',\n> extends UseFieldArrayPropsOriginal<TFieldValues, TFieldArrayName, TKeyName> {\n getTransformer?: <R extends TFieldValues, N extends FieldArrayPath<R>>(\n value: FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>,\n ) => FieldArrayWithId<R, N, TKeyName>;\n\n setTransformer?: <R extends FieldValues, N extends FieldArrayPath<R>>(\n value: FieldArray<R, N>,\n ) => FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>;\n}\n\nexport function useFieldArray<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends FieldArrayPath<TFieldValues> = FieldArrayPath<TFieldValues>,\n TKeyName extends string = 'id',\n>(props: UseFieldArrayProps<TFieldValues, TFieldArrayName, TKeyName>): UseFieldArrayReturn<TFieldValues, TFieldArrayName, TKeyName> {\n const original = useFieldArrayOriginal(props);\n const newFields = useMemo(() => {\n if (!props.getTransformer) {\n return original.fields;\n }\n\n return original.fields.map(props.getTransformer);\n }, [original.fields, props.getTransformer]);\n\n return {\n fields: newFields,\n move: original.move,\n remove: original.remove,\n swap: original.swap,\n prepend: (value, options) => {\n if (!props.setTransformer) {\n return original.prepend(value, options);\n }\n\n const newValue = Array.isArray(value) ? value.map(props.setTransformer) : props.setTransformer(value);\n original.prepend(newValue, options);\n },\n append: (value, options) => {\n if (!props.setTransformer) {\n return original.append(value, options);\n }\n\n const newValue = Array.isArray(value) ? value.map(props.setTransformer) : props.setTransformer(value);\n original.append(newValue, options);\n },\n insert: (index, value, options) => {\n if (!props.setTransformer) {\n return original.insert(index, value, options);\n }\n\n const newValue = Array.isArray(value) ? value.map(props.setTransformer) : props.setTransformer(value);\n original.insert(index, newValue, options);\n },\n update: (index, value) => {\n if (!props.setTransformer) {\n return original.update(index, value);\n }\n\n const newValue = props.setTransformer(value);\n original.update(index, newValue);\n },\n replace: (value) => {\n if (!props.setTransformer) {\n return original.replace(value);\n }\n\n const newValue = props.setTransformer(value);\n original.replace(newValue);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAwB;AACxB,6BAQO;AAgBA,SAAS,cAId,OAAkI;AAClI,QAAM,eAAW,uBAAAA,eAAsB,KAAK;AAC5C,QAAM,gBAAY,sBAAQ,MAAM;AAC9B,QAAI,CAAC,MAAM,gBAAgB;AACzB,aAAO,SAAS;AAAA,IAClB;AAEA,WAAO,SAAS,OAAO,IAAI,MAAM,cAAc;AAAA,EACjD,GAAG,CAAC,SAAS,QAAQ,MAAM,cAAc,CAAC;AAE1C,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,MAAM,SAAS;AAAA,IACf,SAAS,CAAC,OAAO,YAAY;AAC3B,UAAI,CAAC,MAAM,gBAAgB;AACzB,eAAO,SAAS,QAAQ,OAAO,OAAO;AAAA,MACxC;AAEA,YAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,MAAM,cAAc,IAAI,MAAM,eAAe,KAAK;AACpG,eAAS,QAAQ,UAAU,OAAO;AAAA,IACpC;AAAA,IACA,QAAQ,CAAC,OAAO,YAAY;AAC1B,UAAI,CAAC,MAAM,gBAAgB;AACzB,eAAO,SAAS,OAAO,OAAO,OAAO;AAAA,MACvC;AAEA,YAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,MAAM,cAAc,IAAI,MAAM,eAAe,KAAK;AACpG,eAAS,OAAO,UAAU,OAAO;AAAA,IACnC;AAAA,IACA,QAAQ,CAAC,OAAO,OAAO,YAAY;AACjC,UAAI,CAAC,MAAM,gBAAgB;AACzB,eAAO,SAAS,OAAO,OAAO,OAAO,OAAO;AAAA,MAC9C;AAEA,YAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,MAAM,cAAc,IAAI,MAAM,eAAe,KAAK;AACpG,eAAS,OAAO,OAAO,UAAU,OAAO;AAAA,IAC1C;AAAA,IACA,QAAQ,CAAC,OAAO,UAAU;AACxB,UAAI,CAAC,MAAM,gBAAgB;AACzB,eAAO,SAAS,OAAO,OAAO,KAAK;AAAA,MACrC;AAEA,YAAM,WAAW,MAAM,eAAe,KAAK;AAC3C,eAAS,OAAO,OAAO,QAAQ;AAAA,IACjC;AAAA,IACA,SAAS,CAAC,UAAU;AAClB,UAAI,CAAC,MAAM,gBAAgB;AACzB,eAAO,SAAS,QAAQ,KAAK;AAAA,MAC/B;AAEA,YAAM,WAAW,MAAM,eAAe,KAAK;AAC3C,eAAS,QAAQ,QAAQ;AAAA,IAC3B;AAAA,EACF;AACF;","names":["useFieldArrayOriginal"]}