iguazio.dashboard-react-controls 0.0.9 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Backdrop/Backdrop.js +2 -4
- package/dist/components/Button/Button.js +5 -2
- package/dist/components/Button/Button.scss +17 -2
- package/dist/components/FormCheckBox/FormCheckBox.js +41 -23
- package/dist/components/FormCheckBox/formCheckBox.scss +35 -17
- package/dist/components/FormInput/FormInput.js +37 -14
- package/dist/components/FormInput/InputNumberButtons/InputNumberButtons.js +97 -0
- package/dist/components/FormInput/InputNumberButtons/InputNumberButtons.scss +123 -0
- package/dist/components/FormInput/formInput.scss +48 -71
- package/dist/components/FormRadio/FormRadio.js +72 -0
- package/dist/components/FormRadio/FormRadio.scss +36 -0
- package/dist/components/FormSelect/FormSelect.js +34 -22
- package/dist/components/FormSelect/formSelect.scss +68 -62
- package/dist/components/FormTextarea/FormTextarea.js +222 -0
- package/dist/components/FormTextarea/formTextarea.scss +23 -0
- package/dist/components/Modal/Modal.js +33 -11
- package/dist/components/Modal/Modal.scss +1 -1
- package/dist/components/PopUpDialog/popUpDialog.scss +3 -3
- package/dist/components/Wizard/Wizard.js +4 -2
- package/dist/components/Wizard/WizardSteps/WizardSteps.scss +2 -2
- package/dist/components/index.js +16 -0
- package/dist/elements/SelectOption/SelectOption.js +30 -25
- package/dist/elements/SelectOption/selectOption.scss +31 -14
- package/dist/scss/common.scss +35 -0
- package/dist/scss/mixins.scss +82 -10
- package/dist/scss/variables.scss +6 -0
- package/package.json +1 -1
|
@@ -9,8 +9,6 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
|
|
12
|
-
var _reactDom = require("react-dom");
|
|
13
|
-
|
|
14
12
|
var _reactTransitionGroup = require("react-transition-group");
|
|
15
13
|
|
|
16
14
|
require("./Backdrop.scss");
|
|
@@ -24,7 +22,7 @@ var Backdrop = function Backdrop(_ref) {
|
|
|
24
22
|
duration = _ref$duration === void 0 ? 300 : _ref$duration,
|
|
25
23
|
show = _ref.show,
|
|
26
24
|
onClose = _ref.onClose;
|
|
27
|
-
return /*#__PURE__*/(0,
|
|
25
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactTransitionGroup.CSSTransition, {
|
|
28
26
|
in: show,
|
|
29
27
|
timeout: duration,
|
|
30
28
|
classNames: "backdrop-transition",
|
|
@@ -34,7 +32,7 @@ var Backdrop = function Backdrop(_ref) {
|
|
|
34
32
|
className: "backdrop",
|
|
35
33
|
onClick: onClose
|
|
36
34
|
})
|
|
37
|
-
})
|
|
35
|
+
});
|
|
38
36
|
};
|
|
39
37
|
|
|
40
38
|
Backdrop.defaultProps = {
|
|
@@ -25,7 +25,7 @@ require("./Button.scss");
|
|
|
25
25
|
|
|
26
26
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
27
27
|
|
|
28
|
-
var _excluded = ["className", "icon", "label", "tooltip", "variant"];
|
|
28
|
+
var _excluded = ["className", "density", "icon", "label", "tooltip", "variant"];
|
|
29
29
|
|
|
30
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
31
|
|
|
@@ -45,13 +45,14 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
45
45
|
|
|
46
46
|
var Button = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
47
47
|
var className = _ref.className,
|
|
48
|
+
density = _ref.density,
|
|
48
49
|
icon = _ref.icon,
|
|
49
50
|
label = _ref.label,
|
|
50
51
|
tooltip = _ref.tooltip,
|
|
51
52
|
variant = _ref.variant,
|
|
52
53
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
53
54
|
|
|
54
|
-
var buttonClassName = (0, _classnames.default)('btn', "btn-".concat(variant), className);
|
|
55
|
+
var buttonClassName = (0, _classnames.default)('btn', "btn-".concat(variant), "btn-".concat(density), className);
|
|
55
56
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
|
|
56
57
|
template: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextTooltipTemplate.default, {
|
|
57
58
|
text: tooltip
|
|
@@ -68,12 +69,14 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
|
68
69
|
});
|
|
69
70
|
Button.defaultProps = {
|
|
70
71
|
className: '',
|
|
72
|
+
density: 'normal',
|
|
71
73
|
label: 'Button',
|
|
72
74
|
tooltip: '',
|
|
73
75
|
variant: _constants.TERTIARY_BUTTON
|
|
74
76
|
};
|
|
75
77
|
Button.propTypes = {
|
|
76
78
|
className: _propTypes.default.string,
|
|
79
|
+
density: _propTypes.default.oneOf(['dense', 'normal', 'medium', 'chunky']),
|
|
77
80
|
icon: _propTypes.default.element,
|
|
78
81
|
label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.element]),
|
|
79
82
|
tooltip: _propTypes.default.string,
|
|
@@ -7,16 +7,31 @@
|
|
|
7
7
|
align-items: center;
|
|
8
8
|
justify-content: center;
|
|
9
9
|
min-width: 90px;
|
|
10
|
-
height:
|
|
10
|
+
height: $fieldNormal;
|
|
11
11
|
padding: 0 16px;
|
|
12
12
|
color: $white;
|
|
13
13
|
font-weight: 500;
|
|
14
14
|
font-size: 0.875rem;
|
|
15
15
|
font-style: normal;
|
|
16
|
-
line-height: 16px;
|
|
17
16
|
border: $transparentBorder;
|
|
18
17
|
border-radius: $mainBorderRadius;
|
|
19
18
|
|
|
19
|
+
&-dense {
|
|
20
|
+
height: $fieldDense;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&-normal {
|
|
24
|
+
height: $fieldNormal;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&-medium {
|
|
28
|
+
height: $fieldMedium;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&-chunky {
|
|
32
|
+
height: $fieldChunky;
|
|
33
|
+
}
|
|
34
|
+
|
|
20
35
|
svg {
|
|
21
36
|
& > * {
|
|
22
37
|
fill: currentColor;
|
|
@@ -9,47 +9,65 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _reactFinalForm = require("react-final-form");
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
15
|
|
|
16
16
|
require("./formCheckBox.scss");
|
|
17
17
|
|
|
18
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
19
|
|
|
20
|
+
var _excluded = ["children", "className", "name", "label"];
|
|
21
|
+
|
|
20
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
23
|
|
|
24
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
|
+
|
|
26
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
27
|
+
|
|
28
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
29
|
+
|
|
30
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
31
|
+
|
|
32
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
33
|
+
|
|
22
34
|
var FormCheckBox = function FormCheckBox(_ref) {
|
|
23
|
-
var
|
|
35
|
+
var _children = _ref.children,
|
|
24
36
|
className = _ref.className,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
name = _ref.name,
|
|
38
|
+
label = _ref.label,
|
|
39
|
+
inputProps = _objectWithoutProperties(_ref, _excluded);
|
|
40
|
+
|
|
41
|
+
var formFieldClassNames = (0, _classnames.default)('form-field-checkbox', className);
|
|
42
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFinalForm.Field, {
|
|
43
|
+
name: name,
|
|
44
|
+
value: inputProps.value,
|
|
45
|
+
type: "checkbox",
|
|
46
|
+
children: function children(_ref2) {
|
|
47
|
+
var _inputProps$value, _inputProps$value2;
|
|
48
|
+
|
|
49
|
+
var input = _ref2.input;
|
|
50
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
51
|
+
className: formFieldClassNames,
|
|
52
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, input), inputProps)), {}, {
|
|
53
|
+
id: (_inputProps$value = inputProps.value) !== null && _inputProps$value !== void 0 ? _inputProps$value : name
|
|
54
|
+
})), /*#__PURE__*/(0, _jsxRuntime.jsxs)("label", {
|
|
55
|
+
htmlFor: (_inputProps$value2 = inputProps.value) !== null && _inputProps$value2 !== void 0 ? _inputProps$value2 : name,
|
|
56
|
+
children: [label ? label : '', _children]
|
|
57
|
+
})]
|
|
58
|
+
});
|
|
59
|
+
}
|
|
38
60
|
});
|
|
39
61
|
};
|
|
40
62
|
|
|
41
63
|
FormCheckBox.defaultProps = {
|
|
42
64
|
className: '',
|
|
43
|
-
|
|
65
|
+
label: ''
|
|
44
66
|
};
|
|
45
67
|
FormCheckBox.propTypes = {
|
|
46
68
|
className: _propTypes.default.string,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
label: _propTypes.default.string
|
|
50
|
-
}).isRequired,
|
|
51
|
-
onChange: _propTypes.default.func.isRequired,
|
|
52
|
-
selectedId: _propTypes.default.string
|
|
69
|
+
name: _propTypes.default.string.isRequired,
|
|
70
|
+
label: _propTypes.default.string
|
|
53
71
|
};
|
|
54
72
|
|
|
55
73
|
var _default = /*#__PURE__*/_react.default.memo(FormCheckBox);
|
|
@@ -1,32 +1,50 @@
|
|
|
1
1
|
@import '../../scss/colors';
|
|
2
|
+
@import '../../scss/mixins';
|
|
2
3
|
|
|
3
|
-
.checkbox {
|
|
4
|
-
display: flex;
|
|
4
|
+
.form-field-checkbox {
|
|
5
|
+
display: inline-flex;
|
|
5
6
|
align-items: center;
|
|
7
|
+
justify-content: flex-start;
|
|
6
8
|
color: $primary;
|
|
7
|
-
cursor: pointer;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
font-size: 14px;
|
|
10
|
+
input[type='checkbox'] {
|
|
11
|
+
@include radioCheckField;
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
flex: 0 0 18px;
|
|
14
|
+
width: 18px;
|
|
15
|
+
height: 18px;
|
|
16
|
+
border-radius: 4px;
|
|
17
|
+
transition: background 0.2s ease-in-out;
|
|
18
|
+
|
|
19
|
+
&::before {
|
|
20
|
+
content: '';
|
|
21
|
+
display: block;
|
|
22
|
+
position: absolute;
|
|
23
|
+
top: 1px;
|
|
24
|
+
left: 5px;
|
|
25
|
+
width: 6px;
|
|
26
|
+
height: 11px;
|
|
27
|
+
border-style: solid;
|
|
28
|
+
border-color: $white;
|
|
29
|
+
border-width: 0 2px 2px 0;
|
|
30
|
+
transform: rotate(45deg);
|
|
15
31
|
}
|
|
16
|
-
}
|
|
17
32
|
|
|
18
|
-
|
|
19
|
-
|
|
33
|
+
&:checked {
|
|
34
|
+
background: currentColor;
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
background: currentColor;
|
|
20
38
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
39
|
+
&:disabled {
|
|
40
|
+
background: currentColor;
|
|
41
|
+
}
|
|
24
42
|
}
|
|
25
43
|
}
|
|
26
44
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
45
|
+
&:disabled {
|
|
46
|
+
&:hover {
|
|
47
|
+
background: $white;
|
|
30
48
|
}
|
|
31
49
|
}
|
|
32
50
|
}
|
|
@@ -17,6 +17,8 @@ var _lodash = require("lodash");
|
|
|
17
17
|
|
|
18
18
|
var _reactFinalForm = require("react-final-form");
|
|
19
19
|
|
|
20
|
+
var _InputNumberButtons = _interopRequireDefault(require("./InputNumberButtons/InputNumberButtons"));
|
|
21
|
+
|
|
20
22
|
var _OptionsMenu = _interopRequireDefault(require("../../elements/OptionsMenu/OptionsMenu"));
|
|
21
23
|
|
|
22
24
|
var _TextTooltipTemplate = _interopRequireDefault(require("../TooltipTemplate/TextTooltipTemplate"));
|
|
@@ -136,7 +138,7 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
136
138
|
(0, _useDetectOutsideClick.useDetectOutsideClick)(ref, function () {
|
|
137
139
|
return setShowValidationRules(false);
|
|
138
140
|
});
|
|
139
|
-
var formFieldClassNames = (0, _classnames.default)('form-field', className);
|
|
141
|
+
var formFieldClassNames = (0, _classnames.default)('form-field-input', className);
|
|
140
142
|
var inputWrapperClassNames = (0, _classnames.default)('form-field__wrapper', "form-field__wrapper-".concat(density), disabled && 'form-field__wrapper-disabled', isInvalid && 'form-field__wrapper-invalid', withoutBorder && 'without-border');
|
|
141
143
|
var labelClassNames = (0, _classnames.default)('form-field__label', disabled && 'form-field__label-disabled');
|
|
142
144
|
(0, _react.useEffect)(function () {
|
|
@@ -189,18 +191,15 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
189
191
|
}
|
|
190
192
|
};
|
|
191
193
|
|
|
192
|
-
var handleInputChange = function handleInputChange(event) {
|
|
193
|
-
input.onChange(event);
|
|
194
|
-
onChange && onChange(event.target.value);
|
|
195
|
-
};
|
|
196
|
-
|
|
197
194
|
var handleInputFocus = function handleInputFocus(event) {
|
|
198
195
|
input.onFocus(event);
|
|
199
196
|
setIsFocused(true);
|
|
200
197
|
};
|
|
201
198
|
|
|
202
199
|
var handleScroll = function handleScroll(event) {
|
|
203
|
-
if (
|
|
200
|
+
if (inputRef.current.contains(event.target)) return;
|
|
201
|
+
|
|
202
|
+
if (!event.target.closest('.options-menu') && !event.target.classList.contains('form-field-input')) {
|
|
204
203
|
setShowValidationRules(false);
|
|
205
204
|
}
|
|
206
205
|
};
|
|
@@ -229,7 +228,8 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
229
228
|
}, [meta.error]);
|
|
230
229
|
|
|
231
230
|
var validateField = function validateField(value) {
|
|
232
|
-
var valueToValidate =
|
|
231
|
+
var valueToValidate = (0, _lodash.isNil)(value) ? '' : String(value);
|
|
232
|
+
if (!valueToValidate && !required) return;
|
|
233
233
|
var validationError = null;
|
|
234
234
|
|
|
235
235
|
if (!(0, _lodash.isEmpty)(validationRules)) {
|
|
@@ -253,6 +253,22 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
if ((0, _lodash.isEmpty)(validationError)) {
|
|
256
|
+
if (inputProps.type === 'number') {
|
|
257
|
+
if (inputProps.max && +valueToValidate > +inputProps.max) {
|
|
258
|
+
validationError = {
|
|
259
|
+
name: 'maxValue',
|
|
260
|
+
label: "Max value is ".concat(inputProps.max)
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (inputProps.min && +valueToValidate < +inputProps.min) {
|
|
265
|
+
validationError = {
|
|
266
|
+
name: 'minValue',
|
|
267
|
+
label: "Min value is ".concat(inputProps.min)
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
256
272
|
if (pattern && !validationPattern.test(valueToValidate)) {
|
|
257
273
|
validationError = {
|
|
258
274
|
name: 'pattern',
|
|
@@ -278,9 +294,15 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
278
294
|
return validationError;
|
|
279
295
|
};
|
|
280
296
|
|
|
297
|
+
var parseField = function parseField(val) {
|
|
298
|
+
if (!val) return;
|
|
299
|
+
return inputProps.type === 'number' ? +val : val;
|
|
300
|
+
};
|
|
301
|
+
|
|
281
302
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFinalForm.Field, {
|
|
282
303
|
validate: validateField,
|
|
283
304
|
name: name,
|
|
305
|
+
parse: parseField,
|
|
284
306
|
children: function children(_ref4) {
|
|
285
307
|
var _inputProps$autocompl, _meta$error$label, _meta$error;
|
|
286
308
|
|
|
@@ -331,7 +353,6 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
331
353
|
pattern: pattern
|
|
332
354
|
}, inputProps), input)), {}, {
|
|
333
355
|
autoComplete: (_inputProps$autocompl = inputProps.autocomplete) !== null && _inputProps$autocompl !== void 0 ? _inputProps$autocompl : 'off',
|
|
334
|
-
onChange: handleInputChange,
|
|
335
356
|
onBlur: handleInputBlur,
|
|
336
357
|
onFocus: handleInputFocus
|
|
337
358
|
}))
|
|
@@ -356,7 +377,9 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
|
356
377
|
className: iconClass,
|
|
357
378
|
children: inputIcon
|
|
358
379
|
})]
|
|
359
|
-
})
|
|
380
|
+
}), inputProps.type === 'number' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_InputNumberButtons.default, _objectSpread({}, _objectSpread(_objectSpread(_objectSpread({}, inputProps), input), {}, {
|
|
381
|
+
disabled: disabled
|
|
382
|
+
})))]
|
|
360
383
|
}), (suggestionList === null || suggestionList === void 0 ? void 0 : suggestionList.length) > 0 && isFocused && /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
|
|
361
384
|
className: "form-field__suggestion-list",
|
|
362
385
|
children: suggestionList.map(function (item, index) {
|
|
@@ -396,15 +419,15 @@ FormInput.defaultProps = {
|
|
|
396
419
|
show: '',
|
|
397
420
|
value: ''
|
|
398
421
|
},
|
|
399
|
-
maxLength: null,
|
|
400
422
|
min: null,
|
|
423
|
+
max: null,
|
|
401
424
|
onBlur: function onBlur() {},
|
|
402
425
|
onChange: function onChange() {},
|
|
403
426
|
onKeyDown: function onKeyDown() {},
|
|
404
427
|
pattern: null,
|
|
405
428
|
placeholder: '',
|
|
406
429
|
required: false,
|
|
407
|
-
step: '',
|
|
430
|
+
step: '1',
|
|
408
431
|
suggestionList: [],
|
|
409
432
|
tip: '',
|
|
410
433
|
type: 'text',
|
|
@@ -423,8 +446,8 @@ FormInput.propTypes = {
|
|
|
423
446
|
invalidText: _propTypes.default.string,
|
|
424
447
|
label: _propTypes.default.string,
|
|
425
448
|
link: _types.INPUT_LINK,
|
|
426
|
-
|
|
427
|
-
|
|
449
|
+
min: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
|
|
450
|
+
max: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
|
|
428
451
|
name: _propTypes.default.string.isRequired,
|
|
429
452
|
onBlur: _propTypes.default.func,
|
|
430
453
|
onChange: _propTypes.default.func,
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _lodash = require("lodash");
|
|
13
|
+
|
|
14
|
+
var _rangeArrowSmall = require("igz-controls/images/range-arrow-small.svg");
|
|
15
|
+
|
|
16
|
+
require("./InputNumberButtons.scss");
|
|
17
|
+
|
|
18
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
var InputNumberButtons = function InputNumberButtons(_ref) {
|
|
23
|
+
var disabled = _ref.disabled,
|
|
24
|
+
min = _ref.min,
|
|
25
|
+
max = _ref.max,
|
|
26
|
+
onChange = _ref.onChange,
|
|
27
|
+
step = _ref.step,
|
|
28
|
+
value = _ref.value;
|
|
29
|
+
|
|
30
|
+
var handleIncrease = function handleIncrease(event) {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
if (max && +value >= +max) return;
|
|
33
|
+
var currentValue = isCurrentValueEmpty() ? +step : +value + +step;
|
|
34
|
+
var nextValue = isInteger(currentValue) ? currentValue : currentValue.toFixed(3);
|
|
35
|
+
onChange(nextValue);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
var handleDecrease = function handleDecrease(event) {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
if (value <= 0 || +value <= +min) return;
|
|
41
|
+
var currentValue = isCurrentValueEmpty() ? -step : +value - +step;
|
|
42
|
+
var nextValue = isInteger(currentValue) ? currentValue : currentValue.toFixed(3);
|
|
43
|
+
onChange(nextValue);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
var isCurrentValueEmpty = function isCurrentValueEmpty() {
|
|
47
|
+
return (0, _lodash.isNil)(value) || value === '';
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
var isInteger = function isInteger(number) {
|
|
51
|
+
return Number(number) === number && number % 1 === 0;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
55
|
+
"data-testid": "range-input-container",
|
|
56
|
+
className: "form-field-range",
|
|
57
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
58
|
+
className: "range__buttons",
|
|
59
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
60
|
+
"data-testid": "btn-increase",
|
|
61
|
+
className: "range__button range__button-increase",
|
|
62
|
+
disabled: disabled,
|
|
63
|
+
onClick: handleIncrease,
|
|
64
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_rangeArrowSmall.ReactComponent, {
|
|
65
|
+
className: "increase"
|
|
66
|
+
})
|
|
67
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
68
|
+
"data-testid": "btn-decrease",
|
|
69
|
+
className: "range__button range__button-decrease",
|
|
70
|
+
disabled: disabled,
|
|
71
|
+
onClick: handleDecrease,
|
|
72
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_rangeArrowSmall.ReactComponent, {
|
|
73
|
+
className: "decrease"
|
|
74
|
+
})
|
|
75
|
+
})]
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
InputNumberButtons.defaultProps = {
|
|
81
|
+
disabled: false,
|
|
82
|
+
min: null,
|
|
83
|
+
max: null,
|
|
84
|
+
step: '1'
|
|
85
|
+
};
|
|
86
|
+
InputNumberButtons.propTypes = {
|
|
87
|
+
disabled: _propTypes.default.bool,
|
|
88
|
+
min: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
|
|
89
|
+
max: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
|
|
90
|
+
onChange: _propTypes.default.func.isRequired,
|
|
91
|
+
step: _propTypes.default.string,
|
|
92
|
+
value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]).isRequired
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
var _default = /*#__PURE__*/_react.default.memo(InputNumberButtons);
|
|
96
|
+
|
|
97
|
+
exports.default = _default;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
@import '../../../scss/colors';
|
|
2
|
+
@import '../../../scss/borders';
|
|
3
|
+
|
|
4
|
+
.form-field-range {
|
|
5
|
+
align-self: stretch;
|
|
6
|
+
|
|
7
|
+
.range {
|
|
8
|
+
&__buttons {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
width: 28px;
|
|
13
|
+
height: 100%;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&__button {
|
|
17
|
+
display: flex;
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 50%;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
padding: 0;
|
|
23
|
+
background-color: $wildSand;
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
|
|
26
|
+
svg {
|
|
27
|
+
path {
|
|
28
|
+
fill: $topaz;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&:hover {
|
|
33
|
+
background-color: $mercury;
|
|
34
|
+
|
|
35
|
+
svg {
|
|
36
|
+
path {
|
|
37
|
+
fill: $primary;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&:focus {
|
|
43
|
+
border: $focusBorder;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&:active {
|
|
47
|
+
background-color: rgba($black, 0.2);
|
|
48
|
+
border: $focusBorder;
|
|
49
|
+
|
|
50
|
+
svg {
|
|
51
|
+
path {
|
|
52
|
+
fill: $primary;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&:disabled {
|
|
58
|
+
cursor: not-allowed;
|
|
59
|
+
|
|
60
|
+
svg {
|
|
61
|
+
path {
|
|
62
|
+
fill: $spunPearl;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&:focus {
|
|
67
|
+
border: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&:hover {
|
|
71
|
+
background-color: $wildSand;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&-increase {
|
|
76
|
+
border-bottom: $transparentBorder;
|
|
77
|
+
border-left: $transparentBorder;
|
|
78
|
+
border-top-right-radius: 4px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&-decrease {
|
|
82
|
+
border-top: $transparentBorder;
|
|
83
|
+
border-left: $transparentBorder;
|
|
84
|
+
border-bottom-right-radius: 4px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.decrease {
|
|
88
|
+
transform: rotate(180deg);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
&-warning {
|
|
93
|
+
border: $errorBorder;
|
|
94
|
+
|
|
95
|
+
&_asterisk {
|
|
96
|
+
position: absolute;
|
|
97
|
+
top: 50%;
|
|
98
|
+
right: 35px;
|
|
99
|
+
color: $amaranth;
|
|
100
|
+
transform: translateY(-50%);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.range__button {
|
|
104
|
+
&-increase {
|
|
105
|
+
border-top: $errorBorder;
|
|
106
|
+
border-right: $errorBorder;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
&-decrease {
|
|
110
|
+
border-right: $errorBorder;
|
|
111
|
+
border-bottom: $errorBorder;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&__warning-icon {
|
|
117
|
+
position: absolute;
|
|
118
|
+
top: 50%;
|
|
119
|
+
right: 30px;
|
|
120
|
+
transform: translateY(-50%);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|