@reltio/components 1.4.2159 → 1.4.2160
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.d.ts +10 -0
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.js +223 -0
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.module.css.js +9 -0
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.test.d.ts +1 -0
- package/AddressAutocompleteEditor/AddressAutocompleteEditor.test.js +522 -0
- package/AddressAutocompleteEditor/helpers.d.ts +10 -0
- package/AddressAutocompleteEditor/helpers.js +18 -0
- package/AddressAutocompleteEditor/index.d.ts +1 -0
- package/AddressAutocompleteEditor/index.js +1 -0
- package/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.js +1 -1
- package/EditorsFactory/EditorsFactory.js +4 -0
- package/ReferenceAttributeEditor/ReferenceAttributeEditor.js +5 -3
- package/RelationEditor/RelationEditor.js +6 -4
- package/SimpleAttributeEditor/SimpleAttributeEditor.d.ts +1 -0
- package/SimpleAttributeEditor/SimpleAttributeEditor.js +15 -4
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.d.ts +10 -0
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.js +253 -0
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.module.css.js +9 -0
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.test.d.ts +1 -0
- package/cjs/AddressAutocompleteEditor/AddressAutocompleteEditor.test.js +527 -0
- package/cjs/AddressAutocompleteEditor/helpers.d.ts +10 -0
- package/cjs/AddressAutocompleteEditor/helpers.js +24 -0
- package/cjs/AddressAutocompleteEditor/index.d.ts +1 -0
- package/cjs/AddressAutocompleteEditor/index.js +5 -0
- package/cjs/EditModeAttributesPager/components/AttributeRenderer/AttributeRenderer.js +1 -1
- package/cjs/EditorsFactory/EditorsFactory.js +4 -0
- package/cjs/ReferenceAttributeEditor/ReferenceAttributeEditor.js +5 -3
- package/cjs/RelationEditor/RelationEditor.js +6 -4
- package/cjs/SimpleAttributeEditor/SimpleAttributeEditor.d.ts +1 -0
- package/cjs/SimpleAttributeEditor/SimpleAttributeEditor.js +14 -3
- package/cjs/contexts/AttributeValueContext/index.d.ts +3 -0
- package/cjs/contexts/AttributeValueContext/index.js +9 -0
- package/cjs/contexts/AutoCompleteContext/helpers.d.ts +24 -0
- package/cjs/contexts/AutoCompleteContext/helpers.js +165 -0
- package/cjs/contexts/AutoCompleteContext/index.d.ts +12 -0
- package/cjs/contexts/AutoCompleteContext/index.js +83 -0
- package/contexts/AttributeValueContext/index.d.ts +3 -0
- package/contexts/AttributeValueContext/index.js +3 -0
- package/contexts/AutoCompleteContext/helpers.d.ts +24 -0
- package/contexts/AutoCompleteContext/helpers.js +159 -0
- package/contexts/AutoCompleteContext/index.d.ts +12 -0
- package/contexts/AutoCompleteContext/index.js +56 -0
- package/package.json +2 -2
|
@@ -25,6 +25,7 @@ declare const _default: React.ForwardRefExoticComponent<Omit<{
|
|
|
25
25
|
ownError?: AttributeError;
|
|
26
26
|
highlightedError?: ContextType<typeof ScrollToElementContext>;
|
|
27
27
|
isEmptyEditor?: boolean;
|
|
28
|
+
isFirstEditor?: boolean;
|
|
28
29
|
} & Partial<{
|
|
29
30
|
[x: string]: any;
|
|
30
31
|
fieldName: any;
|
|
@@ -51,6 +51,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
51
51
|
var react_1 = __importStar(require("react"));
|
|
52
52
|
var classnames_1 = __importDefault(require("classnames"));
|
|
53
53
|
var ramda_1 = require("ramda");
|
|
54
|
+
var react_context_selector_1 = require("@fluentui/react-context-selector");
|
|
54
55
|
var Add_1 = __importDefault(require("@mui/icons-material/Add"));
|
|
55
56
|
var Delete_1 = __importDefault(require("@mui/icons-material/Delete"));
|
|
56
57
|
var Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
@@ -72,6 +73,8 @@ var useAutopopulationContextValue_1 = require("./useAutopopulationContextValue")
|
|
|
72
73
|
var useAttributeValuePermissions_1 = require("./useAttributeValuePermissions");
|
|
73
74
|
var DependentLookupAutopopulationContext_1 = require("../contexts/DependentLookupAutopopulationContext");
|
|
74
75
|
var styles_1 = require("./styles");
|
|
76
|
+
var AutoCompleteContext_1 = require("../contexts/AutoCompleteContext");
|
|
77
|
+
var AttributeValueContext_1 = require("../contexts/AttributeValueContext");
|
|
75
78
|
var AsyncMountPlaceholder = function () {
|
|
76
79
|
var styles = (0, styles_1.useStyles)();
|
|
77
80
|
return react_1.default.createElement("div", { className: styles.placeholder });
|
|
@@ -79,7 +82,7 @@ var AsyncMountPlaceholder = function () {
|
|
|
79
82
|
var SimpleAttributeEditor = function (_a) {
|
|
80
83
|
var _b, _c;
|
|
81
84
|
var _d;
|
|
82
|
-
var className = _a.className, attributeValue = _a.attributeValue, attributeType = _a.attributeType, isReltioCrosswalk = _a.isReltioCrosswalk, ownError = _a.ownError, mode = _a.mode, onAddOneMore = _a.onAddOneMore, onDeleteAttribute = _a.onDeleteAttribute, onChangeAttribute = _a.onChangeAttribute, onDeactivateError = _a.onDeactivateError, additionalControlsRenderer = _a.additionalControlsRenderer, state = _a.state, highlightedError = _a.highlightedError, _e = _a.isEmptyEditor, isEmptyEditor = _e === void 0 ? false : _e, otherProps = __rest(_a, ["className", "attributeValue", "attributeType", "isReltioCrosswalk", "ownError", "mode", "onAddOneMore", "onDeleteAttribute", "onChangeAttribute", "onDeactivateError", "additionalControlsRenderer", "state", "highlightedError", "isEmptyEditor"]);
|
|
85
|
+
var className = _a.className, attributeValue = _a.attributeValue, attributeType = _a.attributeType, isReltioCrosswalk = _a.isReltioCrosswalk, ownError = _a.ownError, mode = _a.mode, onAddOneMore = _a.onAddOneMore, onDeleteAttribute = _a.onDeleteAttribute, onChangeAttribute = _a.onChangeAttribute, onDeactivateError = _a.onDeactivateError, additionalControlsRenderer = _a.additionalControlsRenderer, state = _a.state, highlightedError = _a.highlightedError, _e = _a.isEmptyEditor, isEmptyEditor = _e === void 0 ? false : _e, isFirstEditor = _a.isFirstEditor, otherProps = __rest(_a, ["className", "attributeValue", "attributeType", "isReltioCrosswalk", "ownError", "mode", "onAddOneMore", "onDeleteAttribute", "onChangeAttribute", "onDeactivateError", "additionalControlsRenderer", "state", "highlightedError", "isEmptyEditor", "isFirstEditor"]);
|
|
83
86
|
var styles = (0, styles_1.useStyles)();
|
|
84
87
|
var deleted = state === 'deleted';
|
|
85
88
|
var edited = state === 'edited';
|
|
@@ -93,6 +96,7 @@ var SimpleAttributeEditor = function (_a) {
|
|
|
93
96
|
var showToEdit = canEdit && isEditableMode && !attributeValue.masked;
|
|
94
97
|
var errorMessage = (0, mdm_sdk_1.getErrorMessage)(ownError);
|
|
95
98
|
var dependentLookupEditorContext = (0, MdmModuleContext_1.useMdmDependentLookupEditorContext)(attributeValue, attributeType);
|
|
99
|
+
var isAutocompleteTriggerAttribute = (0, react_context_selector_1.useContextSelector)(AutoCompleteContext_1.AddressAutoCompleteContext, function (c) { return c === null || c === void 0 ? void 0 : c.isAutocompleteTriggerAttribute; });
|
|
96
100
|
var _g = (0, useScrollToAttributeError_1.useScrollToAttributeError)({ highlightedError: highlightedError, isSimple: true }), ref = _g.ref, errorClassName = _g.errorClassName;
|
|
97
101
|
(0, react_1.useEffect)(function () {
|
|
98
102
|
// when editor is empty but has default lookup code, onChangeAttribute will be called by useLookupsResolver
|
|
@@ -105,7 +109,13 @@ var SimpleAttributeEditor = function (_a) {
|
|
|
105
109
|
});
|
|
106
110
|
}
|
|
107
111
|
}, [isEmptyEditor]);
|
|
108
|
-
var dataTypeDefinition = (0, react_1.useMemo)(function () {
|
|
112
|
+
var dataTypeDefinition = (0, react_1.useMemo)(function () {
|
|
113
|
+
var dataTypeDefinition = (0, mdm_sdk_1.getAttrDataTypeDefinition)(attributeType);
|
|
114
|
+
if (isFirstEditor && (isAutocompleteTriggerAttribute === null || isAutocompleteTriggerAttribute === void 0 ? void 0 : isAutocompleteTriggerAttribute(attributeType))) {
|
|
115
|
+
return __assign(__assign({}, dataTypeDefinition), { type: mdm_sdk_1.DataTypes.TYPE_ADDRESS_AUTOCOMPLETE });
|
|
116
|
+
}
|
|
117
|
+
return dataTypeDefinition;
|
|
118
|
+
}, [attributeType, isAutocompleteTriggerAttribute, isFirstEditor]);
|
|
109
119
|
var value = (0, react_1.useMemo)(function () { return (0, attributesView_1.attributeValueToEditorValue)(attributeValue, dataTypeDefinition); }, [attributeValue, dataTypeDefinition]);
|
|
110
120
|
var deactivateError = (0, react_1.useCallback)(function () {
|
|
111
121
|
if (ownError) {
|
|
@@ -138,7 +148,8 @@ var SimpleAttributeEditor = function (_a) {
|
|
|
138
148
|
return (react_1.default.createElement("div", { ref: ref, "data-reltio-id": "simple-attribute-editor", className: (0, classnames_1.default)(styles.editor, className, errorClassName) },
|
|
139
149
|
react_1.default.createElement(ErrorWrapper_1.ErrorWrapper, { errorMessage: errorMessage, className: styles.errorWrapper },
|
|
140
150
|
react_1.default.createElement("div", { className: (0, classnames_1.default)(styles['editor-value'], (_b = {}, _b[styles.deleted] = deleted, _b), (_c = {}, _c[styles['editor-read-only-value']] = !showToEdit, _c)), "data-reltio-id": "reltio-attribute-value" }, showToEdit ? (react_1.default.createElement(DependentLookupAutopopulationContext_1.DependentLookupAutopopulationContext.Provider, { value: autopopulationContextValue },
|
|
141
|
-
react_1.default.createElement(
|
|
151
|
+
react_1.default.createElement(AttributeValueContext_1.AttributeValueContext.Provider, { value: attributeValue },
|
|
152
|
+
react_1.default.createElement(DataTypeValueEditor_1.DataTypeValueEditor, __assign({ fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attributeType.uri), value: value, dataTypeDefinition: dataTypeDefinition, error: hasError, onChange: onValueEditorChange, fullWidth: true }, dependentLookupEditorContext, otherProps, deletedProps))))) : (react_1.default.createElement(DataTypeValue_1.DataTypeValue, { value: (0, mdm_sdk_1.getAttributeValue)(attributeValue), dataTypeDefinition: dataTypeDefinition })))),
|
|
142
153
|
react_1.default.createElement("div", { "data-reltio-id": "reltio-attribute-actions", className: styles['editor-actions'] },
|
|
143
154
|
edited && (react_1.default.createElement(Typography_1.default, { variant: "caption", className: styles.editedLabel },
|
|
144
155
|
"(",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AttributeValueContext = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
exports.AttributeValueContext = react_1.default.createContext(null);
|
|
9
|
+
exports.AttributeValueContext.displayName = 'AttributeValueContext';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Entity, AttributeType, Metadata, AddressAutoCompleteConfig, ModifyAttributePayload, AddressDetails } from '@reltio/mdm-sdk';
|
|
2
|
+
export type AutocompleteSettings = {
|
|
3
|
+
minSearchTextLen: number;
|
|
4
|
+
countries: string[];
|
|
5
|
+
countryNames: string[];
|
|
6
|
+
limit: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const getSettings: ({ metadata, modifiedEntity, triggerAttributeValueUri, triggerAttributeTypeUri, addressAutoCompleteConfig }: {
|
|
9
|
+
metadata: Metadata;
|
|
10
|
+
modifiedEntity: Entity;
|
|
11
|
+
triggerAttributeValueUri: string;
|
|
12
|
+
triggerAttributeTypeUri: string;
|
|
13
|
+
addressAutoCompleteConfig: AddressAutoCompleteConfig;
|
|
14
|
+
}) => AutocompleteSettings;
|
|
15
|
+
export declare const isTriggerAttribute: (attributeType: AttributeType, inputMapping: AddressAutoCompleteConfig["inputMapping"]) => boolean;
|
|
16
|
+
export declare const modifyAttributes: ({ outputMapping, modifiedEntity, metadata, triggerAttributeTypeUri, triggerAttributeValueUri, values, modifyAttribute }: {
|
|
17
|
+
outputMapping: AddressAutoCompleteConfig["outputMapping"];
|
|
18
|
+
modifiedEntity: Entity;
|
|
19
|
+
metadata: Metadata;
|
|
20
|
+
modifyAttribute: (attribute: ModifyAttributePayload) => void;
|
|
21
|
+
triggerAttributeTypeUri: string;
|
|
22
|
+
triggerAttributeValueUri: string;
|
|
23
|
+
values: AddressDetails;
|
|
24
|
+
}) => void;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.modifyAttributes = exports.isTriggerAttribute = exports.getSettings = void 0;
|
|
15
|
+
var ramda_1 = require("ramda");
|
|
16
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
17
|
+
var MINIMUM_NESTED_LEVEL = 1;
|
|
18
|
+
var MIN_SEARCH_TEXT_LEN = 3;
|
|
19
|
+
var SEARCH_RESULTS_LIMIT = 10;
|
|
20
|
+
var COUNTRIES_DELIMETER = ';';
|
|
21
|
+
var genAttributeValueUri = function (_a) {
|
|
22
|
+
var _b;
|
|
23
|
+
var attributeType = _a.attributeType, parentValueUri = _a.parentValueUri, attributeTypeUri = _a.attributeTypeUri, modifiedEntity = _a.modifiedEntity, metadata = _a.metadata, existingValues = _a.existingValues, _c = _a.hasValues, hasValues = _c === void 0 ? true : _c;
|
|
24
|
+
var currentExistingValue = existingValues.find(function (_a) {
|
|
25
|
+
var uri = _a.uri;
|
|
26
|
+
return (0, mdm_sdk_1.areOneHierarchyUris)(uri, parentValueUri);
|
|
27
|
+
});
|
|
28
|
+
var hasExistingValues = Boolean(hasValues && currentExistingValue);
|
|
29
|
+
var currentLevelUri = hasExistingValues
|
|
30
|
+
? currentExistingValue.uri
|
|
31
|
+
: (0, mdm_sdk_1.generateUri)(parentValueUri, attributeType.name);
|
|
32
|
+
if ((0, mdm_sdk_1.isNested)(attributeType)) {
|
|
33
|
+
var subAttributes = attributeType.attributes;
|
|
34
|
+
if (subAttributes === null || subAttributes === void 0 ? void 0 : subAttributes.length) {
|
|
35
|
+
var subAttrubuteType = subAttributes.find(function (_a) {
|
|
36
|
+
var uri = _a.uri;
|
|
37
|
+
return (0, mdm_sdk_1.areOneHierarchyUris)(attributeTypeUri, uri);
|
|
38
|
+
});
|
|
39
|
+
if (subAttrubuteType) {
|
|
40
|
+
return genAttributeValueUri({
|
|
41
|
+
attributeType: subAttrubuteType,
|
|
42
|
+
parentValueUri: currentLevelUri,
|
|
43
|
+
attributeTypeUri: attributeTypeUri,
|
|
44
|
+
modifiedEntity: modifiedEntity,
|
|
45
|
+
metadata: metadata,
|
|
46
|
+
existingValues: ((_b = currentExistingValue === null || currentExistingValue === void 0 ? void 0 : currentExistingValue.value) === null || _b === void 0 ? void 0 : _b[subAttrubuteType.name]) || [],
|
|
47
|
+
hasValues: hasExistingValues
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return currentLevelUri;
|
|
54
|
+
};
|
|
55
|
+
var generateAttributeValueUri = function (_a) {
|
|
56
|
+
var attributeTypeUri = _a.attributeTypeUri, modifiedEntity = _a.modifiedEntity, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, triggerAttributeValueUri = _a.triggerAttributeValueUri, metadata = _a.metadata;
|
|
57
|
+
var triggerAttributeNestedLevel = triggerAttributeTypeUri.split('/attributes/').length - 1;
|
|
58
|
+
var attributeTypeRootUri = attributeTypeUri
|
|
59
|
+
.split('/attributes/')
|
|
60
|
+
.slice(0, Math.max(triggerAttributeNestedLevel, MINIMUM_NESTED_LEVEL) + 1)
|
|
61
|
+
.join('/attributes/');
|
|
62
|
+
var triggerAttributeValueParentUri = (0, mdm_sdk_1.getParentUri)(triggerAttributeValueUri);
|
|
63
|
+
var rootAttributeType = (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, attributeTypeRootUri, modifiedEntity.type);
|
|
64
|
+
var existingValues = (0, mdm_sdk_1.findAttributeValuesByTypeUri)(metadata, modifiedEntity, rootAttributeType.uri).filter(mdm_sdk_1.isOv);
|
|
65
|
+
return genAttributeValueUri({
|
|
66
|
+
attributeType: rootAttributeType,
|
|
67
|
+
parentValueUri: triggerAttributeValueParentUri,
|
|
68
|
+
attributeTypeUri: attributeTypeUri,
|
|
69
|
+
modifiedEntity: modifiedEntity,
|
|
70
|
+
existingValues: existingValues,
|
|
71
|
+
metadata: metadata
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
var getCountriesFromValues = function (_a) {
|
|
75
|
+
var _b;
|
|
76
|
+
var metadata = _a.metadata, modifiedEntity = _a.modifiedEntity, triggerAttributeValueUri = _a.triggerAttributeValueUri, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, inputMapping = _a.inputMapping;
|
|
77
|
+
if (!triggerAttributeValueUri || !triggerAttributeTypeUri || !inputMapping || !modifiedEntity) {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
var triggerAttributeValueParentUri = (0, mdm_sdk_1.getParentUri)(triggerAttributeValueUri);
|
|
81
|
+
var triggerAttributeTypeParentUri = (0, mdm_sdk_1.getParentUri)(triggerAttributeTypeUri);
|
|
82
|
+
var countriesMapping = (_b = inputMapping
|
|
83
|
+
.filter(function (_a) {
|
|
84
|
+
var cleanseAttribute = _a.cleanseAttribute;
|
|
85
|
+
return cleanseAttribute === mdm_sdk_1.InputCleanseAttributeType.Countries;
|
|
86
|
+
})
|
|
87
|
+
.filter(function (_a) {
|
|
88
|
+
var attribute = _a.attribute;
|
|
89
|
+
var attributeParentUri = (0, mdm_sdk_1.getParentUri)(attribute);
|
|
90
|
+
return (0, mdm_sdk_1.areOneHierarchyUris)(triggerAttributeTypeParentUri, attributeParentUri);
|
|
91
|
+
})
|
|
92
|
+
.sort(function (a, b) { return b.attribute.length - a.attribute.length; })) === null || _b === void 0 ? void 0 : _b[0];
|
|
93
|
+
var countryAttributeType = (countriesMapping === null || countriesMapping === void 0 ? void 0 : countriesMapping.attribute) &&
|
|
94
|
+
(0, mdm_sdk_1.findAttributeTypeByUri)(metadata, countriesMapping === null || countriesMapping === void 0 ? void 0 : countriesMapping.attribute, modifiedEntity.type);
|
|
95
|
+
if (countryAttributeType && !(0, mdm_sdk_1.isComplexAttribute)(countryAttributeType)) {
|
|
96
|
+
var existingCountriesValues = (0, mdm_sdk_1.findAttributeValuesByTypeUri)(metadata, modifiedEntity, countriesMapping.attribute);
|
|
97
|
+
var currentCountryValues = existingCountriesValues
|
|
98
|
+
.filter(mdm_sdk_1.isOv)
|
|
99
|
+
.filter(function (countryValue) {
|
|
100
|
+
return (0, mdm_sdk_1.areOneHierarchyUris)(triggerAttributeValueParentUri, (0, mdm_sdk_1.getParentUri)(countryValue.uri));
|
|
101
|
+
})
|
|
102
|
+
.filter(function (countryValue) { return countryValue.value; });
|
|
103
|
+
if (currentCountryValues === null || currentCountryValues === void 0 ? void 0 : currentCountryValues.length) {
|
|
104
|
+
var countries = currentCountryValues.map(function (value) { return value.lookupCode || value.value.toString(); });
|
|
105
|
+
return {
|
|
106
|
+
countries: countries,
|
|
107
|
+
countryNames: (0, ramda_1.pluck)('value', currentCountryValues)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
var getSettings = function (_a) {
|
|
113
|
+
var _b, _c;
|
|
114
|
+
var metadata = _a.metadata, modifiedEntity = _a.modifiedEntity, triggerAttributeValueUri = _a.triggerAttributeValueUri, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, addressAutoCompleteConfig = _a.addressAutoCompleteConfig;
|
|
115
|
+
var _d = addressAutoCompleteConfig.inputMapping, inputMapping = _d === void 0 ? [] : _d, minSearchTextLen = addressAutoCompleteConfig.minSearchTextLen, providerOpts = addressAutoCompleteConfig.providerOpts;
|
|
116
|
+
return __assign({ minSearchTextLen: minSearchTextLen || MIN_SEARCH_TEXT_LEN, limit: (providerOpts === null || providerOpts === void 0 ? void 0 : providerOpts.limit) || SEARCH_RESULTS_LIMIT, countries: ((_b = providerOpts === null || providerOpts === void 0 ? void 0 : providerOpts.defaultCountries) === null || _b === void 0 ? void 0 : _b.split(COUNTRIES_DELIMETER)) || [], countryNames: ((_c = providerOpts === null || providerOpts === void 0 ? void 0 : providerOpts.defaultCountries) === null || _c === void 0 ? void 0 : _c.split(COUNTRIES_DELIMETER)) || [] }, getCountriesFromValues({
|
|
117
|
+
metadata: metadata,
|
|
118
|
+
modifiedEntity: modifiedEntity,
|
|
119
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
120
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
121
|
+
inputMapping: inputMapping
|
|
122
|
+
}));
|
|
123
|
+
};
|
|
124
|
+
exports.getSettings = getSettings;
|
|
125
|
+
var isTriggerAttribute = function (attributeType, inputMapping) {
|
|
126
|
+
var allowedTypes = [mdm_sdk_1.DataTypes.TYPE_STRING, mdm_sdk_1.DataTypes.TYPE_TEXT, mdm_sdk_1.DataTypes.TYPE_BLOB];
|
|
127
|
+
return (allowedTypes.includes(attributeType.type) &&
|
|
128
|
+
inputMapping.some(function (_a) {
|
|
129
|
+
var attribute = _a.attribute, cleanseAttribute = _a.cleanseAttribute;
|
|
130
|
+
return attributeType.uri === attribute && cleanseAttribute === mdm_sdk_1.InputCleanseAttributeType.Text;
|
|
131
|
+
}));
|
|
132
|
+
};
|
|
133
|
+
exports.isTriggerAttribute = isTriggerAttribute;
|
|
134
|
+
var modifyAttributes = function (_a) {
|
|
135
|
+
var outputMapping = _a.outputMapping, modifiedEntity = _a.modifiedEntity, metadata = _a.metadata, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, triggerAttributeValueUri = _a.triggerAttributeValueUri, values = _a.values, modifyAttribute = _a.modifyAttribute;
|
|
136
|
+
var parentUri = (0, mdm_sdk_1.getParentUri)(triggerAttributeTypeUri);
|
|
137
|
+
outputMapping
|
|
138
|
+
.filter(function (_a) {
|
|
139
|
+
var attribute = _a.attribute;
|
|
140
|
+
return (0, mdm_sdk_1.areOneHierarchyUris)(attribute, parentUri);
|
|
141
|
+
})
|
|
142
|
+
.forEach(function (_a) {
|
|
143
|
+
var attributeTypeUri = _a.attribute, cleanseAttribute = _a.cleanseAttribute;
|
|
144
|
+
var value = values[cleanseAttribute] || '';
|
|
145
|
+
var attributeType = (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, attributeTypeUri, modifiedEntity.type);
|
|
146
|
+
if (!attributeType) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
var uri = generateAttributeValueUri({
|
|
150
|
+
attributeTypeUri: attributeTypeUri,
|
|
151
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
152
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
153
|
+
modifiedEntity: modifiedEntity,
|
|
154
|
+
metadata: metadata
|
|
155
|
+
});
|
|
156
|
+
if (uri) {
|
|
157
|
+
modifyAttribute({
|
|
158
|
+
value: value,
|
|
159
|
+
uri: uri,
|
|
160
|
+
attributeType: attributeType
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
exports.modifyAttributes = modifyAttributes;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AttributeType, AddressDetails } from '@reltio/mdm-sdk';
|
|
3
|
+
import { AutocompleteSettings } from './helpers';
|
|
4
|
+
export declare const AddressAutoCompleteContext: import("@fluentui/react-context-selector").Context<{
|
|
5
|
+
onPopulateAttributes: (triggerAttributeTypeUri: string, triggerAttributeValueUri: string, value: AddressDetails) => void;
|
|
6
|
+
isAutocompleteTriggerAttribute: (attributeType: AttributeType) => boolean;
|
|
7
|
+
getAutocompleteSettings: (triggerAttributeTypeUri: string, triggerAttributeValueUri: string) => AutocompleteSettings;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const AddressAutoCompleteProvider: ({ children, entityUri }: {
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
entityUri?: string;
|
|
12
|
+
}) => React.JSX.Element;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.AddressAutoCompleteProvider = exports.AddressAutoCompleteContext = void 0;
|
|
27
|
+
var react_1 = __importStar(require("react"));
|
|
28
|
+
var react_context_selector_1 = require("@fluentui/react-context-selector");
|
|
29
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
30
|
+
var MdmModuleContext_1 = require("../MdmModuleContext");
|
|
31
|
+
var helpers_1 = require("./helpers");
|
|
32
|
+
exports.AddressAutoCompleteContext = (0, react_context_selector_1.createContext)(null);
|
|
33
|
+
var AddressAutoCompleteProvider = function (_a) {
|
|
34
|
+
var children = _a.children, entityUri = _a.entityUri;
|
|
35
|
+
var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
|
|
36
|
+
var modifyAttribute = (0, MdmModuleContext_1.useMdmAction)('modifyAttribute');
|
|
37
|
+
var mdmEntityUri = (0, MdmModuleContext_1.useMdmEntityUri)();
|
|
38
|
+
var modifiedEntity = (0, MdmModuleContext_1.useMdmModifiedEntity)(entityUri || mdmEntityUri) || {};
|
|
39
|
+
var addressAutoCompleteConfig = (0, react_1.useMemo)(function () {
|
|
40
|
+
var _a;
|
|
41
|
+
var entityType = (modifiedEntity === null || modifiedEntity === void 0 ? void 0 : modifiedEntity.type) && metadata && (0, mdm_sdk_1.getEntityType)(metadata, modifiedEntity.type);
|
|
42
|
+
return (((_a = entityType === null || entityType === void 0 ? void 0 : entityType.cleanseConfig) === null || _a === void 0 ? void 0 : _a.addressAutoCompleteConfig) ||
|
|
43
|
+
{ outputMapping: [], inputMapping: [] });
|
|
44
|
+
}, [modifiedEntity === null || modifiedEntity === void 0 ? void 0 : modifiedEntity.type, metadata]);
|
|
45
|
+
var onPopulateAttributes = (0, react_1.useCallback)(function (triggerAttributeTypeUri, triggerAttributeValueUri, values) {
|
|
46
|
+
if (!(addressAutoCompleteConfig === null || addressAutoCompleteConfig === void 0 ? void 0 : addressAutoCompleteConfig.outputMapping) ||
|
|
47
|
+
!(modifiedEntity === null || modifiedEntity === void 0 ? void 0 : modifiedEntity.uri) ||
|
|
48
|
+
!triggerAttributeTypeUri ||
|
|
49
|
+
!values) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
var outputMapping = addressAutoCompleteConfig.outputMapping;
|
|
53
|
+
(0, helpers_1.modifyAttributes)({
|
|
54
|
+
outputMapping: outputMapping,
|
|
55
|
+
modifiedEntity: modifiedEntity,
|
|
56
|
+
metadata: metadata,
|
|
57
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
58
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
59
|
+
values: values,
|
|
60
|
+
modifyAttribute: modifyAttribute
|
|
61
|
+
});
|
|
62
|
+
}, [addressAutoCompleteConfig, modifiedEntity, metadata, modifyAttribute]);
|
|
63
|
+
var isAutocompleteTriggerAttribute = (0, react_1.useCallback)(function (attributeType) {
|
|
64
|
+
var _a = addressAutoCompleteConfig.inputMapping, inputMapping = _a === void 0 ? [] : _a;
|
|
65
|
+
return (0, helpers_1.isTriggerAttribute)(attributeType, inputMapping);
|
|
66
|
+
}, [addressAutoCompleteConfig]);
|
|
67
|
+
var getAutocompleteSettings = (0, react_1.useCallback)(function (triggerAttributeTypeUri, triggerAttributeValueUri) {
|
|
68
|
+
return (0, helpers_1.getSettings)({
|
|
69
|
+
metadata: metadata,
|
|
70
|
+
modifiedEntity: modifiedEntity,
|
|
71
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
72
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
73
|
+
addressAutoCompleteConfig: addressAutoCompleteConfig
|
|
74
|
+
});
|
|
75
|
+
}, [addressAutoCompleteConfig, metadata, modifiedEntity]);
|
|
76
|
+
var contextValue = (0, react_1.useMemo)(function () { return ({
|
|
77
|
+
onPopulateAttributes: onPopulateAttributes,
|
|
78
|
+
isAutocompleteTriggerAttribute: isAutocompleteTriggerAttribute,
|
|
79
|
+
getAutocompleteSettings: getAutocompleteSettings
|
|
80
|
+
}); }, [onPopulateAttributes, isAutocompleteTriggerAttribute, getAutocompleteSettings]);
|
|
81
|
+
return react_1.default.createElement(exports.AddressAutoCompleteContext.Provider, { value: contextValue }, children);
|
|
82
|
+
};
|
|
83
|
+
exports.AddressAutoCompleteProvider = AddressAutoCompleteProvider;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Entity, AttributeType, Metadata, AddressAutoCompleteConfig, ModifyAttributePayload, AddressDetails } from '@reltio/mdm-sdk';
|
|
2
|
+
export type AutocompleteSettings = {
|
|
3
|
+
minSearchTextLen: number;
|
|
4
|
+
countries: string[];
|
|
5
|
+
countryNames: string[];
|
|
6
|
+
limit: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const getSettings: ({ metadata, modifiedEntity, triggerAttributeValueUri, triggerAttributeTypeUri, addressAutoCompleteConfig }: {
|
|
9
|
+
metadata: Metadata;
|
|
10
|
+
modifiedEntity: Entity;
|
|
11
|
+
triggerAttributeValueUri: string;
|
|
12
|
+
triggerAttributeTypeUri: string;
|
|
13
|
+
addressAutoCompleteConfig: AddressAutoCompleteConfig;
|
|
14
|
+
}) => AutocompleteSettings;
|
|
15
|
+
export declare const isTriggerAttribute: (attributeType: AttributeType, inputMapping: AddressAutoCompleteConfig["inputMapping"]) => boolean;
|
|
16
|
+
export declare const modifyAttributes: ({ outputMapping, modifiedEntity, metadata, triggerAttributeTypeUri, triggerAttributeValueUri, values, modifyAttribute }: {
|
|
17
|
+
outputMapping: AddressAutoCompleteConfig["outputMapping"];
|
|
18
|
+
modifiedEntity: Entity;
|
|
19
|
+
metadata: Metadata;
|
|
20
|
+
modifyAttribute: (attribute: ModifyAttributePayload) => void;
|
|
21
|
+
triggerAttributeTypeUri: string;
|
|
22
|
+
triggerAttributeValueUri: string;
|
|
23
|
+
values: AddressDetails;
|
|
24
|
+
}) => void;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { pluck } from 'ramda';
|
|
13
|
+
import { findAttributeTypeByUri, findAttributeValuesByTypeUri, isComplexAttribute, isOv, getParentUri, generateUri, InputCleanseAttributeType, areOneHierarchyUris, DataTypes, isNested } from '@reltio/mdm-sdk';
|
|
14
|
+
var MINIMUM_NESTED_LEVEL = 1;
|
|
15
|
+
var MIN_SEARCH_TEXT_LEN = 3;
|
|
16
|
+
var SEARCH_RESULTS_LIMIT = 10;
|
|
17
|
+
var COUNTRIES_DELIMETER = ';';
|
|
18
|
+
var genAttributeValueUri = function (_a) {
|
|
19
|
+
var _b;
|
|
20
|
+
var attributeType = _a.attributeType, parentValueUri = _a.parentValueUri, attributeTypeUri = _a.attributeTypeUri, modifiedEntity = _a.modifiedEntity, metadata = _a.metadata, existingValues = _a.existingValues, _c = _a.hasValues, hasValues = _c === void 0 ? true : _c;
|
|
21
|
+
var currentExistingValue = existingValues.find(function (_a) {
|
|
22
|
+
var uri = _a.uri;
|
|
23
|
+
return areOneHierarchyUris(uri, parentValueUri);
|
|
24
|
+
});
|
|
25
|
+
var hasExistingValues = Boolean(hasValues && currentExistingValue);
|
|
26
|
+
var currentLevelUri = hasExistingValues
|
|
27
|
+
? currentExistingValue.uri
|
|
28
|
+
: generateUri(parentValueUri, attributeType.name);
|
|
29
|
+
if (isNested(attributeType)) {
|
|
30
|
+
var subAttributes = attributeType.attributes;
|
|
31
|
+
if (subAttributes === null || subAttributes === void 0 ? void 0 : subAttributes.length) {
|
|
32
|
+
var subAttrubuteType = subAttributes.find(function (_a) {
|
|
33
|
+
var uri = _a.uri;
|
|
34
|
+
return areOneHierarchyUris(attributeTypeUri, uri);
|
|
35
|
+
});
|
|
36
|
+
if (subAttrubuteType) {
|
|
37
|
+
return genAttributeValueUri({
|
|
38
|
+
attributeType: subAttrubuteType,
|
|
39
|
+
parentValueUri: currentLevelUri,
|
|
40
|
+
attributeTypeUri: attributeTypeUri,
|
|
41
|
+
modifiedEntity: modifiedEntity,
|
|
42
|
+
metadata: metadata,
|
|
43
|
+
existingValues: ((_b = currentExistingValue === null || currentExistingValue === void 0 ? void 0 : currentExistingValue.value) === null || _b === void 0 ? void 0 : _b[subAttrubuteType.name]) || [],
|
|
44
|
+
hasValues: hasExistingValues
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return currentLevelUri;
|
|
51
|
+
};
|
|
52
|
+
var generateAttributeValueUri = function (_a) {
|
|
53
|
+
var attributeTypeUri = _a.attributeTypeUri, modifiedEntity = _a.modifiedEntity, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, triggerAttributeValueUri = _a.triggerAttributeValueUri, metadata = _a.metadata;
|
|
54
|
+
var triggerAttributeNestedLevel = triggerAttributeTypeUri.split('/attributes/').length - 1;
|
|
55
|
+
var attributeTypeRootUri = attributeTypeUri
|
|
56
|
+
.split('/attributes/')
|
|
57
|
+
.slice(0, Math.max(triggerAttributeNestedLevel, MINIMUM_NESTED_LEVEL) + 1)
|
|
58
|
+
.join('/attributes/');
|
|
59
|
+
var triggerAttributeValueParentUri = getParentUri(triggerAttributeValueUri);
|
|
60
|
+
var rootAttributeType = findAttributeTypeByUri(metadata, attributeTypeRootUri, modifiedEntity.type);
|
|
61
|
+
var existingValues = findAttributeValuesByTypeUri(metadata, modifiedEntity, rootAttributeType.uri).filter(isOv);
|
|
62
|
+
return genAttributeValueUri({
|
|
63
|
+
attributeType: rootAttributeType,
|
|
64
|
+
parentValueUri: triggerAttributeValueParentUri,
|
|
65
|
+
attributeTypeUri: attributeTypeUri,
|
|
66
|
+
modifiedEntity: modifiedEntity,
|
|
67
|
+
existingValues: existingValues,
|
|
68
|
+
metadata: metadata
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
var getCountriesFromValues = function (_a) {
|
|
72
|
+
var _b;
|
|
73
|
+
var metadata = _a.metadata, modifiedEntity = _a.modifiedEntity, triggerAttributeValueUri = _a.triggerAttributeValueUri, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, inputMapping = _a.inputMapping;
|
|
74
|
+
if (!triggerAttributeValueUri || !triggerAttributeTypeUri || !inputMapping || !modifiedEntity) {
|
|
75
|
+
return {};
|
|
76
|
+
}
|
|
77
|
+
var triggerAttributeValueParentUri = getParentUri(triggerAttributeValueUri);
|
|
78
|
+
var triggerAttributeTypeParentUri = getParentUri(triggerAttributeTypeUri);
|
|
79
|
+
var countriesMapping = (_b = inputMapping
|
|
80
|
+
.filter(function (_a) {
|
|
81
|
+
var cleanseAttribute = _a.cleanseAttribute;
|
|
82
|
+
return cleanseAttribute === InputCleanseAttributeType.Countries;
|
|
83
|
+
})
|
|
84
|
+
.filter(function (_a) {
|
|
85
|
+
var attribute = _a.attribute;
|
|
86
|
+
var attributeParentUri = getParentUri(attribute);
|
|
87
|
+
return areOneHierarchyUris(triggerAttributeTypeParentUri, attributeParentUri);
|
|
88
|
+
})
|
|
89
|
+
.sort(function (a, b) { return b.attribute.length - a.attribute.length; })) === null || _b === void 0 ? void 0 : _b[0];
|
|
90
|
+
var countryAttributeType = (countriesMapping === null || countriesMapping === void 0 ? void 0 : countriesMapping.attribute) &&
|
|
91
|
+
findAttributeTypeByUri(metadata, countriesMapping === null || countriesMapping === void 0 ? void 0 : countriesMapping.attribute, modifiedEntity.type);
|
|
92
|
+
if (countryAttributeType && !isComplexAttribute(countryAttributeType)) {
|
|
93
|
+
var existingCountriesValues = findAttributeValuesByTypeUri(metadata, modifiedEntity, countriesMapping.attribute);
|
|
94
|
+
var currentCountryValues = existingCountriesValues
|
|
95
|
+
.filter(isOv)
|
|
96
|
+
.filter(function (countryValue) {
|
|
97
|
+
return areOneHierarchyUris(triggerAttributeValueParentUri, getParentUri(countryValue.uri));
|
|
98
|
+
})
|
|
99
|
+
.filter(function (countryValue) { return countryValue.value; });
|
|
100
|
+
if (currentCountryValues === null || currentCountryValues === void 0 ? void 0 : currentCountryValues.length) {
|
|
101
|
+
var countries = currentCountryValues.map(function (value) { return value.lookupCode || value.value.toString(); });
|
|
102
|
+
return {
|
|
103
|
+
countries: countries,
|
|
104
|
+
countryNames: pluck('value', currentCountryValues)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
export var getSettings = function (_a) {
|
|
110
|
+
var _b, _c;
|
|
111
|
+
var metadata = _a.metadata, modifiedEntity = _a.modifiedEntity, triggerAttributeValueUri = _a.triggerAttributeValueUri, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, addressAutoCompleteConfig = _a.addressAutoCompleteConfig;
|
|
112
|
+
var _d = addressAutoCompleteConfig.inputMapping, inputMapping = _d === void 0 ? [] : _d, minSearchTextLen = addressAutoCompleteConfig.minSearchTextLen, providerOpts = addressAutoCompleteConfig.providerOpts;
|
|
113
|
+
return __assign({ minSearchTextLen: minSearchTextLen || MIN_SEARCH_TEXT_LEN, limit: (providerOpts === null || providerOpts === void 0 ? void 0 : providerOpts.limit) || SEARCH_RESULTS_LIMIT, countries: ((_b = providerOpts === null || providerOpts === void 0 ? void 0 : providerOpts.defaultCountries) === null || _b === void 0 ? void 0 : _b.split(COUNTRIES_DELIMETER)) || [], countryNames: ((_c = providerOpts === null || providerOpts === void 0 ? void 0 : providerOpts.defaultCountries) === null || _c === void 0 ? void 0 : _c.split(COUNTRIES_DELIMETER)) || [] }, getCountriesFromValues({
|
|
114
|
+
metadata: metadata,
|
|
115
|
+
modifiedEntity: modifiedEntity,
|
|
116
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
117
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
118
|
+
inputMapping: inputMapping
|
|
119
|
+
}));
|
|
120
|
+
};
|
|
121
|
+
export var isTriggerAttribute = function (attributeType, inputMapping) {
|
|
122
|
+
var allowedTypes = [DataTypes.TYPE_STRING, DataTypes.TYPE_TEXT, DataTypes.TYPE_BLOB];
|
|
123
|
+
return (allowedTypes.includes(attributeType.type) &&
|
|
124
|
+
inputMapping.some(function (_a) {
|
|
125
|
+
var attribute = _a.attribute, cleanseAttribute = _a.cleanseAttribute;
|
|
126
|
+
return attributeType.uri === attribute && cleanseAttribute === InputCleanseAttributeType.Text;
|
|
127
|
+
}));
|
|
128
|
+
};
|
|
129
|
+
export var modifyAttributes = function (_a) {
|
|
130
|
+
var outputMapping = _a.outputMapping, modifiedEntity = _a.modifiedEntity, metadata = _a.metadata, triggerAttributeTypeUri = _a.triggerAttributeTypeUri, triggerAttributeValueUri = _a.triggerAttributeValueUri, values = _a.values, modifyAttribute = _a.modifyAttribute;
|
|
131
|
+
var parentUri = getParentUri(triggerAttributeTypeUri);
|
|
132
|
+
outputMapping
|
|
133
|
+
.filter(function (_a) {
|
|
134
|
+
var attribute = _a.attribute;
|
|
135
|
+
return areOneHierarchyUris(attribute, parentUri);
|
|
136
|
+
})
|
|
137
|
+
.forEach(function (_a) {
|
|
138
|
+
var attributeTypeUri = _a.attribute, cleanseAttribute = _a.cleanseAttribute;
|
|
139
|
+
var value = values[cleanseAttribute] || '';
|
|
140
|
+
var attributeType = findAttributeTypeByUri(metadata, attributeTypeUri, modifiedEntity.type);
|
|
141
|
+
if (!attributeType) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
var uri = generateAttributeValueUri({
|
|
145
|
+
attributeTypeUri: attributeTypeUri,
|
|
146
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
147
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
148
|
+
modifiedEntity: modifiedEntity,
|
|
149
|
+
metadata: metadata
|
|
150
|
+
});
|
|
151
|
+
if (uri) {
|
|
152
|
+
modifyAttribute({
|
|
153
|
+
value: value,
|
|
154
|
+
uri: uri,
|
|
155
|
+
attributeType: attributeType
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AttributeType, AddressDetails } from '@reltio/mdm-sdk';
|
|
3
|
+
import { AutocompleteSettings } from './helpers';
|
|
4
|
+
export declare const AddressAutoCompleteContext: import("@fluentui/react-context-selector").Context<{
|
|
5
|
+
onPopulateAttributes: (triggerAttributeTypeUri: string, triggerAttributeValueUri: string, value: AddressDetails) => void;
|
|
6
|
+
isAutocompleteTriggerAttribute: (attributeType: AttributeType) => boolean;
|
|
7
|
+
getAutocompleteSettings: (triggerAttributeTypeUri: string, triggerAttributeValueUri: string) => AutocompleteSettings;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const AddressAutoCompleteProvider: ({ children, entityUri }: {
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
entityUri?: string;
|
|
12
|
+
}) => React.JSX.Element;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React, { useCallback, useMemo } from 'react';
|
|
2
|
+
import { createContext } from '@fluentui/react-context-selector';
|
|
3
|
+
import { getEntityType } from '@reltio/mdm-sdk';
|
|
4
|
+
import { useMdmAction, useMdmEntityUri, useMdmMetadata, useMdmModifiedEntity } from '../MdmModuleContext';
|
|
5
|
+
import { getSettings, isTriggerAttribute, modifyAttributes } from './helpers';
|
|
6
|
+
export var AddressAutoCompleteContext = createContext(null);
|
|
7
|
+
export var AddressAutoCompleteProvider = function (_a) {
|
|
8
|
+
var children = _a.children, entityUri = _a.entityUri;
|
|
9
|
+
var metadata = useMdmMetadata();
|
|
10
|
+
var modifyAttribute = useMdmAction('modifyAttribute');
|
|
11
|
+
var mdmEntityUri = useMdmEntityUri();
|
|
12
|
+
var modifiedEntity = useMdmModifiedEntity(entityUri || mdmEntityUri) || {};
|
|
13
|
+
var addressAutoCompleteConfig = useMemo(function () {
|
|
14
|
+
var _a;
|
|
15
|
+
var entityType = (modifiedEntity === null || modifiedEntity === void 0 ? void 0 : modifiedEntity.type) && metadata && getEntityType(metadata, modifiedEntity.type);
|
|
16
|
+
return (((_a = entityType === null || entityType === void 0 ? void 0 : entityType.cleanseConfig) === null || _a === void 0 ? void 0 : _a.addressAutoCompleteConfig) ||
|
|
17
|
+
{ outputMapping: [], inputMapping: [] });
|
|
18
|
+
}, [modifiedEntity === null || modifiedEntity === void 0 ? void 0 : modifiedEntity.type, metadata]);
|
|
19
|
+
var onPopulateAttributes = useCallback(function (triggerAttributeTypeUri, triggerAttributeValueUri, values) {
|
|
20
|
+
if (!(addressAutoCompleteConfig === null || addressAutoCompleteConfig === void 0 ? void 0 : addressAutoCompleteConfig.outputMapping) ||
|
|
21
|
+
!(modifiedEntity === null || modifiedEntity === void 0 ? void 0 : modifiedEntity.uri) ||
|
|
22
|
+
!triggerAttributeTypeUri ||
|
|
23
|
+
!values) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
var outputMapping = addressAutoCompleteConfig.outputMapping;
|
|
27
|
+
modifyAttributes({
|
|
28
|
+
outputMapping: outputMapping,
|
|
29
|
+
modifiedEntity: modifiedEntity,
|
|
30
|
+
metadata: metadata,
|
|
31
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
32
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
33
|
+
values: values,
|
|
34
|
+
modifyAttribute: modifyAttribute
|
|
35
|
+
});
|
|
36
|
+
}, [addressAutoCompleteConfig, modifiedEntity, metadata, modifyAttribute]);
|
|
37
|
+
var isAutocompleteTriggerAttribute = useCallback(function (attributeType) {
|
|
38
|
+
var _a = addressAutoCompleteConfig.inputMapping, inputMapping = _a === void 0 ? [] : _a;
|
|
39
|
+
return isTriggerAttribute(attributeType, inputMapping);
|
|
40
|
+
}, [addressAutoCompleteConfig]);
|
|
41
|
+
var getAutocompleteSettings = useCallback(function (triggerAttributeTypeUri, triggerAttributeValueUri) {
|
|
42
|
+
return getSettings({
|
|
43
|
+
metadata: metadata,
|
|
44
|
+
modifiedEntity: modifiedEntity,
|
|
45
|
+
triggerAttributeValueUri: triggerAttributeValueUri,
|
|
46
|
+
triggerAttributeTypeUri: triggerAttributeTypeUri,
|
|
47
|
+
addressAutoCompleteConfig: addressAutoCompleteConfig
|
|
48
|
+
});
|
|
49
|
+
}, [addressAutoCompleteConfig, metadata, modifiedEntity]);
|
|
50
|
+
var contextValue = useMemo(function () { return ({
|
|
51
|
+
onPopulateAttributes: onPopulateAttributes,
|
|
52
|
+
isAutocompleteTriggerAttribute: isAutocompleteTriggerAttribute,
|
|
53
|
+
getAutocompleteSettings: getAutocompleteSettings
|
|
54
|
+
}); }, [onPopulateAttributes, isAutocompleteTriggerAttribute, getAutocompleteSettings]);
|
|
55
|
+
return React.createElement(AddressAutoCompleteContext.Provider, { value: contextValue }, children);
|
|
56
|
+
};
|