UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

1 lines 1.89 kB
{"version":3,"file":"use-validated-state.mjs","names":[],"sources":["../../src/use-validated-state/use-validated-state.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport interface UseValidatedStateValue<T> {\n /** Current value */\n value: T;\n\n /** Last valid value */\n lastValidValue: T | undefined;\n\n /** True if the current value is valid, false otherwise */\n valid: boolean;\n}\n\nexport type UseValidatedStateReturnValue<T> = [\n /** Current value */\n UseValidatedStateValue<T>,\n /** Handler to update the state, passes `value` and `payload` to `onChange` */\n (value: T) => void,\n];\n\nexport function useValidatedState<T>(\n initialValue: T,\n validate: (value: T) => boolean,\n initialValidationState?: boolean\n): UseValidatedStateReturnValue<T> {\n const [value, setValue] = useState<T>(initialValue);\n const [lastValidValue, setLastValidValue] = useState<T | undefined>(\n validate(initialValue) ? initialValue : undefined\n );\n const [valid, setValid] = useState<boolean>(\n typeof initialValidationState === 'boolean' ? initialValidationState : validate(initialValue)\n );\n\n const onChange = (val: T) => {\n if (validate(val)) {\n setLastValidValue(val);\n setValid(true);\n } else {\n setValid(false);\n }\n\n setValue(val);\n };\n\n return [{ value, lastValidValue, valid }, onChange] as const;\n}\n\nexport namespace useValidatedState {\n export type ReturnValue<T> = UseValidatedStateReturnValue<T>;\n}\n"],"mappings":";;;AAoBA,SAAgB,kBACd,cACA,UACA,wBACiC;CACjC,MAAM,CAAC,OAAO,YAAY,SAAY,aAAa;CACnD,MAAM,CAAC,gBAAgB,qBAAqB,SAC1C,SAAS,aAAa,GAAG,eAAe,KAAA,EACzC;CACD,MAAM,CAAC,OAAO,YAAY,SACxB,OAAO,2BAA2B,YAAY,yBAAyB,SAAS,aAAa,CAC9F;CAED,MAAM,YAAY,QAAW;AAC3B,MAAI,SAAS,IAAI,EAAE;AACjB,qBAAkB,IAAI;AACtB,YAAS,KAAK;QAEd,UAAS,MAAM;AAGjB,WAAS,IAAI;;AAGf,QAAO,CAAC;EAAE;EAAO;EAAgB;EAAO,EAAE,SAAS"}