@reltio/components 1.4.1329 → 1.4.1331

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.
@@ -70,7 +70,7 @@ exports.ActionButton = (0, react_1.forwardRef)(function (_a, ref) {
70
70
  var getButtonView = function () {
71
71
  switch (mode) {
72
72
  case 'iconButton': {
73
- return (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, __assign({ disabled: disabled, className: (0, classnames_1.default)(styles.iconButton, className), size: "S", tooltipTitle: label, onClick: onClick, icon: Icon }, otherProps)));
73
+ return (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, __assign({ disabled: disabled, className: (0, classnames_1.default)(styles.iconButton, className), size: "S", tooltipTitle: label, onClick: onClick, icon: Icon, showForDisabled: true }, otherProps)));
74
74
  }
75
75
  case 'button': {
76
76
  return (react_1.default.createElement(Button_1.default, __assign({ className: (0, classnames_1.default)(styles.button, className), disabled: disabled, startIcon: react_1.default.createElement(Icon, null), onClick: onClick, color: "primary", classes: { startIcon: styles.startIcon, label: styles.label } }, otherProps),
@@ -12,7 +12,8 @@ var useStyles = (0, styles_1.makeStyles)({
12
12
  fontSize: '10px',
13
13
  lineHeight: 'normal',
14
14
  marginRight: '12px',
15
- borderRadius: '2px'
15
+ borderRadius: '2px',
16
+ flexShrink: 0
16
17
  },
17
18
  'entityType-medium': {
18
19
  padding: '2px 8px 3px',
@@ -20,7 +21,8 @@ var useStyles = (0, styles_1.makeStyles)({
20
21
  fontSize: '13px',
21
22
  fontWeight: 500,
22
23
  lineHeight: '15px',
23
- marginRight: '16px'
24
+ marginRight: '16px',
25
+ flexShrink: 0
24
26
  }
25
27
  });
26
28
  exports.default = useStyles;
@@ -63,6 +63,9 @@ var ProfileCard = function (_a) {
63
63
  var secondaryLabelClass = classes.secondaryLabel, labelClass = classes.label, containerClass = classes.container;
64
64
  var label = (0, mdm_sdk_1.getLabel)(entity.label);
65
65
  var secondaryLabel = entity.secondaryLabel;
66
+ var handleCopyEntityIdToClipboard = (0, react_1.useCallback)(function () {
67
+ navigator.clipboard.writeText((0, mdm_sdk_1.getEntityId)(entity));
68
+ }, [entity]);
66
69
  return (react_1.default.createElement("div", __assign({ className: (0, classnames_1.default)(styles.container, containerClass) }, otherProps),
67
70
  react_1.default.createElement(EntityAvatar_1.default, { entity: entity, imageClassName: styles.image }),
68
71
  react_1.default.createElement("div", { className: styles.info },
@@ -73,8 +76,9 @@ var ProfileCard = function (_a) {
73
76
  react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.secondaryLabel, secondaryLabelClass) }, secondaryLabel))),
74
77
  react_1.default.createElement("div", { className: styles.thirdRow },
75
78
  react_1.default.createElement(EntityTypeBadge_1.default, { entity: entity, size: "medium" }),
76
- react_1.default.createElement("div", { className: styles.entityId },
79
+ react_1.default.createElement("div", { className: styles.entityId, onClick: handleCopyEntityIdToClipboard },
77
80
  react_1.default.createElement("div", { className: styles.entityIdLabel }, ui_i18n_1.default.text('ID:')),
78
- react_1.default.createElement("div", { className: styles.entityIdValue }, (0, mdm_sdk_1.getEntityId)(entity)))))));
81
+ react_1.default.createElement(ExpandedValueTooltip_1.default, { value: "Copy to clipboard ".concat((0, mdm_sdk_1.getEntityId)(entity)), placement: "top" },
82
+ react_1.default.createElement("div", { className: styles.entityIdValue }, (0, mdm_sdk_1.getEntityId)(entity))))))));
79
83
  };
