UNPKG

@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
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";