UNPKG

@prefect9/ui

Version:

UI React components

77 lines (76 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/es.string.trim.js"); require("core-js/modules/web.dom-collections.iterator.js"); var _react = require("react"); var _isType = require("@prefect9/is-type"); function useTextField() { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const { initial = '', validators = [] } = options; if (!(0, _isType.isStr)(initial)) throw new Error('Initial must be string'); const [initialValue, setInitialValue] = (0, _react.useState)(initial); const [fieldValidators, setFieldValidators] = (0, _react.useState)((0, _isType.ofArr)(validators)); const id = (0, _react.useId)(); const ref = (0, _react.useRef)(null); const [value, setValue] = (0, _react.useState)(initialValue); (0, _react.useEffect)(() => { setInitialValue(initial); setValue(initial); }, [initial]); const editHandler = (0, _react.useCallback)(e => { if (!ref || !ref.current) return; const newValue = e.target.value; setValue(newValue); }, [ref, setValue]); const changed = (0, _react.useMemo)(() => value !== initialValue, [value, initialValue]); const valid = (0, _react.useMemo)(() => { if (value === initialValue) return true; let result = true; for (let validator of fieldValidators) { if (!(0, _isType.isFunc)(validator)) throw new Error('Validator must be function'); const valid = validator(value); if (valid === true) continue; result = valid; break; } return result; }, [value, initialValue, fieldValidators]); const anyValid = (0, _react.useMemo)(() => { let result = true; for (let validator of fieldValidators) { if (!(0, _isType.isFunc)(validator)) throw new Error('Validator must be function'); const valid = validator(value); if (valid === true) continue; result = valid; break; } return result; }, [value, initialValue, fieldValidators]); const empty = (0, _react.useMemo)(() => value.trim().length < 1, [value]); const clear = (0, _react.useCallback)(() => setValue(''), []); const clearHandler = (0, _react.useCallback)(e => { e.preventDefault(); clear(); }, [clear]); return { id, ref, value, empty, changed, valid, anyValid, setValue, editHandler, setInitialValue, clear, clearHandler }; } var _default = exports.default = useTextField;