@navinc/base-react-components
Version:
Nav's Pattern Library
50 lines • 2.63 kB
JavaScript
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