@reltio/components 1.4.1492 → 1.4.1493
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/cjs/components/ProfileBandNavigation/helpers/index.d.ts +7 -0
- package/cjs/components/ProfileBandNavigation/helpers/index.js +66 -0
- package/cjs/components/ProfileBandNavigation/hooks/useSearchNavigation.js +16 -0
- package/cjs/contexts/ActionsHookContext/index.d.ts +10 -0
- package/cjs/contexts/ActionsHookContext/index.js +42 -0
- package/cjs/contexts/index.d.ts +1 -0
- package/cjs/contexts/index.js +4 -1
- package/cjs/hooks/helpers/merge.d.ts +8 -0
- package/cjs/hooks/helpers/merge.js +24 -0
- package/cjs/hooks/useMergeAllRequest.js +32 -5
- package/esm/components/ProfileBandNavigation/helpers/index.d.ts +7 -0
- package/esm/components/ProfileBandNavigation/helpers/index.js +62 -0
- package/esm/components/ProfileBandNavigation/hooks/useSearchNavigation.js +17 -1
- package/esm/contexts/ActionsHookContext/index.d.ts +10 -0
- package/esm/contexts/ActionsHookContext/index.js +14 -0
- package/esm/contexts/index.d.ts +1 -0
- package/esm/contexts/index.js +1 -0
- package/esm/hooks/helpers/merge.d.ts +8 -0
- package/esm/hooks/helpers/merge.js +20 -0
- package/esm/hooks/useMergeAllRequest.js +11 -4
- package/package.json +3 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SearchNavigationData } from '../types';
|
|
2
|
+
declare type Payload = {
|
|
3
|
+
winnerUri: string;
|
|
4
|
+
losersUris: string[];
|
|
5
|
+
};
|
|
6
|
+
export declare const applyMergeToSearchNavigationData: (searchNavigationData: SearchNavigationData, payload: Payload) => SearchNavigationData;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
14
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
15
|
+
if (ar || !(i in from)) {
|
|
16
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
17
|
+
ar[i] = from[i];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.applyMergeToSearchNavigationData = void 0;
|
|
24
|
+
var replaceWithWinnerUri = function (searchNavigationData, winnerUri) {
|
|
25
|
+
var uri = searchNavigationData.uri, index = searchNavigationData.index, total = searchNavigationData.total, cache = searchNavigationData.cache;
|
|
26
|
+
if (winnerUri && winnerUri !== uri) {
|
|
27
|
+
if (cache && cache.includes(uri)) {
|
|
28
|
+
cache = __spreadArray([], cache, true);
|
|
29
|
+
var winnerIndex = cache.indexOf(winnerUri);
|
|
30
|
+
var uriIndex = cache.indexOf(uri);
|
|
31
|
+
if (winnerIndex >= 0) {
|
|
32
|
+
cache.splice(winnerIndex, 1);
|
|
33
|
+
total--;
|
|
34
|
+
if (winnerIndex < uriIndex) {
|
|
35
|
+
index--;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
uriIndex = cache.indexOf(uri);
|
|
39
|
+
cache.splice(uriIndex, 1, winnerUri);
|
|
40
|
+
}
|
|
41
|
+
uri = winnerUri;
|
|
42
|
+
return __assign(__assign({}, searchNavigationData), { uri: uri, index: index, cache: cache, total: total });
|
|
43
|
+
}
|
|
44
|
+
return searchNavigationData;
|
|
45
|
+
};
|
|
46
|
+
var removeLoserUri = function (searchNavigationData, loserUri) {
|
|
47
|
+
var uri = searchNavigationData.uri, total = searchNavigationData.total;
|
|
48
|
+
var index = searchNavigationData.index, cache = searchNavigationData.cache;
|
|
49
|
+
if (cache && cache.includes(loserUri)) {
|
|
50
|
+
cache = __spreadArray([], cache, true);
|
|
51
|
+
var loserIndex = cache.indexOf(loserUri);
|
|
52
|
+
var uriIndex = cache.indexOf(uri);
|
|
53
|
+
cache.splice(loserIndex, 1);
|
|
54
|
+
if (loserIndex < uriIndex) {
|
|
55
|
+
index--;
|
|
56
|
+
}
|
|
57
|
+
return __assign(__assign({}, searchNavigationData), { total: total - 1, cache: cache, index: index });
|
|
58
|
+
}
|
|
59
|
+
return searchNavigationData;
|
|
60
|
+
};
|
|
61
|
+
var applyMergeToSearchNavigationData = function (searchNavigationData, payload) {
|
|
62
|
+
var winnerUri = payload.winnerUri, _a = payload.losersUris, losersUris = _a === void 0 ? [] : _a;
|
|
63
|
+
var updatedSearchNavigationData = replaceWithWinnerUri(searchNavigationData, winnerUri);
|
|
64
|
+
return losersUris.reduce(removeLoserUri, updatedSearchNavigationData);
|
|
65
|
+
};
|
|
66
|
+
exports.applyMergeToSearchNavigationData = applyMergeToSearchNavigationData;
|
|
@@ -41,6 +41,7 @@ var ramda_1 = require("ramda");
|
|
|
41
41
|
var contexts_1 = require("../../../contexts");
|
|
42
42
|
var hooks_1 = require("../../../hooks");
|
|
43
43
|
var SearchProviderFactory_1 = require("../searchProviders/SearchProviderFactory");
|
|
44
|
+
var helpers_1 = require("../helpers");
|
|
44
45
|
exports.REQUEST_PAGE_SIZE = 15;
|
|
45
46
|
var getNewUris = function (entities, cache) {
|
|
46
47
|
return (0, ramda_1.pipe)((0, ramda_1.map)((0, ramda_1.prop)('uri')), (0, ramda_1.reject)(function (uri) { return cache.includes(uri); }))(entities);
|
|
@@ -83,6 +84,21 @@ var useSearchNavigation = function () {
|
|
|
83
84
|
});
|
|
84
85
|
}
|
|
85
86
|
}, [total, index, updateNavigationData]);
|
|
87
|
+
var listenToActions = (0, contexts_1.useActionsHook)();
|
|
88
|
+
(0, react_1.useEffect)(function () {
|
|
89
|
+
var stopListeningActions = listenToActions(function (action, state) {
|
|
90
|
+
switch (action.type) {
|
|
91
|
+
case mdm_module_1.search.constants.UPDATE_SEARCH_NAVIGATION_DATA_ON_MERGE: {
|
|
92
|
+
var searchNavigationData = mdm_module_1.default.selectors.getSearchNavigationData(state);
|
|
93
|
+
if (searchNavigationData) {
|
|
94
|
+
updateNavigationData((0, helpers_1.applyMergeToSearchNavigationData)(searchNavigationData, action.payload));
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
return function () { return stopListeningActions(); };
|
|
101
|
+
}, [listenToActions, updateNavigationData]);
|
|
86
102
|
var requestNextPage = (0, react_1.useCallback)(function (cache, total, index) {
|
|
87
103
|
setLoading(true);
|
|
88
104
|
safeRequestTotalPromise(searchProvider.requestTotal()).then(function (total) { return updateNavigationData({ total: total }); });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AnyAction } from 'redux';
|
|
3
|
+
declare type ActionsHook = (listener: (action: AnyAction, state: any) => void) => () => void;
|
|
4
|
+
declare type ProviderProps = {
|
|
5
|
+
hook: ActionsHook;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
};
|
|
8
|
+
export declare const ActionsHookProvider: ({ children, hook }: ProviderProps) => JSX.Element;
|
|
9
|
+
export declare const useActionsHook: () => ActionsHook;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
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.useActionsHook = exports.ActionsHookProvider = void 0;
|
|
27
|
+
var react_1 = __importStar(require("react"));
|
|
28
|
+
var ActionsHookContext = (0, react_1.createContext)(null);
|
|
29
|
+
ActionsHookContext.displayName = 'ActionsHookContext';
|
|
30
|
+
var ActionsHookProvider = function (_a) {
|
|
31
|
+
var children = _a.children, hook = _a.hook;
|
|
32
|
+
return react_1.default.createElement(ActionsHookContext.Provider, { value: hook }, children);
|
|
33
|
+
};
|
|
34
|
+
exports.ActionsHookProvider = ActionsHookProvider;
|
|
35
|
+
var useActionsHook = function () {
|
|
36
|
+
var listenToActions = (0, react_1.useContext)(ActionsHookContext);
|
|
37
|
+
if (!listenToActions) {
|
|
38
|
+
throw new Error('ActionsHookContext must be provided');
|
|
39
|
+
}
|
|
40
|
+
return listenToActions;
|
|
41
|
+
};
|
|
42
|
+
exports.useActionsHook = useActionsHook;
|
package/cjs/contexts/index.d.ts
CHANGED
|
@@ -29,3 +29,4 @@ export { LabelsContext } from './LabelsContext';
|
|
|
29
29
|
export { FeaturesContext } from './FeaturesContext';
|
|
30
30
|
export { DependentLookupAutopopulationContext } from './DependentLookupAutopopulationContext';
|
|
31
31
|
export { PageRequestsAbortingContext } from './PageRequestsAbortingContext';
|
|
32
|
+
export { ActionsHookProvider, useActionsHook } from './ActionsHookContext';
|
package/cjs/contexts/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.ScrollToErrorProvider = exports.ScrollToErrorContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.EntityLoadingIndicationContext = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.PivotingAttributeContext = exports.UsersContext = exports.CollaborationContextProvider = exports.CollaborationContext = exports.BlockImageGalleryDialogContext = exports.ViewIdContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = void 0;
|
|
3
|
+
exports.useActionsHook = exports.ActionsHookProvider = exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.ScrollToErrorProvider = exports.ScrollToErrorContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.EntityLoadingIndicationContext = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.PivotingAttributeContext = exports.UsersContext = exports.CollaborationContextProvider = exports.CollaborationContext = exports.BlockImageGalleryDialogContext = exports.ViewIdContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = void 0;
|
|
4
4
|
var AsyncMountContext_1 = require("./AsyncMountContext");
|
|
5
5
|
Object.defineProperty(exports, "AsyncMountContext", { enumerable: true, get: function () { return AsyncMountContext_1.AsyncMountContext; } });
|
|
6
6
|
var HistoryAppearanceContext_1 = require("./HistoryAppearanceContext");
|
|
@@ -72,3 +72,6 @@ var DependentLookupAutopopulationContext_1 = require("./DependentLookupAutopopul
|
|
|
72
72
|
Object.defineProperty(exports, "DependentLookupAutopopulationContext", { enumerable: true, get: function () { return DependentLookupAutopopulationContext_1.DependentLookupAutopopulationContext; } });
|
|
73
73
|
var PageRequestsAbortingContext_1 = require("./PageRequestsAbortingContext");
|
|
74
74
|
Object.defineProperty(exports, "PageRequestsAbortingContext", { enumerable: true, get: function () { return PageRequestsAbortingContext_1.PageRequestsAbortingContext; } });
|
|
75
|
+
var ActionsHookContext_1 = require("./ActionsHookContext");
|
|
76
|
+
Object.defineProperty(exports, "ActionsHookProvider", { enumerable: true, get: function () { return ActionsHookContext_1.ActionsHookProvider; } });
|
|
77
|
+
Object.defineProperty(exports, "useActionsHook", { enumerable: true, get: function () { return ActionsHookContext_1.useActionsHook; } });
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Entity, mergeDataEntityWithCustomerEntity } from '@reltio/mdm-sdk';
|
|
2
|
+
declare type DtssMergeResponse = Awaited<ReturnType<typeof mergeDataEntityWithCustomerEntity>>;
|
|
3
|
+
export declare type MergeResponses = (Entity | undefined | DtssMergeResponse)[];
|
|
4
|
+
export declare const getWinnerLosersUrisFromMergeResponses: (entity: Entity, entities: Entity[], responses: MergeResponses) => {
|
|
5
|
+
winnerUri: string;
|
|
6
|
+
losersUris: string[];
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
|
+
if (ar || !(i in from)) {
|
|
5
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
6
|
+
ar[i] = from[i];
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getWinnerLosersUrisFromMergeResponses = void 0;
|
|
13
|
+
var ramda_1 = require("ramda");
|
|
14
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
15
|
+
var isEntity = function (response) { return (response === null || response === void 0 ? void 0 : response.uri) && (0, mdm_sdk_1.isEntityUri)(response.uri); };
|
|
16
|
+
var getWinnerUriFromMergeResponses = function (responses) { var _a; return (_a = responses.find(isEntity)) === null || _a === void 0 ? void 0 : _a.uri; };
|
|
17
|
+
var getWinnerLosersUrisFromMergeResponses = function (entity, entities, responses) {
|
|
18
|
+
var winnerUri = getWinnerUriFromMergeResponses(responses);
|
|
19
|
+
if (winnerUri) {
|
|
20
|
+
var losersUris = (0, ramda_1.pipe)((0, ramda_1.reject)(mdm_sdk_1.isDataTenantEntity), (0, ramda_1.map)((0, ramda_1.prop)('uri')), (0, ramda_1.reject)((0, ramda_1.equals)(winnerUri)))(__spreadArray([entity], entities, true));
|
|
21
|
+
return { winnerUri: winnerUri, losersUris: losersUris };
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
exports.getWinnerLosersUrisFromMergeResponses = getWinnerLosersUrisFromMergeResponses;
|
|
@@ -1,21 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
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;
|
|
4
24
|
};
|
|
5
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
26
|
exports.useMergeAllRequest = void 0;
|
|
7
27
|
var react_1 = require("react");
|
|
8
28
|
var react_redux_1 = require("react-redux");
|
|
9
|
-
var mdm_module_1 =
|
|
29
|
+
var mdm_module_1 = __importStar(require("@reltio/mdm-module"));
|
|
10
30
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
11
31
|
var core_1 = require("../core");
|
|
12
32
|
var useIsMountedRef_1 = require("./useIsMountedRef");
|
|
33
|
+
var merge_1 = require("./helpers/merge");
|
|
13
34
|
var useMergeAllRequest = function (_a) {
|
|
14
35
|
var entities = _a.entities, entity = _a.entity, onFinishRequest = _a.onFinishRequest, onStartRequest = _a.onStartRequest, onSuccess = _a.onSuccess, _b = _a.onError, onError = _b === void 0 ? core_1.noop : _b;
|
|
15
36
|
var isMountedRef = (0, useIsMountedRef_1.useIsMountedRef)();
|
|
16
37
|
var tenant = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getTenant);
|
|
17
38
|
var dtssPath = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getDtssPath);
|
|
18
39
|
var _c = (0, react_1.useState)(false), isPending = _c[0], setIsPending = _c[1];
|
|
40
|
+
var dispatch = (0, react_redux_1.useDispatch)();
|
|
19
41
|
var sendMergeAllRequest = (0, react_1.useCallback)(function () {
|
|
20
42
|
onStartRequest === null || onStartRequest === void 0 ? void 0 : onStartRequest();
|
|
21
43
|
setIsPending(true);
|
|
@@ -23,15 +45,20 @@ var useMergeAllRequest = function (_a) {
|
|
|
23
45
|
((0, mdm_sdk_1.isDataTenantEntity)(entity)
|
|
24
46
|
? (0, mdm_sdk_1.mergeDataTenantEntity)(params)
|
|
25
47
|
: (0, mdm_sdk_1.mergeCustomerTenantEntityWithMixedEntities)(params))
|
|
26
|
-
.then(function () {
|
|
48
|
+
.then(function (responses) {
|
|
27
49
|
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess();
|
|
50
|
+
var uris = (0, merge_1.getWinnerLosersUrisFromMergeResponses)(entity, entities, responses);
|
|
51
|
+
if (uris) {
|
|
52
|
+
var winnerUri = uris.winnerUri, losersUris = uris.losersUris;
|
|
53
|
+
dispatch(mdm_module_1.search.actions.updateSearchNavigationDataOnMerge({ winnerUri: winnerUri, losersUris: losersUris }));
|
|
54
|
+
}
|
|
28
55
|
})
|
|
29
56
|
.catch(onError)
|
|
30
57
|
.finally(function () {
|
|
31
58
|
onFinishRequest === null || onFinishRequest === void 0 ? void 0 : onFinishRequest();
|
|
32
59
|
isMountedRef.current && setIsPending(false);
|
|
33
60
|
});
|
|
34
|
-
}, [dtssPath, entities, entity, onError, onFinishRequest, onStartRequest, onSuccess, tenant]);
|
|
61
|
+
}, [dtssPath, entities, entity, onError, onFinishRequest, onStartRequest, onSuccess, tenant, dispatch]);
|
|
35
62
|
return { isPending: isPending, sendMergeAllRequest: sendMergeAllRequest };
|
|
36
63
|
};
|
|
37
64
|
exports.useMergeAllRequest = useMergeAllRequest;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SearchNavigationData } from '../types';
|
|
2
|
+
declare type Payload = {
|
|
3
|
+
winnerUri: string;
|
|
4
|
+
losersUris: string[];
|
|
5
|
+
};
|
|
6
|
+
export declare const applyMergeToSearchNavigationData: (searchNavigationData: SearchNavigationData, payload: Payload) => SearchNavigationData;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
21
|
+
var replaceWithWinnerUri = function (searchNavigationData, winnerUri) {
|
|
22
|
+
var uri = searchNavigationData.uri, index = searchNavigationData.index, total = searchNavigationData.total, cache = searchNavigationData.cache;
|
|
23
|
+
if (winnerUri && winnerUri !== uri) {
|
|
24
|
+
if (cache && cache.includes(uri)) {
|
|
25
|
+
cache = __spreadArray([], cache, true);
|
|
26
|
+
var winnerIndex = cache.indexOf(winnerUri);
|
|
27
|
+
var uriIndex = cache.indexOf(uri);
|
|
28
|
+
if (winnerIndex >= 0) {
|
|
29
|
+
cache.splice(winnerIndex, 1);
|
|
30
|
+
total--;
|
|
31
|
+
if (winnerIndex < uriIndex) {
|
|
32
|
+
index--;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
uriIndex = cache.indexOf(uri);
|
|
36
|
+
cache.splice(uriIndex, 1, winnerUri);
|
|
37
|
+
}
|
|
38
|
+
uri = winnerUri;
|
|
39
|
+
return __assign(__assign({}, searchNavigationData), { uri: uri, index: index, cache: cache, total: total });
|
|
40
|
+
}
|
|
41
|
+
return searchNavigationData;
|
|
42
|
+
};
|
|
43
|
+
var removeLoserUri = function (searchNavigationData, loserUri) {
|
|
44
|
+
var uri = searchNavigationData.uri, total = searchNavigationData.total;
|
|
45
|
+
var index = searchNavigationData.index, cache = searchNavigationData.cache;
|
|
46
|
+
if (cache && cache.includes(loserUri)) {
|
|
47
|
+
cache = __spreadArray([], cache, true);
|
|
48
|
+
var loserIndex = cache.indexOf(loserUri);
|
|
49
|
+
var uriIndex = cache.indexOf(uri);
|
|
50
|
+
cache.splice(loserIndex, 1);
|
|
51
|
+
if (loserIndex < uriIndex) {
|
|
52
|
+
index--;
|
|
53
|
+
}
|
|
54
|
+
return __assign(__assign({}, searchNavigationData), { total: total - 1, cache: cache, index: index });
|
|
55
|
+
}
|
|
56
|
+
return searchNavigationData;
|
|
57
|
+
};
|
|
58
|
+
export var applyMergeToSearchNavigationData = function (searchNavigationData, payload) {
|
|
59
|
+
var winnerUri = payload.winnerUri, _a = payload.losersUris, losersUris = _a === void 0 ? [] : _a;
|
|
60
|
+
var updatedSearchNavigationData = replaceWithWinnerUri(searchNavigationData, winnerUri);
|
|
61
|
+
return losersUris.reduce(removeLoserUri, updatedSearchNavigationData);
|
|
62
|
+
};
|
|
@@ -12,9 +12,10 @@ import { useDispatch, useSelector } from 'react-redux';
|
|
|
12
12
|
import mdmModule, { search as mdmModuleSearch, ui as mdmModuleUi } from '@reltio/mdm-module';
|
|
13
13
|
import { getEntityUriForLink } from '@reltio/mdm-sdk';
|
|
14
14
|
import { map, pipe, prop, reject } from 'ramda';
|
|
15
|
-
import { ViewIdContext } from '../../../contexts';
|
|
15
|
+
import { useActionsHook, ViewIdContext } from '../../../contexts';
|
|
16
16
|
import { useSafePromise } from '../../../hooks';
|
|
17
17
|
import { getSearchProvider } from '../searchProviders/SearchProviderFactory';
|
|
18
|
+
import { applyMergeToSearchNavigationData } from '../helpers';
|
|
18
19
|
export var REQUEST_PAGE_SIZE = 15;
|
|
19
20
|
var getNewUris = function (entities, cache) {
|
|
20
21
|
return pipe(map(prop('uri')), reject(function (uri) { return cache.includes(uri); }))(entities);
|
|
@@ -57,6 +58,21 @@ var useSearchNavigation = function () {
|
|
|
57
58
|
});
|
|
58
59
|
}
|
|
59
60
|
}, [total, index, updateNavigationData]);
|
|
61
|
+
var listenToActions = useActionsHook();
|
|
62
|
+
useEffect(function () {
|
|
63
|
+
var stopListeningActions = listenToActions(function (action, state) {
|
|
64
|
+
switch (action.type) {
|
|
65
|
+
case mdmModuleSearch.constants.UPDATE_SEARCH_NAVIGATION_DATA_ON_MERGE: {
|
|
66
|
+
var searchNavigationData = mdmModule.selectors.getSearchNavigationData(state);
|
|
67
|
+
if (searchNavigationData) {
|
|
68
|
+
updateNavigationData(applyMergeToSearchNavigationData(searchNavigationData, action.payload));
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return function () { return stopListeningActions(); };
|
|
75
|
+
}, [listenToActions, updateNavigationData]);
|
|
60
76
|
var requestNextPage = useCallback(function (cache, total, index) {
|
|
61
77
|
setLoading(true);
|
|
62
78
|
safeRequestTotalPromise(searchProvider.requestTotal()).then(function (total) { return updateNavigationData({ total: total }); });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AnyAction } from 'redux';
|
|
3
|
+
declare type ActionsHook = (listener: (action: AnyAction, state: any) => void) => () => void;
|
|
4
|
+
declare type ProviderProps = {
|
|
5
|
+
hook: ActionsHook;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
};
|
|
8
|
+
export declare const ActionsHookProvider: ({ children, hook }: ProviderProps) => JSX.Element;
|
|
9
|
+
export declare const useActionsHook: () => ActionsHook;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React, { createContext, useContext } from 'react';
|
|
2
|
+
var ActionsHookContext = createContext(null);
|
|
3
|
+
ActionsHookContext.displayName = 'ActionsHookContext';
|
|
4
|
+
export var ActionsHookProvider = function (_a) {
|
|
5
|
+
var children = _a.children, hook = _a.hook;
|
|
6
|
+
return React.createElement(ActionsHookContext.Provider, { value: hook }, children);
|
|
7
|
+
};
|
|
8
|
+
export var useActionsHook = function () {
|
|
9
|
+
var listenToActions = useContext(ActionsHookContext);
|
|
10
|
+
if (!listenToActions) {
|
|
11
|
+
throw new Error('ActionsHookContext must be provided');
|
|
12
|
+
}
|
|
13
|
+
return listenToActions;
|
|
14
|
+
};
|
package/esm/contexts/index.d.ts
CHANGED
|
@@ -29,3 +29,4 @@ export { LabelsContext } from './LabelsContext';
|
|
|
29
29
|
export { FeaturesContext } from './FeaturesContext';
|
|
30
30
|
export { DependentLookupAutopopulationContext } from './DependentLookupAutopopulationContext';
|
|
31
31
|
export { PageRequestsAbortingContext } from './PageRequestsAbortingContext';
|
|
32
|
+
export { ActionsHookProvider, useActionsHook } from './ActionsHookContext';
|
package/esm/contexts/index.js
CHANGED
|
@@ -29,3 +29,4 @@ export { LabelsContext } from './LabelsContext';
|
|
|
29
29
|
export { FeaturesContext } from './FeaturesContext';
|
|
30
30
|
export { DependentLookupAutopopulationContext } from './DependentLookupAutopopulationContext';
|
|
31
31
|
export { PageRequestsAbortingContext } from './PageRequestsAbortingContext';
|
|
32
|
+
export { ActionsHookProvider, useActionsHook } from './ActionsHookContext';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Entity, mergeDataEntityWithCustomerEntity } from '@reltio/mdm-sdk';
|
|
2
|
+
declare type DtssMergeResponse = Awaited<ReturnType<typeof mergeDataEntityWithCustomerEntity>>;
|
|
3
|
+
export declare type MergeResponses = (Entity | undefined | DtssMergeResponse)[];
|
|
4
|
+
export declare const getWinnerLosersUrisFromMergeResponses: (entity: Entity, entities: Entity[], responses: MergeResponses) => {
|
|
5
|
+
winnerUri: string;
|
|
6
|
+
losersUris: string[];
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
+
if (ar || !(i in from)) {
|
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
+
ar[i] = from[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
+
};
|
|
10
|
+
import { equals, map, pipe, prop, reject } from 'ramda';
|
|
11
|
+
import { isDataTenantEntity, isEntityUri } from '@reltio/mdm-sdk';
|
|
12
|
+
var isEntity = function (response) { return (response === null || response === void 0 ? void 0 : response.uri) && isEntityUri(response.uri); };
|
|
13
|
+
var getWinnerUriFromMergeResponses = function (responses) { var _a; return (_a = responses.find(isEntity)) === null || _a === void 0 ? void 0 : _a.uri; };
|
|
14
|
+
export var getWinnerLosersUrisFromMergeResponses = function (entity, entities, responses) {
|
|
15
|
+
var winnerUri = getWinnerUriFromMergeResponses(responses);
|
|
16
|
+
if (winnerUri) {
|
|
17
|
+
var losersUris = pipe(reject(isDataTenantEntity), map(prop('uri')), reject(equals(winnerUri)))(__spreadArray([entity], entities, true));
|
|
18
|
+
return { winnerUri: winnerUri, losersUris: losersUris };
|
|
19
|
+
}
|
|
20
|
+
};
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { useCallback, useState } from 'react';
|
|
2
|
-
import { useSelector } from 'react-redux';
|
|
3
|
-
import mdmModule from '@reltio/mdm-module';
|
|
2
|
+
import { useDispatch, useSelector } from 'react-redux';
|
|
3
|
+
import mdmModule, { search } from '@reltio/mdm-module';
|
|
4
4
|
import { isDataTenantEntity, mergeCustomerTenantEntityWithMixedEntities, mergeDataTenantEntity } from '@reltio/mdm-sdk';
|
|
5
5
|
import { noop } from '../core';
|
|
6
6
|
import { useIsMountedRef } from './useIsMountedRef';
|
|
7
|
+
import { getWinnerLosersUrisFromMergeResponses } from './helpers/merge';
|
|
7
8
|
export var useMergeAllRequest = function (_a) {
|
|
8
9
|
var entities = _a.entities, entity = _a.entity, onFinishRequest = _a.onFinishRequest, onStartRequest = _a.onStartRequest, onSuccess = _a.onSuccess, _b = _a.onError, onError = _b === void 0 ? noop : _b;
|
|
9
10
|
var isMountedRef = useIsMountedRef();
|
|
10
11
|
var tenant = useSelector(mdmModule.selectors.getTenant);
|
|
11
12
|
var dtssPath = useSelector(mdmModule.selectors.getDtssPath);
|
|
12
13
|
var _c = useState(false), isPending = _c[0], setIsPending = _c[1];
|
|
14
|
+
var dispatch = useDispatch();
|
|
13
15
|
var sendMergeAllRequest = useCallback(function () {
|
|
14
16
|
onStartRequest === null || onStartRequest === void 0 ? void 0 : onStartRequest();
|
|
15
17
|
setIsPending(true);
|
|
@@ -17,14 +19,19 @@ export var useMergeAllRequest = function (_a) {
|
|
|
17
19
|
(isDataTenantEntity(entity)
|
|
18
20
|
? mergeDataTenantEntity(params)
|
|
19
21
|
: mergeCustomerTenantEntityWithMixedEntities(params))
|
|
20
|
-
.then(function () {
|
|
22
|
+
.then(function (responses) {
|
|
21
23
|
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess();
|
|
24
|
+
var uris = getWinnerLosersUrisFromMergeResponses(entity, entities, responses);
|
|
25
|
+
if (uris) {
|
|
26
|
+
var winnerUri = uris.winnerUri, losersUris = uris.losersUris;
|
|
27
|
+
dispatch(search.actions.updateSearchNavigationDataOnMerge({ winnerUri: winnerUri, losersUris: losersUris }));
|
|
28
|
+
}
|
|
22
29
|
})
|
|
23
30
|
.catch(onError)
|
|
24
31
|
.finally(function () {
|
|
25
32
|
onFinishRequest === null || onFinishRequest === void 0 ? void 0 : onFinishRequest();
|
|
26
33
|
isMountedRef.current && setIsPending(false);
|
|
27
34
|
});
|
|
28
|
-
}, [dtssPath, entities, entity, onError, onFinishRequest, onStartRequest, onSuccess, tenant]);
|
|
35
|
+
}, [dtssPath, entities, entity, onError, onFinishRequest, onStartRequest, onSuccess, tenant, dispatch]);
|
|
29
36
|
return { isPending: isPending, sendMergeAllRequest: sendMergeAllRequest };
|
|
30
37
|
};
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1493",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@date-io/moment": "^1.3.5",
|
|
9
9
|
"@react-google-maps/api": "2.7.0",
|
|
10
|
-
"@reltio/mdm-module": "^1.4.
|
|
11
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
10
|
+
"@reltio/mdm-module": "^1.4.1493",
|
|
11
|
+
"@reltio/mdm-sdk": "^1.4.1493",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"d3-cloud": "^1.2.5",
|
|
14
14
|
"d3-geo": "^2.0.1",
|