intelicoreact 1.3.5 → 1.3.7

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.
@@ -98,6 +98,11 @@ var InputDateRange = function InputDateRange(props) {
98
98
  var ref = !isUseAbs ? (0, _dependencies.useClickOutside)(toggleOff, dropdownContainers) : (0, _react.useRef)(null);
99
99
  var internalContainerRef = (0, _react.useRef)(null);
100
100
 
101
+ var _useState5 = (0, _react.useState)(Math.random().toString(16).slice(2)),
102
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
103
+ dateRangeContainerId = _useState6[0],
104
+ setDateRangeContainerId = _useState6[1];
105
+
101
106
  var handleChange = function handleChange(input) {
102
107
  var newValue = (0, _dependencies.getActualDateRange)(input);
103
108
 
@@ -185,6 +190,34 @@ var InputDateRange = function InputDateRange(props) {
185
190
  toggleOff();
186
191
  };
187
192
 
193
+ var getParentNode = function getParentNode() {
194
+ var _document$querySelect;
195
+
196
+ return (_document$querySelect = document.querySelector('div#root')) !== null && _document$querySelect !== void 0 ? _document$querySelect : document.querySelector('div#app');
197
+ };
198
+
199
+ var initDateRangeContainer = function initDateRangeContainer() {
200
+ var _document$getElementB;
201
+
202
+ (_document$getElementB = document.getElementById(dateRangeContainerId)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.remove();
203
+ var dateRangeContainer = document.createElement('div');
204
+ dateRangeContainer.setAttribute('id', dateRangeContainerId);
205
+ dateRangeContainer.classList.add('input-date-range__mobile-container');
206
+ getParentNode().append(dateRangeContainer);
207
+ };
208
+
209
+ var getDateRangeContainer = function getDateRangeContainer() {
210
+ return document.getElementById(dateRangeContainerId);
211
+ };
212
+
213
+ (0, _react.useLayoutEffect)(function () {
214
+ initDateRangeContainer();
215
+ return function () {
216
+ var _getDateRangeContaine;
217
+
218
+ (_getDateRangeContaine = getDateRangeContainer()) === null || _getDateRangeContaine === void 0 ? void 0 : _getDateRangeContaine.remove();
219
+ };
220
+ }, []);
188
221
  return /*#__PURE__*/_react.default.createElement("div", {
189
222
  ref: internalContainerRef,
190
223
  className: (0, _classnames.default)('date-range-input', className, {
@@ -244,6 +277,7 @@ var InputDateRange = function InputDateRange(props) {
244
277
  disabled: disabled || (actualValues === null || actualValues === void 0 ? void 0 : actualValues.intervalKey) === _dependencies.ALL_TIME_KEY || !isDontLimitFuture && (formatedMaxDate ? (0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).endOf('day').subtract((0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).diff(actualValues === null || actualValues === void 0 ? void 0 : actualValues.start, 'hours'), 'hours').isAfter(momentMaxDate.startOf('day')) : (0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).add((0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).diff(actualValues === null || actualValues === void 0 ? void 0 : actualValues.start, 'hours'), 'hours').isAfter((0, _momentTimezone.default)().add(1, 'day').startOf('day'))),
245
278
  isAlt: isAltArrows
246
279
  }))), isToggled && !isUseAbs && /*#__PURE__*/_react.default.createElement(_OpenedPart.default, (0, _extends2.default)({}, props, {
280
+ dateRangeContainerId: dateRangeContainerId,
247
281
  mainId: id,
248
282
  testId: testId,
249
283
  ref: internalContainerRef,
@@ -17,6 +17,8 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
17
17
 
18
18
  var _react = _interopRequireWildcard(require("react"));
19
19
 
20
+ var _reactDom = require("react-dom");
21
+
20
22
  var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
21
23
 
22
24
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -48,7 +50,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
48
50
  var classNames = require('classnames');
49
51
 
50
52
  var OpenedPart = function OpenedPart(props, ref) {
51
- var txt = props.txt,
53
+ var dateRangeContainerId = props.dateRangeContainerId,
54
+ txt = props.txt,
52
55
  buttonsTypes = props.buttonsTypes,
53
56
  actualValues = props.actualValues,
54
57
  _props$onChange = props.onChange,
@@ -253,7 +256,17 @@ var OpenedPart = function OpenedPart(props, ref) {
253
256
  }), renderDatepicker());
254
257
  };
255
258
 
256
- return withMobileLogic && isMobile ? renderMobileOpenedPart() : renderOpenedPart();
259
+ var getDateRangeContainer = function getDateRangeContainer() {
260
+ return document.getElementById(dateRangeContainerId);
261
+ };
262
+
263
+ var renderDateRangeMobileContainer = function renderDateRangeMobileContainer() {
264
+ var dateRangeContainer = getDateRangeContainer();
265
+ if (!dateRangeContainer) return null;
266
+ return /*#__PURE__*/(0, _reactDom.createPortal)(renderMobileOpenedPart(), dateRangeContainer);
267
+ };
268
+
269
+ return withMobileLogic && isMobile ? renderDateRangeMobileContainer() : renderOpenedPart();
257
270
  };
258
271
 
259
272
  var _default = /*#__PURE__*/_react.default.forwardRef(OpenedPart);
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
6
6
 
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
@@ -13,27 +13,55 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
13
13
 
14
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
16
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
17
+
16
18
  var _react = _interopRequireWildcard(require("react"));
17
19
 
18
20
  var _reactFeather = require("react-feather");
19
21
 
20
22
  var _classnames = _interopRequireDefault(require("classnames"));
21
23
 
24
+ var _utils = require("../../Functions/utils");
25
+
22
26
  var _useIsMobile2 = _interopRequireDefault(require("../../Functions/useIsMobile"));
23
27
 
24
28
  var _Input = _interopRequireDefault(require("../../Atomic/FormElements/Input/Input"));
25
29
 
26
30
  var _Hint = _interopRequireDefault(require("../../Atomic/UI/Hint/Hint"));
27
31
 
32
+ var _Spinner = _interopRequireDefault(require("../../Atomic/Layout/Spinner/Spinner"));
33
+
28
34
  require("./InputAddress.scss");
29
35
 
30
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
37
 
32
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
38
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
39
 
34
- var throttleTimeout = null;
35
40
  var DEFAULT_HINT_MESSAGE = 'Select the correct address from the list of suggestions (must contains house number and street name)';
36
- var RC = "input-address";
41
+ var RC = "input-address"; // ? Если равны - true
42
+
43
+ var compareValues = function compareValues(val1, val2) {
44
+ return (0, _typeof2.default)(val1) === (0, _typeof2.default)(val2) && ((0, _utils.getIsOnlyAnObject)(val1) ? (0, _utils.compare)(val1, val2) : val1 === val2);
45
+ };
46
+
47
+ var throttle = function throttle(fn, ms) {
48
+ var id = null;
49
+ return function () {
50
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
51
+ args[_key] = arguments[_key];
52
+ }
53
+
54
+ if (id) clearTimeout(id);
55
+ id = setTimeout(function () {
56
+ fn.apply(void 0, args);
57
+ }, ms);
58
+ };
59
+ }; // Отдает true если value валидное НЕ нулевое число
60
+
61
+
62
+ var getIsValidNumber = function getIsValidNumber(value) {
63
+ return !!value && typeof value === 'number' && !Number.isNaN(value);
64
+ };
37
65
 
38
66
  var InputAddress = function InputAddress(_ref) {
39
67
  var label = _ref.label,
@@ -48,7 +76,9 @@ var InputAddress = function InputAddress(_ref) {
48
76
  _ref$testId = _ref.testId,
49
77
  testId = _ref$testId === void 0 ? '' : _ref$testId,
50
78
  _ref$throttle = _ref.throttle,
51
- throttle = _ref$throttle === void 0 ? 300 : _ref$throttle,
79
+ throttleTime = _ref$throttle === void 0 ? 500 : _ref$throttle,
80
+ _ref$additionalThrott = _ref.additionalThrottleTimeForListingRequest,
81
+ additionalThrottleTimeForListingRequest = _ref$additionalThrott === void 0 ? 0 : _ref$additionalThrott,
52
82
  _ref$loader = _ref.loader,
53
83
  loader = _ref$loader === void 0 ? '' : _ref$loader,
54
84
  _ref$noItemsMessage = _ref.noItemsMessage,
@@ -59,8 +89,10 @@ var InputAddress = function InputAddress(_ref) {
59
89
  _ref$onChange = _ref.onChange,
60
90
  onChange = _ref$onChange === void 0 ? function () {} : _ref$onChange,
61
91
  onChangeValueTransformer = _ref.onChangeValueTransformer,
92
+ disabled = _ref.disabled,
62
93
  _ref$getListItems = _ref.getListItems,
63
94
  getListItems = _ref$getListItems === void 0 ? function () {} : _ref$getListItems,
95
+ clarifyAddressInfo = _ref.clarifyAddressInfo,
64
96
  _ref$noValidate = _ref.noValidate,
65
97
  noValidate = _ref$noValidate === void 0 ? false : _ref$noValidate,
66
98
  renderSelectedItem = _ref.renderSelectedItem,
@@ -76,6 +108,7 @@ var InputAddress = function InputAddress(_ref) {
76
108
  var listOverlayRef = (0, _react.useRef)(null);
77
109
  var listWrapperRef = (0, _react.useRef)(null);
78
110
  var listHeaderRef = (0, _react.useRef)(null);
111
+ var previousValueRef = (0, _react.useRef)(value);
79
112
 
80
113
  var _useState = (0, _react.useState)(false),
81
114
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -97,15 +130,15 @@ var InputAddress = function InputAddress(_ref) {
97
130
  scrollHeight = _useState8[0],
98
131
  setScrollHeight = _useState8[1];
99
132
 
100
- var _useState9 = (0, _react.useState)(null),
133
+ var _useState9 = (0, _react.useState)(value),
101
134
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
102
- query = _useState10[0],
103
- setQuery = _useState10[1];
135
+ innerValue = _useState10[0],
136
+ setInnerValue = _useState10[1];
104
137
 
105
138
  var _useState11 = (0, _react.useState)(null),
106
139
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
107
- tempQuery = _useState12[0],
108
- setTempQuery = _useState12[1];
140
+ tempInnerValue = _useState12[0],
141
+ setTempInnerValue = _useState12[1];
109
142
 
110
143
  var _useState13 = (0, _react.useState)(null),
111
144
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
@@ -122,55 +155,78 @@ var InputAddress = function InputAddress(_ref) {
122
155
  isLoading = _useState18[0],
123
156
  setIsLoading = _useState18[1];
124
157
 
125
- var _useState19 = (0, _react.useState)(null),
158
+ var _useState19 = (0, _react.useState)(false),
126
159
  _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
127
- hightlightedIndex = _useState20[0],
128
- setHightlightedIndex = _useState20[1];
160
+ isListLoading = _useState20[0],
161
+ setIsListLoading = _useState20[1];
129
162
 
130
- var _useState21 = (0, _react.useState)(false),
163
+ var _useState21 = (0, _react.useState)(null),
131
164
  _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
132
- isFocused = _useState22[0],
133
- setIsFocused = _useState22[1];
165
+ hightlightedIndex = _useState22[0],
166
+ setHightlightedIndex = _useState22[1];
134
167
 
135
168
  var _useState23 = (0, _react.useState)(false),
136
169
  _useState24 = (0, _slicedToArray2.default)(_useState23, 2),
137
- isListVisible = _useState24[0],
138
- setIsListVisible = _useState24[1];
170
+ isFocused = _useState24[0],
171
+ setIsFocused = _useState24[1];
172
+
173
+ var _useState25 = (0, _react.useState)(false),
174
+ _useState26 = (0, _slicedToArray2.default)(_useState25, 2),
175
+ isListVisible = _useState26[0],
176
+ setIsListVisible = _useState26[1];
139
177
 
140
178
  var isWrongAddress = (0, _react.useMemo)(function () {
141
- var _query$street;
179
+ var _innerValue$street;
142
180
 
143
181
  if (noValidate) return false;
144
- if (query === '') return false; // eslint-disable-next-line no-prototype-builtins
182
+ if (innerValue === '') return false; // eslint-disable-next-line no-prototype-builtins
145
183
 
146
- if (!(query !== null && query !== void 0 && query.hasOwnProperty('streetNumber')) || !(query !== null && query !== void 0 && query.streetNumber)) return true; // eslint-disable-next-line no-prototype-builtins
184
+ if (!(innerValue !== null && innerValue !== void 0 && innerValue.hasOwnProperty('streetNumber')) || !(innerValue !== null && innerValue !== void 0 && innerValue.streetNumber)) return true; // eslint-disable-next-line no-prototype-builtins
147
185
 
148
- if (!(query !== null && query !== void 0 && query.hasOwnProperty('street')) || !(query !== null && query !== void 0 && (_query$street = query.street) !== null && _query$street !== void 0 && _query$street.fullName)) return true;
186
+ if (!(innerValue !== null && innerValue !== void 0 && innerValue.hasOwnProperty('street')) || !(innerValue !== null && innerValue !== void 0 && (_innerValue$street = innerValue.street) !== null && _innerValue$street !== void 0 && _innerValue$street.fullName)) return true;
149
187
  return false;
150
- }, [query]);
188
+ }, [innerValue]);
189
+
190
+ var setItemAsInnerValue = function setItemAsInnerValue(e, item) {
191
+ if (e instanceof Event) {
192
+ e.preventDefault();
193
+ e.stopPropagation();
194
+ }
151
195
 
152
- var setQueryAsItem = function setQueryAsItem(e, item) {
153
- if (e) e === null || e === void 0 ? void 0 : e.stopPropagation();
154
196
  setTimeout(function () {
155
- setQuery(item);
197
+ setInnerValue(item);
156
198
 
157
199
  if (isMobile) {
158
200
  setIsListVisible(false);
159
201
  }
160
- }, 1);
161
- };
202
+ }, 0);
203
+ }; // ? Базовый метод получения списка вариантов адреса
204
+
162
205
 
163
- var getData = function getData() {
164
- if (!(query !== null && query !== void 0 && query.length)) return null;
165
- clearTimeout(throttleTimeout);
166
- throttleTimeout = setTimeout(function () {
206
+ var getAddressVariants = (0, _react.useMemo)(function () {
207
+ return function (innerValue) {
167
208
  var _getListItems;
168
209
 
169
- setIsLoading(true);
170
- (_getListItems = getListItems(query)) === null || _getListItems === void 0 ? void 0 : _getListItems.then(setListItems).finally(function () {
171
- return setIsLoading(false);
210
+ return (_getListItems = getListItems(innerValue)) === null || _getListItems === void 0 ? void 0 : _getListItems.then(setListItems).finally(function () {
211
+ return setIsListLoading(false);
172
212
  });
173
- }, throttle);
213
+ };
214
+ }, [getListItems]); // ? Метод получения списка вариантов адреса с тротлингом (основным и, если нужно, дополнительным)
215
+ // ? Без useMemo работать НЕ будет (т.к. на каждом перерендере будет создаваться новая ф-я и будет теряться замкнутая переменная id из throttle)
216
+
217
+ var getAddressVariantsWithThrottling = (0, _react.useMemo)(function () {
218
+ var execute = getIsValidNumber(additionalThrottleTimeForListingRequest) ? throttle(getAddressVariants, additionalThrottleTimeForListingRequest) : getAddressVariants;
219
+ return getIsValidNumber(throttleTime) ? throttle(execute, throttleTime) : execute;
220
+ }, [getAddressVariants, additionalThrottleTimeForListingRequest, throttleTime]); // ? Итоговый "получатель" списка вариантов адресов
221
+
222
+ var getAddressVariantsList = function getAddressVariantsList() {
223
+ if (!(innerValue !== null && innerValue !== void 0 && innerValue.length)) return null; // ? Вообще с учетом надпись "Loading" в списке вариантов включается в этом месте (т.е. сразу при начале набора),
224
+ // ? то, наверное, можно было НЕ мутить с дополнительным тротлингом )).
225
+ // ? Наверное, можно было увеличить время первичного тротлинга и, наверное, работало бы так же ))
226
+ // ? НО, раз уже сделал )) оставлю, может будет в будущем полезно )
227
+
228
+ setIsListLoading(true);
229
+ getAddressVariantsWithThrottling(innerValue);
174
230
  };
175
231
 
176
232
  var onClearClick = function onClearClick(e) {
@@ -183,11 +239,11 @@ var InputAddress = function InputAddress(_ref) {
183
239
  setIsListVisible(false);
184
240
  }
185
241
 
186
- setQuery('');
242
+ setInnerValue('');
187
243
  inputRef === null || inputRef === void 0 ? void 0 : (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
188
244
  setTimeout(function () {
189
245
  return setIsFocused(true);
190
- }, 50);
246
+ }, 0);
191
247
  };
192
248
 
193
249
  var onOverlayClick = function onOverlayClick(e) {
@@ -195,8 +251,8 @@ var InputAddress = function InputAddress(_ref) {
195
251
  e.stopPropagation();
196
252
  e.preventDefault();
197
253
  setIsListVisible(false);
198
- setQuery(tempQuery);
199
- onChange(typeof query === 'string' || !onChangeValueTransformer || typeof onChangeValueTransformer !== 'function' ? query : onChangeValueTransformer(query));
254
+ setInnerValue(tempInnerValue);
255
+ onChange(typeof innerValue === 'string' || !onChangeValueTransformer || typeof onChangeValueTransformer !== 'function' ? innerValue : onChangeValueTransformer(innerValue));
200
256
  }
201
257
  };
202
258
 
@@ -207,7 +263,7 @@ var InputAddress = function InputAddress(_ref) {
207
263
  var _inputRef$current2;
208
264
 
209
265
  // Enter Controller
210
- setQueryAsItem(null, listItems[hightlightedIndex]);
266
+ setItemAsInnerValue(null, listItems[hightlightedIndex]);
211
267
  setHightlightedIndex(null);
212
268
  inputRef === null || inputRef === void 0 ? void 0 : (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.blur();
213
269
  } else {
@@ -267,23 +323,20 @@ var InputAddress = function InputAddress(_ref) {
267
323
  }
268
324
  };
269
325
 
270
- var onChangeInternal = function onChangeInternal(value) {
271
- setQuery(value);
272
- };
273
-
274
326
  var getHintMessage = function getHintMessage() {
275
327
  if (!renderHintMessage || typeof renderHintMessage !== 'function') return DEFAULT_HINT_MESSAGE;
276
- return renderHintMessage(query);
328
+ return renderHintMessage(innerValue);
277
329
  };
278
330
 
279
331
  var getSelectedItemLabel = function getSelectedItemLabel() {
280
332
  var _value$street;
281
333
 
282
- var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : query;
283
- if (value === null) return '';
334
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : innerValue;
335
+ if (!value) return '';
284
336
  if (typeof value === 'string') return value;
285
- if (!renderSelectedItem || typeof renderSelectedItem !== 'function') return "".concat((value === null || value === void 0 ? void 0 : value.streetNumber) || '', " ").concat((value === null || value === void 0 ? void 0 : (_value$street = value.street) === null || _value$street === void 0 ? void 0 : _value$street.fullName) || '');
286
- return renderSelectedItem(value);
337
+ if (typeof renderSelectedItem === 'function') renderSelectedItem(value);
338
+ var label = "".concat((value === null || value === void 0 ? void 0 : value.streetNumber) || '', " ").concat((value === null || value === void 0 ? void 0 : (_value$street = value.street) === null || _value$street === void 0 ? void 0 : _value$street.fullName) || '').trim();
339
+ return !label && isLoading ? previousValueRef.current : label;
287
340
  };
288
341
 
289
342
  var getListItemLabel = function getListItemLabel(item) {
@@ -308,23 +361,63 @@ var InputAddress = function InputAddress(_ref) {
308
361
  if (listRef.current) {
309
362
  listRef.current.style.maxHeight = "initial";
310
363
  }
311
- };
364
+ }; // ? Основной блок работы со значениями адреса
365
+ // ? Не меняйте вызовы setInnerValue и onChange не разобравшись в логике вызовов
312
366
 
313
- var preparedValue = (0, _react.useMemo)(function () {
314
- if (!value) return '';
315
- if (typeof value === 'string') return value === null || value === void 0 ? void 0 : value.trim();
316
- return value;
317
- }, [value]);
318
- (0, _react.useEffect)(function () {
319
- if (isFocused && query !== '') {
320
- setIsListVisible(true);
321
- getData();
322
- }
323
367
 
324
- if (JSON.stringify(preparedValue) !== JSON.stringify(query) && query !== null) {
325
- onChange(typeof query === 'string' || !onChangeValueTransformer || typeof onChangeValueTransformer !== 'function' ? query : onChangeValueTransformer(query));
368
+ (0, _react.useEffect)(function () {
369
+ // ? Исключение инициализации - равны только при первом рендере компонента,
370
+ // ? т.к. рефка и стейт инициализируются верхним value
371
+ if (!compareValues(innerValue, previousValueRef.current)) {
372
+ var isObject = (0, _utils.getIsOnlyAnObject)(innerValue); // ? innerValue меняется либо от ручного ввода, либо от выбора из списка
373
+ // ? Полная информация или нет - напрямую зависит от ответа getListItems
374
+
375
+ var isFullInfo = isObject && 'streetNumber' in innerValue && 'street' in innerValue && 'city' in innerValue && 'state' in innerValue && 'country' in innerValue && 'zipCode' in innerValue; // ? Для старого эндпоинта возвращается список с полной информацией, поэтому на проектах ничего не поменяется,
376
+ // ? если не менять запросник (getListItems), все будет проходить по этой if-ке или по 3-й (для строчных значений)
377
+
378
+ if (isFullInfo) {
379
+ onChange(innerValue);
380
+ setIsLoading(false);
381
+ } // ? Неполная информация может быть только в том случае, когда метод getListItems использует уже новый эндпоинт гугл-апи.
382
+ // ? Предполагается, что при этом в компонент будет прокинута ф-я "уточнятель" (clarifyAddressInfo)
383
+
384
+
385
+ if (isObject && !isFullInfo) {
386
+ if (typeof clarifyAddressInfo === 'function') {
387
+ var _clarifyAddressInfo, _clarifyAddressInfo$t;
388
+
389
+ setIsLoading(true); // ? Предполагается, что clarifyAddressInfo - асинхронная ф-я, запросник уточнения опции
390
+ // ? Никаких await-ов НЕ нужно (тем более что в useEffect и нельзя для нового React),
391
+ // ? промис "выплюнется в пустоту", но НЕ будет отчищен до резолва, а useEffect (и итерация рендера в целом) при этом будет закончен(а)
392
+
393
+ (_clarifyAddressInfo = clarifyAddressInfo(innerValue)) === null || _clarifyAddressInfo === void 0 ? void 0 : (_clarifyAddressInfo$t = _clarifyAddressInfo.then) === null || _clarifyAddressInfo$t === void 0 ? void 0 : _clarifyAddressInfo$t.call(_clarifyAddressInfo, function (res) {
394
+ if (res) setInnerValue(res);else {
395
+ setInnerValue(previousValueRef.current);
396
+ setTimeout(function () {
397
+ inputRef.current.focus();
398
+ inputRef.current.setSelectionRange(previousValueRef.current.length, previousValueRef.current.length);
399
+ }, 0);
400
+ }
401
+ setIsLoading(false);
402
+ return res;
403
+ });
404
+ } // ! Если сверху поменяли эндпоинт и он выдает "облегченный листинг" (айтемы с неполной инфой),
405
+ // ! и НЕ пробросили clarifyAddressInfo, то на этом кейсе велью инпута будет просто зануляться
406
+ // ! (getSelectedItemLabel вернет пустую строку если вкинуть innerValue без всей инфы)
407
+ else setInnerValue(getSelectedItemLabel(innerValue));
408
+ } // ? Кейс для строчных значений
409
+
410
+
411
+ if (!isObject) {
412
+ // ? Вызываем верхний onChange если innerValue есть или если нету, но это не после логики уточнения
413
+ if (innerValue || !isLoading) onChange(innerValue); // ? Если innerValue есть и еще не открыт листинг - открываем
414
+
415
+ if (innerValue && !isListVisible) setIsListVisible(true); // ? Если инпут сфокусирован и значение есть - запрашиваем список вариантов
416
+
417
+ if (isFocused && !!innerValue) getAddressVariantsList();
418
+ }
326
419
  }
327
- }, [query]);
420
+ }, [innerValue]);
328
421
  (0, _react.useEffect)(function () {
329
422
  if (!isFocused && !isMobile) {
330
423
  setIsListVisible(false);
@@ -338,29 +431,27 @@ var InputAddress = function InputAddress(_ref) {
338
431
  }
339
432
 
340
433
  if (isMobile && isListVisible) {
341
- setTempQuery(query);
434
+ setTempInnerValue(innerValue);
342
435
  setListHeight();
343
436
  }
344
437
  }, [isListVisible]);
345
438
  (0, _react.useEffect)(function () {
346
- if (JSON.stringify(preparedValue) !== JSON.stringify(query) || !isValueInited) {
347
- setTimeout(function () {
348
- setQuery(preparedValue);
349
- setIsValueInited(true);
350
- }, 1);
351
- }
352
- }, [preparedValue]);
439
+ // ? учет изменения value сверху (верхние переназначения велью)
440
+ if (!compareValues(value, innerValue)) setInnerValue(value); // ? useEffect должен быть последним, т.к. рефка меняется в рамках текущей итерации
441
+
442
+ previousValueRef.current = value;
443
+ }, [value]);
353
444
 
354
445
  var renderSearchableInput = function renderSearchableInput() {
355
- var value = getSelectedItemLabel();
446
+ var inputValue = getSelectedItemLabel();
356
447
  return /*#__PURE__*/_react.default.createElement("div", {
357
448
  className: (0, _classnames.default)('input-address__input-wrapper')
358
449
  }, /*#__PURE__*/_react.default.createElement(_Input.default, {
359
450
  ref: inputRef,
360
451
  testId: "inputAddress--input--key-".concat(testId || fieldKey),
361
452
  className: (0, _classnames.default)('input-address__input', className),
362
- value: value,
363
- onChange: onChangeInternal,
453
+ value: inputValue,
454
+ onChange: setInnerValue,
364
455
  onFocus: function onFocus(e) {
365
456
  setIsFocused(true);
366
457
  },
@@ -388,14 +479,14 @@ var InputAddress = function InputAddress(_ref) {
388
479
  };
389
480
 
390
481
  var renderInput = function renderInput() {
391
- var value = getSelectedItemLabel(isListVisible ? tempQuery : query);
482
+ var inputValue = getSelectedItemLabel(isListVisible ? tempInnerValue : innerValue);
392
483
  return /*#__PURE__*/_react.default.createElement("div", {
393
484
  className: (0, _classnames.default)('input-address__input-wrapper')
394
485
  }, /*#__PURE__*/_react.default.createElement(_Input.default, {
395
486
  testId: "inputAddress--input--key-".concat(testId || fieldKey),
396
487
  className: (0, _classnames.default)('input-address__input', className),
397
- value: value,
398
- onChange: onChangeInternal,
488
+ value: inputValue,
489
+ onChange: setInnerValue,
399
490
  onFocus: function onFocus(e) {
400
491
  var _e$target;
401
492
 
@@ -424,7 +515,7 @@ var InputAddress = function InputAddress(_ref) {
424
515
  'input-address__list--item-hightlighted': i === hightlightedIndex
425
516
  }),
426
517
  onMouseDown: function onMouseDown(e) {
427
- return setQueryAsItem(e, item);
518
+ return setItemAsInnerValue(e, item);
428
519
  }
429
520
  }, getListItemLabel(item));
430
521
  };
@@ -434,7 +525,7 @@ var InputAddress = function InputAddress(_ref) {
434
525
  key: "input-address__list-item--custom",
435
526
  className: (0, _classnames.default)('input-address__list--item', 'input-address__list--item-custom'),
436
527
  onMouseDown: function onMouseDown(e) {
437
- return setQueryAsItem(e, getSelectedItemLabel());
528
+ return setItemAsInnerValue(e, getSelectedItemLabel());
438
529
  }
439
530
  }, getSelectedItemLabel(), /*#__PURE__*/_react.default.createElement(_reactFeather.AlertTriangle, null), /*#__PURE__*/_react.default.createElement("span", null, "Choose this only if your address is not listed below"));
440
531
  };
@@ -442,7 +533,7 @@ var InputAddress = function InputAddress(_ref) {
442
533
  var renderNoItems = function renderNoItems() {
443
534
  return /*#__PURE__*/_react.default.createElement("div", {
444
535
  className: "input-address__list--no-items"
445
- }, isMobile && !(query !== null && query !== void 0 && query.length) ? 'Please begin entering your address' : noItemsMessage || 'No Items');
536
+ }, isMobile && !(innerValue !== null && innerValue !== void 0 && innerValue.length) ? 'Please begin entering your address' : noItemsMessage || 'No Items');
446
537
  };
447
538
 
448
539
  var renderListDesktop = function renderListDesktop() {
@@ -452,7 +543,7 @@ var InputAddress = function InputAddress(_ref) {
452
543
  }, /*#__PURE__*/_react.default.createElement("div", {
453
544
  className: "input-address__list",
454
545
  ref: listRef
455
- }, isLoading ? renderLoader() : listItems !== null && listItems !== void 0 && listItems.length ? listItems === null || listItems === void 0 ? void 0 : listItems.map(renderListItem) : renderNoItems()));
546
+ }, isListLoading ? renderLoader() : listItems !== null && listItems !== void 0 && listItems.length ? listItems === null || listItems === void 0 ? void 0 : listItems.map(renderListItem) : renderNoItems()));
456
547
  };
457
548
 
458
549
  var renderListMobile = function renderListMobile() {
@@ -486,7 +577,7 @@ var InputAddress = function InputAddress(_ref) {
486
577
  }, renderSearchableInput())), /*#__PURE__*/_react.default.createElement("div", {
487
578
  className: "input-address__list",
488
579
  ref: listRef
489
- }, isLoading ? renderLoader() : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, getSelectedItemLabel() && renderListItemCustom(), listItems === null || listItems === void 0 ? void 0 : listItems.map(renderListItem), !(listItems !== null && listItems !== void 0 && listItems.length) && !getSelectedItemLabel() && renderNoItems()))));
580
+ }, isListLoading ? renderLoader() : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, getSelectedItemLabel() && renderListItemCustom(), listItems === null || listItems === void 0 ? void 0 : listItems.map(renderListItem), !(listItems !== null && listItems !== void 0 && listItems.length) && !getSelectedItemLabel() && renderNoItems()))));
490
581
  };
491
582
 
492
583
  return isMobile ? renderListMobile() : renderListDesktop();
@@ -496,7 +587,9 @@ var InputAddress = function InputAddress(_ref) {
496
587
  className: (0, _classnames.default)('input-address', {
497
588
  'input-address--error': error || isWrongAddress && !isFocused
498
589
  })
499
- }, isMobile ? renderInput() : renderSearchableInput(), isListVisible && renderList());
590
+ }, isLoading && /*#__PURE__*/_react.default.createElement(_Spinner.default, {
591
+ size: "small"
592
+ }), isMobile ? renderInput() : renderSearchableInput(), isListVisible && renderList());
500
593
  };
501
594
 
502
595
  var _default = InputAddress;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intelicoreact",
3
- "version": "1.3.5",
3
+ "version": "1.3.7",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "files": [