@reltio/components 1.4.950 → 1.4.954

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.
Files changed (47) hide show
  1. package/cjs/components/ImageAttributesGallery/HeaderRight/styles.d.ts +1 -1
  2. package/cjs/components/RelationEditor/index.d.ts +16 -4
  3. package/cjs/components/attributes/editMode/AttributesList/helpers.js +1 -1
  4. package/cjs/components/attributes/editMode/AttributesPager/SpecialRenderer.d.ts +2 -1
  5. package/cjs/components/attributes/editMode/AttributesPager/SpecialRenderer.js +6 -6
  6. package/cjs/components/attributes/editMode/EntityCreator/EntityCreator.js +1 -1
  7. package/cjs/components/attributes/editMode/Roles/Roles.d.ts +4 -1
  8. package/cjs/components/attributes/editMode/Roles/Roles.js +16 -10
  9. package/cjs/components/attributes/editMode/Roles/styles.d.ts +1 -1
  10. package/cjs/components/attributes/editMode/Roles/styles.js +12 -0
  11. package/cjs/components/attributes/editMode/SimpleAttributeEditor/SimpleAttributeEditor.js +2 -2
  12. package/cjs/components/attributes/editMode/Tags/Tags.d.ts +5 -2
  13. package/cjs/components/attributes/editMode/Tags/Tags.js +16 -8
  14. package/cjs/components/attributes/editMode/Tags/styles.d.ts +1 -0
  15. package/cjs/components/attributes/editMode/Tags/styles.js +15 -0
  16. package/cjs/components/history/HistoryFilterButton/HistoryFilterButton.d.ts +2 -1
  17. package/cjs/components/history/HistoryFilterButton/HistoryFilterButton.js +5 -3
  18. package/cjs/components/history/HistoryHeader/HistoryHeader.d.ts +2 -1
  19. package/cjs/components/history/HistoryHeader/HistoryHeader.js +2 -2
  20. package/cjs/components/history/hooks/useHistory.d.ts +1 -0
  21. package/cjs/components/history/hooks/useHistory.js +8 -3
  22. package/cjs/components/workflow/components/AttributesChanges/helpers/mergeHelpers.js +1 -1
  23. package/cjs/components/workflow/hooks/useWorkflowAssignee.js +5 -1
  24. package/esm/components/ImageAttributesGallery/HeaderRight/styles.d.ts +1 -1
  25. package/esm/components/RelationEditor/index.d.ts +16 -4
  26. package/esm/components/attributes/editMode/AttributesList/helpers.js +2 -2
  27. package/esm/components/attributes/editMode/AttributesPager/SpecialRenderer.d.ts +2 -1
  28. package/esm/components/attributes/editMode/AttributesPager/SpecialRenderer.js +6 -6
  29. package/esm/components/attributes/editMode/EntityCreator/EntityCreator.js +1 -1
  30. package/esm/components/attributes/editMode/Roles/Roles.d.ts +4 -1
  31. package/esm/components/attributes/editMode/Roles/Roles.js +17 -11
  32. package/esm/components/attributes/editMode/Roles/styles.d.ts +1 -1
  33. package/esm/components/attributes/editMode/Roles/styles.js +12 -0
  34. package/esm/components/attributes/editMode/SimpleAttributeEditor/SimpleAttributeEditor.js +2 -2
  35. package/esm/components/attributes/editMode/Tags/Tags.d.ts +5 -2
  36. package/esm/components/attributes/editMode/Tags/Tags.js +17 -9
  37. package/esm/components/attributes/editMode/Tags/styles.d.ts +1 -0
  38. package/esm/components/attributes/editMode/Tags/styles.js +12 -0
  39. package/esm/components/history/HistoryFilterButton/HistoryFilterButton.d.ts +2 -1
  40. package/esm/components/history/HistoryFilterButton/HistoryFilterButton.js +6 -4
  41. package/esm/components/history/HistoryHeader/HistoryHeader.d.ts +2 -1
  42. package/esm/components/history/HistoryHeader/HistoryHeader.js +2 -2
  43. package/esm/components/history/hooks/useHistory.d.ts +1 -0
  44. package/esm/components/history/hooks/useHistory.js +8 -3
  45. package/esm/components/workflow/components/AttributesChanges/helpers/mergeHelpers.js +1 -1
  46. package/esm/components/workflow/hooks/useWorkflowAssignee.js +6 -2
  47. package/package.json +3 -3
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"divider" | "downloadButton" | "shareButton" | "deleteButton">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"divider" | "deleteButton" | "downloadButton" | "shareButton">;
@@ -55,10 +55,22 @@ declare var _default: import("react-redux").ConnectedComponent<{
55
55
  max: import("prop-types").Requireable<number>;
56
56
  icon: import("prop-types").Requireable<string>;
57
57
  caption: import("prop-types").Requireable<string>;
58
- canCreate: import("prop-types").Requireable<boolean>;
59
- canRead: import("prop-types").Requireable<boolean>;
60
- canUpdate: import("prop-types").Requireable<boolean>;
61
- canDelete: import("prop-types").Requireable<boolean>;
58
+ canCreate: import("prop-types").Requireable<import("prop-types").InferProps<{
59
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
60
+ roles: import("prop-types").Requireable<string[]>;
61
+ }>>;
62
+ canRead: import("prop-types").Requireable<import("prop-types").InferProps<{
63
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
64
+ roles: import("prop-types").Requireable<string[]>;
65
+ }>>;
66
+ canUpdate: import("prop-types").Requireable<import("prop-types").InferProps<{
67
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
68
+ roles: import("prop-types").Requireable<string[]>;
69
+ }>>;
70
+ canDelete: import("prop-types").Requireable<import("prop-types").InferProps<{
71
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
72
+ roles: import("prop-types").Requireable<string[]>;
73
+ }>>;
62
74
  editingEnabled: import("prop-types").Requireable<boolean>;
63
75
  }>>;
64
76
  mode: import("prop-types").Requireable<string>;
@@ -18,7 +18,7 @@ var getMoreAttrTypes = function (attrTypes, entity) {
18
18
  return attrTypes.filter(function (attrType) {
19
19
  var source = getSource(attrType, entity);
20
20
  var nameProp = getNameProp(attrType);
21
- return !(attrType.singleValue && ramda_1.has(attrType[nameProp])(source));
21
+ return !((attrType.singleValue || mdm_sdk_1.isRoleAttrType(attrType) || mdm_sdk_1.isTagAttrType(attrType)) && ramda_1.has(attrType[nameProp])(source));
22
22
  });
23
23
  };
24
24
  exports.getMoreAttrTypes = getMoreAttrTypes;
@@ -8,7 +8,8 @@ declare type Props = {
8
8
  mode: Mode;
9
9
  errorMessage?: string;
10
10
  onDeleteAttribute: (param: AttributeItem) => void;
11
+ onChangeAttribute: (param: AttributeItem) => void;
11
12
  showEmptyEditors?: boolean;
12
13
  };
13
- declare const SpecialRenderer: ({ values, attributeType, parentUri, mode, errorMessage, onDeleteAttribute, showEmptyEditors, ...otherProps }: Props) => JSX.Element;
14
+ declare const SpecialRenderer: ({ values, attributeType, parentUri, mode, errorMessage, onDeleteAttribute, onChangeAttribute, showEmptyEditors, ...otherProps }: Props) => JSX.Element;
14
15
  export default SpecialRenderer;
