@reltio/components 1.4.1653 → 1.4.1655
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/AttributesErrorsPanel/AttributesErrorsPanel.d.ts +7 -0
- package/cjs/components/AttributesErrorsPanel/AttributesErrorsPanel.js +84 -0
- package/cjs/components/AttributesErrorsPanel/ErrorsPanel/Error.d.ts +7 -0
- package/cjs/components/AttributesErrorsPanel/ErrorsPanel/Error.js +55 -0
- package/cjs/components/AttributesErrorsPanel/ErrorsPanel/ErrorsPanel.d.ts +17 -0
- package/cjs/components/AttributesErrorsPanel/ErrorsPanel/ErrorsPanel.js +55 -0
- package/cjs/components/AttributesErrorsPanel/ErrorsPanel/helpers.d.ts +5 -0
- package/cjs/components/AttributesErrorsPanel/ErrorsPanel/helpers.js +44 -0
- package/cjs/components/AttributesErrorsPanel/styles.d.ts +2 -0
- package/cjs/components/AttributesErrorsPanel/styles.js +99 -0
- package/cjs/components/AttributesErrorsPanel/useCachedErrors.d.ts +1 -0
- package/cjs/components/AttributesErrorsPanel/useCachedErrors.js +14 -0
- package/cjs/components/index.d.ts +1 -0
- package/cjs/components/index.js +5 -3
- package/cjs/hooks/useAPI/API.js +8 -1
- package/cjs/icons/Hyperlink.d.ts +3 -0
- package/cjs/icons/Hyperlink.js +22 -0
- package/esm/components/AttributesErrorsPanel/AttributesErrorsPanel.d.ts +7 -0
- package/esm/components/AttributesErrorsPanel/AttributesErrorsPanel.js +54 -0
- package/esm/components/AttributesErrorsPanel/ErrorsPanel/Error.d.ts +7 -0
- package/esm/components/AttributesErrorsPanel/ErrorsPanel/Error.js +26 -0
- package/esm/components/AttributesErrorsPanel/ErrorsPanel/ErrorsPanel.d.ts +17 -0
- package/esm/components/AttributesErrorsPanel/ErrorsPanel/ErrorsPanel.js +26 -0
- package/esm/components/AttributesErrorsPanel/ErrorsPanel/helpers.d.ts +5 -0
- package/esm/components/AttributesErrorsPanel/ErrorsPanel/helpers.js +34 -0
- package/esm/components/AttributesErrorsPanel/styles.d.ts +2 -0
- package/esm/components/AttributesErrorsPanel/styles.js +97 -0
- package/esm/components/AttributesErrorsPanel/useCachedErrors.d.ts +1 -0
- package/esm/components/AttributesErrorsPanel/useCachedErrors.js +10 -0
- package/esm/components/index.d.ts +1 -0
- package/esm/components/index.js +1 -0
- package/esm/hooks/useAPI/API.js +8 -1
- package/esm/icons/Hyperlink.d.ts +3 -0
- package/esm/icons/Hyperlink.js +17 -0
- package/package.json +2 -2
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.AttributesErrorsPanel = void 0;
|
|
30
|
+
var react_1 = __importStar(require("react"));
|
|
31
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
32
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
33
|
+
var ramda_1 = require("ramda");
|
|
34
|
+
var Warning_1 = __importDefault(require("@mui/icons-material/Warning"));
|
|
35
|
+
var Error_1 = __importDefault(require("@mui/icons-material/Error"));
|
|
36
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
37
|
+
var useCachedErrors_1 = require("./useCachedErrors");
|
|
38
|
+
var ErrorsPanel_1 = require("./ErrorsPanel/ErrorsPanel");
|
|
39
|
+
var Error_2 = require("./ErrorsPanel/Error");
|
|
40
|
+
var styles_1 = __importDefault(require("./styles"));
|
|
41
|
+
var AttributesErrorsPanel = function (_a) {
|
|
42
|
+
var _b = _a.attributesWithErrors, attributesWithErrors = _b === void 0 ? [] : _b;
|
|
43
|
+
var styles = (0, styles_1.default)();
|
|
44
|
+
var cachedErrors = (0, useCachedErrors_1.useCachedErrors)(attributesWithErrors);
|
|
45
|
+
var _c = (0, react_1.useMemo)(function () { return (0, ramda_1.partition)(mdm_sdk_1.isCriticalError, cachedErrors); }, [cachedErrors]), errors = _c[0], warnings = _c[1];
|
|
46
|
+
var _d = (0, react_1.useState)(null), expandedPanelId = _d[0], setExpandedPanelId = _d[1];
|
|
47
|
+
var panels = (0, react_1.useMemo)(function () {
|
|
48
|
+
return [
|
|
49
|
+
{
|
|
50
|
+
id: 'errors',
|
|
51
|
+
title: ui_i18n_1.default.text('${number} ${errors}', {
|
|
52
|
+
number: errors.length,
|
|
53
|
+
errors: errors.length === 1 ? ui_i18n_1.default.text('error') : ui_i18n_1.default.text('errors')
|
|
54
|
+
}),
|
|
55
|
+
icon: react_1.default.createElement(Warning_1.default, { className: (0, classnames_1.default)(styles.icon, styles.errorIcon) }),
|
|
56
|
+
items: errors,
|
|
57
|
+
accordionClassName: styles.errorsAccordion,
|
|
58
|
+
accordionDetailsClassName: styles.errorsAccordionDetails
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'warnings',
|
|
62
|
+
title: ui_i18n_1.default.text('${number} ${warnings}', {
|
|
63
|
+
number: warnings.length,
|
|
64
|
+
warnings: warnings.length === 1 ? ui_i18n_1.default.text('warning') : ui_i18n_1.default.text('warnings')
|
|
65
|
+
}),
|
|
66
|
+
icon: react_1.default.createElement(Error_1.default, { className: (0, classnames_1.default)(styles.icon, styles.warningIcon) }),
|
|
67
|
+
items: warnings,
|
|
68
|
+
accordionClassName: styles.warningsAccordion,
|
|
69
|
+
accordionDetailsClassName: styles.warningsAccordionDetails
|
|
70
|
+
}
|
|
71
|
+
].filter(function (_a) {
|
|
72
|
+
var items = _a.items;
|
|
73
|
+
return items.length > 0;
|
|
74
|
+
});
|
|
75
|
+
}, [errors, warnings, styles]);
|
|
76
|
+
(0, react_1.useEffect)(function () {
|
|
77
|
+
setExpandedPanelId('errors');
|
|
78
|
+
}, [errors]);
|
|
79
|
+
var handleChange = (0, react_1.useCallback)(function (panelId) { return function (event, isExpanded) {
|
|
80
|
+
setExpandedPanelId(isExpanded ? panelId : null);
|
|
81
|
+
}; }, []);
|
|
82
|
+
return panels.length > 0 ? (react_1.default.createElement(ErrorsPanel_1.ErrorsPanel, { panels: panels, expandedPanelId: expandedPanelId, onToggle: handleChange, ErrorComponent: Error_2.Error })) : null;
|
|
83
|
+
};
|
|
84
|
+
exports.AttributesErrorsPanel = AttributesErrorsPanel;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Error = void 0;
|
|
30
|
+
var react_1 = __importStar(require("react"));
|
|
31
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
32
|
+
var Hyperlink_1 = __importDefault(require("../../../icons/Hyperlink"));
|
|
33
|
+
var SmallIconButton_1 = require("../../SmallIconButton");
|
|
34
|
+
var contexts_1 = require("../../../contexts");
|
|
35
|
+
var helpers_1 = require("./helpers");
|
|
36
|
+
var styles_1 = __importDefault(require("../styles"));
|
|
37
|
+
exports.Error = (0, react_1.memo)(function (_a) {
|
|
38
|
+
var error = _a.error;
|
|
39
|
+
var styles = (0, styles_1.default)();
|
|
40
|
+
var metadata = (0, contexts_1.useMdmMetadata)();
|
|
41
|
+
var isEditableMode = (0, contexts_1.useMdmIsEditableMode)();
|
|
42
|
+
var displayedMessage = (0, helpers_1.getDisplayedErrorMessage)(metadata, error);
|
|
43
|
+
var displayedErrorPath = (0, helpers_1.getDisplayedErrorPath)(error);
|
|
44
|
+
var displayedAttributeTypesPath = (0, helpers_1.getDisplayedAttributeTypesPath)(error);
|
|
45
|
+
var highlightError = (0, react_1.useContext)(contexts_1.ScrollToElementContext).highlightError;
|
|
46
|
+
var showLink = error.uri || (error.parentUri && error.attributeTypeUri);
|
|
47
|
+
return (react_1.default.createElement("li", null,
|
|
48
|
+
react_1.default.createElement("div", { className: styles.errorWrapper },
|
|
49
|
+
displayedAttributeTypesPath && (react_1.default.createElement("span", { className: styles.attributeTypesPath }, displayedAttributeTypesPath)),
|
|
50
|
+
react_1.default.createElement("span", { className: styles.errorTitle },
|
|
51
|
+
displayedMessage,
|
|
52
|
+
showLink && isEditableMode && (react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { icon: Hyperlink_1.default, size: "XXS", onClick: function () { return highlightError(error); }, tooltipTitle: ui_i18n_1.default.text('Go to error'), className: styles.goToIcon }))),
|
|
53
|
+
displayedErrorPath && react_1.default.createElement("span", { className: styles.parents }, displayedErrorPath))));
|
|
54
|
+
});
|
|
55
|
+
exports.Error.displayName = 'Error';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { ReactNode, ElementType } from 'react';
|
|
2
|
+
import { AttributeError } from '@reltio/mdm-sdk';
|
|
3
|
+
type Props = {
|
|
4
|
+
panels: {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
icon: ReactNode;
|
|
8
|
+
items: AttributeError[];
|
|
9
|
+
accordionClassName: string;
|
|
10
|
+
accordionDetailsClassName: string;
|
|
11
|
+
}[];
|
|
12
|
+
expandedPanelId: string;
|
|
13
|
+
onToggle: (id: string) => (e: any, isExpanded: boolean) => void;
|
|
14
|
+
ErrorComponent: ElementType;
|
|
15
|
+
};
|
|
16
|
+
export declare const ErrorsPanel: React.MemoExoticComponent<({ panels, expandedPanelId, onToggle, ErrorComponent }: Props) => JSX.Element>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.ErrorsPanel = void 0;
|
|
30
|
+
var react_1 = __importStar(require("react"));
|
|
31
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
32
|
+
var Accordion_1 = __importDefault(require("@mui/material/Accordion"));
|
|
33
|
+
var AccordionSummary_1 = __importDefault(require("@mui/material/AccordionSummary"));
|
|
34
|
+
var AccordionDetails_1 = __importDefault(require("@mui/material/AccordionDetails"));
|
|
35
|
+
var ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
|
|
36
|
+
var Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
37
|
+
var styles_1 = __importDefault(require("../styles"));
|
|
38
|
+
exports.ErrorsPanel = (0, react_1.memo)(function (_a) {
|
|
39
|
+
var panels = _a.panels, expandedPanelId = _a.expandedPanelId, onToggle = _a.onToggle, ErrorComponent = _a.ErrorComponent;
|
|
40
|
+
var styles = (0, styles_1.default)();
|
|
41
|
+
return panels.length > 0 ? (react_1.default.createElement("div", null, panels.map(function (_a) {
|
|
42
|
+
var id = _a.id, icon = _a.icon, title = _a.title, items = _a.items, accordionClassName = _a.accordionClassName, accordionDetailsClassName = _a.accordionDetailsClassName;
|
|
43
|
+
return (react_1.default.createElement(Accordion_1.default, { key: id, square: true, expanded: expandedPanelId === id, onChange: onToggle(id), className: accordionClassName, classes: { root: styles.accordion, expanded: styles.accordionExpanded } },
|
|
44
|
+
react_1.default.createElement(AccordionSummary_1.default, { classes: {
|
|
45
|
+
root: styles.accordionSummary,
|
|
46
|
+
expanded: styles.accordionSummaryExpanded,
|
|
47
|
+
content: styles.accordionSummaryContent
|
|
48
|
+
}, expandIcon: react_1.default.createElement(ExpandMore_1.default, null) },
|
|
49
|
+
icon,
|
|
50
|
+
react_1.default.createElement(Typography_1.default, { className: styles.accordionSummaryHeading }, title)),
|
|
51
|
+
react_1.default.createElement(AccordionDetails_1.default, { className: (0, classnames_1.default)(styles.accordionDetails, accordionDetailsClassName) },
|
|
52
|
+
react_1.default.createElement("ul", null, items.map(function (error, i) { return (react_1.default.createElement(ErrorComponent, { key: i, error: error })); })))));
|
|
53
|
+
}))) : null;
|
|
54
|
+
});
|
|
55
|
+
exports.ErrorsPanel.displayName = 'ErrorsPanel';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AttributeError, Metadata } from '@reltio/mdm-sdk';
|
|
2
|
+
export declare const areErrorsEqual: (errors1?: AttributeError[], errors2?: AttributeError[]) => any;
|
|
3
|
+
export declare const getDisplayedErrorMessage: (metadata: Metadata, { type, source, message, attributeTypeUri, attributeType }: AttributeError) => string;
|
|
4
|
+
export declare const getDisplayedErrorPath: ({ path: errorPath, uri }: AttributeError) => string;
|
|
5
|
+
export declare const getDisplayedAttributeTypesPath: ({ path: errorPath }: AttributeError) => string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getDisplayedAttributeTypesPath = exports.getDisplayedErrorPath = exports.getDisplayedErrorMessage = exports.areErrorsEqual = void 0;
|
|
7
|
+
var ramda_1 = require("ramda");
|
|
8
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
9
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
10
|
+
var clearError = (0, ramda_1.omit)(['deactivated', 'path']);
|
|
11
|
+
var areErrorsEqual = function (errors1, errors2) {
|
|
12
|
+
if (errors1 === void 0) { errors1 = []; }
|
|
13
|
+
if (errors2 === void 0) { errors2 = []; }
|
|
14
|
+
return errors1.length === errors2.length && (0, ramda_1.equals)(errors1.map(clearError), errors2.map(clearError));
|
|
15
|
+
};
|
|
16
|
+
exports.areErrorsEqual = areErrorsEqual;
|
|
17
|
+
var getDisplayedErrorMessage = function (metadata, _a) {
|
|
18
|
+
var type = _a.type, source = _a.source, message = _a.message, _b = _a.attributeTypeUri, attributeTypeUri = _b === void 0 ? '' : _b, attributeType = _a.attributeType;
|
|
19
|
+
if (type === mdm_sdk_1.ErrorType.missed && source === mdm_sdk_1.ErrorSource.local) {
|
|
20
|
+
var attrType = attributeType || (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, attributeTypeUri);
|
|
21
|
+
return attrType ? ui_i18n_1.default.text('${attribute} is required', { attribute: attrType.label }) : message;
|
|
22
|
+
}
|
|
23
|
+
return message;
|
|
24
|
+
};
|
|
25
|
+
exports.getDisplayedErrorMessage = getDisplayedErrorMessage;
|
|
26
|
+
var getDisplayedErrorPath = function (_a) {
|
|
27
|
+
var errorPath = _a.path, uri = _a.uri;
|
|
28
|
+
return errorPath === null || errorPath === void 0 ? void 0 : errorPath.slice(0, uri ? errorPath.length - 1 : errorPath.length).filter(function (_a) {
|
|
29
|
+
var type = _a.type;
|
|
30
|
+
return [mdm_sdk_1.AttributeValuePathItemType.attributeValue, mdm_sdk_1.AttributeValuePathItemType.relationConnection].includes(type);
|
|
31
|
+
}).map(function (_a) {
|
|
32
|
+
var label = _a.label;
|
|
33
|
+
return label;
|
|
34
|
+
}).filter(ramda_1.identity).join(' / ');
|
|
35
|
+
};
|
|
36
|
+
exports.getDisplayedErrorPath = getDisplayedErrorPath;
|
|
37
|
+
var getDisplayedAttributeTypesPath = function (_a) {
|
|
38
|
+
var errorPath = _a.path;
|
|
39
|
+
return errorPath === null || errorPath === void 0 ? void 0 : errorPath.filter(function (_a) {
|
|
40
|
+
var type = _a.type;
|
|
41
|
+
return type === mdm_sdk_1.AttributeValuePathItemType.attributeValue;
|
|
42
|
+
}).map((0, ramda_1.either)((0, ramda_1.path)(['valueType', 'label']), (0, ramda_1.path)(['valueType', 'name']))).filter(ramda_1.identity).join(' > ');
|
|
43
|
+
};
|
|
44
|
+
exports.getDisplayedAttributeTypesPath = getDisplayedAttributeTypesPath;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"icon" | "parents" | "errorWrapper" | "accordion" | "accordionExpanded" | "accordionSummary" | "accordionSummaryHeading" | "accordionSummaryExpanded" | "accordionSummaryContent" | "accordionDetails" | "errorTitle" | "attributeTypesPath" | "goToIcon" | "errorsAccordion" | "errorsAccordionDetails" | "warningsAccordion" | "warningsAccordionDetails" | "errorIcon" | "warningIcon">;
|
|
2
|
+
export default useStyles;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var styles_1 = require("@mui/styles");
|
|
4
|
+
var accordionSummaryHeight = '48px';
|
|
5
|
+
var defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';
|
|
6
|
+
var useStyles = (0, styles_1.makeStyles)(function (theme) { return ({
|
|
7
|
+
accordion: {
|
|
8
|
+
borderTop: defaultBorderStyle,
|
|
9
|
+
borderBottom: defaultBorderStyle,
|
|
10
|
+
fontSize: '13px',
|
|
11
|
+
boxShadow: 'none',
|
|
12
|
+
'&:not(:first-child)': {
|
|
13
|
+
borderTop: 0
|
|
14
|
+
},
|
|
15
|
+
'&:before': {
|
|
16
|
+
display: 'none'
|
|
17
|
+
},
|
|
18
|
+
'&$accordionExpanded': {
|
|
19
|
+
margin: 'auto'
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
accordionExpanded: {},
|
|
23
|
+
accordionSummary: {
|
|
24
|
+
display: 'flex',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
height: accordionSummaryHeight,
|
|
27
|
+
minHeight: accordionSummaryHeight,
|
|
28
|
+
'&$accordionSummaryExpanded': {
|
|
29
|
+
height: accordionSummaryHeight,
|
|
30
|
+
minHeight: accordionSummaryHeight
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
accordionSummaryHeading: {
|
|
34
|
+
flex: 1,
|
|
35
|
+
fontSize: theme.typography.pxToRem(13),
|
|
36
|
+
fontWeight: theme.typography.fontWeightRegular
|
|
37
|
+
},
|
|
38
|
+
accordionSummaryExpanded: {},
|
|
39
|
+
accordionSummaryContent: {
|
|
40
|
+
display: 'flex',
|
|
41
|
+
alignItems: 'center'
|
|
42
|
+
},
|
|
43
|
+
accordionDetails: {
|
|
44
|
+
maxHeight: '21vh',
|
|
45
|
+
overflow: 'auto',
|
|
46
|
+
paddingTop: 0,
|
|
47
|
+
paddingBottom: 0,
|
|
48
|
+
'& ul': {
|
|
49
|
+
paddingLeft: '23px',
|
|
50
|
+
marginTop: '3px'
|
|
51
|
+
},
|
|
52
|
+
'& li': {
|
|
53
|
+
paddingLeft: '9px',
|
|
54
|
+
paddingBottom: '8px'
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
parents: {
|
|
58
|
+
color: theme.palette.text.primary
|
|
59
|
+
},
|
|
60
|
+
errorWrapper: {
|
|
61
|
+
lineHeight: '18px',
|
|
62
|
+
display: 'flex',
|
|
63
|
+
flexDirection: 'column'
|
|
64
|
+
},
|
|
65
|
+
errorTitle: {
|
|
66
|
+
display: 'flex',
|
|
67
|
+
alignItems: 'center'
|
|
68
|
+
},
|
|
69
|
+
attributeTypesPath: {
|
|
70
|
+
color: theme.palette.text.secondary
|
|
71
|
+
},
|
|
72
|
+
goToIcon: {
|
|
73
|
+
marginLeft: '4px'
|
|
74
|
+
},
|
|
75
|
+
errorsAccordion: {
|
|
76
|
+
backgroundColor: '#FFF4F6',
|
|
77
|
+
borderColor: '#FFB8B3'
|
|
78
|
+
},
|
|
79
|
+
errorsAccordionDetails: {
|
|
80
|
+
color: '#DD2C00'
|
|
81
|
+
},
|
|
82
|
+
warningsAccordion: {
|
|
83
|
+
backgroundColor: '#FFF9ED',
|
|
84
|
+
borderColor: '#FFDD91'
|
|
85
|
+
},
|
|
86
|
+
warningsAccordionDetails: {
|
|
87
|
+
color: '#CC7500'
|
|
88
|
+
},
|
|
89
|
+
icon: {
|
|
90
|
+
marginRight: '8px'
|
|
91
|
+
},
|
|
92
|
+
errorIcon: {
|
|
93
|
+
fill: '#FF1744'
|
|
94
|
+
},
|
|
95
|
+
warningIcon: {
|
|
96
|
+
fill: '#F9A825'
|
|
97
|
+
}
|
|
98
|
+
}); });
|
|
99
|
+
exports.default = useStyles;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useCachedErrors: (allErrors: any) => any;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCachedErrors = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var helpers_1 = require("./ErrorsPanel/helpers");
|
|
6
|
+
var useCachedErrors = function (allErrors) {
|
|
7
|
+
var cacheForAllErrors = (0, react_1.useRef)(allErrors);
|
|
8
|
+
var areEqualErrors = (0, helpers_1.areErrorsEqual)(allErrors, cacheForAllErrors.current);
|
|
9
|
+
if (!areEqualErrors) {
|
|
10
|
+
cacheForAllErrors.current = allErrors;
|
|
11
|
+
}
|
|
12
|
+
return cacheForAllErrors.current;
|
|
13
|
+
};
|
|
14
|
+
exports.useCachedErrors = useCachedErrors;
|
|
@@ -57,6 +57,7 @@ export { EntityTypesSelector } from './EntityTypesSelector/EntityTypesSelector';
|
|
|
57
57
|
export { RelationTypesSelector } from './RelationTypesSelector/RelationTypesSelector';
|
|
58
58
|
export { default as EntityUriLink } from './EntityUriLink/EntityUriLink';
|
|
59
59
|
export { default as ErrorBoundary } from './ErrorBoundary/ErrorBoundary';
|
|
60
|
+
export { AttributesErrorsPanel } from './AttributesErrorsPanel/AttributesErrorsPanel';
|
|
60
61
|
export { default as ErrorPopup } from './ErrorPopup/ErrorPopup';
|
|
61
62
|
export { default as ErrorWrapper } from './ErrorWrapper/ErrorWrapper';
|
|
62
63
|
export { default as ExpandedValueTooltip } from './ExpandedValueTooltip/ExpandedValueTooltip';
|
package/cjs/components/index.js
CHANGED
|
@@ -18,9 +18,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
exports.EmptyState = exports.NoResults = exports.NoData = exports.DropDownSelector = exports.DropDownMenuButton = exports.Drawer = exports.DataTypeValue = exports.ConnectionRelationTypeSelector = exports.ConfigureColumnsPopup = exports.MenuWithPopper = exports.MenuList = exports.LoadMoreButton = exports.DropdownIndicatorWithIconButton = exports.DropdownIndicator = exports.CommentsContainer = exports.ColorBar = exports.CollapseButton = exports.CollaborationItem = exports.ClickAwayProvider = exports.BasicViewHeader = exports.BasicViewContent = exports.BasicView = exports.ScreenProfileBand = exports.ProfileBandNavigation = exports.AvatarWithFallback = exports.AutoSizeList = exports.ReadOnlyAttributesPager = exports.SimpleAttribute = exports.ReferenceAttribute = exports.NestedAttribute = exports.EditableImageAttributesLine = exports.ImageAttributesLine = exports.ReadOnlyAttributesList = exports.ReadOnlyAttributeValuesBlock = exports.EditableAttribute = exports.ReadOnlyAttribute = exports.CardinalityMessage = exports.AttributesPager = exports.SimpleAttributeEditor = exports.RelationTypeSelector = exports.ReferenceAttributeEditor = exports.NestedAttributeEditor = exports.MoreAttributesButton = exports.EntitySelector = exports.EntityCreator = exports.AttributesList = exports.BranchDecorator = exports.DescriptionIcon = exports.AttributesView = exports.AttributeListItem = void 0;
|
|
21
|
-
exports.
|
|
22
|
-
exports.
|
|
23
|
-
exports.StepNavigation = exports.TenantLabel = void 0;
|
|
21
|
+
exports.SelectionPopup = exports.useKeyboardNavigation = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.ReactSortableTreeUtils = exports.ReactSortableTreeHandlers = exports.ReactSortableTree = exports.ReactSelectOptionFilters = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = exports.Popper = exports.MultipleInput = exports.ModeSwitcherSelect = exports.ModeSwitcher = exports.TransitiveMatchBlock = exports.SimpleMatchRulesBlock = exports.MatchRuleVariant = exports.MatchRulesBlock = exports.LoadingSpinner = exports.Link = exports.LinearLoadIndicator = exports.ImportModes = exports.ImportButton = exports.ImageGalleryDialog = exports.Highlighter = exports.HierarchicalAttributeTooltip = exports.HideOnShrink = exports.FlipCard = exports.FacetViewHeader = exports.ExpandedValueTooltip = exports.ErrorWrapper = exports.ErrorPopup = exports.AttributesErrorsPanel = exports.ErrorBoundary = exports.EntityUriLink = exports.RelationTypesSelector = exports.EntityTypesSelector = exports.EntityTypeIcon = exports.EntityTypeBadge = exports.EntityAvatar = exports.EMPTY_STATE_VARIANTS = exports.EMPTY_STATE_ICONS = void 0;
|
|
22
|
+
exports.RelevanceScoreBadge = exports.RequiredMark = exports.HierarchyNodeTitle = exports.DataTenantBadge = exports.SettingsMenu = exports.TenantsDropDownSelector = exports.TenantIcon = exports.SourceSystemsSelector = exports.MatchRulesSelector = exports.MultiValueSelector = exports.DragAndDrop = exports.ConnectionEditor = exports.AttributesFiltersBuilder = exports.AttributesFiltersButton = exports.AttributeGroupIcon = exports.BasicAttributeSelector = exports.ProfilesList = exports.ActionButtonMode = exports.ActionButton = exports.NotMatchButton = exports.MergeButton = exports.ProfileMatchCard = exports.RelationEditor = exports.OvIcon = exports.ErrorMessage = exports.ReltioMap = exports.ConfirmDeleteDialog = exports.ConfirmationDialog = exports.Marginator = exports.LightArrowTooltip = exports.ArrowExpandButton = exports.ScrollableTabs = exports.ExpandableSearchInput = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.ColoredSourceIcon = exports.SourceIcon = exports.SmallIconButtonWithTooltip = exports.SmallIconButton = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopupPopper = void 0;
|
|
23
|
+
exports.StepNavigation = exports.TenantLabel = exports.MultilineMenuItem = void 0;
|
|
24
24
|
__exportStar(require("./activityLog"), exports);
|
|
25
25
|
var AttributeListItem_1 = require("./AttributeListItem/AttributeListItem");
|
|
26
26
|
Object.defineProperty(exports, "AttributeListItem", { enumerable: true, get: function () { return __importDefault(AttributeListItem_1).default; } });
|
|
@@ -139,6 +139,8 @@ var EntityUriLink_1 = require("./EntityUriLink/EntityUriLink");
|
|
|
139
139
|
Object.defineProperty(exports, "EntityUriLink", { enumerable: true, get: function () { return __importDefault(EntityUriLink_1).default; } });
|
|
140
140
|
var ErrorBoundary_1 = require("./ErrorBoundary/ErrorBoundary");
|
|
141
141
|
Object.defineProperty(exports, "ErrorBoundary", { enumerable: true, get: function () { return __importDefault(ErrorBoundary_1).default; } });
|
|
142
|
+
var AttributesErrorsPanel_1 = require("./AttributesErrorsPanel/AttributesErrorsPanel");
|
|
143
|
+
Object.defineProperty(exports, "AttributesErrorsPanel", { enumerable: true, get: function () { return AttributesErrorsPanel_1.AttributesErrorsPanel; } });
|
|
142
144
|
var ErrorPopup_1 = require("./ErrorPopup/ErrorPopup");
|
|
143
145
|
Object.defineProperty(exports, "ErrorPopup", { enumerable: true, get: function () { return __importDefault(ErrorPopup_1).default; } });
|
|
144
146
|
var ErrorWrapper_1 = require("./ErrorWrapper/ErrorWrapper");
|
package/cjs/hooks/useAPI/API.js
CHANGED
|
@@ -136,7 +136,14 @@ var processRequest = function (_a) {
|
|
|
136
136
|
return [4 /*yield*/, getAuthHeaders(params.headers, servicesPath)];
|
|
137
137
|
case 1:
|
|
138
138
|
headers = _a.sent();
|
|
139
|
-
return [4 /*yield*/, (0, mdm_sdk_1.sendRequestFromCustomSandbox)({
|
|
139
|
+
return [4 /*yield*/, (0, mdm_sdk_1.sendRequestFromCustomSandbox)({
|
|
140
|
+
url: url,
|
|
141
|
+
method: method,
|
|
142
|
+
data: data,
|
|
143
|
+
headers: headers,
|
|
144
|
+
noRequestProcessor: true,
|
|
145
|
+
noRetry: true
|
|
146
|
+
})];
|
|
140
147
|
case 2: return [2 /*return*/, _a.sent()];
|
|
141
148
|
}
|
|
142
149
|
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
var react_1 = __importDefault(require("react"));
|
|
18
|
+
var SvgHyperlink = function (props) {
|
|
19
|
+
return (react_1.default.createElement("svg", __assign({ width: 18, height: 18, viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
20
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z", fill: "#000", fillOpacity: 0.54 })));
|
|
21
|
+
};
|
|
22
|
+
exports.default = SvgHyperlink;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import classnames from 'classnames';
|
|
3
|
+
import i18n from 'ui-i18n';
|
|
4
|
+
import { partition } from 'ramda';
|
|
5
|
+
import ErrorIcon from '@mui/icons-material/Warning';
|
|
6
|
+
import WarningIcon from '@mui/icons-material/Error';
|
|
7
|
+
import { isCriticalError } from '@reltio/mdm-sdk';
|
|
8
|
+
import { useCachedErrors } from './useCachedErrors';
|
|
9
|
+
import { ErrorsPanel } from './ErrorsPanel/ErrorsPanel';
|
|
10
|
+
import { Error } from './ErrorsPanel/Error';
|
|
11
|
+
import useStyles from './styles';
|
|
12
|
+
export var AttributesErrorsPanel = function (_a) {
|
|
13
|
+
var _b = _a.attributesWithErrors, attributesWithErrors = _b === void 0 ? [] : _b;
|
|
14
|
+
var styles = useStyles();
|
|
15
|
+
var cachedErrors = useCachedErrors(attributesWithErrors);
|
|
16
|
+
var _c = useMemo(function () { return partition(isCriticalError, cachedErrors); }, [cachedErrors]), errors = _c[0], warnings = _c[1];
|
|
17
|
+
var _d = useState(null), expandedPanelId = _d[0], setExpandedPanelId = _d[1];
|
|
18
|
+
var panels = useMemo(function () {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
id: 'errors',
|
|
22
|
+
title: i18n.text('${number} ${errors}', {
|
|
23
|
+
number: errors.length,
|
|
24
|
+
errors: errors.length === 1 ? i18n.text('error') : i18n.text('errors')
|
|
25
|
+
}),
|
|
26
|
+
icon: React.createElement(ErrorIcon, { className: classnames(styles.icon, styles.errorIcon) }),
|
|
27
|
+
items: errors,
|
|
28
|
+
accordionClassName: styles.errorsAccordion,
|
|
29
|
+
accordionDetailsClassName: styles.errorsAccordionDetails
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'warnings',
|
|
33
|
+
title: i18n.text('${number} ${warnings}', {
|
|
34
|
+
number: warnings.length,
|
|
35
|
+
warnings: warnings.length === 1 ? i18n.text('warning') : i18n.text('warnings')
|
|
36
|
+
}),
|
|
37
|
+
icon: React.createElement(WarningIcon, { className: classnames(styles.icon, styles.warningIcon) }),
|
|
38
|
+
items: warnings,
|
|
39
|
+
accordionClassName: styles.warningsAccordion,
|
|
40
|
+
accordionDetailsClassName: styles.warningsAccordionDetails
|
|
41
|
+
}
|
|
42
|
+
].filter(function (_a) {
|
|
43
|
+
var items = _a.items;
|
|
44
|
+
return items.length > 0;
|
|
45
|
+
});
|
|
46
|
+
}, [errors, warnings, styles]);
|
|
47
|
+
useEffect(function () {
|
|
48
|
+
setExpandedPanelId('errors');
|
|
49
|
+
}, [errors]);
|
|
50
|
+
var handleChange = useCallback(function (panelId) { return function (event, isExpanded) {
|
|
51
|
+
setExpandedPanelId(isExpanded ? panelId : null);
|
|
52
|
+
}; }, []);
|
|
53
|
+
return panels.length > 0 ? (React.createElement(ErrorsPanel, { panels: panels, expandedPanelId: expandedPanelId, onToggle: handleChange, ErrorComponent: Error })) : null;
|
|
54
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { memo, useContext } from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import HyperlinkIcon from '../../../icons/Hyperlink';
|
|
4
|
+
import { SmallIconButtonWithTooltip } from '../../SmallIconButton';
|
|
5
|
+
import { ScrollToElementContext, useMdmIsEditableMode, useMdmMetadata } from '../../../contexts';
|
|
6
|
+
import { getDisplayedAttributeTypesPath, getDisplayedErrorMessage, getDisplayedErrorPath } from './helpers';
|
|
7
|
+
import useStyles from '../styles';
|
|
8
|
+
export var Error = memo(function (_a) {
|
|
9
|
+
var error = _a.error;
|
|
10
|
+
var styles = useStyles();
|
|
11
|
+
var metadata = useMdmMetadata();
|
|
12
|
+
var isEditableMode = useMdmIsEditableMode();
|
|
13
|
+
var displayedMessage = getDisplayedErrorMessage(metadata, error);
|
|
14
|
+
var displayedErrorPath = getDisplayedErrorPath(error);
|
|
15
|
+
var displayedAttributeTypesPath = getDisplayedAttributeTypesPath(error);
|
|
16
|
+
var highlightError = useContext(ScrollToElementContext).highlightError;
|
|
17
|
+
var showLink = error.uri || (error.parentUri && error.attributeTypeUri);
|
|
18
|
+
return (React.createElement("li", null,
|
|
19
|
+
React.createElement("div", { className: styles.errorWrapper },
|
|
20
|
+
displayedAttributeTypesPath && (React.createElement("span", { className: styles.attributeTypesPath }, displayedAttributeTypesPath)),
|
|
21
|
+
React.createElement("span", { className: styles.errorTitle },
|
|
22
|
+
displayedMessage,
|
|
23
|
+
showLink && isEditableMode && (React.createElement(SmallIconButtonWithTooltip, { icon: HyperlinkIcon, size: "XXS", onClick: function () { return highlightError(error); }, tooltipTitle: i18n.text('Go to error'), className: styles.goToIcon }))),
|
|
24
|
+
displayedErrorPath && React.createElement("span", { className: styles.parents }, displayedErrorPath))));
|
|
25
|
+
});
|
|
26
|
+
Error.displayName = 'Error';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { ReactNode, ElementType } from 'react';
|
|
2
|
+
import { AttributeError } from '@reltio/mdm-sdk';
|
|
3
|
+
type Props = {
|
|
4
|
+
panels: {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
icon: ReactNode;
|
|
8
|
+
items: AttributeError[];
|
|
9
|
+
accordionClassName: string;
|
|
10
|
+
accordionDetailsClassName: string;
|
|
11
|
+
}[];
|
|
12
|
+
expandedPanelId: string;
|
|
13
|
+
onToggle: (id: string) => (e: any, isExpanded: boolean) => void;
|
|
14
|
+
ErrorComponent: ElementType;
|
|
15
|
+
};
|
|
16
|
+
export declare const ErrorsPanel: React.MemoExoticComponent<({ panels, expandedPanelId, onToggle, ErrorComponent }: Props) => JSX.Element>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import classnames from 'classnames';
|
|
3
|
+
import Accordion from '@mui/material/Accordion';
|
|
4
|
+
import AccordionSummary from '@mui/material/AccordionSummary';
|
|
5
|
+
import AccordionDetails from '@mui/material/AccordionDetails';
|
|
6
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
7
|
+
import Typography from '@mui/material/Typography';
|
|
8
|
+
import useStyles from '../styles';
|
|
9
|
+
export var ErrorsPanel = memo(function (_a) {
|
|
10
|
+
var panels = _a.panels, expandedPanelId = _a.expandedPanelId, onToggle = _a.onToggle, ErrorComponent = _a.ErrorComponent;
|
|
11
|
+
var styles = useStyles();
|
|
12
|
+
return panels.length > 0 ? (React.createElement("div", null, panels.map(function (_a) {
|
|
13
|
+
var id = _a.id, icon = _a.icon, title = _a.title, items = _a.items, accordionClassName = _a.accordionClassName, accordionDetailsClassName = _a.accordionDetailsClassName;
|
|
14
|
+
return (React.createElement(Accordion, { key: id, square: true, expanded: expandedPanelId === id, onChange: onToggle(id), className: accordionClassName, classes: { root: styles.accordion, expanded: styles.accordionExpanded } },
|
|
15
|
+
React.createElement(AccordionSummary, { classes: {
|
|
16
|
+
root: styles.accordionSummary,
|
|
17
|
+
expanded: styles.accordionSummaryExpanded,
|
|
18
|
+
content: styles.accordionSummaryContent
|
|
19
|
+
}, expandIcon: React.createElement(ExpandMoreIcon, null) },
|
|
20
|
+
icon,
|
|
21
|
+
React.createElement(Typography, { className: styles.accordionSummaryHeading }, title)),
|
|
22
|
+
React.createElement(AccordionDetails, { className: classnames(styles.accordionDetails, accordionDetailsClassName) },
|
|
23
|
+
React.createElement("ul", null, items.map(function (error, i) { return (React.createElement(ErrorComponent, { key: i, error: error })); })))));
|
|
24
|
+
}))) : null;
|
|
25
|
+
});
|
|
26
|
+
ErrorsPanel.displayName = 'ErrorsPanel';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AttributeError, Metadata } from '@reltio/mdm-sdk';
|
|
2
|
+
export declare const areErrorsEqual: (errors1?: AttributeError[], errors2?: AttributeError[]) => any;
|
|
3
|
+
export declare const getDisplayedErrorMessage: (metadata: Metadata, { type, source, message, attributeTypeUri, attributeType }: AttributeError) => string;
|
|
4
|
+
export declare const getDisplayedErrorPath: ({ path: errorPath, uri }: AttributeError) => string;
|
|
5
|
+
export declare const getDisplayedAttributeTypesPath: ({ path: errorPath }: AttributeError) => string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { either, equals, identity, omit, path } from 'ramda';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import { AttributeValuePathItemType, ErrorSource, ErrorType, findAttributeTypeByUri } from '@reltio/mdm-sdk';
|
|
4
|
+
var clearError = omit(['deactivated', 'path']);
|
|
5
|
+
export var areErrorsEqual = function (errors1, errors2) {
|
|
6
|
+
if (errors1 === void 0) { errors1 = []; }
|
|
7
|
+
if (errors2 === void 0) { errors2 = []; }
|
|
8
|
+
return errors1.length === errors2.length && equals(errors1.map(clearError), errors2.map(clearError));
|
|
9
|
+
};
|
|
10
|
+
export var getDisplayedErrorMessage = function (metadata, _a) {
|
|
11
|
+
var type = _a.type, source = _a.source, message = _a.message, _b = _a.attributeTypeUri, attributeTypeUri = _b === void 0 ? '' : _b, attributeType = _a.attributeType;
|
|
12
|
+
if (type === ErrorType.missed && source === ErrorSource.local) {
|
|
13
|
+
var attrType = attributeType || findAttributeTypeByUri(metadata, attributeTypeUri);
|
|
14
|
+
return attrType ? i18n.text('${attribute} is required', { attribute: attrType.label }) : message;
|
|
15
|
+
}
|
|
16
|
+
return message;
|
|
17
|
+
};
|
|
18
|
+
export var getDisplayedErrorPath = function (_a) {
|
|
19
|
+
var errorPath = _a.path, uri = _a.uri;
|
|
20
|
+
return errorPath === null || errorPath === void 0 ? void 0 : errorPath.slice(0, uri ? errorPath.length - 1 : errorPath.length).filter(function (_a) {
|
|
21
|
+
var type = _a.type;
|
|
22
|
+
return [AttributeValuePathItemType.attributeValue, AttributeValuePathItemType.relationConnection].includes(type);
|
|
23
|
+
}).map(function (_a) {
|
|
24
|
+
var label = _a.label;
|
|
25
|
+
return label;
|
|
26
|
+
}).filter(identity).join(' / ');
|
|
27
|
+
};
|
|
28
|
+
export var getDisplayedAttributeTypesPath = function (_a) {
|
|
29
|
+
var errorPath = _a.path;
|
|
30
|
+
return errorPath === null || errorPath === void 0 ? void 0 : errorPath.filter(function (_a) {
|
|
31
|
+
var type = _a.type;
|
|
32
|
+
return type === AttributeValuePathItemType.attributeValue;
|
|
33
|
+
}).map(either(path(['valueType', 'label']), path(['valueType', 'name']))).filter(identity).join(' > ');
|
|
34
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"icon" | "parents" | "errorWrapper" | "accordion" | "accordionExpanded" | "accordionSummary" | "accordionSummaryHeading" | "accordionSummaryExpanded" | "accordionSummaryContent" | "accordionDetails" | "errorTitle" | "attributeTypesPath" | "goToIcon" | "errorsAccordion" | "errorsAccordionDetails" | "warningsAccordion" | "warningsAccordionDetails" | "errorIcon" | "warningIcon">;
|
|
2
|
+
export default useStyles;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { makeStyles } from '@mui/styles';
|
|
2
|
+
var accordionSummaryHeight = '48px';
|
|
3
|
+
var defaultBorderStyle = '1px solid rgba(0, 0, 0, .125)';
|
|
4
|
+
var useStyles = makeStyles(function (theme) { return ({
|
|
5
|
+
accordion: {
|
|
6
|
+
borderTop: defaultBorderStyle,
|
|
7
|
+
borderBottom: defaultBorderStyle,
|
|
8
|
+
fontSize: '13px',
|
|
9
|
+
boxShadow: 'none',
|
|
10
|
+
'&:not(:first-child)': {
|
|
11
|
+
borderTop: 0
|
|
12
|
+
},
|
|
13
|
+
'&:before': {
|
|
14
|
+
display: 'none'
|
|
15
|
+
},
|
|
16
|
+
'&$accordionExpanded': {
|
|
17
|
+
margin: 'auto'
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
accordionExpanded: {},
|
|
21
|
+
accordionSummary: {
|
|
22
|
+
display: 'flex',
|
|
23
|
+
alignItems: 'center',
|
|
24
|
+
height: accordionSummaryHeight,
|
|
25
|
+
minHeight: accordionSummaryHeight,
|
|
26
|
+
'&$accordionSummaryExpanded': {
|
|
27
|
+
height: accordionSummaryHeight,
|
|
28
|
+
minHeight: accordionSummaryHeight
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
accordionSummaryHeading: {
|
|
32
|
+
flex: 1,
|
|
33
|
+
fontSize: theme.typography.pxToRem(13),
|
|
34
|
+
fontWeight: theme.typography.fontWeightRegular
|
|
35
|
+
},
|
|
36
|
+
accordionSummaryExpanded: {},
|
|
37
|
+
accordionSummaryContent: {
|
|
38
|
+
display: 'flex',
|
|
39
|
+
alignItems: 'center'
|
|
40
|
+
},
|
|
41
|
+
accordionDetails: {
|
|
42
|
+
maxHeight: '21vh',
|
|
43
|
+
overflow: 'auto',
|
|
44
|
+
paddingTop: 0,
|
|
45
|
+
paddingBottom: 0,
|
|
46
|
+
'& ul': {
|
|
47
|
+
paddingLeft: '23px',
|
|
48
|
+
marginTop: '3px'
|
|
49
|
+
},
|
|
50
|
+
'& li': {
|
|
51
|
+
paddingLeft: '9px',
|
|
52
|
+
paddingBottom: '8px'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
parents: {
|
|
56
|
+
color: theme.palette.text.primary
|
|
57
|
+
},
|
|
58
|
+
errorWrapper: {
|
|
59
|
+
lineHeight: '18px',
|
|
60
|
+
display: 'flex',
|
|
61
|
+
flexDirection: 'column'
|
|
62
|
+
},
|
|
63
|
+
errorTitle: {
|
|
64
|
+
display: 'flex',
|
|
65
|
+
alignItems: 'center'
|
|
66
|
+
},
|
|
67
|
+
attributeTypesPath: {
|
|
68
|
+
color: theme.palette.text.secondary
|
|
69
|
+
},
|
|
70
|
+
goToIcon: {
|
|
71
|
+
marginLeft: '4px'
|
|
72
|
+
},
|
|
73
|
+
errorsAccordion: {
|
|
74
|
+
backgroundColor: '#FFF4F6',
|
|
75
|
+
borderColor: '#FFB8B3'
|
|
76
|
+
},
|
|
77
|
+
errorsAccordionDetails: {
|
|
78
|
+
color: '#DD2C00'
|
|
79
|
+
},
|
|
80
|
+
warningsAccordion: {
|
|
81
|
+
backgroundColor: '#FFF9ED',
|
|
82
|
+
borderColor: '#FFDD91'
|
|
83
|
+
},
|
|
84
|
+
warningsAccordionDetails: {
|
|
85
|
+
color: '#CC7500'
|
|
86
|
+
},
|
|
87
|
+
icon: {
|
|
88
|
+
marginRight: '8px'
|
|
89
|
+
},
|
|
90
|
+
errorIcon: {
|
|
91
|
+
fill: '#FF1744'
|
|
92
|
+
},
|
|
93
|
+
warningIcon: {
|
|
94
|
+
fill: '#F9A825'
|
|
95
|
+
}
|
|
96
|
+
}); });
|
|
97
|
+
export default useStyles;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useCachedErrors: (allErrors: any) => any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { areErrorsEqual } from './ErrorsPanel/helpers';
|
|
3
|
+
export var useCachedErrors = function (allErrors) {
|
|
4
|
+
var cacheForAllErrors = useRef(allErrors);
|
|
5
|
+
var areEqualErrors = areErrorsEqual(allErrors, cacheForAllErrors.current);
|
|
6
|
+
if (!areEqualErrors) {
|
|
7
|
+
cacheForAllErrors.current = allErrors;
|
|
8
|
+
}
|
|
9
|
+
return cacheForAllErrors.current;
|
|
10
|
+
};
|
|
@@ -57,6 +57,7 @@ export { EntityTypesSelector } from './EntityTypesSelector/EntityTypesSelector';
|
|
|
57
57
|
export { RelationTypesSelector } from './RelationTypesSelector/RelationTypesSelector';
|
|
58
58
|
export { default as EntityUriLink } from './EntityUriLink/EntityUriLink';
|
|
59
59
|
export { default as ErrorBoundary } from './ErrorBoundary/ErrorBoundary';
|
|
60
|
+
export { AttributesErrorsPanel } from './AttributesErrorsPanel/AttributesErrorsPanel';
|
|
60
61
|
export { default as ErrorPopup } from './ErrorPopup/ErrorPopup';
|
|
61
62
|
export { default as ErrorWrapper } from './ErrorWrapper/ErrorWrapper';
|
|
62
63
|
export { default as ExpandedValueTooltip } from './ExpandedValueTooltip/ExpandedValueTooltip';
|
package/esm/components/index.js
CHANGED
|
@@ -57,6 +57,7 @@ export { EntityTypesSelector } from './EntityTypesSelector/EntityTypesSelector';
|
|
|
57
57
|
export { RelationTypesSelector } from './RelationTypesSelector/RelationTypesSelector';
|
|
58
58
|
export { default as EntityUriLink } from './EntityUriLink/EntityUriLink';
|
|
59
59
|
export { default as ErrorBoundary } from './ErrorBoundary/ErrorBoundary';
|
|
60
|
+
export { AttributesErrorsPanel } from './AttributesErrorsPanel/AttributesErrorsPanel';
|
|
60
61
|
export { default as ErrorPopup } from './ErrorPopup/ErrorPopup';
|
|
61
62
|
export { default as ErrorWrapper } from './ErrorWrapper/ErrorWrapper';
|
|
62
63
|
export { default as ExpandedValueTooltip } from './ExpandedValueTooltip/ExpandedValueTooltip';
|
package/esm/hooks/useAPI/API.js
CHANGED
|
@@ -133,7 +133,14 @@ export var processRequest = function (_a) {
|
|
|
133
133
|
return [4 /*yield*/, getAuthHeaders(params.headers, servicesPath)];
|
|
134
134
|
case 1:
|
|
135
135
|
headers = _a.sent();
|
|
136
|
-
return [4 /*yield*/, sendRequestFromCustomSandbox({
|
|
136
|
+
return [4 /*yield*/, sendRequestFromCustomSandbox({
|
|
137
|
+
url: url,
|
|
138
|
+
method: method,
|
|
139
|
+
data: data,
|
|
140
|
+
headers: headers,
|
|
141
|
+
noRequestProcessor: true,
|
|
142
|
+
noRetry: true
|
|
143
|
+
})];
|
|
137
144
|
case 2: return [2 /*return*/, _a.sent()];
|
|
138
145
|
}
|
|
139
146
|
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React from 'react';
|
|
13
|
+
var SvgHyperlink = function (props) {
|
|
14
|
+
return (React.createElement("svg", __assign({ width: 18, height: 18, viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
15
|
+
React.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M14.245 12.75c0 .825-.467 1.5-1.045 1.5H4.8c-.583 0-1.05-.675-1.05-1.5v-7.5c0-.832.467-1.5 1.05-1.5h8.4c.578 0 1.05.668 1.05 1.5l-.005 7.5zM9.75 9.96v1.642l3-2.805L9.75 6v1.598c-2.918.404-4.08 2.4-4.5 4.402 1.043-1.402 2.415-2.04 4.5-2.04z", fill: "#000", fillOpacity: 0.54 })));
|
|
16
|
+
};
|
|
17
|
+
export default SvgHyperlink;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1655",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"@date-io/moment": "^1.3.5",
|
|
9
9
|
"@fluentui/react-context-selector": "^9.1.26",
|
|
10
10
|
"@react-google-maps/api": "2.7.0",
|
|
11
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
11
|
+
"@reltio/mdm-sdk": "^1.4.1655",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"d3-cloud": "^1.2.5",
|
|
14
14
|
"d3-geo": "^2.0.1",
|