@reltio/components 1.4.2273 → 1.4.2274

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.
@@ -22,8 +22,8 @@ type Props = {
22
22
  className?: string;
23
23
  activeSurvivorshipGroupUri?: string;
24
24
  tableRef?: React.ElementRef<typeof BasicTable>;
25
+ personalizationEnabled?: boolean;
25
26
  onHideAttributeType?: (attributeType: AttributeType) => void;
26
- attributeRowReorderingEnabled?: boolean;
27
27
  };
28
- declare const _default: React.MemoExoticComponent<({ entity, isLoading, crosswalksMap, visibleColumns, onChangeVisibleColumns, readOnly, onDelete, onPin, onIgnore, onEdit, onAdd, emptyTempAttributeUris, selectedAttributeTypes, onSelectAttributeTypes, additionalHeaderItems, className, activeSurvivorshipGroupUri, tableRef, onHideAttributeType, attributeRowReorderingEnabled }: Props) => React.JSX.Element>;
28
+ declare const _default: React.MemoExoticComponent<({ entity, isLoading, crosswalksMap, visibleColumns, onChangeVisibleColumns, readOnly, onDelete, onPin, onIgnore, onEdit, onAdd, emptyTempAttributeUris, selectedAttributeTypes, onSelectAttributeTypes, additionalHeaderItems, className, activeSurvivorshipGroupUri, tableRef, personalizationEnabled, onHideAttributeType }: Props) => React.JSX.Element>;
29
29
  export default _default;
@@ -65,7 +65,7 @@ var getRowCellKey = function (_a) {
65
65
  };
66
66
  var debouncedNotifyLazyRenderer = (0, mdm_sdk_1.debounce)(LazyRenderer_1.LazyRenderer.notify, 0);
67
67
  var AttributesTable = function (_a) {
68
- var entity = _a.entity, isLoading = _a.isLoading, crosswalksMap = _a.crosswalksMap, _b = _a.visibleColumns, visibleColumns = _b === void 0 ? helpers_1.DEFAULT_VISIBLE_COLUMNS : _b, onChangeVisibleColumns = _a.onChangeVisibleColumns, readOnly = _a.readOnly, _c = _a.onDelete, onDelete = _c === void 0 ? ramda_1.identity : _c, _d = _a.onPin, onPin = _d === void 0 ? ramda_1.identity : _d, _e = _a.onIgnore, onIgnore = _e === void 0 ? ramda_1.identity : _e, _f = _a.onEdit, onEdit = _f === void 0 ? ramda_1.identity : _f, _g = _a.onAdd, onAdd = _g === void 0 ? ramda_1.identity : _g, emptyTempAttributeUris = _a.emptyTempAttributeUris, selectedAttributeTypes = _a.selectedAttributeTypes, _h = _a.onSelectAttributeTypes, onSelectAttributeTypes = _h === void 0 ? ramda_1.identity : _h, additionalHeaderItems = _a.additionalHeaderItems, className = _a.className, activeSurvivorshipGroupUri = _a.activeSurvivorshipGroupUri, tableRef = _a.tableRef, onHideAttributeType = _a.onHideAttributeType, _j = _a.attributeRowReorderingEnabled, attributeRowReorderingEnabled = _j === void 0 ? false : _j;
68
+ var entity = _a.entity, isLoading = _a.isLoading, crosswalksMap = _a.crosswalksMap, _b = _a.visibleColumns, visibleColumns = _b === void 0 ? helpers_1.DEFAULT_VISIBLE_COLUMNS : _b, onChangeVisibleColumns = _a.onChangeVisibleColumns, readOnly = _a.readOnly, _c = _a.onDelete, onDelete = _c === void 0 ? ramda_1.identity : _c, _d = _a.onPin, onPin = _d === void 0 ? ramda_1.identity : _d, _e = _a.onIgnore, onIgnore = _e === void 0 ? ramda_1.identity : _e, _f = _a.onEdit, onEdit = _f === void 0 ? ramda_1.identity : _f, _g = _a.onAdd, onAdd = _g === void 0 ? ramda_1.identity : _g, emptyTempAttributeUris = _a.emptyTempAttributeUris, selectedAttributeTypes = _a.selectedAttributeTypes, _h = _a.onSelectAttributeTypes, onSelectAttributeTypes = _h === void 0 ? ramda_1.identity : _h, additionalHeaderItems = _a.additionalHeaderItems, className = _a.className, activeSurvivorshipGroupUri = _a.activeSurvivorshipGroupUri, tableRef = _a.tableRef, personalizationEnabled = _a.personalizationEnabled, onHideAttributeType = _a.onHideAttributeType;
69
69
  var styles = (0, styles_1.useStyles)();
70
70
  var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
71
71
  var visibleColumnsData = (0, react_1.useMemo)(function () {
@@ -74,13 +74,13 @@ var AttributesTable = function (_a) {
74
74
  return visibleColumns.includes(id);
75
75
  }), helpers_1.getBasicTableColumnsData)(helpers_1.COLUMNS_DATA);
76
76
  }, [visibleColumns]);
