venice-ui 2.4.8 → 2.4.10

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.
@@ -65,6 +65,7 @@ const Calendar = ({ value, top, left, size, handleClose, handleSelect, isAdvance
65
65
  };
66
66
  });
67
67
  const [selectedDate, setSellectedDate] = (0, react_1.useState)(() => (value !== undefined ? new Date(value) : new Date()));
68
+ const wrapperRef = (0, react_1.useRef)(null);
68
69
  (0, react_1.useEffect)(() => {
69
70
  updateCalendarSettings((prev) => ({
70
71
  ...prev,
@@ -103,8 +104,27 @@ const Calendar = ({ value, top, left, size, handleClose, handleSelect, isAdvance
103
104
  const setToday = () => {
104
105
  setSellectedDate(new Date());
105
106
  };
107
+ (0, react_1.useEffect)(() => {
108
+ const handleOutside = (e) => {
109
+ const el = wrapperRef.current;
110
+ const target = e.target;
111
+ if (!el)
112
+ return;
113
+ const path = e.composedPath ? e.composedPath() : undefined;
114
+ const clickedOutside = path ? !path.includes(el) : !el.contains(target);
115
+ if (clickedOutside && !isAdvance) {
116
+ handleClose && handleClose();
117
+ }
118
+ };
119
+ document.addEventListener('mousedown', handleOutside);
120
+ document.addEventListener('touchstart', handleOutside);
121
+ return () => {
122
+ document.removeEventListener('mousedown', handleOutside);
123
+ document.removeEventListener('touchstart', handleOutside);
124
+ };
125
+ }, [isAdvance, handleClose]);
106
126
  return (react_1.default.createElement(react_1.default.Fragment, null,
107
- react_1.default.createElement(DatePiocker_styles_1.CalendarWrapper, { top: top, left: left, size: size, zIndex: zIndex },
127
+ react_1.default.createElement(DatePiocker_styles_1.CalendarWrapper, { ref: wrapperRef, top: top, left: left, size: size, zIndex: zIndex },
108
128
  react_1.default.createElement(Aligment_1.Aligment, { direction: "row" },
109
129
  react_1.default.createElement(CalendarHeader_1.CalendarHeader, { mode: calendarSettings.mode, date: calendarSettings.date, yearsScope: calendarSettings.yearsScope, handleChange: setPeriod, handleSelect: setMode, localeLabels: effectiveLocale }),
110
130
  react_1.default.createElement(CalendarContent_1.CalendarContent, { date: calendarSettings.date, mode: calendarSettings.mode, handleChange: setNewDate, changeMode: setMode, yearsScope: calendarSettings.yearsScope, localeLabels: effectiveLocale }),
@@ -33,7 +33,7 @@ const common_1 = require("../common");
33
33
  const react_dom_1 = require("react-dom");
34
34
  const Icons_1 = require("../Icons");
35
35
  const Theme_1 = require("../../Theme");
36
- const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = false, error, errorMsg, width, options, value, placeholder = 'Please select', name, handleSelect, position = 'left', zIndex, readOnly = false, theme = Theme_1.mainTheme, }) => {
36
+ const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = false, error, errorMsg, width, options, value, placeholder = 'Please select', name, handleSelect, position = 'left', zIndex, maxHeight, readOnly = false, theme = Theme_1.mainTheme, handleFieldFocus, handleFieldBlur, }) => {
37
37
  const [open, toogleOpen] = (0, react_1.useState)(false);
38
38
  const ref = (0, react_1.useRef)(null);
39
39
  const sourceRef = (0, react_1.useRef)(null);
@@ -60,6 +60,7 @@ const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = fa
60
60
  setDropdownStyles(positionStyle);
61
61
  }
62
62
  toogleOpen(!open);
63
+ handleFieldFocus && handleFieldFocus(name);
63
64
  }
64
65
  };
65
66
  const selectOption = (e, selectedValue, isDisabled) => {
@@ -67,17 +68,20 @@ const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = fa
67
68
  if (!isDisabled) {
68
69
  handleSelect(name, selectedValue);
69
70
  toogleOpen(false);
71
+ handleFieldBlur && handleFieldBlur();
70
72
  }
71
73
  };
72
74
  (0, react_1.useEffect)(() => {
73
75
  const handleClickOutside = (event) => {
74
76
  if (ref.current && !ref.current.contains(event.target)) {
75
77
  toogleOpen(false);
78
+ handleFieldBlur && handleFieldBlur();
76
79
  }
77
80
  };
78
81
  const handleKeyDown = (e) => {
79
82
  if (e.key === 'Escape') {
80
83
  close();
84
+ handleFieldBlur && handleFieldBlur();
81
85
  }
82
86
  };
83
87
  if (open) {
@@ -96,7 +100,7 @@ const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = fa
96
100
  react_1.default.createElement(Input_1.EyeIconWrapper, { size: size },
97
101
  react_1.default.createElement(Icons_1.Icon, { name: open ? 'arrow_drop_up' : 'arrow_drop_down', size: 24, iconColor: theme.inputDefaultTextColor, iconHoverColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" })),
98
102
  open &&
99
- (0, react_dom_1.createPortal)(react_1.default.createElement(common_1.Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex }, options &&
103
+ (0, react_dom_1.createPortal)(react_1.default.createElement(common_1.Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex, maxHeight: maxHeight }, options &&
100
104
  options.map((option) => (react_1.default.createElement(common_1.PanelOption, { key: option.value, active: option.value === value, onClick: (e) => selectOption(e, option.value, option.disabled), isDisabled: option.disabled || false }, option.label)))), document.body),
101
105
  error && errorMsg && react_1.default.createElement(Input_1.InputErrorMsg, null, errorMsg)))));
102
106
  };
@@ -11,7 +11,7 @@ const FormElements_1 = require("./FormElements");
11
11
  const Dropdown_1 = require("../Dropdown");
12
12
  const DatePicker_1 = require("../DatePicker");
13
13
  const FillSelect_1 = require("../FillSelect");
14
- const Form = ({ formData, size = 'medium', read }) => {
14
+ const Form = ({ formData, size = 'medium', read, handleFieldFocus, handleFieldBlur, }) => {
15
15
  const onChangeHandler = (name, value) => {
16
16
  formData.action(name, value);
17
17
  };
@@ -44,13 +44,13 @@ const Form = ({ formData, size = 'medium', read }) => {
44
44
  const selectType = (item) => {
45
45
  switch (item.type) {
46
46
  case 'text':
47
- return (react_1.default.createElement(Input_1.Input, { label: item.label, value: item.value, name: item.name, type: "text", size: size, handleChange: onChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error }));
47
+ return (react_1.default.createElement(Input_1.Input, { label: item.label, value: item.value, name: item.name, type: "text", size: size, handleChange: onChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
48
48
  case 'number':
49
- return (react_1.default.createElement(Input_1.Input, { label: item.label, value: item.value, name: item.name, type: "number", size: size, min: item.min, max: item.max, step: item.step, handleChange: onIntChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error, placeholder: item.placeholder }));
49
+ return (react_1.default.createElement(Input_1.Input, { label: item.label, value: item.value, name: item.name, type: "number", size: size, min: item.min, max: item.max, step: item.step, handleChange: onIntChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error, placeholder: item.placeholder, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
50
50
  case 'increase':
51
- return (react_1.default.createElement(Input_1.Input, { type: "increase", label: item.label, value: item.value, name: item.name, size: size, handleChange: onIntChangeHandler, min: item.min, max: item.max, step: item.step, readOnly: read, autoFocus: item.autofocus, handleSubmit: item.submit, error: item.error, placeholder: item.placeholder }));
51
+ return (react_1.default.createElement(Input_1.Input, { type: "increase", label: item.label, value: item.value, name: item.name, size: size, handleChange: onIntChangeHandler, min: item.min, max: item.max, step: item.step, readOnly: read, autoFocus: item.autofocus, handleSubmit: item.submit, error: item.error, placeholder: item.placeholder, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
52
52
  case 'select':
53
- return (react_1.default.createElement(Dropdown_1.Dropdown, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
53
+ return (react_1.default.createElement(Dropdown_1.Dropdown, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
54
54
  case 'fill':
55
55
  return (react_1.default.createElement(FillSelect_1.FillSelect, { options: item.options, handleSelect: onChangeHandler, handleAddToScope: item.handleAddToScope, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
56
56
  case 'file':
@@ -30,7 +30,7 @@ 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 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, }) => {
33
+ 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, handleFieldFocus, handleFieldBlur, }) => {
34
34
  const [inputValue, setInputValue] = (0, react_1.useState)(value);
35
35
  (0, react_1.useEffect)(() => {
36
36
  setInputValue(value);
@@ -61,9 +61,13 @@ const Input = ({ label, labelPosition = 'top', value, type = 'text', name, disab
61
61
  validateValue = max;
62
62
  }
63
63
  }
64
+ handleFieldBlur && handleFieldBlur();
64
65
  handleChange(name, validateValue);
65
66
  }
66
67
  };
68
+ const onFocus = () => {
69
+ handleFieldFocus && handleFieldFocus(name);
70
+ };
67
71
  const onKeyDown = async (e) => {
68
72
  if (handleSubmit && e.key === 'Enter') {
69
73
  const currentValue = type === 'number' || type === 'increase'
@@ -100,7 +104,7 @@ const Input = ({ label, labelPosition = 'top', value, type = 'text', name, disab
100
104
  label && (react_1.default.createElement(Input_styles_1.InputLabelElement, { size: size, labelPosition: labelPosition }, label)),
101
105
  react_1.default.createElement(Input_styles_1.InputWrapper, { width: width },
102
106
  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,
103
- 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 }),
107
+ 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, onFocus: onFocus, error: error, placeholder: placeholder, min: min, max: max, step: step, prefix: prefix }),
104
108
  prefix && react_1.default.createElement(Input_styles_1.Prefix, { inputSize: size }, prefix),
105
109
  inputType === 'password' && (react_1.default.createElement(Input_styles_1.EyeIconWrapper, { size: size },
106
110
  react_1.default.createElement(Icons_1.Icon, { name: showPassword ? 'visability_off' : 'visibility', size: 24, onClick: tooglePassword, iconColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" }))),
@@ -101,7 +101,7 @@ const List = ({ isCheckbox = false, isCollapsable = false, isSelectable = false,
101
101
  const rowHaveStatus = row.statusDone || row.statusError || row.statusWarnning;
102
102
  return (react_1.default.createElement(react_1.default.Fragment, null,
103
103
  react_1.default.createElement(list_styles_1.ListRow, { key: row.id, level: level, selected: isSelectable && selected ? selected === row.id : false, action: isCheckbox || isSelectable, isExtend: row.extend || false, onClick: (e) => handleRowClick(row, e) },
104
- isCollapsable && (react_1.default.createElement(list_styles_1.ListIconWrapper, { extend: row.extend || (isStatus && rowHaveStatus) ? true : false, onClick: (e) => {
104
+ isCollapsable && (react_1.default.createElement(list_styles_1.ListIconWrapper, { extend: (row.extend && row.children.length !== 0) || (isStatus && rowHaveStatus) ? true : false, onClick: (e) => {
105
105
  e.stopPropagation();
106
106
  } },
107
107
  row.children.length !== 0 && (react_1.default.createElement(Icons_1.Icon, { name: "arrow_drop_down", size: 20, noPadding: true, onClick: () => showRow(row.id), iconBgHoverColor: "transparent" })),
@@ -123,6 +123,12 @@ const Table = ({ theme = Theme_1.mainTheme, headers, elements, hover = true, sel
123
123
  setCurrentPage(1);
124
124
  setNoResultsMessage(null);
125
125
  }, [elements, setCurrentPage, setNoResultsMessage]);
126
+ const tableElements = (0, react_1.useMemo)(() => {
127
+ if (ifPagination) {
128
+ return paginatedElements;
129
+ }
130
+ return tableProps.elements;
131
+ }, [ifPagination, paginatedElements, tableProps.elements]);
126
132
  return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: theme },
127
133
  filtrable && (react_1.default.createElement("div", { style: {
128
134
  display: 'flex',
@@ -141,7 +147,7 @@ const Table = ({ theme = Theme_1.mainTheme, headers, elements, hover = true, sel
141
147
  react_1.default.createElement(Table_styles_1.TableWrapper, { cellPadding: "0", cellSpacing: "0" },
142
148
  react_1.default.createElement(Table_styles_1.TableHead, null,
143
149
  react_1.default.createElement(Table_styles_1.TableRow, { hover: false, selectable: false, active: false }, tableProps.headers.map((header) => (react_1.default.createElement(HeaderCell_1.HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableProps.sort }))))),
144
- react_1.default.createElement("tbody", null, paginatedElements.map((item) => {
150
+ react_1.default.createElement("tbody", null, tableElements.map((item) => {
145
151
  return (react_1.default.createElement(Table_styles_1.TableRow, { key: `table_row_${item.id}`, hover: hover, active: selectedRow === item.id, selectable: selectable, onClick: () => handleRowClick(item.id) }, tableProps.headers.map((header, index) => {
146
152
  return (react_1.default.createElement(Cell_1.Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, marked: item.marked && index === 0, isDisabled: item.disabled }));
147
153
  })));
@@ -31,6 +31,12 @@ exports.Panel = styled_components_1.default.div `
31
31
  border: 1px solid ${Theme_1.Theme.colors.gray_2};
32
32
  border-top: none;
33
33
  min-width: 30px;
34
+ ${(p) => p.maxHeight &&
35
+ `
36
+ max-height: ${p.maxHeight};
37
+ overflow: auto;
38
+
39
+ `}
34
40
  `;
35
41
  exports.PanelOption = styled_components_1.default.div `
36
42
  padding: ${Theme_1.Theme.padding.s} ${Theme_1.Theme.padding.m};
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useEffect, useState, useRef } from 'react';
2
2
  import { CalendarOverlay, CalendarWrapper } from './DatePiocker.styles';
3
3
  import { Aligment } from '../Aligment';
4
4
  import { CalendarHeader } from './CalendarHeader';
@@ -39,6 +39,7 @@ export const Calendar = ({ value, top, left, size, handleClose, handleSelect, is
39
39
  };
40
40
  });
41
41
  const [selectedDate, setSellectedDate] = useState(() => (value !== undefined ? new Date(value) : new Date()));
42
+ const wrapperRef = useRef(null);
42
43
  useEffect(() => {
43
44
  updateCalendarSettings((prev) => ({
44
45
  ...prev,
@@ -77,8 +78,27 @@ export const Calendar = ({ value, top, left, size, handleClose, handleSelect, is
77
78
  const setToday = () => {
78
79
  setSellectedDate(new Date());
79
80
  };
81
+ useEffect(() => {
82
+ const handleOutside = (e) => {
83
+ const el = wrapperRef.current;
84
+ const target = e.target;
85
+ if (!el)
86
+ return;
87
+ const path = e.composedPath ? e.composedPath() : undefined;
88
+ const clickedOutside = path ? !path.includes(el) : !el.contains(target);
89
+ if (clickedOutside && !isAdvance) {
90
+ handleClose && handleClose();
91
+ }
92
+ };
93
+ document.addEventListener('mousedown', handleOutside);
94
+ document.addEventListener('touchstart', handleOutside);
95
+ return () => {
96
+ document.removeEventListener('mousedown', handleOutside);
97
+ document.removeEventListener('touchstart', handleOutside);
98
+ };
99
+ }, [isAdvance, handleClose]);
80
100
  return (React.createElement(React.Fragment, null,
81
- React.createElement(CalendarWrapper, { top: top, left: left, size: size, zIndex: zIndex },
101
+ React.createElement(CalendarWrapper, { ref: wrapperRef, top: top, left: left, size: size, zIndex: zIndex },
82
102
  React.createElement(Aligment, { direction: "row" },
83
103
  React.createElement(CalendarHeader, { mode: calendarSettings.mode, date: calendarSettings.date, yearsScope: calendarSettings.yearsScope, handleChange: setPeriod, handleSelect: setMode, localeLabels: effectiveLocale }),
84
104
  React.createElement(CalendarContent, { date: calendarSettings.date, mode: calendarSettings.mode, handleChange: setNewDate, changeMode: setMode, yearsScope: calendarSettings.yearsScope, localeLabels: effectiveLocale }),
@@ -7,7 +7,7 @@ import { Panel, PanelOption } from '../common';
7
7
  import { createPortal } from 'react-dom';
8
8
  import { Icon } from '../Icons';
9
9
  import { mainTheme } from '../../Theme';
10
- export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = false, error, errorMsg, width, options, value, placeholder = 'Please select', name, handleSelect, position = 'left', zIndex, readOnly = false, theme = mainTheme, }) => {
10
+ export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabled = false, error, errorMsg, width, options, value, placeholder = 'Please select', name, handleSelect, position = 'left', zIndex, maxHeight, readOnly = false, theme = mainTheme, handleFieldFocus, handleFieldBlur, }) => {
11
11
  const [open, toogleOpen] = useState(false);
12
12
  const ref = useRef(null);
13
13
  const sourceRef = useRef(null);
@@ -34,6 +34,7 @@ export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabl
34
34
  setDropdownStyles(positionStyle);
35
35
  }
36
36
  toogleOpen(!open);
37
+ handleFieldFocus && handleFieldFocus(name);
37
38
  }
38
39
  };
39
40
  const selectOption = (e, selectedValue, isDisabled) => {
@@ -41,17 +42,20 @@ export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabl
41
42
  if (!isDisabled) {
42
43
  handleSelect(name, selectedValue);
43
44
  toogleOpen(false);
45
+ handleFieldBlur && handleFieldBlur();
44
46
  }
45
47
  };
46
48
  useEffect(() => {
47
49
  const handleClickOutside = (event) => {
48
50
  if (ref.current && !ref.current.contains(event.target)) {
49
51
  toogleOpen(false);
52
+ handleFieldBlur && handleFieldBlur();
50
53
  }
51
54
  };
52
55
  const handleKeyDown = (e) => {
53
56
  if (e.key === 'Escape') {
54
57
  close();
58
+ handleFieldBlur && handleFieldBlur();
55
59
  }
56
60
  };
57
61
  if (open) {
@@ -70,7 +74,7 @@ export const Dropdown = ({ size = 'medium', label, labelPosition = 'top', disabl
70
74
  React.createElement(EyeIconWrapper, { size: size },
71
75
  React.createElement(Icon, { name: open ? 'arrow_drop_up' : 'arrow_drop_down', size: 24, iconColor: theme.inputDefaultTextColor, iconHoverColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" })),
72
76
  open &&
73
- createPortal(React.createElement(Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex }, options &&
77
+ createPortal(React.createElement(Panel, { style: dropdownStyles, ref: ref, size: size, fullWidth: true, zIndex: zIndex, maxHeight: maxHeight }, options &&
74
78
  options.map((option) => (React.createElement(PanelOption, { key: option.value, active: option.value === value, onClick: (e) => selectOption(e, option.value, option.disabled), isDisabled: option.disabled || false }, option.label)))), document.body),
75
79
  error && errorMsg && React.createElement(InputErrorMsg, null, errorMsg)))));
76
80
  };
@@ -5,7 +5,7 @@ import { FormRow, FormSubRow, FormWrapper } from './FormElements';
5
5
  import { Dropdown } from '../Dropdown';
6
6
  import { DatePicker } from '../DatePicker';
7
7
  import { FillSelect } from '../FillSelect';
8
- export const Form = ({ formData, size = 'medium', read }) => {
8
+ export const Form = ({ formData, size = 'medium', read, handleFieldFocus, handleFieldBlur, }) => {
9
9
  const onChangeHandler = (name, value) => {
10
10
  formData.action(name, value);
11
11
  };
@@ -38,13 +38,13 @@ export const Form = ({ formData, size = 'medium', read }) => {
38
38
  const selectType = (item) => {
39
39
  switch (item.type) {
40
40
  case 'text':
41
- return (React.createElement(Input, { label: item.label, value: item.value, name: item.name, type: "text", size: size, handleChange: onChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error }));
41
+ return (React.createElement(Input, { label: item.label, value: item.value, name: item.name, type: "text", size: size, handleChange: onChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
42
42
  case 'number':
43
- return (React.createElement(Input, { label: item.label, value: item.value, name: item.name, type: "number", size: size, min: item.min, max: item.max, step: item.step, handleChange: onIntChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error, placeholder: item.placeholder }));
43
+ return (React.createElement(Input, { label: item.label, value: item.value, name: item.name, type: "number", size: size, min: item.min, max: item.max, step: item.step, handleChange: onIntChangeHandler, readOnly: read, autoFocus: !!item.isDisabled && item.autofocus, handleSubmit: item.submit, disabled: item.isDisabled, error: item.error, placeholder: item.placeholder, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
44
44
  case 'increase':
45
- return (React.createElement(Input, { type: "increase", label: item.label, value: item.value, name: item.name, size: size, handleChange: onIntChangeHandler, min: item.min, max: item.max, step: item.step, readOnly: read, autoFocus: item.autofocus, handleSubmit: item.submit, error: item.error, placeholder: item.placeholder }));
45
+ return (React.createElement(Input, { type: "increase", label: item.label, value: item.value, name: item.name, size: size, handleChange: onIntChangeHandler, min: item.min, max: item.max, step: item.step, readOnly: read, autoFocus: item.autofocus, handleSubmit: item.submit, error: item.error, placeholder: item.placeholder, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
46
46
  case 'select':
47
- return (React.createElement(Dropdown, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
47
+ return (React.createElement(Dropdown, { options: item.options, handleSelect: onChangeHandler, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder, handleFieldFocus: handleFieldFocus, handleFieldBlur: handleFieldBlur }));
48
48
  case 'fill':
49
49
  return (React.createElement(FillSelect, { options: item.options, handleSelect: onChangeHandler, handleAddToScope: item.handleAddToScope, name: item.name, value: item.value, size: size, label: item.label, position: item.position, zIndex: item.zIndex, readOnly: read, error: item.error, placeholder: item.placeholder }));
50
50
  case 'file':
@@ -4,7 +4,7 @@ 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
- 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, }) => {
7
+ 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, handleFieldFocus, handleFieldBlur, }) => {
8
8
  const [inputValue, setInputValue] = useState(value);
9
9
  useEffect(() => {
10
10
  setInputValue(value);
@@ -35,9 +35,13 @@ export const Input = ({ label, labelPosition = 'top', value, type = 'text', name
35
35
  validateValue = max;
36
36
  }
37
37
  }
38
+ handleFieldBlur && handleFieldBlur();
38
39
  handleChange(name, validateValue);
39
40
  }
40
41
  };
42
+ const onFocus = () => {
43
+ handleFieldFocus && handleFieldFocus(name);
44
+ };
41
45
  const onKeyDown = async (e) => {
42
46
  if (handleSubmit && e.key === 'Enter') {
43
47
  const currentValue = type === 'number' || type === 'increase'
@@ -74,7 +78,7 @@ export const Input = ({ label, labelPosition = 'top', value, type = 'text', name
74
78
  label && (React.createElement(InputLabelElement, { size: size, labelPosition: labelPosition }, label)),
75
79
  React.createElement(InputWrapper, { width: width },
76
80
  React.createElement(React.Fragment, null, readOnly ? (React.createElement(InputReadOnlyElement, { inputSize: size }, inputType === 'password' ? '******' : value)) : (React.createElement(React.Fragment, null,
77
- 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 }),
81
+ React.createElement(InputTextElement, { autoFocus: autoFocus, inputSize: size, type: showPassword ? 'text' : inputType, disabled: disabled, name: name, value: inputValue, onChange: onChange, onKeyDown: onKeyDown, onBlur: onBlurValidation, onFocus: onFocus, error: error, placeholder: placeholder, min: min, max: max, step: step, prefix: prefix }),
78
82
  prefix && React.createElement(Prefix, { inputSize: size }, prefix),
79
83
  inputType === 'password' && (React.createElement(EyeIconWrapper, { size: size },
80
84
  React.createElement(Icon, { name: showPassword ? 'visability_off' : 'visibility', size: 24, onClick: tooglePassword, iconColor: theme.inputDefaultTextColor, iconBgHoverColor: "transparent" }))),
@@ -95,7 +95,7 @@ export const List = ({ isCheckbox = false, isCollapsable = false, isSelectable =
95
95
  const rowHaveStatus = row.statusDone || row.statusError || row.statusWarnning;
96
96
  return (React.createElement(React.Fragment, null,
97
97
  React.createElement(ListRow, { key: row.id, level: level, selected: isSelectable && selected ? selected === row.id : false, action: isCheckbox || isSelectable, isExtend: row.extend || false, onClick: (e) => handleRowClick(row, e) },
98
- isCollapsable && (React.createElement(ListIconWrapper, { extend: row.extend || (isStatus && rowHaveStatus) ? true : false, onClick: (e) => {
98
+ isCollapsable && (React.createElement(ListIconWrapper, { extend: (row.extend && row.children.length !== 0) || (isStatus && rowHaveStatus) ? true : false, onClick: (e) => {
99
99
  e.stopPropagation();
100
100
  } },
101
101
  row.children.length !== 0 && (React.createElement(Icon, { name: "arrow_drop_down", size: 20, noPadding: true, onClick: () => showRow(row.id), iconBgHoverColor: "transparent" })),
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState, useCallback, useRef } from 'react';
1
+ import React, { useEffect, useState, useCallback, useRef, useMemo, } from 'react';
2
2
  import { ThemeProvider } from 'styled-components';
3
3
  import { TableHead, TableRow, TableWrapper } from './Table.styles';
4
4
  import { mainTheme } from '../../Theme';
@@ -97,6 +97,12 @@ export const Table = ({ theme = mainTheme, headers, elements, hover = true, sele
97
97
  setCurrentPage(1);
98
98
  setNoResultsMessage(null);
99
99
  }, [elements, setCurrentPage, setNoResultsMessage]);
100
+ const tableElements = useMemo(() => {
101
+ if (ifPagination) {
102
+ return paginatedElements;
103
+ }
104
+ return tableProps.elements;
105
+ }, [ifPagination, paginatedElements, tableProps.elements]);
100
106
  return (React.createElement(ThemeProvider, { theme: theme },
101
107
  filtrable && (React.createElement("div", { style: {
102
108
  display: 'flex',
@@ -115,7 +121,7 @@ export const Table = ({ theme = mainTheme, headers, elements, hover = true, sele
115
121
  React.createElement(TableWrapper, { cellPadding: "0", cellSpacing: "0" },
116
122
  React.createElement(TableHead, null,
117
123
  React.createElement(TableRow, { hover: false, selectable: false, active: false }, tableProps.headers.map((header) => (React.createElement(HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableProps.sort }))))),
118
- React.createElement("tbody", null, paginatedElements.map((item) => {
124
+ React.createElement("tbody", null, tableElements.map((item) => {
119
125
  return (React.createElement(TableRow, { key: `table_row_${item.id}`, hover: hover, active: selectedRow === item.id, selectable: selectable, onClick: () => handleRowClick(item.id) }, tableProps.headers.map((header, index) => {
120
126
  return (React.createElement(Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, marked: item.marked && index === 0, isDisabled: item.disabled }));
121
127
  })));
@@ -25,6 +25,12 @@ export const Panel = styled.div `
25
25
  border: 1px solid ${Theme.colors.gray_2};
26
26
  border-top: none;
27
27
  min-width: 30px;
28
+ ${(p) => p.maxHeight &&
29
+ `
30
+ max-height: ${p.maxHeight};
31
+ overflow: auto;
32
+
33
+ `}
28
34
  `;
29
35
  export const PanelOption = styled.div `
30
36
  padding: ${Theme.padding.s} ${Theme.padding.m};
@@ -5,7 +5,10 @@ export interface IDropdownProps extends IFormElement {
5
5
  handleSelect: (name: string, value: string | number) => void;
6
6
  position?: string;
7
7
  zIndex?: number;
8
+ maxHeight?: string;
8
9
  theme?: any;
10
+ handleFieldFocus?: (name: string) => void;
11
+ handleFieldBlur?: () => void;
9
12
  }
10
13
  export interface IPositionStyle {
11
14
  top: number;
@@ -5,6 +5,8 @@ export interface FormProps {
5
5
  formData: FormSourceData;
6
6
  size?: InputSize;
7
7
  read?: boolean;
8
+ handleFieldFocus?: (name: string) => void;
9
+ handleFieldBlur?: () => void;
8
10
  }
9
11
  export declare const Form: FC<FormProps>;
10
12
  export default Form;
@@ -11,5 +11,7 @@ export interface IInputProps extends IFormElement {
11
11
  theme?: any;
12
12
  handleSubmit?: () => void;
13
13
  prefix?: string;
14
+ handleFieldFocus?: (name: string) => void;
15
+ handleFieldBlur?: () => void;
14
16
  }
15
17
  export declare const Input: FC<IInputProps>;
@@ -2,8 +2,9 @@ import { InputSize } from '../../types';
2
2
  export declare const Container: import("styled-components").StyledComponent<"div", any, {}, never>;
3
3
  export declare const ScrollCotainer: import("styled-components").StyledComponent<"div", any, {}, never>;
4
4
  interface IPanelStyle {
5
- height?: string;
6
5
  size: InputSize;
6
+ height?: string;
7
+ maxHeight?: string;
7
8
  fullWidth?: boolean;
8
9
  zIndex?: number;
9
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "venice-ui",
3
- "version": "2.4.8",
3
+ "version": "2.4.10",
4
4
  "description": "Component library",
5
5
  "main": "index.js",
6
6
  "module": "./dist/esm/index.js",