80
84
  exports.default = (0, react_1.memo)(ProfileCard);
@@ -41,12 +41,14 @@ var useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
41
41
  },
42
42
  thirdRow: {
43
43
  display: 'flex',
44
+ overflow: 'hidden',
44
45
  alignItems: 'center',
45
46
  marginTop: 'auto',
46
47
  paddingTop: '4px'
47
48
  },
48
49
  entityId: {
49
50
  display: 'flex',
51
+ overflow: 'hidden',
50
52
  alignItems: 'baseline',
51
53
  whiteSpace: 'nowrap',
52
54
  fontWeight: 400,
@@ -58,7 +60,15 @@ var useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
58
60
  },
59
61
  entityIdValue: {
60
62
  marginLeft: '8px',
61
- color: theme.palette.text.primary
63
+ color: theme.palette.text.primary,
64
+ overflow: 'hidden',
65
+ textOverflow: 'ellipsis',
66
+ '&[aria-describedby]': {
67
+ cursor: 'pointer',
68
+ '&:hover': {
69
+ textDecoration: 'underline'
70
+ }
71
+ }
62
72
  }
63
73
  }); });
64
74
  exports.default = useStyles;
@@ -78,9 +78,10 @@ var getFilterClauseBuilder = (0, ramda_1.cond)([
78
78
  [(0, ramda_1.equals)('attributes'), function () { return multiValueFilter(buildAttributeFilterClause); }],
79
79
  [(0, ramda_1.equals)('entityTypes'), function () { return multiValueFilter(buildEntityTypeFilterClause); }],
80
80
  [(0, ramda_1.equals)('dateRange'), function () { return buildDateRangeFilterClause; }],
81
- [(0, ramda_1.equals)('entityUri'), function () { return buildEntityUriFilterClause; }]
81
+ [(0, ramda_1.equals)('entityUri'), function () { return buildEntityUriFilterClause; }],
82
+ [(0, ramda_1.equals)('rawFilter'), function () { return ramda_1.identity; }]
82
83
  ]);
