// Copyright 2017-2020 @polkadot/react-hooks authors & contributors // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. import { useCallback, useMemo, useState } from 'react'; type FormField = [ T | null, boolean, (_?: T | null) => void ]; function isTruthy (value?: T | null): boolean { return !!value; } export default function useFormField (defaultValue: T | null, validate: (_?: T | null) => boolean = (): boolean => true): FormField { const [value, setValue] = useState(defaultValue); const isValid = useMemo( (): boolean => isTruthy(value) && validate(value), [value] ); const setter = useCallback((value?: T | null): void => setValue(value || null), []); return [ value, isValid, setter ]; }