@reltio/components 1.4.2162 → 1.4.2164
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.js +123 -55
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.module.css.js +2 -2
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.test.js +101 -5
- package/AddressAutocompleteEditor/helpers.d.ts +1 -0
- package/AddressAutocompleteEditor/helpers.js +3 -0
- package/FacetGroup/FacetGroup.d.ts +7 -0
- package/FacetGroup/FacetGroup.js +9 -0
- package/FacetGroup/FacetGroup.module.css.js +9 -0
- package/FacetGroup/index.d.ts +1 -0
- package/FacetGroup/index.js +1 -0
- package/FacetGroupTitle/FacetGroupTitle.d.ts +8 -0
- package/FacetGroupTitle/FacetGroupTitle.js +13 -0
- package/FacetGroupTitle/FacetGroupTitle.module.css.js +9 -0
- package/FacetGroupTitle/index.d.ts +1 -0
- package/FacetGroupTitle/index.js +1 -0
- package/MoreAttributesButton/styles.d.ts +1 -1
- package/QuickFiltersEntityTypeFacet/QuickFiltersEntityTypeFacet.d.ts +13 -0
- package/QuickFiltersEntityTypeFacet/QuickFiltersEntityTypeFacet.js +17 -0
- package/QuickFiltersEntityTypeFacet/QuickFiltersEntityTypeFacet.module.css.js +9 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.d.ts +12 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.js +49 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.module.css.js +9 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/index.d.ts +1 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/index.js +1 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesList/EntityTypesList.d.ts +10 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesList/EntityTypesList.js +39 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesList/EntityTypesList.module.css.js +9 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesList/index.d.ts +1 -0
- package/QuickFiltersEntityTypeFacet/components/EntityTypesList/index.js +1 -0
- package/QuickFiltersEntityTypeFacet/index.d.ts +2 -0
- package/QuickFiltersEntityTypeFacet/index.js +1 -0
- package/QuickFiltersEntityTypeFacet/types.d.ts +5 -0
- package/QuickFiltersEntityTypeFacet/types.js +1 -0
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.js +120 -52
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.module.css.js +2 -2
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.test.js +101 -5
- package/cjs/AddressAutocompleteEditor/helpers.d.ts +1 -0
- package/cjs/AddressAutocompleteEditor/helpers.js +5 -1
- package/cjs/FacetGroup/FacetGroup.d.ts +7 -0
- package/cjs/FacetGroup/FacetGroup.js +16 -0
- package/cjs/FacetGroup/FacetGroup.module.css.js +9 -0
- package/cjs/FacetGroup/index.d.ts +1 -0
- package/cjs/FacetGroup/index.js +5 -0
- package/cjs/FacetGroupTitle/FacetGroupTitle.d.ts +8 -0
- package/cjs/FacetGroupTitle/FacetGroupTitle.js +20 -0
- package/cjs/FacetGroupTitle/FacetGroupTitle.module.css.js +9 -0
- package/cjs/FacetGroupTitle/index.d.ts +1 -0
- package/cjs/FacetGroupTitle/index.js +5 -0
- package/cjs/MoreAttributesButton/styles.d.ts +1 -1
- package/cjs/QuickFiltersEntityTypeFacet/QuickFiltersEntityTypeFacet.d.ts +13 -0
- package/cjs/QuickFiltersEntityTypeFacet/QuickFiltersEntityTypeFacet.js +47 -0
- package/cjs/QuickFiltersEntityTypeFacet/QuickFiltersEntityTypeFacet.module.css.js +9 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.d.ts +12 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.js +79 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.module.css.js +9 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/index.d.ts +1 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/index.js +5 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesList/EntityTypesList.d.ts +10 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesList/EntityTypesList.js +69 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesList/EntityTypesList.module.css.js +9 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesList/index.d.ts +1 -0
- package/cjs/QuickFiltersEntityTypeFacet/components/EntityTypesList/index.js +5 -0
- package/cjs/QuickFiltersEntityTypeFacet/index.d.ts +2 -0
- package/cjs/QuickFiltersEntityTypeFacet/index.js +5 -0
- package/cjs/QuickFiltersEntityTypeFacet/types.d.ts +5 -0
- package/cjs/QuickFiltersEntityTypeFacet/types.js +2 -0
- package/cjs/contexts/AutoCompleteContext/helpers.js +2 -2
- package/cjs/index.d.ts +3 -0
- package/cjs/index.js +11 -5
- package/contexts/AutoCompleteContext/helpers.js +3 -3
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/package.json +2 -2
package/QuickFiltersEntityTypeFacet/components/EntityTypesFacetGroups/EntityTypesFacetGroups.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React, { useCallback, useMemo } from 'react';
|
|
2
|
+
import { defaultTo, filter, find, pipe, pluck, prop } from 'ramda';
|
|
3
|
+
import i18n from 'ui-i18n';
|
|
4
|
+
import { DEFAULT_ENTITY_TYPE_GROUP } from '@reltio/mdm-sdk';
|
|
5
|
+
import Checkbox from '@mui/material/Checkbox';
|
|
6
|
+
import LocalOfferOutlinedIcon from '@mui/icons-material/LocalOfferOutlined';
|
|
7
|
+
import { EntityTypesList } from '../EntityTypesList';
|
|
8
|
+
import styles from './EntityTypesFacetGroups.module.css';
|
|
9
|
+
export var EntityTypesFacetGroups = function (_a) {
|
|
10
|
+
var groups = _a.groups, values = _a.values, maxRowCount = _a.maxRowCount, showAll = _a.showAll, onChange = _a.onChange, countFormatter = _a.countFormatter;
|
|
11
|
+
var shouldUseAllItems = !countFormatter;
|
|
12
|
+
var handleCheckboxChange = useCallback(function (groupValues) { return function (e) {
|
|
13
|
+
var newValues = e.target.checked
|
|
14
|
+
? values.concat(groupValues.filter(function (v) { return !values.includes(v); }))
|
|
15
|
+
: values.filter(function (v) { return !groupValues.includes(v); });
|
|
16
|
+
onChange(newValues);
|
|
17
|
+
}; }, [onChange, values]);
|
|
18
|
+
var groupedItemsToRender = useMemo(function () {
|
|
19
|
+
if (showAll)
|
|
20
|
+
return groups;
|
|
21
|
+
var count = 0;
|
|
22
|
+
return groups
|
|
23
|
+
.map(function (group) {
|
|
24
|
+
if (count >= maxRowCount)
|
|
25
|
+
return null;
|
|
26
|
+
var remaining = maxRowCount - count;
|
|
27
|
+
var limitedItems = group.items.slice(0, remaining);
|
|
28
|
+
count += limitedItems.length;
|
|
29
|
+
return limitedItems.length ? { label: group.label, items: limitedItems } : null;
|
|
30
|
+
})
|
|
31
|
+
.filter(Boolean);
|
|
32
|
+
}, [groups, showAll, maxRowCount]);
|
|
33
|
+
var renderGroup = function (_a) {
|
|
34
|
+
var label = _a.label, items = _a.items;
|
|
35
|
+
var allItems = pipe(find(function (group) { return group.label === label; }), defaultTo({ label: label, items: [] }), prop('items'))(groups);
|
|
36
|
+
var availableValuesWithCount = pipe(filter(function (item) { return (item.number && item.number > 0) || values.includes(item.value); }), pluck('value'))(allItems);
|
|
37
|
+
var availableValues = shouldUseAllItems ? pluck('value', allItems) : availableValuesWithCount;
|
|
38
|
+
var checkedCount = availableValues.filter(function (v) { return values.includes(v); }).length;
|
|
39
|
+
var allChecked = checkedCount === availableValues.length && availableValues.length > 0;
|
|
40
|
+
var someChecked = checkedCount > 0 && checkedCount < availableValues.length;
|
|
41
|
+
return (React.createElement(React.Fragment, null,
|
|
42
|
+
React.createElement("div", { className: styles.groupHeader },
|
|
43
|
+
React.createElement(Checkbox, { className: styles.groupCheckbox, checked: allChecked, indeterminate: someChecked, onChange: handleCheckboxChange(availableValues), disabled: availableValues.length === 0 }),
|
|
44
|
+
label !== DEFAULT_ENTITY_TYPE_GROUP && React.createElement(LocalOfferOutlinedIcon, { className: styles.groupIcon }),
|
|
45
|
+
React.createElement("span", { className: styles.groupLabel }, label === DEFAULT_ENTITY_TYPE_GROUP ? i18n.text('Other') : label)),
|
|
46
|
+
React.createElement(EntityTypesList, { data: items, values: values, onChange: onChange, countFormatter: countFormatter })));
|
|
47
|
+
};
|
|
48
|
+
return groups.length === 1 && groups[0].label === DEFAULT_ENTITY_TYPE_GROUP ? (React.createElement(EntityTypesList, { data: groupedItemsToRender[0].items, values: values, onChange: onChange, countFormatter: countFormatter })) : (React.createElement(React.Fragment, null, groupedItemsToRender.map(function (group) { return (React.createElement("div", { key: group.label }, renderGroup(group))); })));
|
|
49
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const styles = {"groupHeader":"EntityTypesFacetGroups-groupHeader---V51b","groupCheckbox":"EntityTypesFacetGroups-groupCheckbox--owond","groupIcon":"EntityTypesFacetGroups-groupIcon--wPz-A","groupLabel":"EntityTypesFacetGroups-groupLabel--4yhjo"};
|
|
2
|
+
if (typeof document !== 'undefined') {
|
|
3
|
+
const head = document.head || document.getElementsByTagName('head')[0]
|
|
4
|
+
const style = document.createElement('style');
|
|
5
|
+
style.type = 'text/css'
|
|
6
|
+
style.innerHTML = `.EntityTypesFacetGroups-groupHeader---V51b{align-items:center;background:#f5f5f5;display:flex;margin:2px 10px;padding:6px 8px}.EntityTypesFacetGroups-groupCheckbox--owond{margin-right:21px;padding:0}.EntityTypesFacetGroups-groupIcon--wPz-A{color:rgba(0,0,0,.54);height:20px;margin-right:8px;width:20px}.EntityTypesFacetGroups-groupLabel--4yhjo{font-size:14px;font-weight:500}`;
|
|
7
|
+
head.appendChild(style);
|
|
8
|
+
}
|
|
9
|
+
export default styles;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EntityTypesFacetGroups } from './EntityTypesFacetGroups';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EntityTypesFacetGroups } from './EntityTypesFacetGroups';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { EntityTypeFacetDataItem } from '@reltio/mdm-sdk';
|
|
3
|
+
type Props = {
|
|
4
|
+
data?: EntityTypeFacetDataItem[];
|
|
5
|
+
values?: string[];
|
|
6
|
+
countFormatter?: (number: number) => string;
|
|
7
|
+
onChange?: (values?: string[]) => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const EntityTypesList: ({ data, values, onChange, countFormatter }: Props) => React.JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
import { identity } from 'ramda';
|
|
5
|
+
import Checkbox from '@mui/material/Checkbox';
|
|
6
|
+
import { ColorBar } from '../../../ColorBar';
|
|
7
|
+
import styles from './EntityTypesList.module.css';
|
|
8
|
+
export var EntityTypesList = function (_a) {
|
|
9
|
+
var _b = _a.data, data = _b === void 0 ? [] : _b, _c = _a.values, values = _c === void 0 ? [] : _c, _d = _a.onChange, onChange = _d === void 0 ? identity : _d, countFormatter = _a.countFormatter;
|
|
10
|
+
var shouldShowCount = !!countFormatter;
|
|
11
|
+
var handleItemClick = function (name) { return function () {
|
|
12
|
+
var newValues = values.includes(name) ? values.filter(function (val) { return val !== name; }) : values.concat(name);
|
|
13
|
+
onChange(newValues);
|
|
14
|
+
}; };
|
|
15
|
+
var maxNumber = Math.max.apply(Math, data.map(function (item) { return item.number; }));
|
|
16
|
+
var createControl = function (item) {
|
|
17
|
+
var _a;
|
|
18
|
+
return (React.createElement(Checkbox, { className: classnames(styles.checkbox, (_a = {}, _a[styles.checked] = values.includes(item.value), _a)), checked: values.includes(item.value), onChange: handleItemClick(item.value), value: item.value, color: "primary" }));
|
|
19
|
+
};
|
|
20
|
+
var createColorBar = function (item) {
|
|
21
|
+
var _a;
|
|
22
|
+
return (React.createElement(ColorBar, { className: classnames((_a = {}, _a[styles.checkedBar] = values.includes(item.value), _a)), width: item.number, maxWidth: maxNumber }));
|
|
23
|
+
};
|
|
24
|
+
var shouldDisableItem = useCallback(function (item) {
|
|
25
|
+
return shouldShowCount && !item.number && !values.includes(item.value);
|
|
26
|
+
}, [shouldShowCount, values]);
|
|
27
|
+
return (React.createElement("div", { className: styles.listContainer }, data.map(function (item) {
|
|
28
|
+
var _a;
|
|
29
|
+
return (React.createElement("div", { key: item.value, className: classnames(styles.item, (_a = {},
|
|
30
|
+
_a[styles.disabled] = shouldDisableItem(item),
|
|
31
|
+
_a)), "data-reltio-id": "search-facets-list-row" },
|
|
32
|
+
createControl(item),
|
|
33
|
+
React.createElement("div", { className: styles.info, onClick: handleItemClick(item.value) },
|
|
34
|
+
shouldShowCount && createColorBar(item),
|
|
35
|
+
React.createElement("div", { className: classnames(styles.textInfo) },
|
|
36
|
+
React.createElement("div", { className: styles.text }, item.label),
|
|
37
|
+
shouldShowCount && (React.createElement("div", { className: styles.count }, item.number === undefined ? i18n.text('N/A') : countFormatter(item.number)))))));
|
|
38
|
+
})));
|
|
39
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const styles = {"listContainer":"EntityTypesList-listContainer--yH3ri","disabled":"EntityTypesList-disabled--HnKbn","item":"EntityTypesList-item--7i6HO","info":"EntityTypesList-info--j8-KL","checkedBar":"EntityTypesList-checkedBar--TGBZJ","checkbox":"EntityTypesList-checkbox--ZthGQ","checked":"EntityTypesList-checked--2Ba66","textInfo":"EntityTypesList-textInfo--sL0G-","text":"EntityTypesList-text--QzVMI","count":"EntityTypesList-count--xE-gy"};
|
|
2
|
+
if (typeof document !== 'undefined') {
|
|
3
|
+
const head = document.head || document.getElementsByTagName('head')[0]
|
|
4
|
+
const style = document.createElement('style');
|
|
5
|
+
style.type = 'text/css'
|
|
6
|
+
style.innerHTML = `.EntityTypesList-listContainer--yH3ri{display:flex;flex-direction:column;padding-left:18px}.EntityTypesList-listContainer--yH3ri .EntityTypesList-disabled--HnKbn{opacity:.4;pointer-events:none}.EntityTypesList-item--7i6HO{display:flex;flex-direction:row;flex-grow:1;flex-shrink:0;margin-bottom:2px;margin-right:10px;margin-top:2px}.EntityTypesList-info--j8-KL{display:flex;flex-grow:1;margin-bottom:2px;margin-top:2px;min-width:0;position:relative}.EntityTypesList-info--j8-KL:hover{cursor:pointer}.EntityTypesList-info--j8-KL .EntityTypesList-checkedBar--TGBZJ{opacity:.4}.EntityTypesList-checkbox--ZthGQ{margin-right:14px;padding:0}.EntityTypesList-checkbox--ZthGQ .EntityTypesList-checked--2Ba66{opacity:1}.EntityTypesList-textInfo--sL0G-{align-items:center;background-color:transparent;display:flex;flex-grow:1;line-height:16px;min-width:0;z-index:2}.EntityTypesList-text--QzVMI{color:var(--mui-palette-text-primary);flex-grow:1;margin-left:7px;margin-right:4px;max-height:32px;width:100%;word-break:break-word;word-wrap:break-word;overflow:hidden}.EntityTypesList-count--xE-gy{color:var(--mui-palette-text-secondary);flex-shrink:0;font-size:12px;margin-right:4px;text-align:right}`;
|
|
7
|
+
head.appendChild(style);
|
|
8
|
+
}
|
|
9
|
+
export default styles;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EntityTypesList } from './EntityTypesList';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EntityTypesList } from './EntityTypesList';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { QuickFiltersEntityTypeFacet } from './QuickFiltersEntityTypeFacet';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -80,6 +80,15 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
80
80
|
}
|
|
81
81
|
return t;
|
|
82
82
|
};
|
|
83
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
84
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
85
|
+
if (ar || !(i in from)) {
|
|
86
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
87
|
+
ar[i] = from[i];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
91
|
+
};
|
|
83
92
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
84
93
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
85
94
|
};
|
|
@@ -90,26 +99,29 @@ var classnames_1 = __importDefault(require("classnames"));
|
|
|
90
99
|
var ramda_1 = require("ramda");
|
|
91
100
|
var react_context_selector_1 = require("@fluentui/react-context-selector");
|
|
92
101
|
var Autocomplete_1 = __importDefault(require("@mui/material/Autocomplete"));
|
|
93
|
-
var
|
|
94
|
-
var
|
|
102
|
+
var Button_1 = __importDefault(require("@mui/material/Button"));
|
|
103
|
+
var ChevronRight_1 = __importDefault(require("@mui/icons-material/ChevronRight"));
|
|
95
104
|
var LinearProgress_1 = __importDefault(require("@mui/material/LinearProgress"));
|
|
96
|
-
var
|
|
105
|
+
var ListItemButton_1 = __importDefault(require("@mui/material/ListItemButton"));
|
|
97
106
|
var TextField_1 = __importDefault(require("@mui/material/TextField"));
|
|
98
|
-
var
|
|
107
|
+
var Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
99
108
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
100
109
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
101
110
|
var AutoCompleteContext_1 = require("../contexts/AutoCompleteContext");
|
|
102
111
|
var AttributeValueContext_1 = require("../contexts/AttributeValueContext");
|
|
103
112
|
var helpers_1 = require("./helpers");
|
|
104
113
|
var useSafePromise_1 = require("../hooks/useSafePromise");
|
|
114
|
+
var ExpandedValueTooltip_1 = require("../ExpandedValueTooltip");
|
|
115
|
+
var EmptySearchResult_1 = require("../EmptySearchResult");
|
|
105
116
|
var AddressAutocompleteEditor_module_css_1 = __importDefault(require("./AddressAutocompleteEditor.module.css"));
|
|
106
117
|
exports.INPUT_DEBOUNCE_INTERVAL = 400;
|
|
118
|
+
var EMPTY_OPTION_ID = 'empty_option_id';
|
|
107
119
|
var AddressAutocompleteEditor = function (_a) {
|
|
108
120
|
var _b = _a.value, value = _b === void 0 ? '' : _b, onChange = _a.onChange, InputProps = _a.InputProps, _c = _a.fullWidth, fullWidth = _c === void 0 ? true : _c, otherProps = __rest(_a, ["value", "onChange", "InputProps", "fullWidth"]);
|
|
109
121
|
var _d = (0, react_1.useState)(value), inputValue = _d[0], setInputValue = _d[1];
|
|
110
|
-
var _e = (0, react_1.useState)(
|
|
111
|
-
var _f = (0, react_1.useState)(
|
|
112
|
-
var _g = (0, react_1.useState)(false),
|
|
122
|
+
var _e = (0, react_1.useState)(null), options = _e[0], setOptions = _e[1];
|
|
123
|
+
var _f = (0, react_1.useState)([]), previousOptions = _f[0], setPreviousOptions = _f[1];
|
|
124
|
+
var _g = (0, react_1.useState)(false), loading = _g[0], setLoading = _g[1];
|
|
113
125
|
var _h = (0, react_1.useState)(false), open = _h[0], setOpen = _h[1];
|
|
114
126
|
var searchSafePromise = (0, useSafePromise_1.useSafePromise)();
|
|
115
127
|
var detailsSafePromise = (0, useSafePromise_1.useSafePromise)();
|
|
@@ -120,45 +132,61 @@ var AddressAutocompleteEditor = function (_a) {
|
|
|
120
132
|
var countries = autocompleteSettings.countries, countryNames = autocompleteSettings.countryNames, limit = autocompleteSettings.limit, minSearchTextLen = autocompleteSettings.minSearchTextLen;
|
|
121
133
|
var countriesHash = countries.toString();
|
|
122
134
|
(0, react_1.useEffect)(function () {
|
|
123
|
-
setOptions(
|
|
135
|
+
setOptions(null);
|
|
136
|
+
setPreviousOptions([]);
|
|
124
137
|
}, [countriesHash]);
|
|
125
|
-
var fetchAddressSuggestions = (0, react_1.useCallback)(function (
|
|
126
|
-
var results, convertedOptions, error_1;
|
|
127
|
-
|
|
128
|
-
|
|
138
|
+
var fetchAddressSuggestions = (0, react_1.useCallback)(function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
139
|
+
var results, _c, convertedOptions, error_1;
|
|
140
|
+
var searchTerm = _b.searchTerm, container = _b.container;
|
|
141
|
+
return __generator(this, function (_d) {
|
|
142
|
+
switch (_d.label) {
|
|
129
143
|
case 0:
|
|
130
144
|
setLoading(true);
|
|
131
|
-
|
|
145
|
+
_d.label = 1;
|
|
132
146
|
case 1:
|
|
133
|
-
|
|
134
|
-
return [
|
|
135
|
-
|
|
136
|
-
limit: limit,
|
|
137
|
-
countries: countries
|
|
138
|
-
}))];
|
|
147
|
+
_d.trys.push([1, 6, 7, 8]);
|
|
148
|
+
if (!container) return [3 /*break*/, 3];
|
|
149
|
+
return [4 /*yield*/, searchSafePromise((0, mdm_sdk_1.searchAddresses)({ container: container }))];
|
|
139
150
|
case 2:
|
|
140
|
-
|
|
151
|
+
_c = _d.sent();
|
|
152
|
+
return [3 /*break*/, 5];
|
|
153
|
+
case 3: return [4 /*yield*/, searchSafePromise((0, mdm_sdk_1.searchAddresses)({
|
|
154
|
+
text: searchTerm,
|
|
155
|
+
limit: limit,
|
|
156
|
+
countries: countries
|
|
157
|
+
}))];
|
|
158
|
+
case 4:
|
|
159
|
+
_c = _d.sent();
|
|
160
|
+
_d.label = 5;
|
|
161
|
+
case 5:
|
|
162
|
+
results = _c;
|
|
141
163
|
convertedOptions = results.map(helpers_1.convertSearchResultToOption);
|
|
164
|
+
if (container) {
|
|
165
|
+
setPreviousOptions(options || []);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
setPreviousOptions([]);
|
|
169
|
+
}
|
|
142
170
|
setOptions(convertedOptions);
|
|
143
|
-
return [3 /*break*/,
|
|
144
|
-
case
|
|
145
|
-
error_1 =
|
|
171
|
+
return [3 /*break*/, 8];
|
|
172
|
+
case 6:
|
|
173
|
+
error_1 = _d.sent();
|
|
146
174
|
console.warn('Error fetching address suggestions:', error_1);
|
|
147
175
|
setOptions([]);
|
|
148
|
-
return [3 /*break*/,
|
|
149
|
-
case
|
|
176
|
+
return [3 /*break*/, 8];
|
|
177
|
+
case 7:
|
|
150
178
|
setLoading(false);
|
|
151
179
|
return [7 /*endfinally*/];
|
|
152
|
-
case
|
|
180
|
+
case 8: return [2 /*return*/];
|
|
153
181
|
}
|
|
154
182
|
});
|
|
155
|
-
}); }, [countries, limit, searchSafePromise]);
|
|
183
|
+
}); }, [countries, limit, searchSafePromise, options]);
|
|
156
184
|
var fetchAddressDetailsById = (0, react_1.useCallback)(function (addressId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
157
185
|
var error_2;
|
|
158
186
|
return __generator(this, function (_a) {
|
|
159
187
|
switch (_a.label) {
|
|
160
188
|
case 0:
|
|
161
|
-
|
|
189
|
+
setLoading(true);
|
|
162
190
|
_a.label = 1;
|
|
163
191
|
case 1:
|
|
164
192
|
_a.trys.push([1, 3, 4, 5]);
|
|
@@ -167,9 +195,9 @@ var AddressAutocompleteEditor = function (_a) {
|
|
|
167
195
|
case 3:
|
|
168
196
|
error_2 = _a.sent();
|
|
169
197
|
console.warn('Error fetching address details:', error_2);
|
|
170
|
-
return [
|
|
198
|
+
return [3 /*break*/, 5];
|
|
171
199
|
case 4:
|
|
172
|
-
|
|
200
|
+
setLoading(false);
|
|
173
201
|
return [7 /*endfinally*/];
|
|
174
202
|
case 5: return [2 /*return*/];
|
|
175
203
|
}
|
|
@@ -178,13 +206,17 @@ var AddressAutocompleteEditor = function (_a) {
|
|
|
178
206
|
var debouncedFetchAddressSuggestions = (0, react_1.useCallback)((0, mdm_sdk_1.debounce)(fetchAddressSuggestions, exports.INPUT_DEBOUNCE_INTERVAL), [
|
|
179
207
|
fetchAddressSuggestions
|
|
180
208
|
]);
|
|
181
|
-
var handleInputChange = (0, react_1.useCallback)(function (event, newInputValue) {
|
|
209
|
+
var handleInputChange = (0, react_1.useCallback)(function (event, newInputValue, reason) {
|
|
210
|
+
if (reason === 'reset') {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
182
213
|
setInputValue(newInputValue);
|
|
183
|
-
if (
|
|
184
|
-
debouncedFetchAddressSuggestions(newInputValue);
|
|
214
|
+
if ((0, helpers_1.isMinLength)(newInputValue, minSearchTextLen)) {
|
|
215
|
+
debouncedFetchAddressSuggestions({ searchTerm: newInputValue });
|
|
185
216
|
}
|
|
186
217
|
else {
|
|
187
218
|
setOptions([]);
|
|
219
|
+
setPreviousOptions([]);
|
|
188
220
|
}
|
|
189
221
|
}, [debouncedFetchAddressSuggestions, minSearchTextLen]);
|
|
190
222
|
var handleOptionSelect = (0, react_1.useCallback)(function (event, selectedOption) { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -194,9 +226,11 @@ var AddressAutocompleteEditor = function (_a) {
|
|
|
194
226
|
case 0:
|
|
195
227
|
if (!selectedOption) return [3 /*break*/, 3];
|
|
196
228
|
if (selectedOption.type === mdm_sdk_1.AddressType.Container) {
|
|
229
|
+
fetchAddressSuggestions({ container: selectedOption.id });
|
|
197
230
|
return [2 /*return*/];
|
|
198
231
|
}
|
|
199
232
|
setInputValue(selectedOption.fullAddress);
|
|
233
|
+
setPreviousOptions([]);
|
|
200
234
|
if (onChange) {
|
|
201
235
|
onChange(selectedOption.fullAddress);
|
|
202
236
|
}
|
|
@@ -218,36 +252,70 @@ var AddressAutocompleteEditor = function (_a) {
|
|
|
218
252
|
case 4: return [2 /*return*/];
|
|
219
253
|
}
|
|
220
254
|
});
|
|
221
|
-
}); }, [fetchAddressDetailsById, onChange, onPopulateAttributes, attributeTypeUri, valueUri]);
|
|
255
|
+
}); }, [fetchAddressDetailsById, fetchAddressSuggestions, onChange, onPopulateAttributes, attributeTypeUri, valueUri]);
|
|
256
|
+
var handleFocus = (0, react_1.useCallback)(function () {
|
|
257
|
+
if (!options && (0, helpers_1.isMinLength)(inputValue, minSearchTextLen)) {
|
|
258
|
+
debouncedFetchAddressSuggestions({ searchTerm: inputValue });
|
|
259
|
+
}
|
|
260
|
+
setOpen(true);
|
|
261
|
+
}, [debouncedFetchAddressSuggestions, inputValue, minSearchTextLen, options]);
|
|
222
262
|
var handleBlur = (0, react_1.useCallback)(function () {
|
|
223
263
|
setOpen(false);
|
|
224
264
|
}, []);
|
|
225
265
|
var renderOption = (0, react_1.useCallback)(function (props, option) {
|
|
226
266
|
var _a;
|
|
267
|
+
if (option.id === EMPTY_OPTION_ID) {
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
227
270
|
var isContainer = option.type === mdm_sdk_1.AddressType.Container;
|
|
228
|
-
return (react_1.default.createElement(
|
|
229
|
-
react_1.default.createElement(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
271
|
+
return (react_1.default.createElement(ListItemButton_1.default, __assign({}, props, { className: (0, classnames_1.default)(AddressAutocompleteEditor_module_css_1.default.option, (_a = {}, _a[AddressAutocompleteEditor_module_css_1.default.containerOption] = isContainer, _a)), component: "li", disabled: loading }),
|
|
272
|
+
react_1.default.createElement(ExpandedValueTooltip_1.ExpandedValueTooltip, { value: option.fullAddress },
|
|
273
|
+
react_1.default.createElement(Typography_1.default, { variant: "body2", className: AddressAutocompleteEditor_module_css_1.default.optionText }, option.fullAddress)),
|
|
274
|
+
isContainer && (react_1.default.createElement("div", { className: AddressAutocompleteEditor_module_css_1.default.containerForwardIcon },
|
|
275
|
+
react_1.default.createElement(ChevronRight_1.default, null)))));
|
|
276
|
+
}, [loading]);
|
|
277
|
+
var renderInput = (0, react_1.useCallback)(function (props) {
|
|
278
|
+
var _a;
|
|
279
|
+
return (react_1.default.createElement(TextField_1.default, __assign({}, props, otherProps, { placeholder: ui_i18n_1.default.text('Start typing to autocomplete'), fullWidth: fullWidth, onBlur: handleBlur, InputProps: __assign(__assign(__assign({}, props.InputProps), InputProps), { classes: __assign(__assign({}, InputProps === null || InputProps === void 0 ? void 0 : InputProps.classes), { root: (0, classnames_1.default)(AddressAutocompleteEditor_module_css_1.default.textFieldRoot, (0, ramda_1.path)(['classes', 'root'], InputProps)), input: (0, classnames_1.default)(AddressAutocompleteEditor_module_css_1.default.textFieldInput, (0, ramda_1.path)(['classes', 'input'], InputProps)), underline: (0, classnames_1.default)((_a = {}, _a[AddressAutocompleteEditor_module_css_1.default.underline] = (0, mdm_sdk_1.isEmptyValue)(value), _a)) }) }) })));
|
|
280
|
+
}, [fullWidth, handleBlur, InputProps, otherProps, value]);
|
|
281
|
+
var handleBackToAllSearchResults = (0, react_1.useCallback)(function () {
|
|
282
|
+
setOptions(previousOptions);
|
|
283
|
+
setPreviousOptions([]);
|
|
284
|
+
}, [previousOptions]);
|
|
234
285
|
var renderListbox = (0, react_1.useCallback)(react_1.default.forwardRef(function ListboxComponent(props, ref) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
286
|
+
var onMouseDown = props.onMouseDown, restProps = __rest(props, ["onMouseDown"]);
|
|
287
|
+
var shouldShowEmptyState = (options === null || options === void 0 ? void 0 : options.length) === 0 && (0, helpers_1.isMinLength)(inputValue, minSearchTextLen) && !loading;
|
|
288
|
+
var shouldShowMinLengthMessage = !(0, helpers_1.isMinLength)(inputValue, minSearchTextLen) && !loading;
|
|
289
|
+
var shouldShowOptions = (options === null || options === void 0 ? void 0 : options.length) > 0 && !shouldShowMinLengthMessage;
|
|
290
|
+
var countriesLabel = countryNames.join(', ');
|
|
291
|
+
return (react_1.default.createElement("div", { onMouseDown: onMouseDown },
|
|
292
|
+
loading && react_1.default.createElement(LinearProgress_1.default, { className: AddressAutocompleteEditor_module_css_1.default.loadingProgress, color: "primary" }),
|
|
293
|
+
react_1.default.createElement("div", { className: AddressAutocompleteEditor_module_css_1.default.countryHeader },
|
|
294
|
+
react_1.default.createElement(ExpandedValueTooltip_1.ExpandedValueTooltip, { value: countriesLabel },
|
|
295
|
+
react_1.default.createElement(Typography_1.default, { variant: "body2", color: "textSecondary", className: AddressAutocompleteEditor_module_css_1.default.headerCountries },
|
|
240
296
|
ui_i18n_1.default.text('Searching in'),
|
|
241
297
|
": ",
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
298
|
+
countriesLabel)),
|
|
299
|
+
react_1.default.createElement(Typography_1.default, { variant: "caption", color: "textSecondary", className: AddressAutocompleteEditor_module_css_1.default.headerHelper }, ui_i18n_1.default.text('To search in a different country, update the Country field'))),
|
|
300
|
+
react_1.default.createElement("ul", __assign({ ref: ref }, restProps, { className: AddressAutocompleteEditor_module_css_1.default.listbox }),
|
|
301
|
+
shouldShowMinLengthMessage && (react_1.default.createElement("li", { className: AddressAutocompleteEditor_module_css_1.default.emptyState },
|
|
302
|
+
react_1.default.createElement(Typography_1.default, { variant: "body2", color: "textSecondary" }, ui_i18n_1.default.text('Please enter at least ${minSearchTextLen} characters', {
|
|
303
|
+
minSearchTextLen: minSearchTextLen
|
|
304
|
+
})))),
|
|
305
|
+
shouldShowEmptyState && (react_1.default.createElement("li", { className: AddressAutocompleteEditor_module_css_1.default.emptyState },
|
|
306
|
+
react_1.default.createElement(EmptySearchResult_1.EmptySearchResult, { className: AddressAutocompleteEditor_module_css_1.default.noData }))),
|
|
307
|
+
shouldShowOptions && props.children),
|
|
308
|
+
previousOptions.length > 0 && (react_1.default.createElement("div", { className: AddressAutocompleteEditor_module_css_1.default.backToAllResults },
|
|
309
|
+
react_1.default.createElement(Button_1.default, { variant: "text", onClick: handleBackToAllSearchResults, color: "primary", disabled: loading, classes: { root: AddressAutocompleteEditor_module_css_1.default.backToAllResultsButton } }, ui_i18n_1.default.text('Back to all results'))))));
|
|
310
|
+
}), [loading, countryNames, previousOptions.length, (options || []).length, inputValue, minSearchTextLen]);
|
|
246
311
|
var openOptionsList = (0, react_1.useCallback)(function (_event) {
|
|
247
312
|
setOpen(true);
|
|
248
313
|
}, []);
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
314
|
+
var displayOptions = (0, react_1.useMemo)(function () {
|
|
315
|
+
return __spreadArray([{ id: EMPTY_OPTION_ID, type: mdm_sdk_1.AddressType.Address, fullAddress: '' }], (options || []), true);
|
|
316
|
+
}, [options]);
|
|
317
|
+
return (react_1.default.createElement(Autocomplete_1.default, { className: AddressAutocompleteEditor_module_css_1.default.root, open: open, onOpen: openOptionsList, value: inputValue, onChange: handleOptionSelect, inputValue: inputValue, onInputChange: handleInputChange, onFocus: handleFocus, options: displayOptions, getOptionLabel: helpers_1.getOptionLabel, renderInput: renderInput, renderOption: renderOption, renderGroup: function (params) { return params.children; }, ListboxComponent: renderListbox, classes: {
|
|
318
|
+
paper: AddressAutocompleteEditor_module_css_1.default.popupContainer
|
|
319
|
+
}, filterOptions: ramda_1.identity, isOptionEqualToValue: helpers_1.isOptionEqualToValue, popupIcon: null, clearIcon: null, freeSolo: true, "data-reltio-id": "address-autocomplete-editor" }));
|
|
252
320
|
};
|
|
253
321
|
exports.AddressAutocompleteEditor = AddressAutocompleteEditor;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const styles = {"root":"AddressAutocompleteEditor-root--1FDrD","countryHeader":"AddressAutocompleteEditor-countryHeader--k5tRp","
|
|
1
|
+
const styles = {"root":"AddressAutocompleteEditor-root--1FDrD","textFieldRoot":"AddressAutocompleteEditor-textFieldRoot--udDvK","textFieldInput":"AddressAutocompleteEditor-textFieldInput--Xf-Cf","underline":"AddressAutocompleteEditor-underline--ZNYqN","countryHeader":"AddressAutocompleteEditor-countryHeader--k5tRp","headerCountries":"AddressAutocompleteEditor-headerCountries--WoYl5","headerHelper":"AddressAutocompleteEditor-headerHelper--XPT5S","loadingState":"AddressAutocompleteEditor-loadingState--PRwRK","emptyState":"AddressAutocompleteEditor-emptyState--s8M04","option":"AddressAutocompleteEditor-option--3hah-","popupContainer":"AddressAutocompleteEditor-popupContainer--360Kv","listbox":"AddressAutocompleteEditor-listbox--cZCpg","optionText":"AddressAutocompleteEditor-optionText--IcsBw","containerForwardIcon":"AddressAutocompleteEditor-containerForwardIcon--Ke5rd","backToAllResults":"AddressAutocompleteEditor-backToAllResults--2wqzi","backToAllResultsButton":"AddressAutocompleteEditor-backToAllResultsButton--T5R-3","loadingProgress":"AddressAutocompleteEditor-loadingProgress--AfWtc"};
|
|
2
2
|
if (typeof document !== 'undefined') {
|
|
3
3
|
const head = document.head || document.getElementsByTagName('head')[0]
|
|
4
4
|
const style = document.createElement('style');
|
|
5
5
|
style.type = 'text/css'
|
|
6
|
-
style.innerHTML = `.AddressAutocompleteEditor-root--1FDrD{width:100%}.AddressAutocompleteEditor-countryHeader--k5tRp{
|
|
6
|
+
style.innerHTML = `.AddressAutocompleteEditor-root--1FDrD{width:100%}.AddressAutocompleteEditor-root--1FDrD .AddressAutocompleteEditor-textFieldRoot--udDvK{font-size:14px;padding:0}:is(.AddressAutocompleteEditor-root--1FDrD .AddressAutocompleteEditor-textFieldRoot--udDvK) .AddressAutocompleteEditor-textFieldInput--Xf-Cf{height:19px;line-height:19px;padding:10px 12px 11px!important}:is(.AddressAutocompleteEditor-root--1FDrD .AddressAutocompleteEditor-underline--ZNYqN):before{display:none}.AddressAutocompleteEditor-countryHeader--k5tRp{padding:12px 12px 8px}.AddressAutocompleteEditor-countryHeader--k5tRp .AddressAutocompleteEditor-headerCountries--WoYl5{font-size:12px;letter-spacing:0;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.AddressAutocompleteEditor-countryHeader--k5tRp .AddressAutocompleteEditor-headerHelper--XPT5S{font-size:10px;letter-spacing:0}.AddressAutocompleteEditor-loadingState--PRwRK{padding:16px;text-align:center}.AddressAutocompleteEditor-emptyState--s8M04{padding:8px}.AddressAutocompleteEditor-option--3hah-{padding:4px 12px}.AddressAutocompleteEditor-popupContainer--360Kv{min-width:170px}.AddressAutocompleteEditor-listbox--cZCpg{margin:0;max-height:300px;overflow-y:auto;padding:0}.AddressAutocompleteEditor-listbox--cZCpg li:first-child{border-top:1px solid rgba(0,0,0,.12);padding-top:7px}.AddressAutocompleteEditor-optionText--IcsBw{font-size:14px;letter-spacing:.24px;line-height:16px;overflow:hidden;padding:4px 0;text-overflow:ellipsis;white-space:nowrap;width:100%}.AddressAutocompleteEditor-containerForwardIcon--Ke5rd{height:24px}.AddressAutocompleteEditor-backToAllResults--2wqzi{border-top:1px solid rgba(0,0,0,.12)}.AddressAutocompleteEditor-backToAllResultsButton--T5R-3{letter-spacing:0}.AddressAutocompleteEditor-loadingProgress--AfWtc{left:0;position:absolute;right:0;top:0}`;
|
|
7
7
|
head.appendChild(style);
|
|
8
8
|
}
|
|
9
9
|
module.exports = styles;
|
|
@@ -98,6 +98,14 @@ var mockAddressSearchResults = [
|
|
|
98
98
|
Description: 'Jose Malhoa 22'
|
|
99
99
|
}
|
|
100
100
|
];
|
|
101
|
+
var mockAddressContainerSearchResults = [
|
|
102
|
+
{
|
|
103
|
+
Id: 'container-1',
|
|
104
|
+
Type: mdm_sdk_1.AddressType.Container,
|
|
105
|
+
Text: 'Container Option',
|
|
106
|
+
Description: 'Container'
|
|
107
|
+
}
|
|
108
|
+
];
|
|
101
109
|
var mockAddressDetails = [
|
|
102
110
|
{
|
|
103
111
|
Id: 'address-1',
|
|
@@ -287,15 +295,34 @@ describe('AddressAutocompleteEditor', function () {
|
|
|
287
295
|
return [4 /*yield*/, user.paste('Lisbon')];
|
|
288
296
|
case 2:
|
|
289
297
|
_a.sent();
|
|
290
|
-
expect(react_2.screen.
|
|
298
|
+
expect(react_2.screen.getByRole('progressbar')).toBeInTheDocument();
|
|
291
299
|
resolveSearch([]);
|
|
292
|
-
return [4 /*yield*/, (0, react_2.waitForElementToBeRemoved)(function () { return react_2.screen.
|
|
300
|
+
return [4 /*yield*/, (0, react_2.waitForElementToBeRemoved)(function () { return react_2.screen.queryByRole('progressbar'); })];
|
|
293
301
|
case 3:
|
|
294
302
|
_a.sent();
|
|
295
303
|
return [2 /*return*/];
|
|
296
304
|
}
|
|
297
305
|
});
|
|
298
306
|
}); });
|
|
307
|
+
it('should show empty state when no options are found', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
308
|
+
var user, input;
|
|
309
|
+
return __generator(this, function (_a) {
|
|
310
|
+
switch (_a.label) {
|
|
311
|
+
case 0:
|
|
312
|
+
mockSearchAddresses.mockResolvedValue([]);
|
|
313
|
+
user = setUp().user;
|
|
314
|
+
input = react_2.screen.getByRole('combobox');
|
|
315
|
+
return [4 /*yield*/, user.click(input)];
|
|
316
|
+
case 1:
|
|
317
|
+
_a.sent();
|
|
318
|
+
return [4 /*yield*/, user.paste('Lisbon')];
|
|
319
|
+
case 2:
|
|
320
|
+
_a.sent();
|
|
321
|
+
expect(react_2.screen.getByText('No results found')).toBeInTheDocument();
|
|
322
|
+
return [2 /*return*/];
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
}); });
|
|
299
326
|
describe('Address search', function () {
|
|
300
327
|
it('should fetch address suggestions when user types minimum characters', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
301
328
|
var user, input;
|
|
@@ -383,9 +410,7 @@ describe('AddressAutocompleteEditor', function () {
|
|
|
383
410
|
switch (_a.label) {
|
|
384
411
|
case 0:
|
|
385
412
|
onChange = jest.fn();
|
|
386
|
-
mockSearchAddresses.mockResolvedValue(
|
|
387
|
-
{ Id: 'container-1', Type: mdm_sdk_1.AddressType.Container, Text: 'Container Option', Description: 'Container' }
|
|
388
|
-
]);
|
|
413
|
+
mockSearchAddresses.mockResolvedValue(mockAddressContainerSearchResults);
|
|
389
414
|
user = setUp({ onChange: onChange }).user;
|
|
390
415
|
input = react_2.screen.getByRole('combobox');
|
|
391
416
|
return [4 /*yield*/, user.click(input)];
|
|
@@ -460,6 +485,76 @@ describe('AddressAutocompleteEditor', function () {
|
|
|
460
485
|
}
|
|
461
486
|
});
|
|
462
487
|
}); });
|
|
488
|
+
it('should request address list for container options', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
489
|
+
var onChange, user, input, option;
|
|
490
|
+
return __generator(this, function (_a) {
|
|
491
|
+
switch (_a.label) {
|
|
492
|
+
case 0:
|
|
493
|
+
onChange = jest.fn();
|
|
494
|
+
mockSearchAddresses.mockResolvedValue(mockAddressContainerSearchResults);
|
|
495
|
+
user = setUp({ onChange: onChange }).user;
|
|
496
|
+
input = react_2.screen.getByRole('combobox');
|
|
497
|
+
return [4 /*yield*/, user.click(input)];
|
|
498
|
+
case 1:
|
|
499
|
+
_a.sent();
|
|
500
|
+
return [4 /*yield*/, user.paste('Lisbon')];
|
|
501
|
+
case 2:
|
|
502
|
+
_a.sent();
|
|
503
|
+
expect(react_2.screen.getByText('Container Option')).toBeInTheDocument();
|
|
504
|
+
expect(mockSearchAddresses).toHaveBeenCalledWith({
|
|
505
|
+
text: 'Lisbon',
|
|
506
|
+
limit: 10,
|
|
507
|
+
countries: ['PT', 'US']
|
|
508
|
+
});
|
|
509
|
+
mockSearchAddresses.mockReset();
|
|
510
|
+
mockSearchAddresses.mockResolvedValue(mockAddressSearchResults);
|
|
511
|
+
option = react_2.screen.getByText('Container Option');
|
|
512
|
+
return [4 /*yield*/, user.click(option)];
|
|
513
|
+
case 3:
|
|
514
|
+
_a.sent();
|
|
515
|
+
expect(mockSearchAddresses).toHaveBeenCalledWith({
|
|
516
|
+
container: 'container-1'
|
|
517
|
+
});
|
|
518
|
+
expect(react_2.screen.getByText('Avenida Jose Malhoa 22, Lisbon')).toBeInTheDocument();
|
|
519
|
+
expect(react_2.screen.queryByText('Container Option')).not.toBeInTheDocument();
|
|
520
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
521
|
+
expect(mockFetchAddressDetails).not.toHaveBeenCalled();
|
|
522
|
+
return [2 /*return*/];
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
}); });
|
|
526
|
+
it('should back to all search results after selecting container option', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
527
|
+
var onChange, user, input, option;
|
|
528
|
+
return __generator(this, function (_a) {
|
|
529
|
+
switch (_a.label) {
|
|
530
|
+
case 0:
|
|
531
|
+
onChange = jest.fn();
|
|
532
|
+
mockSearchAddresses.mockResolvedValue(mockAddressContainerSearchResults);
|
|
533
|
+
user = setUp({ onChange: onChange }).user;
|
|
534
|
+
input = react_2.screen.getByRole('combobox');
|
|
535
|
+
return [4 /*yield*/, user.click(input)];
|
|
536
|
+
case 1:
|
|
537
|
+
_a.sent();
|
|
538
|
+
return [4 /*yield*/, user.paste('Lisbon')];
|
|
539
|
+
case 2:
|
|
540
|
+
_a.sent();
|
|
541
|
+
expect(react_2.screen.queryByText('Back to all results')).not.toBeInTheDocument();
|
|
542
|
+
mockSearchAddresses.mockReset();
|
|
543
|
+
mockSearchAddresses.mockResolvedValue(mockAddressSearchResults);
|
|
544
|
+
option = react_2.screen.getByText('Container Option');
|
|
545
|
+
return [4 /*yield*/, user.click(option)];
|
|
546
|
+
case 3:
|
|
547
|
+
_a.sent();
|
|
548
|
+
expect(react_2.screen.getByText('Back to all results')).toBeInTheDocument();
|
|
549
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText('Back to all results'))];
|
|
550
|
+
case 4:
|
|
551
|
+
_a.sent();
|
|
552
|
+
expect(react_2.screen.queryByText('Back to all results')).not.toBeInTheDocument();
|
|
553
|
+
expect(react_2.screen.getByText('Container Option')).toBeInTheDocument();
|
|
554
|
+
return [2 /*return*/];
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
}); });
|
|
463
558
|
});
|
|
464
559
|
describe('Autocomplete settings', function () {
|
|
465
560
|
it('should use default autocomplete settings, when no settings from metadata', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -511,6 +606,7 @@ describe('AddressAutocompleteEditor', function () {
|
|
|
511
606
|
case 2:
|
|
512
607
|
_a.sent();
|
|
513
608
|
expect(mockSearchAddresses).not.toHaveBeenCalled();
|
|
609
|
+
expect(react_2.screen.getByText('Please enter at least 3 characters')).toBeInTheDocument();
|
|
514
610
|
return [4 /*yield*/, user.paste('sbon')];
|
|
515
611
|
case 3:
|
|
516
612
|
_a.sent();
|
|
@@ -8,3 +8,4 @@ export type AddressOption = {
|
|
|
8
8
|
export declare const convertSearchResultToOption: (result: AddressSearchResult) => AddressOption;
|
|
9
9
|
export declare const getOptionLabel: (option: AddressOption | string) => string;
|
|
10
10
|
export declare const isOptionEqualToValue: (option: AddressOption, value: string) => boolean;
|
|
11
|
+
export declare const isMinLength: (value: string, minLength: number) => boolean;
|