83
- exports.buildActivitiesFilterString = (0, ramda_1.pipe)((0, ramda_1.defaultTo)({}), (0, ramda_1.reject)(mdm_sdk_1.isEmptyValue), ramda_1.toPairs, (0, ramda_1.map)(function (_a) {
84
+ exports.buildActivitiesFilterString = (0, ramda_1.pipe)((0, ramda_1.defaultTo)({}), (0, ramda_1.reject)(mdm_sdk_1.isEmptyValue), ramda_1.toPairs, (0, ramda_1.append)(['rawFilter', "not equals(user, 'collaboration-service')"]), (0, ramda_1.map)(function (_a) {
84
85
  var key = _a[0], value = _a[1];
85
86
  return getFilterClauseBuilder(key)(value);
86
87
  }), (0, ramda_1.reject)(mdm_sdk_1.isEmptyValue), (0, ramda_1.map)(wrapInBrackets), (0, ramda_1.join)(' and '));
@@ -22,3 +22,4 @@ export { useEditableConnection } from './useEditableConnection';
22
22
  export { useReadableSearchState } from './useReadableSearchState';
23
23
  export { useSavedStateForEntityType } from './useSavedStateForEntityType';
24
24
  export { useSnackbar } from './useSnackbar';
25
+ export { useIsMountedRef } from './useIsMountedRef';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = void 0;
3
+ exports.useIsMountedRef = exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = void 0;
4
4
  var useActions_1 = require("./useActions");
5
5
  Object.defineProperty(exports, "useActions", { enumerable: true, get: function () { return useActions_1.useActions; } });
6
6
  var useAPI_1 = require("./useAPI");
@@ -49,3 +49,5 @@ var useSavedStateForEntityType_1 = require("./useSavedStateForEntityType");
49
49
  Object.defineProperty(exports, "useSavedStateForEntityType", { enumerable: true, get: function () { return useSavedStateForEntityType_1.useSavedStateForEntityType; } });
50
50
  var useSnackbar_1 = require("./useSnackbar");
51
51
  Object.defineProperty(exports, "useSnackbar", { enumerable: true, get: function () { return useSnackbar_1.useSnackbar; } });
52
+ var useIsMountedRef_1 = require("./useIsMountedRef");
53
+ Object.defineProperty(exports, "useIsMountedRef", { enumerable: true, get: function () { return useIsMountedRef_1.useIsMountedRef; } });
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const useIsMountedRef: () => import("react").MutableRefObject<boolean>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIsMountedRef = void 0;
4
+ var react_1 = require("react");
5
+ var useIsMountedRef = function () {
6
+ var isMountedRef = (0, react_1.useRef)(false);
7
+ (0, react_1.useEffect)(function () {
8
+ isMountedRef.current = true;
9
+ return function () {
10
+ isMountedRef.current = false;
11
+ };
12
+ });
13
+ return isMountedRef;
14
+ };
15
+ exports.useIsMountedRef = useIsMountedRef;
@@ -8,8 +8,10 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
8
8
  var react_redux_1 = require("react-redux");
9
9
  var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
10
10
  var react_1 = require("react");
11
+ var useIsMountedRef_1 = require("./useIsMountedRef");
11
12
  var useMarkAsNotMatchRequest = function (_a) {
12
13
  var entities = _a.entities, entity = _a.entity, onFinishRequest = _a.onFinishRequest, onStartRequest = _a.onStartRequest, onSuccess = _a.onSuccess;
14
+ var isMountedRef = (0, useIsMountedRef_1.useIsMountedRef)();
13
15
  var tenant = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getTenant);
14
16
  var dtssPath = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getDtssPath);
15
17
  var _b = (0, react_1.useState)(false), isPending = _b[0], setIsPending = _b[1];
@@ -23,9 +25,9 @@ var useMarkAsNotMatchRequest = function (_a) {
23
25
  })
24
26
  .finally(function () {
25
27
  onFinishRequest === null || onFinishRequest === void 0 ? void 0 : onFinishRequest();
26
- setIsPending(false);
28
+ isMountedRef.current && setIsPending(false);
27
29
  });
28
- }, [dtssPath, entities, entity, onFinishRequest, onStartRequest, onSuccess, tenant]);
30
+ }, [dtssPath, entities, entity, isMountedRef, onFinishRequest, onStartRequest, onSuccess, tenant]);
29
31
  return { isPending: isPending, sendMarkAsNotMatchRequest: sendMarkAsNotMatchRequest };
30
32
  };
31
33
  exports.useMarkAsNotMatchRequest = useMarkAsNotMatchRequest;
@@ -9,8 +9,10 @@ var react_redux_1 = require("react-redux");
9
9
  var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
10
10
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
11
11
  var core_1 = require("../core");
12
+ var useIsMountedRef_1 = require("./useIsMountedRef");
12
13
  var useMergeAllRequest = function (_a) {
13
14
  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
+ var isMountedRef = (0, useIsMountedRef_1.useIsMountedRef)();
14
16
  var tenant = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getTenant);
15
17
  var dtssPath = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getDtssPath);
16
18
  var _c = (0, react_1.useState)(false), isPending = _c[0], setIsPending = _c[1];
@@ -27,7 +29,7 @@ var useMergeAllRequest = function (_a) {
27
29
  .catch(onError)
28
30
  .finally(function () {
29
31
  onFinishRequest === null || onFinishRequest === void 0 ? void 0 : onFinishRequest();
30
- setIsPending(false);
32
+ isMountedRef.current && setIsPending(false);
31
33
  });
32
34
  }, [dtssPath, entities, entity, onError, onFinishRequest, onStartRequest, onSuccess, tenant]);
33
35
  return { isPending: isPending, sendMergeAllRequest: sendMergeAllRequest };