77
- var _k = entity || {}, parentTypeUri = _k.type, parentUri = _k.uri, _l = _k.attributes, attributes = _l === void 0 ? {} : _l;
77
+ var _j = entity || {}, parentTypeUri = _j.type, parentUri = _j.uri, _k = _j.attributes, attributes = _k === void 0 ? {} : _k;
78
78
  (0, react_1.useEffect)(function () {
79
79
  if (entity && (0, ramda_1.isNil)(selectedAttributeTypes)) {
80
- var initialAttrTypes = (0, ramda_1.pipe)(ramda_1.keys, (0, ramda_1.without)(['paging']), (0, ramda_1.map)((0, mdm_sdk_1.makeAttrTypeUri)(parentTypeUri)), (0, ramda_1.map)(function (attrTypeUri) { return (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, attrTypeUri, parentTypeUri); }), (0, ramda_1.filter)((0, ramda_1.both)(ramda_1.identity, mdm_sdk_1.isReadableAttribute)))(attributes);
81
- onSelectAttributeTypes(initialAttrTypes);
80
+ onSelectAttributeTypes((0, mdm_sdk_1.getReadableAttributeTypesFromEntityAttributes)(metadata, parentTypeUri, attributes));
82
81
  }
83
- }, [entity, selectedAttributeTypes]);
82
+ // Fallback init for consumers that omit selectedAttributeTypes; entity covers parentTypeUri/attributes.
83
+ }, [entity, selectedAttributeTypes]); // eslint-disable-line react-hooks/exhaustive-deps
84
84
  var rowsData = (0, react_1.useMemo)(function () {
85
85
  return parentTypeUri
86
86
  ? (0, helpers_1.getBasicTableRowsData)(metadata, parentTypeUri, selectedAttributeTypes, visibleColumns, crosswalksMap, attributes, activeSurvivorshipGroupUri)
@@ -94,7 +94,7 @@ var AttributesTable = function (_a) {
94
94
  crosswalksMap,
95
95
  activeSurvivorshipGroupUri
96
96
  ]);
97
- var _m = (0, useDynamicRowCellHeight_1.useDynamicRowCellHeight)(getRowCellKey), getDynamicRowCellHeight = _m.getDynamicRowCellHeight, changeRowCellHeight = _m.changeRowCellHeight;
97
+ var _l = (0, useDynamicRowCellHeight_1.useDynamicRowCellHeight)(getRowCellKey), getDynamicRowCellHeight = _l.getDynamicRowCellHeight, changeRowCellHeight = _l.changeRowCellHeight;
98
98
  var renderRowCell = (0, react_1.useCallback)(function (props) { return react_1.default.createElement(CommonRowCellRenderer_1.CommonRowCellRenderer, __assign({ changeRowCellHeight: changeRowCellHeight }, props)); }, [changeRowCellHeight]);
99
99
  var getRowCellHeight = (0, react_1.useCallback)((0, ramda_1.either)(getDynamicRowCellHeight, (0, ramda_1.always)(DEFAULT_ROW_HEIGHT)), [
100
100
  getDynamicRowCellHeight
@@ -102,8 +102,8 @@ var AttributesTable = function (_a) {
102
102
  (0, react_1.useEffect)(function () {
103
103
  debouncedNotifyLazyRenderer();
104
104
  }, [getRowCellHeight]);
105
- var _o = (0, react_1.useState)(null), pendingDeletion = _o[0], setPendingDeletion = _o[1];
106
- var _p = (0, react_1.useState)(null), pendingIgnoredEditing = _p[0], setPendingIgnoredEditing = _p[1];
105
+ var _m = (0, react_1.useState)(null), pendingDeletion = _m[0], setPendingDeletion = _m[1];
106
+ var _o = (0, react_1.useState)(null), pendingIgnoredEditing = _o[0], setPendingIgnoredEditing = _o[1];
107
107
  var handleEdit = (0, react_1.useCallback)(function (event) {
108
108
  if (event.attributeValue.ignored) {
109
109
  setPendingIgnoredEditing(event);
@@ -127,12 +127,13 @@ var AttributesTable = function (_a) {
127
127
  onAdd: onAdd,
128
128
  parentUri: parentUri,
129
129
  parentTypeUri: parentTypeUri,
130
+ entity: entity,
130
131
  selectedAttributeTypes: selectedAttributeTypes,
131
132
  onSelectAttributeTypes: onSelectAttributeTypes,
132
133
  emptyTempAttributeUris: emptyTempAttributeUris,
133
134
  readOnly: readOnly,
134
- onHideAttributeType: onHideAttributeType,
135
- attributeRowReorderingEnabled: attributeRowReorderingEnabled
135
+ personalizationEnabled: personalizationEnabled,
136
+ onHideAttributeType: onHideAttributeType
136
137
  }); }, [
137
138
  setPendingDeletion,
138
139
  onPin,
@@ -141,12 +142,13 @@ var AttributesTable = function (_a) {
141
142
  onAdd,
142
143
  parentUri,
143
144
  parentTypeUri,
145
+ entity,
144
146
  selectedAttributeTypes,
145
147
  onSelectAttributeTypes,
146
148
  emptyTempAttributeUris,
147
149
  readOnly,
148
- onHideAttributeType,
149
- attributeRowReorderingEnabled
150
+ personalizationEnabled,
151
+ onHideAttributeType
150
152
  ]);
151
153
  return (react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.tableContainer, className) },
152
154
  react_1.default.createElement(BasicViewHeader_1.BasicViewHeader, { classes: { root: styles.tableHeader, title: styles.tableTitle }, title: ui_i18n_1.default.text('Sources') },
@@ -157,7 +159,7 @@ var AttributesTable = function (_a) {
157
159
  react_1.default.createElement(AttributeValuesSortContext_1.AttributeValuesSortContext.Provider, { value: helpers_1.sortByPinIgnorePriority },
158
160
  react_1.default.createElement(SyncedExpandedAttributesContext_1.SyncedExpandedAttributesProvider, null,
159
161
  react_1.default.createElement(SyncedValueHeightsContext_1.SyncedValueHeightsProvider, null,
160
- react_1.default.createElement(BasicTable_1.BasicTable, { columnsData: visibleColumnsData, context: tableContext, defaultColumnMinWidth: 200, defaultColumnWidth: 250, dndRowReorderingEnabled: attributeRowReorderingEnabled, dndRowReorderingHandler: handleReorderAttributeTypes, externalDndContext: true, fixFirstColumn: true, getIdFromRowValue: getIdFromRowValue, getRowCellHeight: getRowCellHeight, headRowHeight: 48, hoverStateEnabled: Boolean(onHideAttributeType), onScroll: debouncedNotifyLazyRenderer, ref: tableRef, renderRowCell: renderRowCell, rowsData: rowsData }))))),
162
+ react_1.default.createElement(BasicTable_1.BasicTable, { columnsData: visibleColumnsData, context: tableContext, defaultColumnMinWidth: 200, defaultColumnWidth: 250, dndRowReorderingEnabled: personalizationEnabled, dndRowReorderingHandler: handleReorderAttributeTypes, externalDndContext: true, fixFirstColumn: true, getIdFromRowValue: getIdFromRowValue, getRowCellHeight: getRowCellHeight, headRowHeight: 48, hoverStateEnabled: personalizationEnabled, onScroll: debouncedNotifyLazyRenderer, ref: tableRef, renderRowCell: renderRowCell, rowsData: rowsData }))))),
161
163
  react_1.default.createElement(ConfirmDeleteDialog_1.ConfirmDeleteDialog, { open: !!pendingDeletion, onClose: function () { return setPendingDeletion(null); }, onConfirm: handleDelete }),
162
164
  react_1.default.createElement(ConfirmEditIgnoredDialog_1.ConfirmEditIgnoredDialog, { open: !!pendingIgnoredEditing, onClose: function () { return setPendingIgnoredEditing(null); }, onConfirmEditWithIgnore: function () { return pendingIgnoredEditing && onEdit(pendingIgnoredEditing); }, onConfirmEditWithoutIgnore: function () {
163
165
  if (pendingIgnoredEditing)
@@ -19,15 +19,20 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
19
19
  var MoreAttributesButton_1 = require("../../../../../MoreAttributesButton");
20
20
  var withTableContext_1 = require("../../../../../HOCs/withTableContext");
21
21
  var MdmModuleContext_1 = require("../../../../../contexts/MdmModuleContext");
22
+ var getAddableAttributeTypes_1 = require("./getAddableAttributeTypes");
22
23
  var styles_1 = require("./styles");
23
24
  var AddAttributesButton = function (_a) {
24
- var parentTypeUri = _a.parentTypeUri, parentUri = _a.parentUri, selectedAttributeTypes = _a.selectedAttributeTypes, onSelectAttributeTypes = _a.onSelectAttributeTypes, onAdd = _a.onAdd;
25
+ var parentTypeUri = _a.parentTypeUri, parentUri = _a.parentUri, entity = _a.entity, selectedAttributeTypes = _a.selectedAttributeTypes, onSelectAttributeTypes = _a.onSelectAttributeTypes, onAdd = _a.onAdd, _b = _a.personalizationEnabled, personalizationEnabled = _b === void 0 ? false : _b;
25
26
  var styles = (0, styles_1.useStyles)();
26
27
  var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
27
28
  var parentType = __spreadArray(__spreadArray([], metadata.entityTypes, true), (metadata.relationTypes || []), true).find((0, ramda_1.propEq)('uri', parentTypeUri));
28
29
  var isNotSelected = function (attrType) { return !(selectedAttributeTypes === null || selectedAttributeTypes === void 0 ? void 0 : selectedAttributeTypes.find((0, ramda_1.propEq)('uri', attrType.uri))); };
29
- var canCreate = function (attributeType) { return (0, mdm_sdk_1.checkCanCreateAttribute)({ attributeType: attributeType, mode: mdm_sdk_1.Mode.Editing }); };
30
- var data = (0, ramda_1.pipe)((0, ramda_1.propOr)([], 'attributes'), (0, ramda_1.reject)((0, ramda_1.either)(mdm_sdk_1.isReference, mdm_sdk_1.isImage)), (0, ramda_1.filter)((0, ramda_1.either)(mdm_sdk_1.isNested, isNotSelected)), (0, ramda_1.filter)((0, ramda_1.both)(mdm_sdk_1.isReadableAttribute, canCreate)))(parentType);
30
+ var data = (0, getAddableAttributeTypes_1.getAddableAttributeTypes)(parentType, {
31
+ personalizationEnabled: personalizationEnabled,
32
+ selectedAttributeTypes: selectedAttributeTypes,
33
+ entity: entity,
34
+ metadata: metadata
35
+ });
31
36
  var handleAdd = function (addedTypes) {
32
37
  var typesToSelect = addedTypes.filter(isNotSelected);
33
38
  if (typesToSelect.length > 0) {
@@ -40,4 +45,12 @@ var AddAttributesButton = function (_a) {
40
45
  return (react_1.default.createElement("div", { className: styles.root },
41
46
  react_1.default.createElement(MoreAttributesButton_1.MoreAttributesButton, { label: ui_i18n_1.default.text('Attribute'), popupTitle: ui_i18n_1.default.text('Add attributes'), data: data, onApply: handleAdd })));
42
47
  };
43
- exports.default = (0, withTableContext_1.withTableContext)((0, ramda_1.pick)(['parentUri', 'parentTypeUri', 'onAdd', 'selectedAttributeTypes', 'onSelectAttributeTypes']))(AddAttributesButton);
48
+ exports.default = (0, withTableContext_1.withTableContext)((0, ramda_1.pick)([
49
+ 'parentUri',
50
+ 'parentTypeUri',
51
+ 'entity',
52
+ 'onAdd',
53
+ 'selectedAttributeTypes',
54
+ 'onSelectAttributeTypes',
55
+ 'personalizationEnabled'
56
+ ]))(AddAttributesButton);
@@ -0,0 +1,12 @@
1
+ import { AttributeType, Entity, Metadata, Relation } from '@reltio/mdm-sdk';
2
+ type ParentTypeWithAttributes = {
3
+ attributes?: AttributeType[];
4
+ };
5
+ type GetAddableAttributeTypesParams = {
6
+ personalizationEnabled?: boolean;
7
+ selectedAttributeTypes?: AttributeType[];
8
+ entity?: Entity | Relation | null;
9
+ metadata?: Metadata;
10
+ };
11
+ export declare const getAddableAttributeTypes: (parentType: ParentTypeWithAttributes | undefined, { personalizationEnabled, selectedAttributeTypes, entity, metadata }?: GetAddableAttributeTypesParams) => AttributeType[];
12
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddableAttributeTypes = void 0;
4
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
5
+ var ramda_1 = require("ramda");
6
+ var getAddableAttributeTypes = function (parentType, _a) {
7
+ var _b = _a === void 0 ? {} : _a, _c = _b.personalizationEnabled, personalizationEnabled = _c === void 0 ? false : _c, selectedAttributeTypes = _b.selectedAttributeTypes, entity = _b.entity, metadata = _b.metadata;
8
+ var isNotSelected = function (attrType) { return !(selectedAttributeTypes === null || selectedAttributeTypes === void 0 ? void 0 : selectedAttributeTypes.find((0, ramda_1.propEq)('uri', attrType.uri))); };
9
+ var canCreate = function (attributeType) { return (0, mdm_sdk_1.checkCanCreateAttribute)({ attributeType: attributeType, mode: mdm_sdk_1.Mode.Editing }); };
10
+ var isVisibleInPicker = (0, ramda_1.either)(mdm_sdk_1.isNested, isNotSelected);
11
+ var hasAttributeOnEntity = function (attributeType) {
12
+ if (!entity || !metadata) {
13
+ return false;
14
+ }
15
+ var values = (0, mdm_sdk_1.findAttributeValuesByTypeUri)(metadata, entity, attributeType.uri);
16
+ return !(0, ramda_1.isNil)(values) && !(0, ramda_1.isEmpty)(values);
17
+ };
18
+ return (0, ramda_1.pipe)((0, ramda_1.propOr)([], 'attributes'), (0, ramda_1.ifElse)(function () { return personalizationEnabled; }, (0, ramda_1.pipe)((0, ramda_1.filter)(mdm_sdk_1.isReadableAttribute), (0, ramda_1.filter)((0, ramda_1.either)(canCreate, hasAttributeOnEntity)), (0, ramda_1.filter)(isVisibleInPicker)), (0, ramda_1.pipe)((0, ramda_1.reject)((0, ramda_1.either)(mdm_sdk_1.isReference, mdm_sdk_1.isImage)), (0, ramda_1.filter)(isVisibleInPicker), (0, ramda_1.filter)((0, ramda_1.both)(mdm_sdk_1.isReadableAttribute, canCreate)))))(parentType);
19
+ };
20
+ exports.getAddableAttributeTypes = getAddableAttributeTypes;
@@ -22,8 +22,8 @@ type Props = {
22
22
  className?: string;
23
23
  activeSurvivorshipGroupUri?: string;
24
24
  tableRef?: React.ElementRef<typeof BasicTable>;
25
+ personalizationEnabled?: boolean;
25
26
  onHideAttributeType?: (attributeType: AttributeType) => void;
26
- attributeRowReorderingEnabled?: boolean;
27
27
  };
28
- declare const _default: React.MemoExoticComponent<({ entity, isLoading, crosswalksMap, visibleColumns, onChangeVisibleColumns, readOnly, onDelete, onPin, onIgnore, onEdit, onAdd, emptyTempAttributeUris, selectedAttributeTypes, onSelectAttributeTypes, additionalHeaderItems, className, activeSurvivorshipGroupUri, tableRef, onHideAttributeType, attributeRowReorderingEnabled }: Props) => React.JSX.Element>;
28
+ declare const _default: React.MemoExoticComponent<({ entity, isLoading, crosswalksMap, visibleColumns, onChangeVisibleColumns, readOnly, onDelete, onPin, onIgnore, onEdit, onAdd, emptyTempAttributeUris, selectedAttributeTypes, onSelectAttributeTypes, additionalHeaderItems, className, activeSurvivorshipGroupUri, tableRef, personalizationEnabled, onHideAttributeType }: Props) => React.JSX.Element>;
29
29
  export default _default;
@@ -12,8 +12,8 @@ var __assign = (this && this.__assign) || function () {
12
12
  import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
13
13
  import classnames from 'classnames';
14
14
  import i18n from 'ui-i18n';
15
- import { always, either, filter, isNil, keys, map, pipe, without, identity, both, move } from 'ramda';
16
- import { debounce, findAttributeTypeByUri, isReadableAttribute, makeAttrTypeUri } from '@reltio/mdm-sdk';
15
+ import { always, either, filter, isNil, pipe, identity, move } from 'ramda';
16
+ import { debounce, getReadableAttributeTypesFromEntityAttributes } from '@reltio/mdm-sdk';
17
17
  import { BasicTable } from '../../../BasicTable';
18
18
  import { ColumnsSettings } from '../../../ColumnsSettings';
19
19
  import { useDynamicRowCellHeight } from '../../../hooks/useDynamicRowCellHeight';
@@ -37,7 +37,7 @@ var getRowCellKey = function (_a) {
37
37
  };
38
38
  var debouncedNotifyLazyRenderer = debounce(LazyRenderer.notify, 0);
39
39
  var AttributesTable = function (_a) {
40
- var entity = _a.entity, isLoading = _a.isLoading, crosswalksMap = _a.crosswalksMap, _b = _a.visibleColumns, visibleColumns = _b === void 0 ? DEFAULT_VISIBLE_COLUMNS : _b, onChangeVisibleColumns = _a.onChangeVisibleColumns, readOnly = _a.readOnly, _c = _a.onDelete, onDelete = _c === void 0 ? identity : _c, _d = _a.onPin, onPin = _d === void 0 ? identity : _d, _e = _a.onIgnore, onIgnore = _e === void 0 ? identity : _e, _f = _a.onEdit, onEdit = _f === void 0 ? identity : _f, _g = _a.onAdd, onAdd = _g === void 0 ? identity : _g, emptyTempAttributeUris = _a.emptyTempAttributeUris, selectedAttributeTypes = _a.selectedAttributeTypes, _h = _a.onSelectAttributeTypes, onSelectAttributeTypes = _h === void 0 ? identity : _h, additionalHeaderItems = _a.additionalHeaderItems, className = _a.className, activeSurvivorshipGroupUri = _a.activeSurvivorshipGroupUri, tableRef = _a.tableRef, onHideAttributeType = _a.onHideAttributeType, _j = _a.attributeRowReorderingEnabled, attributeRowReorderingEnabled = _j === void 0 ? false : _j;
40
+ var entity = _a.entity, isLoading = _a.isLoading, crosswalksMap = _a.crosswalksMap, _b = _a.visibleColumns, visibleColumns = _b === void 0 ? DEFAULT_VISIBLE_COLUMNS : _b, onChangeVisibleColumns = _a.onChangeVisibleColumns, readOnly = _a.readOnly, _c = _a.onDelete, onDelete = _c === void 0 ? identity : _c, _d = _a.onPin, onPin = _d === void 0 ? identity : _d, _e = _a.onIgnore, onIgnore = _e === void 0 ? identity : _e, _f = _a.onEdit, onEdit = _f === void 0 ? identity : _f, _g = _a.onAdd, onAdd = _g === void 0 ? identity : _g, emptyTempAttributeUris = _a.emptyTempAttributeUris, selectedAttributeTypes = _a.selectedAttributeTypes, _h = _a.onSelectAttributeTypes, onSelectAttributeTypes = _h === void 0 ? identity : _h, additionalHeaderItems = _a.additionalHeaderItems, className = _a.className, activeSurvivorshipGroupUri = _a.activeSurvivorshipGroupUri, tableRef = _a.tableRef, personalizationEnabled = _a.personalizationEnabled, onHideAttributeType = _a.onHideAttributeType;
41
41
  var styles = useStyles();
42
42
  var metadata = useMdmMetadata();
43
43
  var visibleColumnsData = useMemo(function () {
@@ -46,13 +46,13 @@ var AttributesTable = function (_a) {
46
46
  return visibleColumns.includes(id);
47
47
  }), getBasicTableColumnsData)(COLUMNS_DATA);
48
48
  }, [visibleColumns]);
49
- var _k = entity || {}, parentTypeUri = _k.type, parentUri = _k.uri, _l = _k.attributes, attributes = _l === void 0 ? {} : _l;
49
+ var _j = entity || {}, parentTypeUri = _j.type, parentUri = _j.uri, _k = _j.attributes, attributes = _k === void 0 ? {} : _k;
50
50
  useEffect(function () {
51
51
  if (entity && isNil(selectedAttributeTypes)) {
52
- var initialAttrTypes = pipe(keys, without(['paging']), map(makeAttrTypeUri(parentTypeUri)), map(function (attrTypeUri) { return findAttributeTypeByUri(metadata, attrTypeUri, parentTypeUri); }), filter(both(identity, isReadableAttribute)))(attributes);
53
- onSelectAttributeTypes(initialAttrTypes);
52
+ onSelectAttributeTypes(getReadableAttributeTypesFromEntityAttributes(metadata, parentTypeUri, attributes));
54
53
  }
55
- }, [entity, selectedAttributeTypes]);
54
+ // Fallback init for consumers that omit selectedAttributeTypes; entity covers parentTypeUri/attributes.
55
+ }, [entity, selectedAttributeTypes]); // eslint-disable-line react-hooks/exhaustive-deps
56
56
  var rowsData = useMemo(function () {
57
57
  return parentTypeUri
58
58
  ? getBasicTableRowsData(metadata, parentTypeUri, selectedAttributeTypes, visibleColumns, crosswalksMap, attributes, activeSurvivorshipGroupUri)
@@ -66,7 +66,7 @@ var AttributesTable = function (_a) {
66
66
  crosswalksMap,
67
67
  activeSurvivorshipGroupUri
68
68
  ]);
69
- var _m = useDynamicRowCellHeight(getRowCellKey), getDynamicRowCellHeight = _m.getDynamicRowCellHeight, changeRowCellHeight = _m.changeRowCellHeight;
69
+ var _l = useDynamicRowCellHeight(getRowCellKey), getDynamicRowCellHeight = _l.getDynamicRowCellHeight, changeRowCellHeight = _l.changeRowCellHeight;
70
70
  var renderRowCell = useCallback(function (props) { return React.createElement(CommonRowCellRenderer, __assign({ changeRowCellHeight: changeRowCellHeight }, props)); }, [changeRowCellHeight]);
71
71
  var getRowCellHeight = useCallback(either(getDynamicRowCellHeight, always(DEFAULT_ROW_HEIGHT)), [
72
72
  getDynamicRowCellHeight
@@ -74,8 +74,8 @@ var AttributesTable = function (_a) {
74
74
  useEffect(function () {
75
75
  debouncedNotifyLazyRenderer();
76
76
  }, [getRowCellHeight]);
77
- var _o = useState(null), pendingDeletion = _o[0], setPendingDeletion = _o[1];
78
- var _p = useState(null), pendingIgnoredEditing = _p[0], setPendingIgnoredEditing = _p[1];
77
+ var _m = useState(null), pendingDeletion = _m[0], setPendingDeletion = _m[1];
78
+ var _o = useState(null), pendingIgnoredEditing = _o[0], setPendingIgnoredEditing = _o[1];
79
79
  var handleEdit = useCallback(function (event) {
80
80
  if (event.attributeValue.ignored) {
81
81
  setPendingIgnoredEditing(event);
@@ -99,12 +99,13 @@ var AttributesTable = function (_a) {
99
99
  onAdd: onAdd,
100
100
  parentUri: parentUri,
101
101
  parentTypeUri: parentTypeUri,
102
+ entity: entity,
102
103
  selectedAttributeTypes: selectedAttributeTypes,
103
104
  onSelectAttributeTypes: onSelectAttributeTypes,
104
105
  emptyTempAttributeUris: emptyTempAttributeUris,
105
106
  readOnly: readOnly,
106
- onHideAttributeType: onHideAttributeType,
107
- attributeRowReorderingEnabled: attributeRowReorderingEnabled
107
+ personalizationEnabled: personalizationEnabled,
108
+ onHideAttributeType: onHideAttributeType
108
109
  }); }, [
109
110
  setPendingDeletion,
110
111
  onPin,
@@ -113,12 +114,13 @@ var AttributesTable = function (_a) {
113
114
  onAdd,
114
115
  parentUri,
115
116
  parentTypeUri,
117
+ entity,
116
118
  selectedAttributeTypes,
117
119
  onSelectAttributeTypes,
118
120
  emptyTempAttributeUris,
119
121
  readOnly,
120
- onHideAttributeType,
121
- attributeRowReorderingEnabled
122
+ personalizationEnabled,
123
+ onHideAttributeType
122
124
  ]);
123
125
  return (React.createElement("div", { className: classnames(styles.tableContainer, className) },
124
126
  React.createElement(BasicViewHeader, { classes: { root: styles.tableHeader, title: styles.tableTitle }, title: i18n.text('Sources') },
@@ -129,7 +131,7 @@ var AttributesTable = function (_a) {
129
131
  React.createElement(AttributeValuesSortContext.Provider, { value: sortByPinIgnorePriority },
130
132
  React.createElement(SyncedExpandedAttributesProvider, null,
131
133
  React.createElement(SyncedValueHeightsProvider, null,
132
- React.createElement(BasicTable, { columnsData: visibleColumnsData, context: tableContext, defaultColumnMinWidth: 200, defaultColumnWidth: 250, dndRowReorderingEnabled: attributeRowReorderingEnabled, dndRowReorderingHandler: handleReorderAttributeTypes, externalDndContext: true, fixFirstColumn: true, getIdFromRowValue: getIdFromRowValue, getRowCellHeight: getRowCellHeight, headRowHeight: 48, hoverStateEnabled: Boolean(onHideAttributeType), onScroll: debouncedNotifyLazyRenderer, ref: tableRef, renderRowCell: renderRowCell, rowsData: rowsData }))))),
134
+ React.createElement(BasicTable, { columnsData: visibleColumnsData, context: tableContext, defaultColumnMinWidth: 200, defaultColumnWidth: 250, dndRowReorderingEnabled: personalizationEnabled, dndRowReorderingHandler: handleReorderAttributeTypes, externalDndContext: true, fixFirstColumn: true, getIdFromRowValue: getIdFromRowValue, getRowCellHeight: getRowCellHeight, headRowHeight: 48, hoverStateEnabled: personalizationEnabled, onScroll: debouncedNotifyLazyRenderer, ref: tableRef, renderRowCell: renderRowCell, rowsData: rowsData }))))),
133
135
  React.createElement(ConfirmDeleteDialog, { open: !!pendingDeletion, onClose: function () { return setPendingDeletion(null); }, onConfirm: handleDelete }),
134
136
  React.createElement(ConfirmEditIgnoredDialog, { open: !!pendingIgnoredEditing, onClose: function () { return setPendingIgnoredEditing(null); }, onConfirmEditWithIgnore: function () { return pendingIgnoredEditing && onEdit(pendingIgnoredEditing); }, onConfirmEditWithoutIgnore: function () {
135
137
  if (pendingIgnoredEditing)
@@ -9,20 +9,25 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
9
  };
10
10
  import React from 'react';
11
11
  import i18n from 'ui-i18n';
12
- import { both, either, filter, pick, pipe, propEq, propOr, reject } from 'ramda';
13
- import { checkCanCreateAttribute, isImage, isNested, isReadableAttribute, isReference, Mode } from '@reltio/mdm-sdk';
12
+ import { pick, propEq } from 'ramda';
13
+ import { isNested } from '@reltio/mdm-sdk';
14
14
  import { MoreAttributesButton } from '../../../../../MoreAttributesButton';
15
15
  import { withTableContext } from '../../../../../HOCs/withTableContext';
16
16
  import { useMdmMetadata } from '../../../../../contexts/MdmModuleContext';
17
+ import { getAddableAttributeTypes } from './getAddableAttributeTypes';
17
18
  import { useStyles } from './styles';
18
19
  var AddAttributesButton = function (_a) {
19
- var parentTypeUri = _a.parentTypeUri, parentUri = _a.parentUri, selectedAttributeTypes = _a.selectedAttributeTypes, onSelectAttributeTypes = _a.onSelectAttributeTypes, onAdd = _a.onAdd;
20
+ var parentTypeUri = _a.parentTypeUri, parentUri = _a.parentUri, entity = _a.entity, selectedAttributeTypes = _a.selectedAttributeTypes, onSelectAttributeTypes = _a.onSelectAttributeTypes, onAdd = _a.onAdd, _b = _a.personalizationEnabled, personalizationEnabled = _b === void 0 ? false : _b;
20
21
  var styles = useStyles();
21
22
  var metadata = useMdmMetadata();
22
23
  var parentType = __spreadArray(__spreadArray([], metadata.entityTypes, true), (metadata.relationTypes || []), true).find(propEq('uri', parentTypeUri));
23
24
  var isNotSelected = function (attrType) { return !(selectedAttributeTypes === null || selectedAttributeTypes === void 0 ? void 0 : selectedAttributeTypes.find(propEq('uri', attrType.uri))); };
24
- var canCreate = function (attributeType) { return checkCanCreateAttribute({ attributeType: attributeType, mode: Mode.Editing }); };
25
- var data = pipe(propOr([], 'attributes'), reject(either(isReference, isImage)), filter(either(isNested, isNotSelected)), filter(both(isReadableAttribute, canCreate)))(parentType);
25
+ var data = getAddableAttributeTypes(parentType, {
26
+ personalizationEnabled: personalizationEnabled,
27
+ selectedAttributeTypes: selectedAttributeTypes,
28
+ entity: entity,
29
+ metadata: metadata
30
+ });
26
31
  var handleAdd = function (addedTypes) {
27
32
  var typesToSelect = addedTypes.filter(isNotSelected);
28
33
  if (typesToSelect.length > 0) {
@@ -35,4 +40,12 @@ var AddAttributesButton = function (_a) {
35
40
  return (React.createElement("div", { className: styles.root },
36
41
  React.createElement(MoreAttributesButton, { label: i18n.text('Attribute'), popupTitle: i18n.text('Add attributes'), data: data, onApply: handleAdd })));
37
42
  };
38
- export default withTableContext(pick(['parentUri', 'parentTypeUri', 'onAdd', 'selectedAttributeTypes', 'onSelectAttributeTypes']))(AddAttributesButton);
43
+ export default withTableContext(pick([
44
+ 'parentUri',
45
+ 'parentTypeUri',
46
+ 'entity',
47
+ 'onAdd',
48
+ 'selectedAttributeTypes',
49
+ 'onSelectAttributeTypes',
50
+ 'personalizationEnabled'
51
+ ]))(AddAttributesButton);
@@ -0,0 +1,12 @@
1
+ import { AttributeType, Entity, Metadata, Relation } from '@reltio/mdm-sdk';
2
+ type ParentTypeWithAttributes = {
3
+ attributes?: AttributeType[];
4
+ };
5
+ type GetAddableAttributeTypesParams = {
6
+ personalizationEnabled?: boolean;
7
+ selectedAttributeTypes?: AttributeType[];
8
+ entity?: Entity | Relation | null;
9
+ metadata?: Metadata;
10
+ };
11
+ export declare const getAddableAttributeTypes: (parentType: ParentTypeWithAttributes | undefined, { personalizationEnabled, selectedAttributeTypes, entity, metadata }?: GetAddableAttributeTypesParams) => AttributeType[];
12
+ export {};
@@ -0,0 +1,16 @@
1
+ import { checkCanCreateAttribute, findAttributeValuesByTypeUri, isImage, isNested, isReadableAttribute, isReference, Mode } from '@reltio/mdm-sdk';
2
+ import { both, either, filter, ifElse, isEmpty, isNil, pipe, propEq, propOr, reject } from 'ramda';
3
+ export var getAddableAttributeTypes = function (parentType, _a) {
4
+ var _b = _a === void 0 ? {} : _a, _c = _b.personalizationEnabled, personalizationEnabled = _c === void 0 ? false : _c, selectedAttributeTypes = _b.selectedAttributeTypes, entity = _b.entity, metadata = _b.metadata;
5
+ var isNotSelected = function (attrType) { return !(selectedAttributeTypes === null || selectedAttributeTypes === void 0 ? void 0 : selectedAttributeTypes.find(propEq('uri', attrType.uri))); };
6
+ var canCreate = function (attributeType) { return checkCanCreateAttribute({ attributeType: attributeType, mode: Mode.Editing }); };
7
+ var isVisibleInPicker = either(isNested, isNotSelected);
8
+ var hasAttributeOnEntity = function (attributeType) {
9
+ if (!entity || !metadata) {
10
+ return false;
11
+ }
12
+ var values = findAttributeValuesByTypeUri(metadata, entity, attributeType.uri);
13
+ return !isNil(values) && !isEmpty(values);
14
+ };
15
+ return pipe(propOr([], 'attributes'), ifElse(function () { return personalizationEnabled; }, pipe(filter(isReadableAttribute), filter(either(canCreate, hasAttributeOnEntity)), filter(isVisibleInPicker)), pipe(reject(either(isReference, isImage)), filter(isVisibleInPicker), filter(both(isReadableAttribute, canCreate)))))(parentType);
16
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.2273",
3
+ "version": "1.4.2274",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
@@ -11,7 +11,7 @@
11
11
  "@fluentui/react-context-selector": "^9.1.26",
12
12
  "@googlemaps/markerclusterer": "^2.5.3",
13
13
  "@react-sigma/core": "3.4.0",
14
- "@reltio/mdm-sdk": "^1.4.2051",
14
+ "@reltio/mdm-sdk": "^1.4.2052",
15
15
  "@vis.gl/react-google-maps": "^1.3.0",
16
16
  "d3-cloud": "^1.2.5",
17
17
  "d3-geo": "^2.0.1",