@@ -56,11 +56,12 @@ var Roles_1 = require("../Roles/Roles");
56
56
  var Tags_1 = __importDefault(require("../Tags"));
57
57
  var styles_1 = require("./styles");
58
58
  var SpecialRenderer = function (_a) {
59
- var values = _a.values, attributeType = _a.attributeType, parentUri = _a.parentUri, mode = _a.mode, errorMessage = _a.errorMessage, onDeleteAttribute = _a.onDeleteAttribute, showEmptyEditors = _a.showEmptyEditors, otherProps = __rest(_a, ["values", "attributeType", "parentUri", "mode", "errorMessage", "onDeleteAttribute", "showEmptyEditors"]);
59
+ var values = _a.values, attributeType = _a.attributeType, parentUri = _a.parentUri, mode = _a.mode, errorMessage = _a.errorMessage, onDeleteAttribute = _a.onDeleteAttribute, onChangeAttribute = _a.onChangeAttribute, showEmptyEditors = _a.showEmptyEditors, otherProps = __rest(_a, ["values", "attributeType", "parentUri", "mode", "errorMessage", "onDeleteAttribute", "onChangeAttribute", "showEmptyEditors"]);
60
60
  var styles = styles_1.useStyles();
61
61
  var label = attributeType.label, isRequired = attributeType.required, cardinality = attributeType.cardinality;
62
62
  var isEditableMode = mdm_sdk_1.isEditableMode(mode);
63
63
  var _b = react_1.useState(false), hadDeletions = _b[0], setHadDeletions = _b[1];
64
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
65
  var onDelete = react_1.useCallback(ramda_1.pipe(onDeleteAttribute, ramda_1.T, setHadDeletions), [onDeleteAttribute, setHadDeletions]);
65
66
  var isEmptyValues = mdm_sdk_1.isEmptyValue(values);
66
67
  var showEmpty = !hadDeletions && showEmptyEditors && isEmptyValues;
@@ -71,14 +72,13 @@ var SpecialRenderer = function (_a) {
71
72
  var renderValue = function () {
72
73
  switch (attributeType.uri) {
73
74
  case mdm_sdk_1.EntityAttrTypes.tags.uri:
74
- return react_1.default.createElement(Tags_1.default, { values: values });
75
- case mdm_sdk_1.EntityAttrTypes.roles.uri: {
76
- return react_1.default.createElement(Roles_1.Roles, { values: values });
77
- }
75
+ return react_1.default.createElement(Tags_1.default, { values: values, onDelete: onDelete, onChange: onChangeAttribute });
76
+ case mdm_sdk_1.EntityAttrTypes.roles.uri:
77
+ return react_1.default.createElement(Roles_1.Roles, { values: values, onDelete: onDelete, onChange: onChangeAttribute });
78
78
  default: {
79
79
  //startDate, endDate
80
80
  var value = __assign(__assign({}, emptyEditorValue.current), { value: values[0] || '' });
81
- return (react_1.default.createElement(Attribute_1.default, __assign({ attributeValue: value, attributeType: attributeType, mode: mode, onDeleteAttribute: onDelete }, otherProps)));
81
+ return (react_1.default.createElement(Attribute_1.default, __assign({ attributeValue: value, attributeType: attributeType, mode: mode, onDeleteAttribute: onDelete, onChangeAttribute: onChangeAttribute }, otherProps)));
82
82
  }
83
83
  }
84
84
  };
@@ -33,7 +33,7 @@ var EntityCreator = function (_a) {
33
33
  attributeTypesSelectionStrategy,
34
34
  entityType
35
35
  ]);
36
- return entity ? (react_1.default.createElement(AttributesList_1.default, { attrTypes: attributeTypes, entity: entity, showEmptyEditors: true, drawLines: true, parentUri: entity.uri, mode: mode, crosswalks: entity.crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute })) : null;
36
+ return entity ? (react_1.default.createElement(AttributesList_1.default, { key: entity.uri, attrTypes: attributeTypes, entity: entity, showEmptyEditors: true, drawLines: true, parentUri: entity.uri, mode: mode, crosswalks: entity.crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute })) : null;
37
37
  };
38
38
  EntityCreator.propTypes = {
39
39
  entityUri: prop_types_1.default.string,
@@ -1,6 +1,9 @@
1
1
  /// <reference types="react" />
2
+ import { AttributeItem } from '../../..';
2
3
  declare type Props = {
3
4
  values: string[];
5
+ onChange: (param: AttributeItem) => void;
6
+ onDelete?: (param: AttributeItem) => void;
4
7
  };
5
- export declare const Roles: ({ values }: Props) => JSX.Element;
8
+ export declare const Roles: ({ values, onChange, onDelete }: Props) => JSX.Element;
6
9
  export {};
@@ -23,19 +23,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.Roles = void 0;
26
- var react_1 = __importDefault(require("react"));
26
+ var react_1 = __importStar(require("react"));
27
27
  var ramda_1 = require("ramda");
28
28
  var react_redux_1 = require("react-redux");
29
29
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
30
- var mdm_module_1 = __importStar(require("@reltio/mdm-module"));
30
+ var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
31
31
  var SimpleDropDownSelector_1 = __importDefault(require("../../../SimpleDropDownSelector/SimpleDropDownSelector"));
32
32
  var __1 = require("../../..");
33
33
  var styles_1 = require("./styles");
34
+ var SmallIconButton_1 = __importDefault(require("../../../SmallIconButton/SmallIconButton"));
35
+ var Delete_1 = __importDefault(require("@material-ui/icons/Delete"));
34
36
  var components = { MultiValue: __1.MultiValueChip };
35
37
  var Roles = function (_a) {
36
- var values = _a.values;
38
+ var values = _a.values, onChange = _a.onChange, onDelete = _a.onDelete;
37
39
  var styles = styles_1.useStyles();
38
- var dispatch = react_redux_1.useDispatch();
39
40
  var metadata = react_redux_1.useSelector(mdm_module_1.default.selectors.getMetadata);
40
41
  var entity = react_redux_1.useSelector(mdm_module_1.default.selectors.getEntity);
41
42
  var entityUri = entity.uri;
@@ -43,7 +44,7 @@ var Roles = function (_a) {
43
44
  value: role.uri,
44
45
  label: role.label
45
46
  }); });