@@ -1,4 +1,4 @@
1
- import { ActivityFilter, Entity, Mode } from '@reltio/mdm-sdk';
1
+ import { ActivityFilter, Entity, Mode, RelationsViewConfig } from '@reltio/mdm-sdk';
2
2
  declare type Props = {
3
3
  sorting?: {
4
4
  field: string;
@@ -7,11 +7,7 @@ declare type Props = {
7
7
  filter?: string;
8
8
  page: number;
9
9
  rowsPerPage: number;
10
- config: {
11
- id: string;
12
- content: Record<string, unknown>;
13
- suggested?: Record<string, unknown>[] | Record<string, unknown>;
14
- };
10
+ config: Pick<RelationsViewConfig, 'suggested' | 'content' | 'id'>;
15
11
  entity: Entity;
16
12
  relationActivityFilter?: ActivityFilter;
17
13
  mode: Mode;
@@ -48,16 +48,28 @@ var useRelationsLoader = function (_a) {
48
48
  var _c = (0, react_1.useState)(false), isLoading = _c[0], setIsLoading = _c[1];
49
49
  var dispatch = (0, react_redux_1.useDispatch)();
50
50
  var tenant = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getTenant);
51
+ var metadata = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getMetadata);
51
52
  var dtssPath = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getDtssPath);
52
53
  var _d = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getGlobalSearchRequestOptions) || {}, activityFilter = _d.activityFilter, globalFilter = _d.globalFilter;
53
54
  var safePromise = (0, useSafePromise_1.useSafePromise)();
55
+ var processContent = function (content) {
56
+ var getUri = (0, ramda_1.when)(mdm_sdk_1.isObject, (0, ramda_1.prop)('uri'));
57
+ var filterRelation = (0, ramda_1.pipe)(getUri, (0, mdm_sdk_1.isAvailableRelationTypeUri)(metadata));
58
+ return (0, ramda_1.evolve)({
59
+ entityTypes: (0, ramda_1.filter)((0, mdm_sdk_1.isAvailableEntityTypeUri)(metadata)),
60
+ inRelations: (0, ramda_1.filter)(filterRelation),
61
+ outRelations: (0, ramda_1.filter)(filterRelation),
62
+ nextEntry: processContent
63
+ })(content);
64
+ };
54
65
  var suggested = config.suggested;
55
66
  var options = (0, react_1.useMemo)(function () { return ({
56
67
  searchByOv: searchByOv
57
68
  }); }, [searchByOv]);
