iguazio.dashboard-react-controls 1.8.9 → 1.8.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.
@@ -61,6 +61,7 @@ var FormChipCell = function FormChipCell(_ref) {
61
61
  shortChips = _ref.shortChips,
62
62
  validationRules = _ref.validationRules,
63
63
  validator = _ref.validator,
64
+ onExitEditModeCallback = _ref.onExitEditModeCallback,
64
65
  visibleChipsMaxLength = _ref.visibleChipsMaxLength;
65
66
  var chipsClassName = (0, _classnames.default)('chips', className);
66
67
  var _useChipCell = (0, _hooks.useChipCell)(isEditable, visibleChipsMaxLength),
@@ -129,8 +130,9 @@ var FormChipCell = function FormChipCell(_ref) {
129
130
  return index !== chipIndex;
130
131
  }).value());
131
132
  fields.remove(chipIndex);
133
+ onExitEditModeCallback && onExitEditModeCallback();
132
134
  event && event.stopPropagation();
133
- }, [checkChipsList, formState, name]);
135
+ }, [checkChipsList, formState, name, onExitEditModeCallback]);
134
136
  var handleEditChip = (0, _react.useCallback)(function (event, fields, nameEvent) {
135
137
  var _fields$value$editCon = fields.value[editConfig.chipIndex],
136
138
  key = _fields$value$editCon.key,
@@ -147,12 +149,14 @@ var FormChipCell = function FormChipCell(_ref) {
147
149
  isValueFocused: false,
148
150
  isNewChip: false
149
151
  });
152
+ isChipNotEmpty && onExitEditModeCallback && onExitEditModeCallback();
150
153
  } else if (nameEvent === _constants.TAB) {
151
154
  if (!isChipNotEmpty) {
152
155
  handleRemoveChip(event, fields, editConfig.chipIndex);
153
156
  }
154
157
  setEditConfig(function (prevState) {
155
158
  var lastChipSelected = prevState.chipIndex + 1 > fields.value.length - 1;
159
+ isChipNotEmpty && lastChipSelected && onExitEditModeCallback && onExitEditModeCallback();
156
160
  return {
157
161
  chipIndex: lastChipSelected ? null : prevState.chipIndex + 1,
158
162
  isEdit: !lastChipSelected,
@@ -167,6 +171,7 @@ var FormChipCell = function FormChipCell(_ref) {
167
171
  }
168
172
  setEditConfig(function (prevState) {
169
173
  var isPrevChipIndexExists = prevState.chipIndex - 1 < 0;
174
+ isChipNotEmpty && isPrevChipIndexExists && onExitEditModeCallback && onExitEditModeCallback();
170
175
  return {
171
176
  chipIndex: isPrevChipIndexExists ? null : prevState.chipIndex - 1,
172
177
  isEdit: !isPrevChipIndexExists,
@@ -178,7 +183,7 @@ var FormChipCell = function FormChipCell(_ref) {
178
183
  }
179
184
  checkChipsList((0, _lodash.get)(formState.values, name));
180
185
  event && event.preventDefault();
181
- }, [editConfig.chipIndex, handleRemoveChip, checkChipsList, formState.values, name]);
186
+ }, [editConfig.chipIndex, checkChipsList, formState.values, name, onExitEditModeCallback, handleRemoveChip]);
182
187
  var handleToEditMode = (0, _react.useCallback)(function (event, index) {
183
188
  if (isEditable) {
184
189
  event.stopPropagation();
@@ -278,6 +283,7 @@ var FormChipCell = function FormChipCell(_ref) {
278
283
  chipOptions: chipOptions,
279
284
  chips: chips,
280
285
  editConfig: editConfig,
286
+ formState: formState,
281
287
  handleAddNewChip: handleAddNewChip,
282
288
  handleEditChip: handleEditChip,
283
289
  handleRemoveChip: handleRemoveChip,
@@ -40,6 +40,7 @@ var FormChipCellView = /*#__PURE__*/_react.default.forwardRef(function (_ref, _r
40
40
  var chipOptions = _ref.chipOptions,
41
41
  chips = _ref.chips,
42
42
  editConfig = _ref.editConfig,
43
+ formState = _ref.formState,
43
44
  handleAddNewChip = _ref.handleAddNewChip,
44
45
  _handleEditChip = _ref.handleEditChip,
45
46
  _handleRemoveChip = _ref.handleRemoveChip,
@@ -63,6 +64,7 @@ var FormChipCellView = /*#__PURE__*/_react.default.forwardRef(function (_ref, _r
63
64
  var chipClassNames = (0, _classnames.default)('chip', 'chip__content', isEditable && 'data-ellipsis', shortChips && 'chip_short', chips.hiddenChips && 'chip_hidden', chipOptions.density && "chip-density_".concat(chipOptions.density), chipOptions.borderRadius && "chip-border_".concat(chipOptions.borderRadius), chipOptions.background && "chip-background_".concat(chipOptions.background), chipOptions.borderColor && "chip-border_".concat(chipOptions.borderColor), chipOptions.font && "chip-font_".concat(chipOptions.font), isEditable && 'editable', (showChips || isEditable) && 'chip_visible');
64
65
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFinalFormArrays.FieldArray, {
65
66
  name: name,
67
+ initialValue: formState.initialValues[name],
66
68
  validate: validateFields,
67
69
  children: function children(_ref3) {
68
70
  var fields = _ref3.fields,
@@ -79,8 +81,9 @@ var FormChipCellView = /*#__PURE__*/_react.default.forwardRef(function (_ref, _r
79
81
  className: wrapperClassNames,
80
82
  ref: chipsWrapperRef,
81
83
  children: [fields.map(function (contentItem, index) {
84
+ var _chips$visibleChips;
82
85
  var chipData = fields.value[index];
83
- return index < chips.visibleChips.length && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
86
+ return index < ((_chips$visibleChips = chips.visibleChips) === null || _chips$visibleChips === void 0 ? void 0 : _chips$visibleChips.length) && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
84
87
  className: "chip-block",
85
88
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
86
89
  hidden: editConfig.isEdit,
@@ -166,6 +169,7 @@ FormChipCellView.propTypes = {
166
169
  chipOptions: _types.CHIP_OPTIONS,
167
170
  chips: _propTypes.default.object.isRequired,
168
171
  editConfig: _propTypes.default.object.isRequired,
172
+ formState: _propTypes.default.object.isRequired,
169
173
  handleAddNewChip: _propTypes.default.func.isRequired,
170
174
  handleEditChip: _propTypes.default.func.isRequired,
171
175
  handleRemoveChip: _propTypes.default.func.isRequired,
@@ -22,7 +22,7 @@ var _popout = require("../../images/popout.svg");
22
22
  var _warning = require("../../images/warning.svg");
23
23
  require("./formInput.scss");
24
24
  var _jsxRuntime = require("react/jsx-runtime");
25
- var _excluded = ["async", "className", "customRequiredLabel", "density", "disabled", "focused", "iconClass", "iconClick", "inputIcon", "invalidText", "label", "link", "name", "onBlur", "onChange", "onFocus", "pattern", "required", "suggestionList", "tip", "validationRules", "validator", "withoutBorder"];
25
+ var _excluded = ["async", "className", "customRequiredLabel", "density", "disabled", "focused", "iconClass", "iconClick", "inputIcon", "invalidText", "label", "link", "name", "onBlur", "onChange", "onFocus", "onKeyDown", "pattern", "required", "suggestionList", "tip", "validationRules", "validator", "withoutBorder"];
26
26
  /*
27
27
  Copyright 2022 Iguazio Systems Ltd.
28
28
  Licensed under the Apache License, Version 2.0 (the "License") with
@@ -76,6 +76,7 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
76
76
  onBlur = _ref.onBlur,
77
77
  onChange = _ref.onChange,
78
78
  onFocus = _ref.onFocus,
79
+ onKeyDown = _ref.onKeyDown,
79
80
  pattern = _ref.pattern,
80
81
  required = _ref.required,
81
82
  suggestionList = _ref.suggestionList,
@@ -183,9 +184,13 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
183
184
  };
184
185
  var handleInputFocus = function handleInputFocus(event) {
185
186
  input.onFocus && input.onFocus(event);
186
- onFocus && onFocus();
187
+ onFocus && onFocus(event);
187
188
  setIsFocused(true);
188
189
  };
190
+ var handleInputKeyDown = function handleInputKeyDown(event) {
191
+ input.onKeyDown && input.onKeyDown(event);
192
+ onKeyDown && onKeyDown(event);
193
+ };
189
194
  var handleScroll = function handleScroll(event) {
190
195
  if (inputRef.current && inputRef.current.contains(event.target)) return;
191
196
  if (!event.target.closest('.options-menu') && !event.target.classList.contains('form-field-input')) {
@@ -368,6 +373,7 @@ var FormInput = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
368
373
  }, inputProps), input)), {}, {
369
374
  autoComplete: (_inputProps$autocompl = inputProps.autocomplete) !== null && _inputProps$autocompl !== void 0 ? _inputProps$autocompl : 'off',
370
375
  onBlur: handleInputBlur,
376
+ onKeyDown: handleInputKeyDown,
371
377
  onFocus: handleInputFocus
372
378
  }))
373
379
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
@@ -44,10 +44,11 @@ var FormKeyValueTable = function FormKeyValueTable(_ref) {
44
44
  keyHeader = _ref.keyHeader,
45
45
  keyLabel = _ref.keyLabel,
46
46
  keyOptions = _ref.keyOptions,
47
+ onExitEditModeCallback = _ref.onExitEditModeCallback,
47
48
  valueHeader = _ref.valueHeader,
48
49
  valueLabel = _ref.valueLabel;
49
50
  var tableClassNames = (0, _classnames.default)('form-table form-key-value-table', className);
50
- var _useFormTable = (0, _hooks.useFormTable)(formState, exitEditModeTriggerItem),
51
+ var _useFormTable = (0, _hooks.useFormTable)(formState, exitEditModeTriggerItem, onExitEditModeCallback),
51
52
  addNewRow = _useFormTable.addNewRow,
52
53
  applyChanges = _useFormTable.applyChanges,
53
54
  bottomScrollRef = _useFormTable.bottomScrollRef,
@@ -190,6 +191,7 @@ FormKeyValueTable.defaultProps = {
190
191
  keyHeader: 'Key',
191
192
  keyLabel: 'Key',
192
193
  keyOptions: null,
194
+ onExitEditModeCallback: function onExitEditModeCallback() {},
193
195
  valueHeader: 'Value',
194
196
  valueLabel: 'Value'
195
197
  };
@@ -210,6 +212,7 @@ FormKeyValueTable.propTypes = {
210
212
  label: _propTypes.default.string.isRequired,
211
213
  id: _propTypes.default.string.isRequired
212
214
  })),
215
+ onExitEditModeCallback: _propTypes.default.func,
213
216
  valueHeader: _propTypes.default.string,
214
217
  valueLabel: _propTypes.default.string
215
218
  };
@@ -79,6 +79,9 @@ var FormTextarea = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
79
79
  var formFieldClassNames = (0, _classnames.default)('form-field-textarea', className);
80
80
  var labelClassNames = (0, _classnames.default)('form-field__label', disabled && 'form-field__label-disabled');
81
81
  var textAreaClassNames = (0, _classnames.default)('form-field__wrapper', disabled && 'form-field__wrapper-disabled', isInvalid && 'form-field__wrapper-invalid', withoutBorder && 'without-border');
82
+ (0, _react.useLayoutEffect)(function () {
83
+ setTextAreaCount(input.value.length);
84
+ }, [input.value.length]);
82
85
  (0, _react.useEffect)(function () {
83
86
  if (focused) {
84
87
  textAreaRef.current.focus();
@@ -93,7 +96,6 @@ var FormTextarea = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
93
96
  };
94
97
  var handleInputChange = function handleInputChange(event) {
95
98
  input.onChange(event);
96
- setTextAreaCount(event.target.value.length);
97
99
  onChange && onChange(event.target.value);
98
100
  };
99
101
  var handleInputFocus = function handleInputFocus(event) {
@@ -108,7 +108,7 @@ var Wizard = function Wizard(_ref) {
108
108
  stepIsActive: stepIsActive
109
109
  }) : null;
110
110
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
111
- className: !stepIsActive ? 'wizard-form__hidden-content-item' : '',
111
+ className: !stepIsActive ? 'wizard-form__hidden-content-item' : 'wizard-form__visible-content-item',
112
112
  children: newChild
113
113
  }, idx);
114
114
  });
@@ -26,7 +26,15 @@
26
26
  height: 100%;
27
27
 
28
28
  .wizard-form__hidden-content-item {
29
- display: none;
29
+ position: absolute;
30
+ visibility: hidden;
31
+ height: 0;
32
+ opacity: 0;
33
+ pointer-events: none;
34
+ }
35
+
36
+ .wizard-form__visible-content-item {
37
+ height: 100%;
30
38
  }
31
39
  }
32
40
  }
@@ -37,7 +37,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /*
37
37
  under the Apache 2.0 license is conditioned upon your compliance with
38
38
  such restriction.
39
39
  */
40
- var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
40
+ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem, onExitEditModeCallback) {
41
41
  // `editingItem` should contain the `data` object with all fields that are used in the `formState`.
42
42
  // Properties that aren't used in the `formState` should be placed directly in the `editingItem` object
43
43
  // `editingItem` also has an `ui` property which is used internally in this hook
@@ -63,6 +63,7 @@ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
63
63
  var editingItemErrorsRef = (0, _react.useRef)(null);
64
64
  var formStateRef = (0, _react.useRef)(null);
65
65
  var bottomScrollRef = (0, _react.useRef)(null);
66
+ var onExitEditModeCallbackRef = (0, _react.useRef)(onExitEditModeCallback);
66
67
  (0, _react.useLayoutEffect)(function () {
67
68
  var tableErrors = (0, _lodash.get)(formState === null || formState === void 0 ? void 0 : formState.errors, editingItem === null || editingItem === void 0 ? void 0 : editingItem.ui.fieldsPath, []);
68
69
  editingItemErrorsRef.current = (0, _lodash.get)(tableErrors, editingItem === null || editingItem === void 0 ? void 0 : editingItem.ui.index, null);
@@ -70,40 +71,55 @@ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
70
71
  (0, _react.useLayoutEffect)(function () {
71
72
  formStateRef.current = formState;
72
73
  }, [formState]);
73
- var applyOrDiscardOrDeleteInEffect = (0, _react.useCallback)(function () {
74
- if (editingItemRef !== null && editingItemRef !== void 0 && editingItemRef.current) {
75
- if (!editingItemErrorsRef.current) {
76
- exitEditMode();
77
- } else {
78
- var _editingItemRef$curre, _editingItemRef$curre2;
79
- if ((_editingItemRef$curre = editingItemRef.current) !== null && _editingItemRef$curre !== void 0 && (_editingItemRef$curre2 = _editingItemRef$curre.ui) !== null && _editingItemRef$curre2 !== void 0 && _editingItemRef$curre2.isNew) {
80
- var _editingItemRef$curre3;
81
- var values = (0, _lodash.get)(formStateRef.current.values, (_editingItemRef$curre3 = editingItemRef.current) === null || _editingItemRef$curre3 === void 0 ? void 0 : _editingItemRef$curre3.ui.fieldsPath);
82
- if ((values === null || values === void 0 ? void 0 : values.length) > 1) {
83
- var _editingItemRef$curre4, _editingItemRef$curre5;
84
- formStateRef.current.form.mutators.remove((_editingItemRef$curre4 = editingItemRef.current) === null || _editingItemRef$curre4 === void 0 ? void 0 : _editingItemRef$curre4.ui.fieldsPath, (_editingItemRef$curre5 = editingItemRef.current) === null || _editingItemRef$curre5 === void 0 ? void 0 : _editingItemRef$curre5.ui.index);
74
+ (0, _react.useLayoutEffect)(function () {
75
+ onExitEditModeCallbackRef.current = onExitEditModeCallback;
76
+ }, [onExitEditModeCallback]);
77
+ var exitEditMode = function exitEditMode() {
78
+ var _editingItemRef$curre;
79
+ if ((_editingItemRef$curre = editingItemRef.current) !== null && _editingItemRef$curre !== void 0 && _editingItemRef$curre.data) {
80
+ var _editingItemRef$curre2;
81
+ Object.entries((_editingItemRef$curre2 = editingItemRef.current) === null || _editingItemRef$curre2 === void 0 ? void 0 : _editingItemRef$curre2.data).forEach(function (_ref) {
82
+ var _formStateRef$current, _editingItemRef$curre3, _editingItemRef$curre4;
83
+ var _ref2 = _slicedToArray(_ref, 1),
84
+ fieldName = _ref2[0];
85
+ (_formStateRef$current = formStateRef.current) === null || _formStateRef$current === void 0 ? void 0 : _formStateRef$current.form.mutators.setFieldState("".concat((_editingItemRef$curre3 = editingItemRef.current) === null || _editingItemRef$curre3 === void 0 ? void 0 : _editingItemRef$curre3.ui.fieldsPath, "[").concat((_editingItemRef$curre4 = editingItemRef.current) === null || _editingItemRef$curre4 === void 0 ? void 0 : _editingItemRef$curre4.ui.index, "].data.").concat(fieldName), {
86
+ modified: false
87
+ });
88
+ });
89
+ }
90
+ editingItemRef.current = null;
91
+ setEditingItem(null);
92
+ (onExitEditModeCallbackRef === null || onExitEditModeCallbackRef === void 0 ? void 0 : onExitEditModeCallbackRef.current) && onExitEditModeCallbackRef.current();
93
+ };
94
+ (0, _react.useEffect)(function () {
95
+ var applyOrDiscardOrDeleteInEffect = function applyOrDiscardOrDeleteInEffect() {
96
+ if (editingItemRef !== null && editingItemRef !== void 0 && editingItemRef.current) {
97
+ if (!editingItemErrorsRef.current) {
98
+ exitEditMode();
99
+ } else {
100
+ var _editingItemRef$curre5, _editingItemRef$curre6;
101
+ if ((_editingItemRef$curre5 = editingItemRef.current) !== null && _editingItemRef$curre5 !== void 0 && (_editingItemRef$curre6 = _editingItemRef$curre5.ui) !== null && _editingItemRef$curre6 !== void 0 && _editingItemRef$curre6.isNew) {
102
+ var _editingItemRef$curre7;
103
+ var values = (0, _lodash.get)(formStateRef.current.values, (_editingItemRef$curre7 = editingItemRef.current) === null || _editingItemRef$curre7 === void 0 ? void 0 : _editingItemRef$curre7.ui.fieldsPath);
104
+ if ((values === null || values === void 0 ? void 0 : values.length) > 1) {
105
+ var _editingItemRef$curre8, _editingItemRef$curre9;
106
+ formStateRef.current.form.mutators.remove((_editingItemRef$curre8 = editingItemRef.current) === null || _editingItemRef$curre8 === void 0 ? void 0 : _editingItemRef$curre8.ui.fieldsPath, (_editingItemRef$curre9 = editingItemRef.current) === null || _editingItemRef$curre9 === void 0 ? void 0 : _editingItemRef$curre9.ui.index);
107
+ } else {
108
+ var _editingItemRef$curre10;
109
+ formStateRef.current.form.change((_editingItemRef$curre10 = editingItemRef.current) === null || _editingItemRef$curre10 === void 0 ? void 0 : _editingItemRef$curre10.ui.fieldsPath, []);
110
+ }
85
111
  } else {
86
- var _editingItemRef$curre6;
87
- formStateRef.current.form.change((_editingItemRef$curre6 = editingItemRef.current) === null || _editingItemRef$curre6 === void 0 ? void 0 : _editingItemRef$curre6.ui.fieldsPath, []);
112
+ var _editingItemRef$curre11, _editingItemRef$curre12;
113
+ formStateRef.current.form.mutators.update((_editingItemRef$curre11 = editingItemRef.current) === null || _editingItemRef$curre11 === void 0 ? void 0 : _editingItemRef$curre11.ui.fieldsPath, (_editingItemRef$curre12 = editingItemRef.current) === null || _editingItemRef$curre12 === void 0 ? void 0 : _editingItemRef$curre12.ui.index, (0, _lodash.omit)(editingItemRef.current, ['ui']));
88
114
  }
89
- } else {
90
- var _editingItemRef$curre7, _editingItemRef$curre8;
91
- formStateRef.current.form.mutators.update((_editingItemRef$curre7 = editingItemRef.current) === null || _editingItemRef$curre7 === void 0 ? void 0 : _editingItemRef$curre7.ui.fieldsPath, (_editingItemRef$curre8 = editingItemRef.current) === null || _editingItemRef$curre8 === void 0 ? void 0 : _editingItemRef$curre8.ui.index, (0, _lodash.omit)(editingItemRef.current, ['ui']));
115
+ exitEditMode();
92
116
  }
93
- exitEditMode();
94
117
  }
95
- }
96
- }, []);
97
- (0, _react.useEffect)(function () {
98
- if (editingItemRef !== null && editingItemRef !== void 0 && editingItemRef.current) {
99
- applyOrDiscardOrDeleteInEffect();
100
- }
101
- }, [applyOrDiscardOrDeleteInEffect, exitEditModeTriggerItem]);
102
- (0, _react.useEffect)(function () {
118
+ };
103
119
  return function () {
104
120
  applyOrDiscardOrDeleteInEffect();
105
121
  };
106
- }, [applyOrDiscardOrDeleteInEffect]);
122
+ }, [exitEditModeTriggerItem]);
107
123
  var addNewRow = function addNewRow(event, fields, fieldsPath, newItem) {
108
124
  applyOrDiscardOrDelete(event);
109
125
  formStateRef.current.form.mutators.push(fieldsPath, newItem);
@@ -124,19 +140,19 @@ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
124
140
  var applyChanges = function applyChanges(event, index) {
125
141
  if (editingItemRef.current) {
126
142
  if (!editingItemErrorsRef.current) {
127
- var _editingItemRef$curre9;
128
- if ((_editingItemRef$curre9 = editingItemRef.current) !== null && _editingItemRef$curre9 !== void 0 && _editingItemRef$curre9.ui.isNew) {
143
+ var _editingItemRef$curre13;
144
+ if ((_editingItemRef$curre13 = editingItemRef.current) !== null && _editingItemRef$curre13 !== void 0 && _editingItemRef$curre13.ui.isNew) {
129
145
  scrollIntoView();
130
146
  }
131
147
  exitEditMode();
132
148
  } else {
133
149
  var _editingItemErrorsRef;
134
150
  // Mark all empty fields as `modified` in order to highlight the error if the field is invalid
135
- Object.entries((_editingItemErrorsRef = editingItemErrorsRef.current) === null || _editingItemErrorsRef === void 0 ? void 0 : _editingItemErrorsRef.data).forEach(function (_ref) {
136
- var _formStateRef$current, _editingItemRef$curre10;
137
- var _ref2 = _slicedToArray(_ref, 1),
138
- fieldName = _ref2[0];
139
- (_formStateRef$current = formStateRef.current) === null || _formStateRef$current === void 0 ? void 0 : _formStateRef$current.form.mutators.setFieldState("".concat((_editingItemRef$curre10 = editingItemRef.current) === null || _editingItemRef$curre10 === void 0 ? void 0 : _editingItemRef$curre10.ui.fieldsPath, "[").concat(index, "].data.").concat(fieldName), {
151
+ Object.entries((_editingItemErrorsRef = editingItemErrorsRef.current) === null || _editingItemErrorsRef === void 0 ? void 0 : _editingItemErrorsRef.data).forEach(function (_ref3) {
152
+ var _formStateRef$current2, _editingItemRef$curre14;
153
+ var _ref4 = _slicedToArray(_ref3, 1),
154
+ fieldName = _ref4[0];
155
+ (_formStateRef$current2 = formStateRef.current) === null || _formStateRef$current2 === void 0 ? void 0 : _formStateRef$current2.form.mutators.setFieldState("".concat((_editingItemRef$curre14 = editingItemRef.current) === null || _editingItemRef$curre14 === void 0 ? void 0 : _editingItemRef$curre14.ui.fieldsPath, "[").concat(index, "].data.").concat(fieldName), {
140
156
  modified: true
141
157
  });
142
158
  });
@@ -162,8 +178,8 @@ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
162
178
  event && event.stopPropagation();
163
179
  };
164
180
  var discardOrDelete = function discardOrDelete(event, fieldsPath, index) {
165
- var _editingItemRef$curre11, _editingItemRef$curre12;
166
- if (!editingItemRef.current || (_editingItemRef$curre11 = editingItemRef.current) !== null && _editingItemRef$curre11 !== void 0 && (_editingItemRef$curre12 = _editingItemRef$curre11.ui) !== null && _editingItemRef$curre12 !== void 0 && _editingItemRef$curre12.isNew) {
181
+ var _editingItemRef$curre15, _editingItemRef$curre16;
182
+ if (!editingItemRef.current || (_editingItemRef$curre15 = editingItemRef.current) !== null && _editingItemRef$curre15 !== void 0 && (_editingItemRef$curre16 = _editingItemRef$curre15.ui) !== null && _editingItemRef$curre16 !== void 0 && _editingItemRef$curre16.isNew) {
167
183
  deleteRow(event, fieldsPath, index);
168
184
  } else {
169
185
  discardChanges(event, fieldsPath, index);
@@ -173,11 +189,11 @@ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
173
189
  var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
174
190
  if (editingItemRef !== null && editingItemRef !== void 0 && editingItemRef.current) {
175
191
  if (!editingItemErrorsRef.current) {
176
- var _editingItemRef$curre13;
177
- applyChanges(event, (_editingItemRef$curre13 = editingItemRef.current) === null || _editingItemRef$curre13 === void 0 ? void 0 : _editingItemRef$curre13.ui.index);
192
+ var _editingItemRef$curre17;
193
+ applyChanges(event, (_editingItemRef$curre17 = editingItemRef.current) === null || _editingItemRef$curre17 === void 0 ? void 0 : _editingItemRef$curre17.ui.index);
178
194
  } else {
179
- var _editingItemRef$curre14, _editingItemRef$curre15;
180
- discardOrDelete(event, (_editingItemRef$curre14 = editingItemRef.current) === null || _editingItemRef$curre14 === void 0 ? void 0 : _editingItemRef$curre14.ui.fieldsPath, (_editingItemRef$curre15 = editingItemRef.current) === null || _editingItemRef$curre15 === void 0 ? void 0 : _editingItemRef$curre15.ui.index);
195
+ var _editingItemRef$curre18, _editingItemRef$curre19;
196
+ discardOrDelete(event, (_editingItemRef$curre18 = editingItemRef.current) === null || _editingItemRef$curre18 === void 0 ? void 0 : _editingItemRef$curre18.ui.fieldsPath, (_editingItemRef$curre19 = editingItemRef.current) === null || _editingItemRef$curre19 === void 0 ? void 0 : _editingItemRef$curre19.ui.index);
181
197
  }
182
198
  }
183
199
  };
@@ -197,22 +213,6 @@ var useFormTable = function useFormTable(formState, exitEditModeTriggerItem) {
197
213
  });
198
214
  });
199
215
  };
200
- var exitEditMode = function exitEditMode() {
201
- var _editingItemRef$curre16;
202
- if ((_editingItemRef$curre16 = editingItemRef.current) !== null && _editingItemRef$curre16 !== void 0 && _editingItemRef$curre16.data) {
203
- var _editingItemRef$curre17;
204
- Object.entries((_editingItemRef$curre17 = editingItemRef.current) === null || _editingItemRef$curre17 === void 0 ? void 0 : _editingItemRef$curre17.data).forEach(function (_ref3) {
205
- var _formStateRef$current2, _editingItemRef$curre18, _editingItemRef$curre19;
206
- var _ref4 = _slicedToArray(_ref3, 1),
207
- fieldName = _ref4[0];
208
- (_formStateRef$current2 = formStateRef.current) === null || _formStateRef$current2 === void 0 ? void 0 : _formStateRef$current2.form.mutators.setFieldState("".concat((_editingItemRef$curre18 = editingItemRef.current) === null || _editingItemRef$curre18 === void 0 ? void 0 : _editingItemRef$curre18.ui.fieldsPath, "[").concat((_editingItemRef$curre19 = editingItemRef.current) === null || _editingItemRef$curre19 === void 0 ? void 0 : _editingItemRef$curre19.ui.index, "].data.").concat(fieldName), {
209
- modified: false
210
- });
211
- });
212
- }
213
- editingItemRef.current = null;
214
- setEditingItem(null);
215
- };
216
216
  var scrollIntoView = function scrollIntoView() {
217
217
  if (bottomScrollRef.current) {
218
218
  setTimeout(function () {
@@ -996,6 +996,8 @@
996
996
  width: 100%;
997
997
 
998
998
  &__label {
999
+ display: flex;
1000
+ align-items: center;
999
1001
  margin-bottom: 5px;
1000
1002
  color: $topaz;
1001
1003
  font-size: 12px;
@@ -58,8 +58,7 @@ var convertToLabel = function convertToLabel(chars) {
58
58
  * @param {string} chars - characters to convert
59
59
  * @returns {string} - converted string
60
60
  * @example
61
- * convertToPattern('a-z A-Z - _ *');
62
- * // => 'a-zA-Z\-\_\*'
61
+ * convertToPattern('a-z A-Z - _ *') => 'a-zA-Z\-\_\*'
63
62
  */
64
63
  var convertToPattern = function convertToPattern(chars) {
65
64
  return chars.split(' ').map(function (patternItem) {
@@ -283,22 +282,67 @@ var generateRule = {
283
282
  };
284
283
  }
285
284
  };
285
+ var commonRules = {
286
+ prefixedQualifiedName: [{
287
+ name: 'nameValidCharacters',
288
+ label: "[Name] ".concat(_constants.validation.VALID_CHARACTERS, " : a\u2013z, A\u2013Z, 0\u20139, \u2013, _, ."),
289
+ pattern: /^([^/]+\/)?[\w.-]+$/
290
+ }, {
291
+ name: 'nameBeginEnd',
292
+ label: "[Name] ".concat(_constants.validation.BEGIN_END_WITH, ": a\u2013z, A\u2013Z, 0\u20139"),
293
+ pattern: /^([^/]+\/)?([A-Za-z0-9][^/]*)?[A-Za-z0-9]$/
294
+ }, {
295
+ name: 'nameMaxLength',
296
+ label: '[Name] Max length - 63 characters',
297
+ pattern: /^([^/]+\/)?[^/]{1,63}$/
298
+ }, {
299
+ name: 'prefixValidCharacters',
300
+ label: "[Prefix] ".concat(_constants.validation.VALID_CHARACTERS, ": a\u2013z, 0\u20139, \u2013, ."),
301
+ pattern: /^([a-z0-9.-]+\/)?[^/]+$/
302
+ }, {
303
+ name: 'prefixBeginEnd',
304
+ label: "[Prefix] ".concat(_constants.validation.BEGIN_END_WITH, ": a\u2013z, 0\u20139"),
305
+ pattern: /^([a-z0-9]([^/]*[a-z0-9])?\/)?[^/]+$/
306
+ }, {
307
+ name: 'prefixMaxLength',
308
+ label: '[Prefix] Max length - 253 characters',
309
+ pattern: /^(?![^/]{254,}\/)/
310
+ }],
311
+ k8sLabels: {
312
+ value: [{
313
+ name: 'valueBeginEnd',
314
+ label: "[Value] ".concat(_constants.validation.BEGIN_END_WITH, " : a\u2013z, A\u2013Z, 0\u20139"),
315
+ pattern: /^([^/]+\/)?([A-Za-z0-9][^/]*)?[A-Za-z0-9]$/
316
+ }, {
317
+ name: 'valueMaxLength',
318
+ label: '[Value] Max length - 63 characters',
319
+ pattern: /^([^/]+\/)?[^/]{1,63}$/
320
+ }, {
321
+ name: 'valueValidCharacters',
322
+ label: "[Value] ".concat(_constants.validation.VALID_CHARACTERS, ": a\u2013z, A\u2013Z, 0\u20139, \u2013, _, ."),
323
+ pattern: /^[a-zA-Z0-9\-_.]+$/
324
+ }]
325
+ }
326
+ // email: [
327
+ // generateRule.beginEndNotWith('@ .'),
328
+ // {
329
+ // name: 'exactlyOne',
330
+ // label: ValidationConstants.MUST_CONTAIN_EXACTLY_ONE + ': @',
331
+ // pattern: /^[^@]+@[^@]+$/
332
+ // },
333
+ // {
334
+ // name: 'dotAfterAt',
335
+ // label: ValidationConstants.MUST_HAVE_DOT_AFTER_AT,
336
+ // pattern: /@.+\..+$/
337
+ // }
338
+ // ]
339
+ };
286
340
 
287
- //const commonRules = {
288
- // email: [
289
- // generateRule.beginEndNotWith('@ .'),
290
- // {
291
- // name: 'exactlyOne',
292
- // label: ValidationConstants.MUST_CONTAIN_EXACTLY_ONE + ': @',
293
- // pattern: /^[^@]+@[^@]+$/
294
- // },
295
- // {
296
- // name: 'dotAfterAt',
297
- // label: ValidationConstants.MUST_HAVE_DOT_AFTER_AT,
298
- // pattern: /@.+\..+$/
299
- // }
300
- // ]
301
- //}
341
+ commonRules.k8sLabels.key = commonRules.prefixedQualifiedName.concat({
342
+ name: 'prefixNotStart',
343
+ label: "[Prefix] Must not start with 'kubernetes.io', 'k8s.io'",
344
+ pattern: /^(?!kubernetes\.io\/)(?!k8s\.io\/)/
345
+ });
302
346
  var validationRules = {
303
347
  artifact: {
304
348
  name: [generateRule.validCharacters('a-z A-Z 0-9 - _ .'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.length({
@@ -334,7 +378,11 @@ var validationRules = {
334
378
  project: {
335
379
  name: [generateRule.validCharacters('a-z 0-9 -'), generateRule.beginWith('a-z'), generateRule.endWith('a-z 0-9'), generateRule.length({
336
380
  max: 63
337
- }), generateRule.required()]
381
+ }), generateRule.required()],
382
+ labels: {
383
+ key: commonRules.k8sLabels.key,
384
+ value: commonRules.k8sLabels.value
385
+ }
338
386
  },
339
387
  environmentVariables: {
340
388
  secretName: [generateRule.validCharacters('a-z A-Z 0-9 - _ .'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.noConsecutiveCharacters('.., .–, –.'), generateRule.maxLengthBetweenDelimiters(/[\.\-\_]/, 63, 'periods'), generateRule.length({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iguazio.dashboard-react-controls",
3
- "version": "1.8.9",
3
+ "version": "1.8.10",
4
4
  "description": "Collection of resources (such as CSS styles, fonts and images) and ReactJS 17.x components to share among different Iguazio React repos.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",