@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
167 lines (151 loc) • 5.18 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import * as React from "react";
import { SIZE_OPTIONS } from "../InputField/consts";
import KEY_CODE_MAP from "../common/keyMaps";
import InputStepperStateless from "./InputStepperStateless";
import validateIncrement from "../utils/validateIncrement";
import validateDecrement from "../utils/validateDecrement";
import useStateWithCallback from "../hooks/useStateWithCallback";
import useTranslate from "../hooks/useTranslate";
var InputStepper = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
var onChange = _ref.onChange,
_ref$defaultValue = _ref.defaultValue,
defaultValue = _ref$defaultValue === void 0 ? 0 : _ref$defaultValue,
_ref$disabled = _ref.disabled,
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
props = _objectWithoutProperties(_ref, ["onChange", "defaultValue", "disabled"]);
var translate = useTranslate();
var _useStateWithCallback = useStateWithCallback(defaultValue, onChange),
_useStateWithCallback2 = _slicedToArray(_useStateWithCallback, 2),
value = _useStateWithCallback2[0],
setValue = _useStateWithCallback2[1];
var incrementCounter = function incrementCounter() {
var _props$maxValue = props.maxValue,
maxValue = _props$maxValue === void 0 ? Number.POSITIVE_INFINITY : _props$maxValue,
_props$step = props.step,
step = _props$step === void 0 ? 1 : _props$step;
if (!disabled) {
setValue(validateIncrement({
value: value,
maxValue: maxValue,
step: step
}));
}
};
var decrementCounter = function decrementCounter() {
var _props$minValue = props.minValue,
minValue = _props$minValue === void 0 ? Number.NEGATIVE_INFINITY : _props$minValue,
_props$step2 = props.step,
step = _props$step2 === void 0 ? 1 : _props$step2;
if (!disabled) {
setValue(validateDecrement({
value: value,
minValue: minValue,
step: step
}));
}
};
var handleIncrementCounter = function handleIncrementCounter(ev) {
if (ev && ev.type === "click") {
incrementCounter();
}
if (ev && ev.type === "keydown") {
if (ev.keyCode === KEY_CODE_MAP.SPACE) {
ev.preventDefault();
incrementCounter();
} else if (ev.keyCode === KEY_CODE_MAP.ENTER) {
incrementCounter();
}
}
};
var handleDecrementCounter = function handleDecrementCounter(ev) {
if (ev && ev.type === "click") {
decrementCounter();
}
if (ev && ev.type === "keydown") {
if (ev.keyCode === KEY_CODE_MAP.SPACE) {
ev.preventDefault();
decrementCounter();
} else if (ev.keyCode === KEY_CODE_MAP.ENTER) {
decrementCounter();
}
}
};
var handleKeyDown = function handleKeyDown(ev) {
if (ev.keyCode === KEY_CODE_MAP.ARROW_DOWN) {
ev.preventDefault();
decrementCounter();
}
if (ev.keyCode === KEY_CODE_MAP.ARROW_UP) {
ev.preventDefault();
incrementCounter();
}
};
var handleChange = function handleChange(ev) {
var eventValue = ev && parseInt(ev.target.value, 10);
var prevValue = value;
var maxValue = props.maxValue,
minValue = props.minValue;
if (disabled) return;
if (prevValue <= eventValue) {
setValue(validateIncrement({
value: value,
maxValue: maxValue,
step: 0
}));
}
if (prevValue >= eventValue) {
setValue(validateDecrement({
value: value,
minValue: minValue,
step: 0
}));
}
};
var label = props.label,
error = props.error,
onBlur = props.onBlur,
onFocus = props.onFocus,
help = props.help,
name = props.name,
dataTest = props.dataTest,
_props$size = props.size,
size = _props$size === void 0 ? SIZE_OPTIONS.NORMAL : _props$size,
required = props.required,
readOnly = props.readOnly,
minValue = props.minValue,
maxValue = props.maxValue,
tabIndex = props.tabIndex,
spaceAfter = props.spaceAfter,
titleIncrement = props.titleIncrement,
titleDecrement = props.titleDecrement;
return /*#__PURE__*/React.createElement(InputStepperStateless, {
dataTest: dataTest,
size: size,
label: label,
disabled: disabled,
required: required,
readOnly: readOnly,
name: name,
error: error,
help: help,
onChange: handleChange,
onBlur: onBlur,
onFocus: onFocus,
onKeyDown: handleKeyDown,
value: value || 0,
minValue: minValue,
maxValue: maxValue,
tabIndex: tabIndex,
forwardedRef: ref,
spaceAfter: spaceAfter,
onDecrement: handleDecrementCounter,
onIncrement: handleIncrementCounter,
titleIncrement: titleIncrement || translate("increment_value"),
titleDecrement: titleDecrement || translate("decrement_value")
});
});
InputStepper.displayName = "InputStepper";
export default InputStepper;
export { default as InputStepperStateless } from "./InputStepperStateless";