58
69
  var loadRelations = (0, react_1.useCallback)(function () {
59
70
  if (entity === null || entity === void 0 ? void 0 : entity.uri) {
60
- var requestConfig_1 = __assign(__assign({}, config.content), { sortBy: sorting === null || sorting === void 0 ? void 0 : sorting.field, order: sorting === null || sorting === void 0 ? void 0 : sorting.order, returnDates: true, returnObjects: true, activeness: {
71
+ var processedConfig = processContent(config.content);
72
+ var requestConfig_1 = __assign(__assign({}, processedConfig), { sortBy: sorting === null || sorting === void 0 ? void 0 : sorting.field, order: sorting === null || sorting === void 0 ? void 0 : sorting.order, returnDates: true, returnObjects: true, activeness: {
61
73
  relation: relationActivityFilter || mdm_sdk_1.ActivityFilter.ALL,
62
74
  entity: activityFilter
63
75
  }, max: rowsPerPage, offset: page * rowsPerPage, filter: (0, mdm_sdk_1.addGlobalFilterToQuery)(globalFilter, filter) || undefined, suggested: buildSuggestedIds(suggested) });
@@ -94,6 +106,7 @@ var useRelationsLoader = function (_a) {
94
106
  // eslint-disable-next-line react-hooks/exhaustive-deps
95
107
  }, [
96
108
  activityFilter,
109
+ metadata,
97
110
  config,
98
111
  dispatch,
99
112
  dtssPath,
@@ -41,7 +41,7 @@ export var ActionButton = forwardRef(function (_a, ref) {
41
41
  var getButtonView = function () {
42
42
  switch (mode) {
43
43
  case 'iconButton': {
44
- return (React.createElement(SmallIconButtonWithTooltip, __assign({ disabled: disabled, className: classnames(styles.iconButton, className), size: "S", tooltipTitle: label, onClick: onClick, icon: Icon }, otherProps)));
44
+ return (React.createElement(SmallIconButtonWithTooltip, __assign({ disabled: disabled, className: classnames(styles.iconButton, className), size: "S", tooltipTitle: label, onClick: onClick, icon: Icon, showForDisabled: true }, otherProps)));
45
45
  }
46
46
  case 'button': {
47
47
  return (React.createElement(Button, __assign({ className: classnames(styles.button, className), disabled: disabled, startIcon: React.createElement(Icon, null), onClick: onClick, color: "primary", classes: { startIcon: styles.startIcon, label: styles.label } }, otherProps),
@@ -10,7 +10,8 @@ var useStyles = makeStyles({
10
10
  fontSize: '10px',
11
11
  lineHeight: 'normal',
12
12
  marginRight: '12px',
13
- borderRadius: '2px'
13
+ borderRadius: '2px',
14
+ flexShrink: 0
14
15
  },
15
16
  'entityType-medium': {
16
17
  padding: '2px 8px 3px',
@@ -18,7 +19,8 @@ var useStyles = makeStyles({
18
19
  fontSize: '13px',
19
20
  fontWeight: 500,
20
21
  lineHeight: '15px',
21
- marginRight: '16px'
22
+ marginRight: '16px',
23
+ flexShrink: 0
22
24
  }
23
25
  });
24
26
  export default useStyles;
@@ -20,7 +20,7 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  }
21
21
  return t;
22
22
  };
23
- import React, { memo } from 'react';
23
+ import React, { memo, useCallback } from 'react';
24
24
  import i18n from 'ui-i18n';
25
25
  import classnames from 'classnames';
26
26
  import { getEntityId, getEntityUriForLink, getLabel } from '@reltio/mdm-sdk';
@@ -35,6 +35,9 @@ var ProfileCard = function (_a) {
35
35
  var secondaryLabelClass = classes.secondaryLabel, labelClass = classes.label, containerClass = classes.container;
36
36
  var label = getLabel(entity.label);
37
37
  var secondaryLabel = entity.secondaryLabel;
38
+ var handleCopyEntityIdToClipboard = useCallback(function () {
39
+ navigator.clipboard.writeText(getEntityId(entity));
40
+ }, [entity]);
38
41
  return (React.createElement("div", __assign({ className: classnames(styles.container, containerClass) }, otherProps),
39
42
  React.createElement(EntityAvatar, { entity: entity, imageClassName: styles.image }),
40
43
  React.createElement("div", { className: styles.info },
@@ -45,8 +48,9 @@ var ProfileCard = function (_a) {
45
48
  React.createElement("div", { className: classnames(styles.secondaryLabel, secondaryLabelClass) }, secondaryLabel))),
46
49
  React.createElement("div", { className: styles.thirdRow },
47
50
  React.createElement(EntityTypeBadge, { entity: entity, size: "medium" }),
48
- React.createElement("div", { className: styles.entityId },
51
+ React.createElement("div", { className: styles.entityId, onClick: handleCopyEntityIdToClipboard },
49
52
  React.createElement("div", { className: styles.entityIdLabel }, i18n.text('ID:')),
50
- React.createElement("div", { className: styles.entityIdValue }, getEntityId(entity)))))));
53
+ React.createElement(ExpandedValueTooltip, { value: "Copy to clipboard ".concat(getEntityId(entity)), placement: "top" },
54
+ React.createElement("div", { className: styles.entityIdValue }, getEntityId(entity))))))));
51
55
  };
52
56
  export default memo(ProfileCard);
@@ -39,12 +39,14 @@ var useStyles = makeStyles(function (theme) { return ({
39
39
  },
40
40
  thirdRow: {
41
41
  display: 'flex',
42
+ overflow: 'hidden',
42
43
  alignItems: 'center',
43
44
  marginTop: 'auto',
44
45
  paddingTop: '4px'
45
46
  },
46
47
  entityId: {
47
48
  display: 'flex',
49
+ overflow: 'hidden',
48
50
  alignItems: 'baseline',
49
51
  whiteSpace: 'nowrap',
50
52
  fontWeight: 400,
@@ -56,7 +58,15 @@ var useStyles = makeStyles(function (theme) { return ({
56
58
  },
57
59
  entityIdValue: {
58
60
  marginLeft: '8px',
59
- color: theme.palette.text.primary
61
+ color: theme.palette.text.primary,
62
+ overflow: 'hidden',
63
+ textOverflow: 'ellipsis',
64
+ '&[aria-describedby]': {
65
+ cursor: 'pointer',
66
+ '&:hover': {
67
+ textDecoration: 'underline'
68
+ }
69
+ }
60
70
  }
61
71
  }); });
62
72
  export default useStyles;
@@ -1,4 +1,4 @@
1
- import { cond, defaultTo, equals, join, map, pipe, reject, toPairs, type } from 'ramda';
1
+ import { append, cond, defaultTo, equals, identity, join, map, pipe, reject, toPairs, type } from 'ramda';
2
2
  import moment from 'moment';
3
3
  import { DateRangeTypes } from '../../../types';
4
4
  import { escapeQueryValue, isEmptyValue } from '@reltio/mdm-sdk';
@@ -71,9 +71,10 @@ var getFilterClauseBuilder = cond([
71
71
  [equals('attributes'), function () { return multiValueFilter(buildAttributeFilterClause); }],
72
72
  [equals('entityTypes'), function () { return multiValueFilter(buildEntityTypeFilterClause); }],
73
73
  [equals('dateRange'), function () { return buildDateRangeFilterClause; }],
74
- [equals('entityUri'), function () { return buildEntityUriFilterClause; }]
74
+ [equals('entityUri'), function () { return buildEntityUriFilterClause; }],
75
+ [equals('rawFilter'), function () { return identity; }]
75
76
  ]);
76
- export var buildActivitiesFilterString = pipe(defaultTo({}), reject(isEmptyValue), toPairs, map(function (_a) {
77
+ export var buildActivitiesFilterString = pipe(defaultTo({}), reject(isEmptyValue), toPairs, append(['rawFilter', "not equals(user, 'collaboration-service')"]), map(function (_a) {
77
78
  var key = _a[0], value = _a[1];
78
79
  return getFilterClauseBuilder(key)(value);
79
80
  }), reject(isEmptyValue), map(wrapInBrackets), join(' and '));
@@ -22,3 +22,4 @@ export { useEditableConnection } from './useEditableConnection';
22
22
  export { useReadableSearchState } from './useReadableSearchState';
23
23
  export { useSavedStateForEntityType } from './useSavedStateForEntityType';
24
24
  export { useSnackbar } from './useSnackbar';
25
+ export { useIsMountedRef } from './useIsMountedRef';
@@ -22,3 +22,4 @@ export { useEditableConnection } from './useEditableConnection';
22
22
  export { useReadableSearchState } from './useReadableSearchState';
23
23
  export { useSavedStateForEntityType } from './useSavedStateForEntityType';
24
24
  export { useSnackbar } from './useSnackbar';
25
+ export { useIsMountedRef } from './useIsMountedRef';
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const useIsMountedRef: () => import("react").MutableRefObject<boolean>;
@@ -0,0 +1,11 @@
1
+ import { useEffect, useRef } from 'react';
2
+ export var useIsMountedRef = function () {
3
+ var isMountedRef = useRef(false);
4
+ useEffect(function () {
5
+ isMountedRef.current = true;
6
+ return function () {
7
+ isMountedRef.current = false;
8
+ };
9
+ });
10
+ return isMountedRef;
11
+ };
@@ -2,8 +2,10 @@ import { isDataTenantEntity, markDataTenantEntityAsNotMatch, markMixedEntitiesAs
2
2
  import { useSelector } from 'react-redux';
3
3
  import mdmModule from '@reltio/mdm-module';
4
4
  import { useCallback, useState } from 'react';
5
+ import { useIsMountedRef } from './useIsMountedRef';
5
6
  export var useMarkAsNotMatchRequest = function (_a) {
6
7
  var entities = _a.entities, entity = _a.entity, onFinishRequest = _a.onFinishRequest, onStartRequest = _a.onStartRequest, onSuccess = _a.onSuccess;
8
+ var isMountedRef = useIsMountedRef();
7
9
  var tenant = useSelector(mdmModule.selectors.getTenant);
8
10
  var dtssPath = useSelector(mdmModule.selectors.getDtssPath);
9
11
  var _b = useState(false), isPending = _b[0], setIsPending = _b[1];
@@ -17,8 +19,8 @@ export var useMarkAsNotMatchRequest = function (_a) {
17
19
  })
18
20
  .finally(function () {
19
21
  onFinishRequest === null || onFinishRequest === void 0 ? void 0 : onFinishRequest();
20
- setIsPending(false);
22
+ isMountedRef.current && setIsPending(false);
21
23
  });
22
- }, [dtssPath, entities, entity, onFinishRequest, onStartRequest, onSuccess, tenant]);
24
+ }, [dtssPath, entities, entity, isMountedRef, onFinishRequest, onStartRequest, onSuccess, tenant]);
23
25
  return { isPending: isPending, sendMarkAsNotMatchRequest: sendMarkAsNotMatchRequest };
24
26
  };
@@ -3,8 +3,10 @@ import { useSelector } from 'react-redux';
3
3
  import mdmModule from '@reltio/mdm-module';
4
4
  import { isDataTenantEntity, mergeCustomerTenantEntityWithMixedEntities, mergeDataTenantEntity } from '@reltio/mdm-sdk';
5
5
  import { noop } from '../core';
6
+ import { useIsMountedRef } from './useIsMountedRef';
6
7
  export var useMergeAllRequest = function (_a) {
7
8
  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
+ var isMountedRef = useIsMountedRef();
8
10
  var tenant = useSelector(mdmModule.selectors.getTenant);
9
11
  var dtssPath = useSelector(mdmModule.selectors.getDtssPath);
10
12
  var _c = useState(false), isPending = _c[0], setIsPending = _c[1];
@@ -21,7 +23,7 @@ export var useMergeAllRequest = function (_a) {
21
23
  .catch(onError)
22
24
  .finally(function () {
23
25
  onFinishRequest === null || onFinishRequest === void 0 ? void 0 : onFinishRequest();
24
- setIsPending(false);
26
+ isMountedRef.current && setIsPending(false);
25
27
  });
26
28
  }, [dtssPath, entities, entity, onError, onFinishRequest, onStartRequest, onSuccess, tenant]);
27
29
  return { isPending: isPending, sendMergeAllRequest: sendMergeAllRequest };
@@ -1,4 +1,4 @@
1
- import { ActivityFilter, Entity, Mode } from '@reltio/mdm-sdk';
1
+ import { ActivityFilter, Entity, Mode, RelationsViewConfig } from '@reltio/mdm-sdk';
2
2
  declare type Props = {
3
3
  sorting?: {
4
4
  field: string;
@@ -7,11 +7,7 @@ declare type Props = {
7
7
  filter?: string;
8
8
  page: number;
9
9
  rowsPerPage: number;
10
- config: {
11
- id: string;
12
- content: Record<string, unknown>;
13
- suggested?: Record<string, unknown>[] | Record<string, unknown>;
14
- };
10
+ config: Pick<RelationsViewConfig, 'suggested' | 'content' | 'id'>;
15
11
  entity: Entity;
16
12
  relationActivityFilter?: ActivityFilter;
17
13
  mode: Mode;
@@ -11,9 +11,9 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
13
13
  import { useDispatch, useSelector } from 'react-redux';
14
- import { cond, pipe, prop, T, when, identity, times, length, ifElse, always } from 'ramda';
14
+ import { cond, pipe, prop, T, evolve, filter as filterFn, when, identity, times, length, ifElse, always } from 'ramda';
15
15
  import mdm, { profile } from '@reltio/mdm-module';
16
- import { ActivityFilter, addGlobalFilterToQuery, getRelationsForDataTenantEntity, getRelationsForEntity, isDataTenantEntity, isTempUri, Mode, wrapInArrayIfNeeded } from '@reltio/mdm-sdk';
16
+ import { ActivityFilter, addGlobalFilterToQuery, getRelationsForDataTenantEntity, getRelationsForEntity, isAvailableEntityTypeUri, isAvailableRelationTypeUri, isDataTenantEntity, isObject, isTempUri, Mode, wrapInArrayIfNeeded } from '@reltio/mdm-sdk';
17
17
  import { useSafePromise } from './useSafePromise';
18
18
  import { usePrevious } from './usePrevious';
19
19
  var buildSuggestedIds = when(identity, pipe(wrapInArrayIfNeeded, length, times(function (n) { return n + 1; })));
@@ -22,16 +22,28 @@ export var useRelationsLoader = function (_a) {
22
22
  var _c = useState(false), isLoading = _c[0], setIsLoading = _c[1];
23
23
  var dispatch = useDispatch();
24
24
  var tenant = useSelector(mdm.selectors.getTenant);
25
+ var metadata = useSelector(mdm.selectors.getMetadata);
25
26
  var dtssPath = useSelector(mdm.selectors.getDtssPath);
26
27
  var _d = useSelector(mdm.selectors.getGlobalSearchRequestOptions) || {}, activityFilter = _d.activityFilter, globalFilter = _d.globalFilter;
27
28
  var safePromise = useSafePromise();
29
+ var processContent = function (content) {
30
+ var getUri = when(isObject, prop('uri'));
31
+ var filterRelation = pipe(getUri, isAvailableRelationTypeUri(metadata));
32
+ return evolve({
33
+ entityTypes: filterFn(isAvailableEntityTypeUri(metadata)),
34
+ inRelations: filterFn(filterRelation),
35
+ outRelations: filterFn(filterRelation),
36
+ nextEntry: processContent
37
+ })(content);
38
+ };
28
39
  var suggested = config.suggested;
29
40
  var options = useMemo(function () { return ({
30
41
  searchByOv: searchByOv
31
42
  }); }, [searchByOv]);
32
43
  var loadRelations = useCallback(function () {
33
44
  if (entity === null || entity === void 0 ? void 0 : entity.uri) {
34
- var requestConfig_1 = __assign(__assign({}, config.content), { sortBy: sorting === null || sorting === void 0 ? void 0 : sorting.field, order: sorting === null || sorting === void 0 ? void 0 : sorting.order, returnDates: true, returnObjects: true, activeness: {
45
+ var processedConfig = processContent(config.content);
46
+ var requestConfig_1 = __assign(__assign({}, processedConfig), { sortBy: sorting === null || sorting === void 0 ? void 0 : sorting.field, order: sorting === null || sorting === void 0 ? void 0 : sorting.order, returnDates: true, returnObjects: true, activeness: {
35
47
  relation: relationActivityFilter || ActivityFilter.ALL,
36
48
  entity: activityFilter
37
49
  }, max: rowsPerPage, offset: page * rowsPerPage, filter: addGlobalFilterToQuery(globalFilter, filter) || undefined, suggested: buildSuggestedIds(suggested) });
@@ -68,6 +80,7 @@ export var useRelationsLoader = function (_a) {
68
80
  // eslint-disable-next-line react-hooks/exhaustive-deps
69
81
  }, [
70
82
  activityFilter,
83
+ metadata,
71
84
  config,
72
85
  dispatch,
73
86
  dtssPath,
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1329",
3
+ "version": "1.4.1331",
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.1329",
11
- "@reltio/mdm-sdk": "^1.4.1329",
10
+ "@reltio/mdm-module": "^1.4.1331",
11
+ "@reltio/mdm-sdk": "^1.4.1331",
12
12
  "classnames": "^2.2.5",
13
13
  "d3-cloud": "^1.2.5",
14
14
  "d3-geo": "^2.0.1",