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
|
|
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
|
-
|
|
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
|
|
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 ||
|
|
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
|
-
|
|
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)(
|
|
133
|
+
var _useState9 = (0, _react.useState)(value),
|
|
101
134
|
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
108
|
-
|
|
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)(
|
|
158
|
+
var _useState19 = (0, _react.useState)(false),
|
|
126
159
|
_useState20 = (0, _slicedToArray2.default)(_useState19, 2),
|
|
127
|
-
|
|
128
|
-
|
|
160
|
+
isListLoading = _useState20[0],
|
|
161
|
+
setIsListLoading = _useState20[1];
|
|
129
162
|
|
|
130
|
-
var _useState21 = (0, _react.useState)(
|
|
163
|
+
var _useState21 = (0, _react.useState)(null),
|
|
131
164
|
_useState22 = (0, _slicedToArray2.default)(_useState21, 2),
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
138
|
-
|
|
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
|
|
179
|
+
var _innerValue$street;
|
|
142
180
|
|
|
143
181
|
if (noValidate) return false;
|
|
144
|
-
if (
|
|
182
|
+
if (innerValue === '') return false; // eslint-disable-next-line no-prototype-builtins
|
|
145
183
|
|
|
146
|
-
if (!(
|
|
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 (!(
|
|
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
|
-
}, [
|
|
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
|
-
|
|
197
|
+
setInnerValue(item);
|
|
156
198
|
|
|
157
199
|
if (isMobile) {
|
|
158
200
|
setIsListVisible(false);
|
|
159
201
|
}
|
|
160
|
-
},
|
|
161
|
-
};
|
|
202
|
+
}, 0);
|
|
203
|
+
}; // ? Базовый метод получения списка вариантов адреса
|
|
204
|
+
|
|
162
205
|
|
|
163
|
-
var
|
|
164
|
-
|
|
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
|
-
|
|
170
|
-
|
|
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
|
-
}
|
|
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
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
199
|
-
onChange(typeof
|
|
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
|
-
|
|
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(
|
|
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] :
|
|
283
|
-
if (value
|
|
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 (
|
|
286
|
-
|
|
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
|
-
|
|
325
|
-
|
|
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
|
-
}, [
|
|
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
|
-
|
|
434
|
+
setTempInnerValue(innerValue);
|
|
342
435
|
setListHeight();
|
|
343
436
|
}
|
|
344
437
|
}, [isListVisible]);
|
|
345
438
|
(0, _react.useEffect)(function () {
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
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
|
|
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:
|
|
363
|
-
onChange:
|
|
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
|
|
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:
|
|
398
|
-
onChange:
|
|
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
|
|
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
|
|
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 && !(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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;
|