venice-ui 2.1.4 → 2.1.5
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/cjs/components/Button/Button.styles.js +3 -0
- package/dist/cjs/components/Dropdown/Dropdown.js +11 -2
- package/dist/cjs/components/DropdownMenu/DropdownMenu.js +12 -3
- package/dist/cjs/components/Filters/Filters.js +1 -1
- package/dist/cjs/components/Input/Input.js +11 -6
- package/dist/cjs/components/Modal/Modal.js +37 -4
- package/dist/cjs/components/Selector/Selector.js +1 -1
- package/dist/cjs/components/Sidepanel/Sidepanel.js +7 -0
- package/dist/esm/components/Button/Button.styles.js +3 -0
- package/dist/esm/components/Dropdown/Dropdown.js +11 -2
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +12 -3
- package/dist/esm/components/Filters/Filters.js +1 -1
- package/dist/esm/components/Input/Input.js +12 -7
- package/dist/esm/components/Modal/Modal.js +15 -2
- package/dist/esm/components/Selector/Selector.js +1 -1
- package/dist/esm/components/Sidepanel/Sidepanel.js +7 -0
- package/dist/types/components/Modal/Modal.d.ts +2 -0
- package/package.json +2 -1
|
@@ -73,9 +73,18 @@ const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = fa
|
|
|
73
73
|
toogleOpen(false);
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
|
-
|
|
76
|
+
const handleKeyDown = (e) => {
|
|
77
|
+
if (e.key === 'Escape') {
|
|
78
|
+
close();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
if (open) {
|
|
82
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
83
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
84
|
+
}
|
|
77
85
|
return () => {
|
|
78
86
|
document.removeEventListener('click', handleClickOutside, true);
|
|
87
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
79
88
|
};
|
|
80
89
|
}, [open]);
|
|
81
90
|
return (react_1.default.createElement(Aligment_1.Aligment, { align: labelPosition === 'top' ? 'flex-start' : 'center', direction: labelPosition === 'top' ? 'column' : 'row', wrap: 'nowrap', width: width },
|
|
@@ -87,6 +96,6 @@ const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = fa
|
|
|
87
96
|
open &&
|
|
88
97
|
(0, react_dom_1.createPortal)(react_1.default.createElement(common_1.Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex }, options &&
|
|
89
98
|
options.map((option) => (react_1.default.createElement(common_1.PanelOption, { key: option.value, active: option.value === value, onClick: (e) => selectOption(e, option.value) }, option.label)))), document.body),
|
|
90
|
-
|
|
99
|
+
error && errorMsg && react_1.default.createElement(Input_1.InputErrorMsg, null, errorMsg)))));
|
|
91
100
|
};
|
|
92
101
|
exports.Dropdown = Dropdown;
|
|
@@ -89,12 +89,21 @@ const DropdownMenu = ({ size = 'medium', iconName = 'more_vert', header = false,
|
|
|
89
89
|
const mouseleave = (e) => {
|
|
90
90
|
close();
|
|
91
91
|
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
const handleKeyDown = (e) => {
|
|
93
|
+
if (e.key === 'Escape') {
|
|
94
|
+
close();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
if (open) {
|
|
98
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
99
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
100
|
+
if (panel) {
|
|
101
|
+
panel.addEventListener('mouseleave', mouseleave);
|
|
102
|
+
}
|
|
95
103
|
}
|
|
96
104
|
return () => {
|
|
97
105
|
document.removeEventListener('click', handleClickOutside, true);
|
|
106
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
98
107
|
if (panel) {
|
|
99
108
|
panel.removeEventListener('mouseleave', mouseleave);
|
|
100
109
|
}
|
|
@@ -179,7 +179,7 @@ const Filters = ({ theme = Theme_1.mainTheme, title = 'Select filters', labelCon
|
|
|
179
179
|
react_1.default.createElement(Filters_styles_1.FilterIconArea, null,
|
|
180
180
|
react_1.default.createElement(Icons_1.Icon, { name: "filters", onClick: toogleFilter, iconColor: setIconColor() }),
|
|
181
181
|
isAnyFilterActive() && (react_1.default.createElement(Chips_1.Chips, { label: labelClearAll, handleClose: resetAllFiltersAndSubmit }))),
|
|
182
|
-
openFilters && (react_1.default.createElement(Modal_1.Modal, { title: title, handleConfirm: applyFilter, handleClose: toogleFilter, handleAdditional: resetAllFilters, labelConfirm: labelConfirm, labelClose: labelClose, labelAdditional: labelClearAll },
|
|
182
|
+
openFilters && (react_1.default.createElement(Modal_1.Modal, { title: title, handleConfirm: applyFilter, handleClose: toogleFilter, handleAdditional: resetAllFilters, labelConfirm: labelConfirm, labelClose: labelClose, labelAdditional: labelClearAll, isOpen: openFilters },
|
|
183
183
|
react_1.default.createElement(Aligment_1.Aligment, { direction: "column", align: 'flex-end' },
|
|
184
184
|
react_1.default.createElement(Filters_styles_1.FiltersArea, null, filters.map((filter) => (react_1.default.createElement(Filters_styles_1.FilterSection, null,
|
|
185
185
|
react_1.default.createElement(Aligment_1.Aligment, { wrap: "nowrap" },
|
|
@@ -30,17 +30,23 @@ const Aligment_1 = require("../Aligment");
|
|
|
30
30
|
const Input_styles_1 = require("./Input.styles");
|
|
31
31
|
const Icons_1 = require("../Icons");
|
|
32
32
|
const Theme_1 = require("../../Theme");
|
|
33
|
+
const lodash_1 = require("lodash");
|
|
33
34
|
const Input = ({ label, labelPosition = 'top', value, type = 'text', name, disabled = false, size = 'medium', handleChange, handleSubmit, width, error = false, errorMsg, placeholder, min, max, step = 0.1, autoFocus, theme = Theme_1.mainTheme, readOnly = false, prefix, }) => {
|
|
35
|
+
const [inputValue, setInputValue] = (0, react_1.useState)(value);
|
|
34
36
|
const calculateNumberValue = (numberValue) => {
|
|
35
37
|
return isNaN(parseFloat(numberValue))
|
|
36
38
|
? numberValue
|
|
37
39
|
: parseFloat(numberValue);
|
|
38
40
|
};
|
|
41
|
+
const debouncedHandleChange = (0, react_1.useCallback)((0, lodash_1.debounce)((name, value) => {
|
|
42
|
+
handleChange(name, value);
|
|
43
|
+
}, 300), [handleChange]);
|
|
39
44
|
const onChange = (e) => {
|
|
40
45
|
let returnedValue = type === 'number' || type === 'increase'
|
|
41
46
|
? calculateNumberValue(e.target.value)
|
|
42
47
|
: e.target.value.toString();
|
|
43
|
-
|
|
48
|
+
setInputValue(returnedValue);
|
|
49
|
+
debouncedHandleChange(name, setInputValue);
|
|
44
50
|
};
|
|
45
51
|
const onBlurValidation = () => {
|
|
46
52
|
if (type === 'number' || type === 'increase') {
|
|
@@ -86,19 +92,18 @@ const Input = ({ label, labelPosition = 'top', value, type = 'text', name, disab
|
|
|
86
92
|
}
|
|
87
93
|
handleChange(name, newValue);
|
|
88
94
|
};
|
|
89
|
-
// ${Theme.fontSize.m}/
|
|
90
95
|
return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: theme },
|
|
91
96
|
react_1.default.createElement(Aligment_1.Aligment, { align: labelPosition === 'top' ? 'flex-start' : 'center', direction: labelPosition === 'top' ? 'column' : 'row', wrap: 'nowrap' },
|
|
92
97
|
label && (react_1.default.createElement(Input_styles_1.InputLabelElement, { size: size, labelPosition: labelPosition }, label)),
|
|
93
98
|
react_1.default.createElement(Input_styles_1.InputWrapper, { width: width },
|
|
94
99
|
react_1.default.createElement(react_1.default.Fragment, null, readOnly ? (react_1.default.createElement(Input_styles_1.InputReadOnlyElement, { inputSize: size }, inputType === 'password' ? '******' : value)) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
95
|
-
react_1.default.createElement(Input_styles_1.InputTextElement, { autoFocus: autoFocus, inputSize: size, type: showPassword ? 'text' : inputType, disabled: disabled, name: name, value:
|
|
100
|
+
react_1.default.createElement(Input_styles_1.InputTextElement, { autoFocus: autoFocus, inputSize: size, type: showPassword ? 'text' : inputType, disabled: disabled, name: name, value: inputValue, onChange: onChange, onKeyDown: onKeyDown, onBlur: onBlurValidation, error: error, placeholder: placeholder, min: min, max: max, step: step, prefix: prefix }),
|
|
96
101
|
prefix && react_1.default.createElement(Input_styles_1.Prefix, { inputSize: size }, prefix),
|
|
97
102
|
inputType === 'password' && (react_1.default.createElement(Input_styles_1.EyeIconWrapper, { size: size },
|
|
98
103
|
react_1.default.createElement(Icons_1.Icon, { name: showPassword ? 'visability_off' : 'visibility', size: 24, onClick: tooglePassword, iconColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" }))),
|
|
99
104
|
type === 'increase' && (react_1.default.createElement(Input_styles_1.IconsWrapper, null,
|
|
100
|
-
react_1.default.createElement(Icons_1.Icon, { name: "add", size: size === 'small' ? 16 : 24, onClick: () => increaseValue(
|
|
101
|
-
react_1.default.createElement(Icons_1.Icon, { name: "remove", size: size === 'small' ? 16 : 24, onClick: () => decreaseValue(
|
|
102
|
-
|
|
105
|
+
react_1.default.createElement(Icons_1.Icon, { name: "add", size: size === 'small' ? 16 : 24, onClick: () => increaseValue(inputValue), iconColor: theme.inputDefaultTextColor }),
|
|
106
|
+
react_1.default.createElement(Icons_1.Icon, { name: "remove", size: size === 'small' ? 16 : 24, onClick: () => decreaseValue(inputValue), iconColor: theme.inputDefaultTextColor }))),
|
|
107
|
+
error && errorMsg && react_1.default.createElement(Input_styles_1.InputErrorMsg, null, errorMsg))))))));
|
|
103
108
|
};
|
|
104
109
|
exports.Input = Input;
|
|
@@ -1,17 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
4
24
|
};
|
|
5
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
26
|
exports.Modal = void 0;
|
|
7
|
-
const react_1 =
|
|
27
|
+
const react_1 = __importStar(require("react"));
|
|
8
28
|
const ElementHeader_1 = require("../ElementHeader");
|
|
9
29
|
const Theme_1 = require("../../Theme/Theme");
|
|
10
30
|
const common_1 = require("../common");
|
|
11
31
|
const Modal_styles_1 = require("./Modal.styles");
|
|
12
32
|
const styled_components_1 = require("styled-components");
|
|
13
33
|
const ButtonsFooter_1 = require("../ButtonsFooter");
|
|
14
|
-
const Modal = ({ theme = Theme_1.mainTheme, children, title, handleConfirm, handleClose, handleAdditional, labelConfirm, labelClose = 'Cancel', labelAdditional, submitDisabled, size = 'small', submitLoader = false, additionalType = 'button', additionalValue = false, headerDivader = false, additionaNormalMode = false }) => {
|
|
34
|
+
const Modal = ({ isOpen, theme = Theme_1.mainTheme, children, title, handleConfirm, handleClose, handleAdditional, labelConfirm, labelClose = 'Cancel', labelAdditional, submitDisabled, size = 'small', submitLoader = false, additionalType = 'button', additionalValue = false, headerDivader = false, additionaNormalMode = false, exitOnEsc = false }) => {
|
|
35
|
+
(0, react_1.useEffect)(() => {
|
|
36
|
+
const handleKeyDown = (e) => {
|
|
37
|
+
if (e.key === 'Escape') {
|
|
38
|
+
handleClose();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
if (isOpen && exitOnEsc) {
|
|
42
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
43
|
+
}
|
|
44
|
+
return () => {
|
|
45
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
46
|
+
};
|
|
47
|
+
}, [isOpen]);
|
|
15
48
|
return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: theme },
|
|
16
49
|
react_1.default.createElement(Modal_styles_1.ModalOverlayer, null,
|
|
17
50
|
react_1.default.createElement(Modal_styles_1.ModalElement, { size: size },
|
|
@@ -50,7 +50,7 @@ const Selector = ({ theme = Theme_1.mainTheme, label, labelPosition = 'top', siz
|
|
|
50
50
|
value ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
51
51
|
react_1.default.createElement(Selector_styles_1.SelectorValue, { onClick: () => toogleOpen(true), size: size }, getLabelForValue(value)),
|
|
52
52
|
react_1.default.createElement(Icons_1.Icon, { name: 'close', onClick: () => handleClear(), size: (0, common_1.setIconSize)(size) }))) : (react_1.default.createElement(Icons_1.Icon, { name: iconName, onClick: () => toogleOpen(true), size: (0, common_1.setIconSize)(size) })),
|
|
53
|
-
open && (react_1.default.createElement(Modal_1.Modal, { title: optionsPanelTitle, labelClose: "Close", handleClose: () => toogleOpen(false) }, options?.length > 0 ? (options.map((option) => (react_1.default.createElement(common_1.PanelOption, { key: option.value, active: option.value === value, onClick: () => selectOption(option.value) }, option.label)))) : (react_1.default.createElement(Typography_1.Text, null, optionsPanelEmptyMsg)))),
|
|
53
|
+
open && (react_1.default.createElement(Modal_1.Modal, { title: optionsPanelTitle, labelClose: "Close", handleClose: () => toogleOpen(false), isOpen: open, exitOnEsc: true }, options?.length > 0 ? (options.map((option) => (react_1.default.createElement(common_1.PanelOption, { key: option.value, active: option.value === value, onClick: () => selectOption(option.value) }, option.label)))) : (react_1.default.createElement(Typography_1.Text, null, optionsPanelEmptyMsg)))),
|
|
54
54
|
error && react_1.default.createElement(Input_1.InputErrorMsg, null, error)))));
|
|
55
55
|
};
|
|
56
56
|
exports.Selector = Selector;
|
|
@@ -38,9 +38,16 @@ const Sidepanel = ({ isOpen, handleClose, children, right = false, overlayer = t
|
|
|
38
38
|
handleClose && handleClose();
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
|
+
const handleKeyDown = (e) => {
|
|
42
|
+
if (e.key === 'Escape') {
|
|
43
|
+
handleClose && handleClose();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
41
46
|
document.addEventListener('click', handleClickOutside, true);
|
|
47
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
42
48
|
return () => {
|
|
43
49
|
document.removeEventListener('click', handleClickOutside, true);
|
|
50
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
44
51
|
};
|
|
45
52
|
}, [isOpen]);
|
|
46
53
|
const modalRoot = document.getElementById('root');
|
|
@@ -47,9 +47,18 @@ export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabl
|
|
|
47
47
|
toogleOpen(false);
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
const handleKeyDown = (e) => {
|
|
51
|
+
if (e.key === 'Escape') {
|
|
52
|
+
close();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
if (open) {
|
|
56
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
57
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
58
|
+
}
|
|
51
59
|
return () => {
|
|
52
60
|
document.removeEventListener('click', handleClickOutside, true);
|
|
61
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
53
62
|
};
|
|
54
63
|
}, [open]);
|
|
55
64
|
return (React.createElement(Aligment, { align: labelPosition === 'top' ? 'flex-start' : 'center', direction: labelPosition === 'top' ? 'column' : 'row', wrap: 'nowrap', width: width },
|
|
@@ -61,5 +70,5 @@ export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabl
|
|
|
61
70
|
open &&
|
|
62
71
|
createPortal(React.createElement(Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex }, options &&
|
|
63
72
|
options.map((option) => (React.createElement(PanelOption, { key: option.value, active: option.value === value, onClick: (e) => selectOption(e, option.value) }, option.label)))), document.body),
|
|
64
|
-
|
|
73
|
+
error && errorMsg && React.createElement(InputErrorMsg, null, errorMsg)))));
|
|
65
74
|
};
|
|
@@ -63,12 +63,21 @@ export const DropdownMenu = ({ size = 'medium', iconName = 'more_vert', header =
|
|
|
63
63
|
const mouseleave = (e) => {
|
|
64
64
|
close();
|
|
65
65
|
};
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
const handleKeyDown = (e) => {
|
|
67
|
+
if (e.key === 'Escape') {
|
|
68
|
+
close();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
if (open) {
|
|
72
|
+
document.addEventListener('click', handleClickOutside, true);
|
|
73
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
74
|
+
if (panel) {
|
|
75
|
+
panel.addEventListener('mouseleave', mouseleave);
|
|
76
|
+
}
|
|
69
77
|
}
|
|
70
78
|
return () => {
|
|
71
79
|
document.removeEventListener('click', handleClickOutside, true);
|
|
80
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
72
81
|
if (panel) {
|
|
73
82
|
panel.removeEventListener('mouseleave', mouseleave);
|
|
74
83
|
}
|
|
@@ -153,7 +153,7 @@ export const Filters = ({ theme = mainTheme, title = 'Select filters', labelConf
|
|
|
153
153
|
React.createElement(FilterIconArea, null,
|
|
154
154
|
React.createElement(Icon, { name: "filters", onClick: toogleFilter, iconColor: setIconColor() }),
|
|
155
155
|
isAnyFilterActive() && (React.createElement(Chips, { label: labelClearAll, handleClose: resetAllFiltersAndSubmit }))),
|
|
156
|
-
openFilters && (React.createElement(Modal, { title: title, handleConfirm: applyFilter, handleClose: toogleFilter, handleAdditional: resetAllFilters, labelConfirm: labelConfirm, labelClose: labelClose, labelAdditional: labelClearAll },
|
|
156
|
+
openFilters && (React.createElement(Modal, { title: title, handleConfirm: applyFilter, handleClose: toogleFilter, handleAdditional: resetAllFilters, labelConfirm: labelConfirm, labelClose: labelClose, labelAdditional: labelClearAll, isOpen: openFilters },
|
|
157
157
|
React.createElement(Aligment, { direction: "column", align: 'flex-end' },
|
|
158
158
|
React.createElement(FiltersArea, null, filters.map((filter) => (React.createElement(FilterSection, null,
|
|
159
159
|
React.createElement(Aligment, { wrap: "nowrap" },
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { useCallback, useState } from 'react';
|
|
2
2
|
import { ThemeProvider } from 'styled-components';
|
|
3
3
|
import { Aligment } from '../Aligment';
|
|
4
4
|
import { InputTextElement, InputLabelElement, InputErrorMsg, InputWrapper, EyeIconWrapper, IconsWrapper, InputReadOnlyElement, Prefix, } from './Input.styles';
|
|
5
5
|
import { Icon } from '../Icons';
|
|
6
6
|
import { mainTheme } from '../../Theme';
|
|
7
|
+
import { debounce } from 'lodash';
|
|
7
8
|
export const Input = ({ label, labelPosition = 'top', value, type = 'text', name, disabled = false, size = 'medium', handleChange, handleSubmit, width, error = false, errorMsg, placeholder, min, max, step = 0.1, autoFocus, theme = mainTheme, readOnly = false, prefix, }) => {
|
|
9
|
+
const [inputValue, setInputValue] = useState(value);
|
|
8
10
|
const calculateNumberValue = (numberValue) => {
|
|
9
11
|
return isNaN(parseFloat(numberValue))
|
|
10
12
|
? numberValue
|
|
11
13
|
: parseFloat(numberValue);
|
|
12
14
|
};
|
|
15
|
+
const debouncedHandleChange = useCallback(debounce((name, value) => {
|
|
16
|
+
handleChange(name, value);
|
|
17
|
+
}, 300), [handleChange]);
|
|
13
18
|
const onChange = (e) => {
|
|
14
19
|
let returnedValue = type === 'number' || type === 'increase'
|
|
15
20
|
? calculateNumberValue(e.target.value)
|
|
16
21
|
: e.target.value.toString();
|
|
17
|
-
|
|
22
|
+
setInputValue(returnedValue);
|
|
23
|
+
debouncedHandleChange(name, setInputValue);
|
|
18
24
|
};
|
|
19
25
|
const onBlurValidation = () => {
|
|
20
26
|
if (type === 'number' || type === 'increase') {
|
|
@@ -60,18 +66,17 @@ export const Input = ({ label, labelPosition = 'top', value, type = 'text', name
|
|
|
60
66
|
}
|
|
61
67
|
handleChange(name, newValue);
|
|
62
68
|
};
|
|
63
|
-
// ${Theme.fontSize.m}/
|
|
64
69
|
return (React.createElement(ThemeProvider, { theme: theme },
|
|
65
70
|
React.createElement(Aligment, { align: labelPosition === 'top' ? 'flex-start' : 'center', direction: labelPosition === 'top' ? 'column' : 'row', wrap: 'nowrap' },
|
|
66
71
|
label && (React.createElement(InputLabelElement, { size: size, labelPosition: labelPosition }, label)),
|
|
67
72
|
React.createElement(InputWrapper, { width: width },
|
|
68
73
|
React.createElement(React.Fragment, null, readOnly ? (React.createElement(InputReadOnlyElement, { inputSize: size }, inputType === 'password' ? '******' : value)) : (React.createElement(React.Fragment, null,
|
|
69
|
-
React.createElement(InputTextElement, { autoFocus: autoFocus, inputSize: size, type: showPassword ? 'text' : inputType, disabled: disabled, name: name, value:
|
|
74
|
+
React.createElement(InputTextElement, { autoFocus: autoFocus, inputSize: size, type: showPassword ? 'text' : inputType, disabled: disabled, name: name, value: inputValue, onChange: onChange, onKeyDown: onKeyDown, onBlur: onBlurValidation, error: error, placeholder: placeholder, min: min, max: max, step: step, prefix: prefix }),
|
|
70
75
|
prefix && React.createElement(Prefix, { inputSize: size }, prefix),
|
|
71
76
|
inputType === 'password' && (React.createElement(EyeIconWrapper, { size: size },
|
|
72
77
|
React.createElement(Icon, { name: showPassword ? 'visability_off' : 'visibility', size: 24, onClick: tooglePassword, iconColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" }))),
|
|
73
78
|
type === 'increase' && (React.createElement(IconsWrapper, null,
|
|
74
|
-
React.createElement(Icon, { name: "add", size: size === 'small' ? 16 : 24, onClick: () => increaseValue(
|
|
75
|
-
React.createElement(Icon, { name: "remove", size: size === 'small' ? 16 : 24, onClick: () => decreaseValue(
|
|
76
|
-
|
|
79
|
+
React.createElement(Icon, { name: "add", size: size === 'small' ? 16 : 24, onClick: () => increaseValue(inputValue), iconColor: theme.inputDefaultTextColor }),
|
|
80
|
+
React.createElement(Icon, { name: "remove", size: size === 'small' ? 16 : 24, onClick: () => decreaseValue(inputValue), iconColor: theme.inputDefaultTextColor }))),
|
|
81
|
+
error && errorMsg && React.createElement(InputErrorMsg, null, errorMsg))))))));
|
|
77
82
|
};
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
2
|
import { ElementHeader } from '../ElementHeader';
|
|
3
3
|
import { mainTheme } from '../../Theme/Theme';
|
|
4
4
|
import { ScrollCotainer } from '../common';
|
|
5
5
|
import { ModalElement, ModalOverlayer } from './Modal.styles';
|
|
6
6
|
import { ThemeProvider } from 'styled-components';
|
|
7
7
|
import { ButtonsFooter } from '../ButtonsFooter';
|
|
8
|
-
export const Modal = ({ theme = mainTheme, children, title, handleConfirm, handleClose, handleAdditional, labelConfirm, labelClose = 'Cancel', labelAdditional, submitDisabled, size = 'small', submitLoader = false, additionalType = 'button', additionalValue = false, headerDivader = false, additionaNormalMode = false }) => {
|
|
8
|
+
export const Modal = ({ isOpen, theme = mainTheme, children, title, handleConfirm, handleClose, handleAdditional, labelConfirm, labelClose = 'Cancel', labelAdditional, submitDisabled, size = 'small', submitLoader = false, additionalType = 'button', additionalValue = false, headerDivader = false, additionaNormalMode = false, exitOnEsc = false }) => {
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const handleKeyDown = (e) => {
|
|
11
|
+
if (e.key === 'Escape') {
|
|
12
|
+
handleClose();
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
if (isOpen && exitOnEsc) {
|
|
16
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
17
|
+
}
|
|
18
|
+
return () => {
|
|
19
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
20
|
+
};
|
|
21
|
+
}, [isOpen]);
|
|
9
22
|
return (React.createElement(ThemeProvider, { theme: theme },
|
|
10
23
|
React.createElement(ModalOverlayer, null,
|
|
11
24
|
React.createElement(ModalElement, { size: size },
|
|
@@ -24,6 +24,6 @@ export const Selector = ({ theme = mainTheme, label, labelPosition = 'top', size
|
|
|
24
24
|
value ? (React.createElement(React.Fragment, null,
|
|
25
25
|
React.createElement(SelectorValue, { onClick: () => toogleOpen(true), size: size }, getLabelForValue(value)),
|
|
26
26
|
React.createElement(Icon, { name: 'close', onClick: () => handleClear(), size: setIconSize(size) }))) : (React.createElement(Icon, { name: iconName, onClick: () => toogleOpen(true), size: setIconSize(size) })),
|
|
27
|
-
open && (React.createElement(Modal, { title: optionsPanelTitle, labelClose: "Close", handleClose: () => toogleOpen(false) }, options?.length > 0 ? (options.map((option) => (React.createElement(PanelOption, { key: option.value, active: option.value === value, onClick: () => selectOption(option.value) }, option.label)))) : (React.createElement(Text, null, optionsPanelEmptyMsg)))),
|
|
27
|
+
open && (React.createElement(Modal, { title: optionsPanelTitle, labelClose: "Close", handleClose: () => toogleOpen(false), isOpen: open, exitOnEsc: true }, options?.length > 0 ? (options.map((option) => (React.createElement(PanelOption, { key: option.value, active: option.value === value, onClick: () => selectOption(option.value) }, option.label)))) : (React.createElement(Text, null, optionsPanelEmptyMsg)))),
|
|
28
28
|
error && React.createElement(InputErrorMsg, null, error)))));
|
|
29
29
|
};
|
|
@@ -12,9 +12,16 @@ export const Sidepanel = ({ isOpen, handleClose, children, right = false, overla
|
|
|
12
12
|
handleClose && handleClose();
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
|
+
const handleKeyDown = (e) => {
|
|
16
|
+
if (e.key === 'Escape') {
|
|
17
|
+
handleClose && handleClose();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
15
20
|
document.addEventListener('click', handleClickOutside, true);
|
|
21
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
16
22
|
return () => {
|
|
17
23
|
document.removeEventListener('click', handleClickOutside, true);
|
|
24
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
18
25
|
};
|
|
19
26
|
}, [isOpen]);
|
|
20
27
|
const modalRoot = document.getElementById('root');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
export interface IModalProps {
|
|
3
|
+
isOpen: boolean;
|
|
3
4
|
theme?: any;
|
|
4
5
|
children: React.ReactNode;
|
|
5
6
|
title?: string;
|
|
@@ -16,5 +17,6 @@ export interface IModalProps {
|
|
|
16
17
|
additionalValue?: boolean;
|
|
17
18
|
headerDivader?: boolean;
|
|
18
19
|
additionaNormalMode?: boolean;
|
|
20
|
+
exitOnEsc?: boolean;
|
|
19
21
|
}
|
|
20
22
|
export declare const Modal: FC<IModalProps>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "venice-ui",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5",
|
|
4
4
|
"description": "Component library",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
"date-fns": "^2.30.0",
|
|
81
81
|
"ftp-deploy": "^2.4.4",
|
|
82
82
|
"lodash": "^4.17.21",
|
|
83
|
+
"lodash.debounce": "^4.0.8",
|
|
83
84
|
"polished": "^4.2.2",
|
|
84
85
|
"react-docgen-typescript-plugin": "^1.0.5",
|
|
85
86
|
"styled-components": "^5.3.10"
|