46
- var formattedValues = values.map(function (value) {
47
+ var formattedValues = (values || []).map(function (value) {
47
48
  var _a;
48
49
  var label = (_a = options.find(ramda_1.propEq('value', value))) === null || _a === void 0 ? void 0 : _a.label;
49
50
  return {
@@ -51,14 +52,19 @@ var Roles = function (_a) {
51
52
  label: label || mdm_sdk_1.getLastUriPart(value)
52
53
  };
53
54
  });
54
- var handleChange = function (values) {
55
+ var handleChange = react_1.useCallback(function (values) {
55
56
  var roles = (values === null || values === void 0 ? void 0 : values.map(ramda_1.prop('value'))) || [];
56
- dispatch(mdm_module_1.profile.actions.modifyAttribute({
57
+ onChange({
57
58
  value: roles,
58
59
  attributeType: mdm_sdk_1.EntityAttrTypes.roles,
59
60
  uri: entityUri
60
- }));
61
- };
62
- return (react_1.default.createElement(SimpleDropDownSelector_1.default, { label: '', height: 40, isMulti: true, options: options, value: formattedValues, onChange: handleChange, components: components, classes: styles }));
61
+ });
62
+ }, [entityUri, onChange]);
63
+ var handleDelete = react_1.useCallback(function () {
64
+ onDelete({ uri: entityUri, attributeType: mdm_sdk_1.EntityAttrTypes.roles });
65
+ }, [entityUri, onDelete]);
66
+ return (react_1.default.createElement("div", { className: styles.container },
67
+ react_1.default.createElement(SimpleDropDownSelector_1.default, { label: '', height: 40, isMulti: true, options: options, value: formattedValues, onChange: handleChange, components: components, classes: styles, className: styles.roleContainer }),
68
+ !!onDelete && (react_1.default.createElement(SmallIconButton_1.default, { className: styles.deleteButton, icon: Delete_1.default, onClick: handleDelete, size: "L" }))));
63
69
  };
64
70
  exports.Roles = Roles;
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"valueContainer">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"container" | "valueContainer" | "roleContainer" | "deleteButton">;
@@ -3,8 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useStyles = void 0;
4
4
  var styles_1 = require("@material-ui/core/styles");
5
5
  exports.useStyles = styles_1.makeStyles({
6
+ container: {
7
+ display: 'flex',
8
+ flex: 1,
9
+ alignItems: 'flex-start',
10
+ marginBottom: '10px'
11
+ },
12
+ roleContainer: {
13
+ width: '100%'
14
+ },
6
15
  valueContainer: {
7
16
  marginLeft: '8px',
8
17
  width: 0
18
+ },
19
+ deleteButton: {
20
+ marginLeft: '8px'
9
21
  }
10
22
  });
@@ -53,15 +53,15 @@ var Add_1 = __importDefault(require("@material-ui/icons/Add"));
53
53
  var Delete_1 = __importDefault(require("@material-ui/icons/Delete"));
54
54
  var Typography_1 = __importDefault(require("@material-ui/core/Typography"));
55
55
  var ui_i18n_1 = __importDefault(require("ui-i18n"));
56
- var styles_1 = require("./styles");
57
56
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
58
57
  var DataTypeValue_1 = __importDefault(require("../../../DataTypeValue/DataTypeValue"));
59
58
  var DataTypeValueEditor_1 = __importDefault(require("../../../editors/DataTypeValueEditor/DataTypeValueEditor"));
60
59
  var ErrorWrapper_1 = __importDefault(require("../../../ErrorWrapper/ErrorWrapper"));
61
- var SmallIconButton_1 = __importDefault(require("../../../../components/SmallIconButton/SmallIconButton"));
60
+ var SmallIconButton_1 = __importDefault(require("../../../SmallIconButton/SmallIconButton"));
62
61
  var utils_1 = require("./utils");
63
62
  var withAsyncMount_1 = __importDefault(require("../../../../HOCs/withAsyncMount/withAsyncMount"));
64
63
  var getDependentLookupEditorContext_1 = require("./selectors/getDependentLookupEditorContext");
64
+ var styles_1 = require("./styles");
65
65
  var AsyncMountPlaceholder = function () {
66
66
  var styles = styles_1.useStyles();
67
67
  return react_1.default.createElement("div", { className: styles.placeholder });
@@ -1,7 +1,10 @@
1
1
  /// <reference types="react" />
2
- declare type Props = {
2
+ import { AttributeItem } from '../AttributesPager';
3
+ export declare type Props = {
3
4
  className?: string;
4
5
  values: string[];
6
+ onChange: (param: AttributeItem) => void;
7
+ onDelete?: (param: AttributeItem) => void;
5
8
  };
6
- declare const Tags: ({ className, values }: Props) => JSX.Element;
9
+ declare const Tags: ({ className, values, onChange, onDelete }: Props) => JSX.Element;
7
10
  export default Tags;
@@ -24,9 +24,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  var react_1 = __importStar(require("react"));
26
26
  var react_redux_1 = require("react-redux");
27
- var mdm_module_1 = __importStar(require("@reltio/mdm-module"));
27
+ var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
28
28
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
29
+ var Delete_1 = __importDefault(require("@material-ui/icons/Delete"));
29
30
  var TypeaheadEditor_1 = __importDefault(require("../../../editors/TypeaheadEditor/TypeaheadEditor"));
31
+ var SmallIconButton_1 = __importDefault(require("../../../SmallIconButton/SmallIconButton"));
32
+ var styles_1 = require("./styles");
30
33
  var filtersWithSearch = function (searchQuery) { return [
31
34
  {
32
35
  filter: 'containsWordStartingWith',
@@ -47,16 +50,21 @@ var getSuggestions = function (searchQuery) {
47
50
  return mdm_sdk_1.getFacets({ query: getQuery(searchQuery), body: body }).then(function (response) { return Object.keys(response.tags); });
48
51
  };
49
52
  var Tags = function (_a) {
50
- var className = _a.className, values = _a.values;
51
- var dispatch = react_redux_1.useDispatch();
53
+ var className = _a.className, values = _a.values, onChange = _a.onChange, onDelete = _a.onDelete;
54
+ var styles = styles_1.useStyles();
52
55
  var entityUri = react_redux_1.useSelector(mdm_module_1.default.selectors.getEntityUri);
53
- var onChange = react_1.useCallback(function (tags) {
54
- return dispatch(mdm_module_1.profile.actions.modifyAttribute({
56
+ var handleChange = react_1.useCallback(function (tags) {
57
+ onChange({
55
58
  value: tags,
56
59
  attributeType: mdm_sdk_1.EntityAttrTypes.tags,
57
60
  uri: entityUri
58
- }));
59
- }, [dispatch, entityUri]);
60
- return (react_1.default.createElement(TypeaheadEditor_1.default, { fullWidth: true, multiple: true, variant: "filled", className: className, value: values, onChange: onChange, getSuggestions: getSuggestions }));
61
+ });
62
+ }, [onChange, entityUri]);
63
+ var handleDelete = react_1.useCallback(function () {
64
+ onDelete({ uri: entityUri, attributeType: mdm_sdk_1.EntityAttrTypes.tags });
65
+ }, [entityUri, onDelete]);
66
+ return (react_1.default.createElement("div", { className: styles.container },
67
+ react_1.default.createElement(TypeaheadEditor_1.default, { fullWidth: true, multiple: true, variant: "filled", className: className, value: values || [], onChange: handleChange, getSuggestions: getSuggestions }),
68
+ !!onDelete && (react_1.default.createElement(SmallIconButton_1.default, { className: styles.deleteButton, icon: Delete_1.default, onClick: handleDelete, size: "L" }))));
61
69
  };
62
70
  exports.default = Tags;
@@ -0,0 +1 @@
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"container" | "deleteButton">;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useStyles = void 0;
4
+ var styles_1 = require("@material-ui/core/styles");
5
+ exports.useStyles = styles_1.makeStyles({
6
+ container: {
7
+ display: 'flex',
8
+ flex: 1,
9
+ alignItems: 'flex-start',
10
+ marginBottom: '10px'
11
+ },
12
+ deleteButton: {
13
+ marginLeft: '8px'
14
+ }
15
+ });
@@ -4,7 +4,8 @@ import { HistoryFilter } from '../types';
4
4
  declare type Props = {
5
5
  filter: HistoryFilter;
6
6
  onApplyFilter: (filter: HistoryFilter) => void;
7
+ onClearFilter: () => void;
7
8
  entityType: TEntityType;
8
9
  };
9
- declare const HistoryFilterButton: ({ filter, onApplyFilter, entityType }: Props) => JSX.Element;
10
+ declare const HistoryFilterButton: ({ filter, onApplyFilter, onClearFilter, entityType }: Props) => JSX.Element;
10
11
  export default HistoryFilterButton;
@@ -48,13 +48,15 @@ var DateRangeSelector_1 = __importDefault(require("../DateRangeSelector/DateRang
48
48
  var HistoryActivitySelector_1 = __importDefault(require("../HistoryActivitySelector/HistoryActivitySelector"));
49
49
  var styles_1 = require("./styles");
50
50
  var HistoryFilterButton = function (_a) {
51
- var filter = _a.filter, onApplyFilter = _a.onApplyFilter, entityType = _a.entityType;
51
+ var filter = _a.filter, onApplyFilter = _a.onApplyFilter, onClearFilter = _a.onClearFilter, entityType = _a.entityType;
52
52
  var styles = styles_1.useStyles();
53
53
  var _b = react_1.useState(null), anchorEl = _b[0], setAnchorEl = _b[1];
54
54
  var openPopup = function (event) { return setAnchorEl(event.currentTarget); };
55
55
  var closePopup = function () { return setAnchorEl(null); };
56
56
  var _c = react_1.useState(filter), currentValue = _c[0], setCurrentValue = _c[1];
57
- var clearCurrentValue = function () { return setCurrentValue(null); };
57
+ react_1.useEffect(function () {
58
+ setCurrentValue(filter);
59
+ }, [filter]);
58
60
  var handlePropChange = ramda_1.curry(function (propName, value) {
59
61
  setCurrentValue(function (filterValue) {
60
62
  var _a;
@@ -79,7 +81,7 @@ var HistoryFilterButton = function (_a) {
79
81
  react_1.default.createElement(HistoryActivitySelector_1.default, { selectedHistoryActivityTypes: activities, onChange: handlePropChange('activities'), className: styles.filterItem }),
80
82
  react_1.default.createElement(AttributeSelector_1.default, { selectedAttributes: attributes, entityType: entityType, onChange: handlePropChange('attributes'), className: styles.filterItem, title: ui_i18n_1.default.text('Attribute updated') }))),
81
83
  react_1.default.createElement("div", { className: styles.filterControls },
82
- react_1.default.createElement(Button_1.default, { onClick: clearCurrentValue, className: styles.clearButton }, ui_i18n_1.default.text('Clear all')),
84
+ react_1.default.createElement(Button_1.default, { onClick: onClearFilter, className: styles.clearButton }, ui_i18n_1.default.text('Clear all')),
83
85
  react_1.default.createElement(Button_1.default, { onClick: closePopup }, ui_i18n_1.default.text('Cancel')),
84
86
  react_1.default.createElement(Button_1.default, { color: "primary", onClick: function () {
85
87
  if (dateRange && filters_1.isDateRangeValid(dateRange)) {
@@ -6,6 +6,7 @@ declare type Props = {
6
6
  entityType: TEntityType;
7
7
  filter: HistoryFilter;
8
8
  onApplyFilter: (value: HistoryFilter) => void;
9
+ onClearFilter: () => void;
9
10
  };
10
- declare const HistoryHeader: ({ total, entityType, filter, onApplyFilter }: Props) => JSX.Element;
11
+ declare const HistoryHeader: ({ total, entityType, filter, onApplyFilter, onClearFilter }: Props) => JSX.Element;
11
12
  export default HistoryHeader;
@@ -13,7 +13,7 @@ var HistoryFilterButton_1 = __importDefault(require("../HistoryFilterButton/Hist
13
13
  var HistoryMenuButton_1 = __importDefault(require("../HistoryMenuButton/HistoryMenuButton"));
14
14
  var styles_1 = require("./styles");
15
15
  var HistoryHeader = function (_a) {
16
- var total = _a.total, entityType = _a.entityType, filter = _a.filter, onApplyFilter = _a.onApplyFilter;
16
+ var total = _a.total, entityType = _a.entityType, filter = _a.filter, onApplyFilter = _a.onApplyFilter, onClearFilter = _a.onClearFilter;
17
17
  var styles = styles_1.useStyles();
18
18
  return (react_1.default.createElement("div", { className: styles.root },
19
19
  react_1.default.createElement(Typography_1.default, { variant: "h6" }, ui_i18n_1.default.text('History')),
@@ -22,7 +22,7 @@ var HistoryHeader = function (_a) {
22
22
  ? ui_i18n_1.default.text('${count} contributing profile', { count: total })
23
23
  : ui_i18n_1.default.text('${count} contributing profiles', { count: total }))),
24
24
  react_1.default.createElement(Spacer_1.default, null),
25
- react_1.default.createElement(HistoryFilterButton_1.default, { entityType: entityType, filter: filter, onApplyFilter: onApplyFilter }),
25
+ react_1.default.createElement(HistoryFilterButton_1.default, { entityType: entityType, filter: filter, onApplyFilter: onApplyFilter, onClearFilter: onClearFilter }),
26
26
  react_1.default.createElement(HistoryMenuButton_1.default, null)));
27
27
  };
28
28
  exports.default = HistoryHeader;
@@ -9,6 +9,7 @@ export declare const useHistory: ({ entity, enabled }: Props) => {
9
9
  canLoadMore: boolean;
10
10
  onLoadMore: () => void;
11
11
  onApplyFilter: (filter: HistoryFilter) => void;
12
+ onClearFilter: () => void;
12
13
  historicUris: string[];
13
14
  historyWithTotal: HistoryWithTotal;
14
15
  historyFilter: HistoryFilter;
@@ -23,11 +23,12 @@ var types_1 = require("../types");
23
23
  var filters_1 = require("../utils/filters");
24
24
  var hooks_1 = require("../../../hooks");
25
25
  var MAX_HISTORY_ROWS = 32;
26
+ var DEFAULT_HISTORY_FILTER = {
27
+ activities: [types_1.HistoryActivityType.MERGE, types_1.HistoryActivityType.UNMERGE, types_1.HistoryActivityType.UPDATE]
28
+ };
26
29
  var useHistory = function (_a) {
27
30
  var entity = _a.entity, enabled = _a.enabled;
28
- var _b = react_1.useState({
29
- activities: [types_1.HistoryActivityType.MERGE, types_1.HistoryActivityType.UNMERGE, types_1.HistoryActivityType.UPDATE]
30
- }), historyFilter = _b[0], setHistoryFilter = _b[1];
31
+ var _b = react_1.useState(DEFAULT_HISTORY_FILTER), historyFilter = _b[0], setHistoryFilter = _b[1];
31
32
  var _c = react_1.useState(0), historyPage = _c[0], setHistoryPage = _c[1];
32
33
  var historyFilterString = react_1.useMemo(function () { return filters_1.buildHistoryFilterString(historyFilter); }, [historyFilter]);
33
34
  var _d = react_1.useState(null), historicUris = _d[0], setHistoricUris = _d[1];
@@ -100,6 +101,9 @@ var useHistory = function (_a) {
100
101
  setHistoryPage(0);
101
102
  setHistoryFilter(filter);
102
103
  }, []);
104
+ var onClearFilter = react_1.useCallback(function () {
105
+ onApplyFilter(__assign({}, DEFAULT_HISTORY_FILTER));
106
+ }, []);
103
107
  var onLoadMore = react_1.useCallback(function () {
104
108
  if (!canLoadMore)
105
109
  return;
@@ -111,6 +115,7 @@ var useHistory = function (_a) {
111
115
  canLoadMore: canLoadMore,
112
116
  onLoadMore: onLoadMore,
113
117
  onApplyFilter: onApplyFilter,
118
+ onClearFilter: onClearFilter,
114
119
  historicUris: historicUris,
115
120
  historyWithTotal: historyWithTotal,
116
121
  historyFilter: historyFilter
@@ -27,7 +27,7 @@ var SPECIAL_ATTRIBUTES_NAMES = [
27
27
  var prepareStartOrEndDate = function (_a) {
28
28
  var newValue = _a.newValue, oldValue = _a.oldValue;
29
29
  var parseValue = function (value) { return (isNaN(value) || mdm_sdk_1.isEmptyValue(value) ? value : parseInt(value)); };
30
- var isExistedValue = function (value) { return (value === null || value === void 0 ? void 0 : value.length) && !mdm_sdk_1.isEmptyValue(value); };
30
+ var isExistedValue = function (value) { return (value === null || value === void 0 ? void 0 : value.length) && !mdm_sdk_1.isEmptyValue(value) && !mdm_sdk_1.isEmptyValue(value[0]); };
31
31
  var isExistNewValue = isExistedValue(newValue);
32
32
  var isExistOldValue = isExistedValue(oldValue);
33
33
  if (isExistNewValue && isExistOldValue) {
@@ -48,7 +48,11 @@ var useWorkflowAssignee = function (_a) {
48
48
  }))
49
49
  .then(function (result) {
50
50
  var data = result.data;
51
- var assignees = data.map(assigneeToValue);
51
+ var assignees = data
52
+ .sort(function (a, b) {
53
+ return mdm_sdk_1.utils.strings.sort('asc', a, b);
54
+ })
55
+ .map(assigneeToValue);
52
56
  setAssignees(assignees);
53
57
  return filterOutRest_1(assignees);
54
58
  })
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"divider" | "downloadButton" | "shareButton" | "deleteButton">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"divider" | "deleteButton" | "downloadButton" | "shareButton">;
@@ -55,10 +55,22 @@ declare var _default: import("react-redux").ConnectedComponent<{
55
55
  max: import("prop-types").Requireable<number>;
56
56
  icon: import("prop-types").Requireable<string>;
57
57
  caption: import("prop-types").Requireable<string>;
58
- canCreate: import("prop-types").Requireable<boolean>;
59
- canRead: import("prop-types").Requireable<boolean>;
60
- canUpdate: import("prop-types").Requireable<boolean>;
61
- canDelete: import("prop-types").Requireable<boolean>;
58
+ canCreate: import("prop-types").Requireable<import("prop-types").InferProps<{
59
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
60
+ roles: import("prop-types").Requireable<string[]>;
61
+ }>>;
62
+ canRead: import("prop-types").Requireable<import("prop-types").InferProps<{
63
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
64
+ roles: import("prop-types").Requireable<string[]>;
65
+ }>>;
66
+ canUpdate: import("prop-types").Requireable<import("prop-types").InferProps<{
67
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
68
+ roles: import("prop-types").Requireable<string[]>;
69
+ }>>;
70
+ canDelete: import("prop-types").Requireable<import("prop-types").InferProps<{
71
+ deviceTypes: import("prop-types").Requireable<string | string[]>;
72
+ roles: import("prop-types").Requireable<string[]>;
73
+ }>>;
62
74
  editingEnabled: import("prop-types").Requireable<boolean>;
63
75
  }>>;
64
76
  mode: import("prop-types").Requireable<string>;
@@ -1,5 +1,5 @@
1
1
  import { always, both, cond, has, T } from 'ramda';
2
- import { isAnalyticAttribute, isSpecialAttribute } from '@reltio/mdm-sdk';
2
+ import { isAnalyticAttribute, isRoleAttrType, isSpecialAttribute, isTagAttrType } from '@reltio/mdm-sdk';
3
3
  var getSource = function (attrType, entity) {
4
4
  var _a = entity.attributes, attributes = _a === void 0 ? {} : _a, _b = entity.analyticsAttributes, analyticsAttributes = _b === void 0 ? {} : _b;
5
5
  return cond([
@@ -15,6 +15,6 @@ export var getMoreAttrTypes = function (attrTypes, entity) {
15
15
  return attrTypes.filter(function (attrType) {
16
16
  var source = getSource(attrType, entity);
17
17
  var nameProp = getNameProp(attrType);
18
- return !(attrType.singleValue && has(attrType[nameProp])(source));
18
+ return !((attrType.singleValue || isRoleAttrType(attrType) || isTagAttrType(attrType)) && has(attrType[nameProp])(source));
19
19
  });
20
20
  };
@@ -8,7 +8,8 @@ declare type Props = {
8
8
  mode: Mode;
9
9
  errorMessage?: string;
10
10
  onDeleteAttribute: (param: AttributeItem) => void;
11
+ onChangeAttribute: (param: AttributeItem) => void;
11
12
  showEmptyEditors?: boolean;
12
13
  };
13
- declare const SpecialRenderer: ({ values, attributeType, parentUri, mode, errorMessage, onDeleteAttribute, showEmptyEditors, ...otherProps }: Props) => JSX.Element;
14
+ declare const SpecialRenderer: ({ values, attributeType, parentUri, mode, errorMessage, onDeleteAttribute, onChangeAttribute, showEmptyEditors, ...otherProps }: Props) => JSX.Element;
14
15
  export default SpecialRenderer;
@@ -32,11 +32,12 @@ import { Roles } from '../Roles/Roles';
32
32
  import Tags from '../Tags';
33
33
  import { useStyles } from './styles';
34
34
  var SpecialRenderer = function (_a) {
35
- var values = _a.values, attributeType = _a.attributeType, parentUri = _a.parentUri, mode = _a.mode, errorMessage = _a.errorMessage, onDeleteAttribute = _a.onDeleteAttribute, showEmptyEditors = _a.showEmptyEditors, otherProps = __rest(_a, ["values", "attributeType", "parentUri", "mode", "errorMessage", "onDeleteAttribute", "showEmptyEditors"]);
35
+ var values = _a.values, attributeType = _a.attributeType, parentUri = _a.parentUri, mode = _a.mode, errorMessage = _a.errorMessage, onDeleteAttribute = _a.onDeleteAttribute, onChangeAttribute = _a.onChangeAttribute, showEmptyEditors = _a.showEmptyEditors, otherProps = __rest(_a, ["values", "attributeType", "parentUri", "mode", "errorMessage", "onDeleteAttribute", "onChangeAttribute", "showEmptyEditors"]);
36
36
  var styles = useStyles();
37
37
  var label = attributeType.label, isRequired = attributeType.required, cardinality = attributeType.cardinality;
38
38
  var isEditableMode = checkIsEditableMode(mode);
39
39
  var _b = useState(false), hadDeletions = _b[0], setHadDeletions = _b[1];
40
+ // eslint-disable-next-line react-hooks/exhaustive-deps
40
41
  var onDelete = useCallback(pipe(onDeleteAttribute, T, setHadDeletions), [onDeleteAttribute, setHadDeletions]);
41
42
  var isEmptyValues = isEmptyValue(values);
42
43
  var showEmpty = !hadDeletions && showEmptyEditors && isEmptyValues;
@@ -47,14 +48,13 @@ var SpecialRenderer = function (_a) {
47
48
  var renderValue = function () {
48
49
  switch (attributeType.uri) {
49
50
  case EntityAttrTypes.tags.uri:
50
- return React.createElement(Tags, { values: values });
51
- case EntityAttrTypes.roles.uri: {
52
- return React.createElement(Roles, { values: values });
53
- }
51
+ return React.createElement(Tags, { values: values, onDelete: onDelete, onChange: onChangeAttribute });
52
+ case EntityAttrTypes.roles.uri:
53
+ return React.createElement(Roles, { values: values, onDelete: onDelete, onChange: onChangeAttribute });
54
54
  default: {
55
55
  //startDate, endDate
56
56
  var value = __assign(__assign({}, emptyEditorValue.current), { value: values[0] || '' });
57
- return (React.createElement(Attribute, __assign({ attributeValue: value, attributeType: attributeType, mode: mode, onDeleteAttribute: onDelete }, otherProps)));
57
+ return (React.createElement(Attribute, __assign({ attributeValue: value, attributeType: attributeType, mode: mode, onDeleteAttribute: onDelete, onChangeAttribute: onChangeAttribute }, otherProps)));
58
58
  }
59
59
  }
60
60
  };
@@ -9,7 +9,7 @@ var EntityCreator = function (_a) {
9
9
  attributeTypesSelectionStrategy,
10
10
  entityType
11
11
  ]);
12
- return entity ? (React.createElement(AttributesList, { attrTypes: attributeTypes, entity: entity, showEmptyEditors: true, drawLines: true, parentUri: entity.uri, mode: mode, crosswalks: entity.crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute })) : null;
12
+ return entity ? (React.createElement(AttributesList, { key: entity.uri, attrTypes: attributeTypes, entity: entity, showEmptyEditors: true, drawLines: true, parentUri: entity.uri, mode: mode, crosswalks: entity.crosswalks, onAddAttributes: onAddAttributes, onChangeAttribute: onChangeAttribute, onDeleteAttribute: onDeleteAttribute })) : null;
13
13
  };
14
14
  EntityCreator.propTypes = {
15
15
  entityUri: PropTypes.string,
@@ -1,6 +1,9 @@
1
1
  /// <reference types="react" />
2
+ import { AttributeItem } from '../../..';
2
3
  declare type Props = {
3
4
  values: string[];
5
+ onChange: (param: AttributeItem) => void;
6
+ onDelete?: (param: AttributeItem) => void;
4
7
  };
5
- export declare const Roles: ({ values }: Props) => JSX.Element;
8
+ export declare const Roles: ({ values, onChange, onDelete }: Props) => JSX.Element;
6
9
  export {};
@@ -1,16 +1,17 @@
1
- import React from 'react';
1
+ import React, { useCallback } from 'react';
2
2
  import { prop, propEq } from 'ramda';
3
- import { useSelector, useDispatch } from 'react-redux';
3
+ import { useSelector } from 'react-redux';
4
4
  import { EntityAttrTypes, getRolesForEntityType, getLastUriPart } from '@reltio/mdm-sdk';
5
- import mdmModule, { profile } from '@reltio/mdm-module';
5
+ import mdmModule from '@reltio/mdm-module';
6
6
  import SimpleDropDownSelector from '../../../SimpleDropDownSelector/SimpleDropDownSelector';
7
7
  import { MultiValueChip } from '../../..';
8
8
  import { useStyles } from './styles';
9
+ import SmallIconButton from '../../../SmallIconButton/SmallIconButton';
10
+ import DeleteIcon from '@material-ui/icons/Delete';
9
11
  var components = { MultiValue: MultiValueChip };
10
12
  export var Roles = function (_a) {
11
- var values = _a.values;
13
+ var values = _a.values, onChange = _a.onChange, onDelete = _a.onDelete;
12
14
  var styles = useStyles();
13
- var dispatch = useDispatch();
14
15
  var metadata = useSelector(mdmModule.selectors.getMetadata);
15
16
  var entity = useSelector(mdmModule.selectors.getEntity);
16
17
  var entityUri = entity.uri;
@@ -18,7 +19,7 @@ export var Roles = function (_a) {
18
19
  value: role.uri,
19
20
  label: role.label
20
21
  }); });
21
- var formattedValues = values.map(function (value) {
22
+ var formattedValues = (values || []).map(function (value) {
22
23
  var _a;
23
24
  var label = (_a = options.find(propEq('value', value))) === null || _a === void 0 ? void 0 : _a.label;
24
25
  return {
@@ -26,13 +27,18 @@ export var Roles = function (_a) {
26
27
  label: label || getLastUriPart(value)
27
28
  };
28
29
  });
29
- var handleChange = function (values) {
30
+ var handleChange = useCallback(function (values) {
30
31
  var roles = (values === null || values === void 0 ? void 0 : values.map(prop('value'))) || [];
31
- dispatch(profile.actions.modifyAttribute({
32
+ onChange({
32
33
  value: roles,
33
34
  attributeType: EntityAttrTypes.roles,
34
35
  uri: entityUri
35
- }));
36
- };
37
- return (React.createElement(SimpleDropDownSelector, { label: '', height: 40, isMulti: true, options: options, value: formattedValues, onChange: handleChange, components: components, classes: styles }));
36
+ });
37
+ }, [entityUri, onChange]);
38
+ var handleDelete = useCallback(function () {
39
+ onDelete({ uri: entityUri, attributeType: EntityAttrTypes.roles });
40
+ }, [entityUri, onDelete]);
41
+ return (React.createElement("div", { className: styles.container },
42
+ React.createElement(SimpleDropDownSelector, { label: '', height: 40, isMulti: true, options: options, value: formattedValues, onChange: handleChange, components: components, classes: styles, className: styles.roleContainer }),
43
+ !!onDelete && (React.createElement(SmallIconButton, { className: styles.deleteButton, icon: DeleteIcon, onClick: handleDelete, size: "L" }))));
38
44
  };
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"valueContainer">;
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"container" | "valueContainer" | "roleContainer" | "deleteButton">;
@@ -1,7 +1,19 @@
1
1
  import { makeStyles } from '@material-ui/core/styles';
2
2
  export var useStyles = makeStyles({
3
+ container: {
4
+ display: 'flex',
5
+ flex: 1,
6
+ alignItems: 'flex-start',
7
+ marginBottom: '10px'
8
+ },
9
+ roleContainer: {
10
+ width: '100%'
11
+ },
3
12
  valueContainer: {
4
13
  marginLeft: '8px',
5
14
  width: 0
15
+ },
16
+ deleteButton: {
17
+ marginLeft: '8px'
6
18
  }
7
19
  });
@@ -29,15 +29,15 @@ import AddIcon from '@material-ui/icons/Add';
29
29
  import DeleteIcon from '@material-ui/icons/Delete';
30
30
  import Typography from '@material-ui/core/Typography';
31
31
  import i18n from 'ui-i18n';
32
- import { useStyles } from './styles';
33
32
  import { AttributeErrorType, AttributeTypeType, attributeUriToSearchUri, checkCanCreateAttribute, checkCanDeleteAttribute, checkCanEditAttribute, ErrorType, getAttributeValue, getAttrDataTypeDefinition, getErrorId, getErrorMessage, getErrorType, isDependentLookupAttrType, isEditableMode as checkIsEditableMode, ModeType, SimpleAttributeValueType } from '@reltio/mdm-sdk';
34
33
  import DataTypeValue from '../../../DataTypeValue/DataTypeValue';
35
34
  import DataTypeValueEditor from '../../../editors/DataTypeValueEditor/DataTypeValueEditor';
36
35
  import ErrorWrapper from '../../../ErrorWrapper/ErrorWrapper';
37
- import SmallIconButton from '../../../../components/SmallIconButton/SmallIconButton';
36
+ import SmallIconButton from '../../../SmallIconButton/SmallIconButton';
38
37
  import { attributeValueToEditorValue, prepareChangeData } from './utils';
39
38
  import withAsyncMount from '../../../../HOCs/withAsyncMount/withAsyncMount';
40
39
  import { getDependentLookupEditorContext } from './selectors/getDependentLookupEditorContext';
40
+ import { useStyles } from './styles';
41
41
  var AsyncMountPlaceholder = function () {
42
42
  var styles = useStyles();
43
43
  return React.createElement("div", { className: styles.placeholder });
@@ -1,7 +1,10 @@
1
1
  /// <reference types="react" />
2
- declare type Props = {
2
+ import { AttributeItem } from '../AttributesPager';
3
+ export declare type Props = {
3
4
  className?: string;
4
5
  values: string[];
6
+ onChange: (param: AttributeItem) => void;
7
+ onDelete?: (param: AttributeItem) => void;
5
8
  };
6
- declare const Tags: ({ className, values }: Props) => JSX.Element;
9
+ declare const Tags: ({ className, values, onChange, onDelete }: Props) => JSX.Element;
7
10
  export default Tags;
@@ -1,8 +1,11 @@
1
1
  import React, { useCallback } from 'react';
2
- import { useDispatch, useSelector } from 'react-redux';
3
- import mdmModule, { profile } from '@reltio/mdm-module';
2
+ import { useSelector } from 'react-redux';
3
+ import mdmModule from '@reltio/mdm-module';
4
4
  import { getFacets, EntityAttrTypes, buildFilterQueryString } from '@reltio/mdm-sdk';
5
+ import DeleteIcon from '@material-ui/icons/Delete';
5
6
  import TypeaheadEditor from '../../../editors/TypeaheadEditor/TypeaheadEditor';
7
+ import SmallIconButton from '../../../SmallIconButton/SmallIconButton';
8
+ import { useStyles } from './styles';
6
9
  var filtersWithSearch = function (searchQuery) { return [
7
10
  {
8
11
  filter: 'containsWordStartingWith',
@@ -23,16 +26,21 @@ var getSuggestions = function (searchQuery) {
23
26
  return getFacets({ query: getQuery(searchQuery), body: body }).then(function (response) { return Object.keys(response.tags); });
24
27
  };
25
28
  var Tags = function (_a) {
26
- var className = _a.className, values = _a.values;
27
- var dispatch = useDispatch();
29
+ var className = _a.className, values = _a.values, onChange = _a.onChange, onDelete = _a.onDelete;
30
+ var styles = useStyles();
28
31
  var entityUri = useSelector(mdmModule.selectors.getEntityUri);
29
- var onChange = useCallback(function (tags) {
30
- return dispatch(profile.actions.modifyAttribute({
32
+ var handleChange = useCallback(function (tags) {
33
+ onChange({
31
34
  value: tags,
32
35
  attributeType: EntityAttrTypes.tags,
33
36
  uri: entityUri
34
- }));
35
- }, [dispatch, entityUri]);
36
- return (React.createElement(TypeaheadEditor, { fullWidth: true, multiple: true, variant: "filled", className: className, value: values, onChange: onChange, getSuggestions: getSuggestions }));
37
+ });
38
+ }, [onChange, entityUri]);
39
+ var handleDelete = useCallback(function () {
40
+ onDelete({ uri: entityUri, attributeType: EntityAttrTypes.tags });
41
+ }, [entityUri, onDelete]);
42
+ return (React.createElement("div", { className: styles.container },
43
+ React.createElement(TypeaheadEditor, { fullWidth: true, multiple: true, variant: "filled", className: className, value: values || [], onChange: handleChange, getSuggestions: getSuggestions }),
44
+ !!onDelete && (React.createElement(SmallIconButton, { className: styles.deleteButton, icon: DeleteIcon, onClick: handleDelete, size: "L" }))));
37
45
  };
38
46
  export default Tags;
@@ -0,0 +1 @@
1
+ export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"container" | "deleteButton">;
@@ -0,0 +1,12 @@
1
+ import { makeStyles } from '@material-ui/core/styles';
2
+ export var useStyles = makeStyles({
3
+ container: {
4
+ display: 'flex',
5
+ flex: 1,
6
+ alignItems: 'flex-start',
7
+ marginBottom: '10px'
8
+ },
9
+ deleteButton: {
10
+ marginLeft: '8px'
11
+ }
12
+ });
@@ -4,7 +4,8 @@ import { HistoryFilter } from '../types';
4
4
  declare type Props = {
5
5
  filter: HistoryFilter;
6
6
  onApplyFilter: (filter: HistoryFilter) => void;
7
+ onClearFilter: () => void;
7
8
  entityType: TEntityType;
8
9
  };
9
- declare const HistoryFilterButton: ({ filter, onApplyFilter, entityType }: Props) => JSX.Element;
10
+ declare const HistoryFilterButton: ({ filter, onApplyFilter, onClearFilter, entityType }: Props) => JSX.Element;
10
11
  export default HistoryFilterButton;
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import React, { useState } from 'react';
12
+ import React, { useEffect, useState } from 'react';
13
13
  import i18n from 'ui-i18n';
14
14
  import { curry, dissoc } from 'ramda';
15
15
  import FilterListIcon from '@material-ui/icons/FilterList';
@@ -24,13 +24,15 @@ import DateRangeSelector from '../DateRangeSelector/DateRangeSelector';
24
24
  import HistoryActivitySelector from '../HistoryActivitySelector/HistoryActivitySelector';
25
25
  import { useStyles } from './styles';
26
26
  var HistoryFilterButton = function (_a) {
27
- var filter = _a.filter, onApplyFilter = _a.onApplyFilter, entityType = _a.entityType;
27
+ var filter = _a.filter, onApplyFilter = _a.onApplyFilter, onClearFilter = _a.onClearFilter, entityType = _a.entityType;
28
28
  var styles = useStyles();
29
29
  var _b = useState(null), anchorEl = _b[0], setAnchorEl = _b[1];
30
30
  var openPopup = function (event) { return setAnchorEl(event.currentTarget); };
31
31
  var closePopup = function () { return setAnchorEl(null); };
32
32
  var _c = useState(filter), currentValue = _c[0], setCurrentValue = _c[1];
33
- var clearCurrentValue = function () { return setCurrentValue(null); };
33
+ useEffect(function () {
34
+ setCurrentValue(filter);
35
+ }, [filter]);
34
36
  var handlePropChange = curry(function (propName, value) {
35
37
  setCurrentValue(function (filterValue) {
36
38
  var _a;
@@ -55,7 +57,7 @@ var HistoryFilterButton = function (_a) {
55
57
  React.createElement(HistoryActivitySelector, { selectedHistoryActivityTypes: activities, onChange: handlePropChange('activities'), className: styles.filterItem }),
56
58
  React.createElement(AttributeSelector, { selectedAttributes: attributes, entityType: entityType, onChange: handlePropChange('attributes'), className: styles.filterItem, title: i18n.text('Attribute updated') }))),
57
59
  React.createElement("div", { className: styles.filterControls },
58
- React.createElement(Button, { onClick: clearCurrentValue, className: styles.clearButton }, i18n.text('Clear all')),
60
+ React.createElement(Button, { onClick: onClearFilter, className: styles.clearButton }, i18n.text('Clear all')),
59
61
  React.createElement(Button, { onClick: closePopup }, i18n.text('Cancel')),
60
62
  React.createElement(Button, { color: "primary", onClick: function () {
61
63
  if (dateRange && isDateRangeValid(dateRange)) {
@@ -6,6 +6,7 @@ declare type Props = {
6
6
  entityType: TEntityType;
7
7
  filter: HistoryFilter;
8
8
  onApplyFilter: (value: HistoryFilter) => void;
9
+ onClearFilter: () => void;
9
10
  };
10
- declare const HistoryHeader: ({ total, entityType, filter, onApplyFilter }: Props) => JSX.Element;
11
+ declare const HistoryHeader: ({ total, entityType, filter, onApplyFilter, onClearFilter }: Props) => JSX.Element;
11
12
  export default HistoryHeader;
@@ -8,7 +8,7 @@ import HistoryFilterButton from '../HistoryFilterButton/HistoryFilterButton';
8
8
  import HistoryMenuButton from '../HistoryMenuButton/HistoryMenuButton';
9
9
  import { useStyles } from './styles';
10
10
  var HistoryHeader = function (_a) {
11
- var total = _a.total, entityType = _a.entityType, filter = _a.filter, onApplyFilter = _a.onApplyFilter;
11
+ var total = _a.total, entityType = _a.entityType, filter = _a.filter, onApplyFilter = _a.onApplyFilter, onClearFilter = _a.onClearFilter;
12
12
  var styles = useStyles();
13
13
  return (React.createElement("div", { className: styles.root },
14
14
  React.createElement(Typography, { variant: "h6" }, i18n.text('History')),
@@ -17,7 +17,7 @@ var HistoryHeader = function (_a) {
17
17
  ? i18n.text('${count} contributing profile', { count: total })
18
18
  : i18n.text('${count} contributing profiles', { count: total }))),
19
19
  React.createElement(Spacer, null),
20
- React.createElement(HistoryFilterButton, { entityType: entityType, filter: filter, onApplyFilter: onApplyFilter }),
20
+ React.createElement(HistoryFilterButton, { entityType: entityType, filter: filter, onApplyFilter: onApplyFilter, onClearFilter: onClearFilter }),
21
21
  React.createElement(HistoryMenuButton, null)));
22
22
  };
23
23
  export default HistoryHeader;
@@ -9,6 +9,7 @@ export declare const useHistory: ({ entity, enabled }: Props) => {
9
9
  canLoadMore: boolean;
10
10
  onLoadMore: () => void;
11
11
  onApplyFilter: (filter: HistoryFilter) => void;
12
+ onClearFilter: () => void;
12
13
  historicUris: string[];
13
14
  historyWithTotal: HistoryWithTotal;
14
15
  historyFilter: HistoryFilter;
@@ -20,11 +20,12 @@ import { HistoryActivityType } from '../types';
20
20
  import { buildHistoryFilterString } from '../utils/filters';
21
21
  import { useSafePromise } from '../../../hooks';
22
22
  var MAX_HISTORY_ROWS = 32;
23
+ var DEFAULT_HISTORY_FILTER = {
24
+ activities: [HistoryActivityType.MERGE, HistoryActivityType.UNMERGE, HistoryActivityType.UPDATE]
25
+ };
23
26
  export var useHistory = function (_a) {
24
27
  var entity = _a.entity, enabled = _a.enabled;
25
- var _b = useState({
26
- activities: [HistoryActivityType.MERGE, HistoryActivityType.UNMERGE, HistoryActivityType.UPDATE]
27
- }), historyFilter = _b[0], setHistoryFilter = _b[1];
28
+ var _b = useState(DEFAULT_HISTORY_FILTER), historyFilter = _b[0], setHistoryFilter = _b[1];
28
29
  var _c = useState(0), historyPage = _c[0], setHistoryPage = _c[1];
29
30
  var historyFilterString = useMemo(function () { return buildHistoryFilterString(historyFilter); }, [historyFilter]);
30
31
  var _d = useState(null), historicUris = _d[0], setHistoricUris = _d[1];
@@ -97,6 +98,9 @@ export var useHistory = function (_a) {
97
98
  setHistoryPage(0);
98
99
  setHistoryFilter(filter);
99
100
  }, []);
101
+ var onClearFilter = useCallback(function () {
102
+ onApplyFilter(__assign({}, DEFAULT_HISTORY_FILTER));
103
+ }, []);
100
104
  var onLoadMore = useCallback(function () {
101
105
  if (!canLoadMore)
102
106
  return;
@@ -108,6 +112,7 @@ export var useHistory = function (_a) {
108
112
  canLoadMore: canLoadMore,
109
113
  onLoadMore: onLoadMore,
110
114
  onApplyFilter: onApplyFilter,
115
+ onClearFilter: onClearFilter,
111
116
  historicUris: historicUris,
112
117
  historyWithTotal: historyWithTotal,
113
118
  historyFilter: historyFilter
@@ -24,7 +24,7 @@ var SPECIAL_ATTRIBUTES_NAMES = [
24
24
  var prepareStartOrEndDate = function (_a) {
25
25
  var newValue = _a.newValue, oldValue = _a.oldValue;
26
26
  var parseValue = function (value) { return (isNaN(value) || isEmptyValue(value) ? value : parseInt(value)); };
27
- var isExistedValue = function (value) { return (value === null || value === void 0 ? void 0 : value.length) && !isEmptyValue(value); };
27
+ var isExistedValue = function (value) { return (value === null || value === void 0 ? void 0 : value.length) && !isEmptyValue(value) && !isEmptyValue(value[0]); };
28
28
  var isExistNewValue = isExistedValue(newValue);
29
29
  var isExistOldValue = isExistedValue(oldValue);
30
30
  if (isExistNewValue && isExistOldValue) {
@@ -1,7 +1,7 @@
1
1
  import { useState, useEffect, useCallback, useContext } from 'react';
2
2
  import { filter } from 'ramda';
3
3
  import { useSelector } from 'react-redux';
4
- import { getAssigneeForTask, updateAssigneeForTask } from '@reltio/mdm-sdk';
4
+ import { getAssigneeForTask, updateAssigneeForTask, utils } from '@reltio/mdm-sdk';
5
5
  import mdmModule from '@reltio/mdm-module';
6
6
  import { useSafePromise } from '../../../hooks';
7
7
  import { WorkflowTasksContext } from '../../../contexts/WorkflowTasksContext';
@@ -42,7 +42,11 @@ export var useWorkflowAssignee = function (_a) {
42
42
  }))
43
43
  .then(function (result) {
44
44
  var data = result.data;
45
- var assignees = data.map(assigneeToValue);
45
+ var assignees = data
46
+ .sort(function (a, b) {
47
+ return utils.strings.sort('asc', a, b);
48
+ })
49
+ .map(assigneeToValue);
46
50
  setAssignees(assignees);
47
51
  return filterOutRest_1(assignees);
48
52
  })
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.950",
3
+ "version": "1.4.954",
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.950",
11
- "@reltio/mdm-sdk": "^1.4.950",
10
+ "@reltio/mdm-module": "^1.4.954",
11
+ "@reltio/mdm-sdk": "^1.4.954",
12
12
  "classnames": "^2.2.5",
13
13
  "d3-cloud": "^1.2.5",
14
14
  "d3-geo": "^2.0.1",