UNPKG

@navinc/base-react-components

Version:
50 lines 2.63 kB
var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import { jsx as _jsx } from "react/jsx-runtime"; import { createProxyWithOverrides } from '@navinc/utils'; import { forwardRef, useRef, useState } from 'react'; import { BaseStringInput } from '../base-string-input/base-string-input.js'; const integerReg = /^-?(0|[1-9][0-9]*|0[1-9][0-9]*)?$/; export const BaseIntegerInput = forwardRef((_a, ref) => { var { value: incomingValue, onChange, onBlur } = _a, props = __rest(_a, ["value", "onChange", "onBlur"]); const valueRef = useRef(undefined); const internalValueRef = useRef(undefined); const [_, triggerRender] = useState({}); if (valueRef.current !== incomingValue) { valueRef.current = incomingValue; internalValueRef.current = incomingValue === undefined ? undefined : String(incomingValue); } return (_jsx(BaseStringInput, Object.assign({ ref: ref, inputMode: "numeric", value: internalValueRef.current, onChange: (e) => { var _a; const outValue = e.target.value; if (outValue !== '' && !integerReg.test(outValue)) { // prevent invalid input e.target.value = (_a = internalValueRef.current) !== null && _a !== void 0 ? _a : ''; return; } internalValueRef.current = outValue; triggerRender({}); // to update the input value const numberValue = outValue === '' ? undefined : Number(outValue); if (numberValue !== undefined && isNaN(numberValue)) { return; } valueRef.current = numberValue; const updatedEvent = e; updatedEvent.target = createProxyWithOverrides(updatedEvent.target, { value: numberValue }); onChange === null || onChange === void 0 ? void 0 : onChange(updatedEvent); }, onBlur: (e) => { internalValueRef.current = valueRef.current === undefined ? undefined : String(valueRef.current); triggerRender({}); // to update the input value onBlur === null || onBlur === void 0 ? void 0 : onBlur(e); } }, props))); }); //# sourceMappingURL=base-integer-input.js.map