@reltio/components 1.4.2184 → 1.4.2186

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 (53) hide show
  1. package/FacetContainer/FacetContainer.d.ts +18 -0
  2. package/FacetContainer/FacetContainer.js +30 -0
  3. package/FacetContainer/FacetContainer.module.css.js +9 -0
  4. package/FacetContainer/components/ChipsCount/ChipCount.module.css.js +9 -0
  5. package/FacetContainer/components/ChipsCount/ChipsCount.d.ts +26 -0
  6. package/FacetContainer/components/ChipsCount/ChipsCount.js +39 -0
  7. package/FacetContainer/components/FacetTitle/FacetTitle.d.ts +10 -0
  8. package/FacetContainer/components/FacetTitle/FacetTitle.js +31 -0
  9. package/FacetContainer/components/FacetTitle/FacetTitle.module.css.js +9 -0
  10. package/FacetContainer/index.d.ts +1 -0
  11. package/FacetContainer/index.js +1 -0
  12. package/FacetsSelector/FacetsSelector.d.ts +2 -2
  13. package/FacetsSelector/FacetsSelector.js +2 -2
  14. package/FacetsSelector/components/AttributeSelectorPopup/AttributeSelectorPopup.d.ts +2 -2
  15. package/FacetsSelector/components/AttributeSelectorPopup/AttributeSelectorPopup.js +5 -5
  16. package/FacetsSelector/components/FacetsList/FacetsList.d.ts +3 -3
  17. package/FacetsSelector/components/FacetsList/FacetsList.js +6 -6
  18. package/FacetsSelector/components/FacetsList/FacetsList.module.css.js +2 -2
  19. package/FacetsSelector/helpers.d.ts +2 -2
  20. package/FacetsSelector/helpers.js +2 -2
  21. package/HierarchyNodeTitle/HierarchyNodeTitle.test.js +83 -1
  22. package/HierarchyNodeTitle/useEntityDetails.js +8 -4
  23. package/HierarchyNodeTitle/useEntityDetails.test.js +24 -9
  24. package/cjs/FacetContainer/FacetContainer.d.ts +18 -0
  25. package/cjs/FacetContainer/FacetContainer.js +60 -0
  26. package/cjs/FacetContainer/FacetContainer.module.css.js +9 -0
  27. package/cjs/FacetContainer/components/ChipsCount/ChipCount.module.css.js +9 -0
  28. package/cjs/FacetContainer/components/ChipsCount/ChipsCount.d.ts +26 -0
  29. package/cjs/FacetContainer/components/ChipsCount/ChipsCount.js +45 -0
  30. package/cjs/FacetContainer/components/FacetTitle/FacetTitle.d.ts +10 -0
  31. package/cjs/FacetContainer/components/FacetTitle/FacetTitle.js +36 -0
  32. package/cjs/FacetContainer/components/FacetTitle/FacetTitle.module.css.js +9 -0
  33. package/cjs/FacetContainer/index.d.ts +1 -0
  34. package/cjs/FacetContainer/index.js +5 -0
  35. package/cjs/FacetsSelector/FacetsSelector.d.ts +2 -2
  36. package/cjs/FacetsSelector/FacetsSelector.js +2 -2
  37. package/cjs/FacetsSelector/components/AttributeSelectorPopup/AttributeSelectorPopup.d.ts +2 -2
  38. package/cjs/FacetsSelector/components/AttributeSelectorPopup/AttributeSelectorPopup.js +5 -5
  39. package/cjs/FacetsSelector/components/FacetsList/FacetsList.d.ts +3 -3
  40. package/cjs/FacetsSelector/components/FacetsList/FacetsList.js +6 -6
  41. package/cjs/FacetsSelector/components/FacetsList/FacetsList.module.css.js +2 -2
  42. package/cjs/FacetsSelector/helpers.d.ts +2 -2
  43. package/cjs/FacetsSelector/helpers.js +2 -2
  44. package/cjs/HierarchyNodeTitle/HierarchyNodeTitle.test.js +83 -1
  45. package/cjs/HierarchyNodeTitle/useEntityDetails.js +6 -2
  46. package/cjs/HierarchyNodeTitle/useEntityDetails.test.js +27 -9
  47. package/cjs/features/history/hooks/useHistorySlice.js +1 -1
  48. package/cjs/index.d.ts +1 -0
  49. package/cjs/index.js +6 -4
  50. package/features/history/hooks/useHistorySlice.js +1 -1
  51. package/index.d.ts +1 -0
  52. package/index.js +1 -0
  53. package/package.json +2 -2
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export declare const RecommendedIconWithTooltip: React.ForwardRefExoticComponent<{
3
+ tooltipTitle?: import("@mui/material").TooltipProps["title"];
4
+ tooltipPlacement?: import("@mui/material").TooltipProps["placement"];
5
+ showForDisabled?: boolean;
6
+ } & React.SVGAttributes<SVGElement> & React.RefAttributes<HTMLElement>>;
7
+ export type Props = {
8
+ children?: React.ReactNode;
9
+ title: string;
10
+ chipLabel?: number;
11
+ pathToTitle?: string[];
12
+ isOpenByDefault?: boolean;
13
+ isHighlighted?: boolean;
14
+ isRecommended?: boolean;
15
+ onDeleteChip?: () => void;
16
+ onClose?: () => void;
17
+ };
18
+ export declare const FacetContainer: ({ children, title, chipLabel, pathToTitle, isOpenByDefault, isHighlighted, isRecommended, onDeleteChip, onClose }: Props) => React.JSX.Element;
@@ -0,0 +1,60 @@
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.FacetContainer = exports.RecommendedIconWithTooltip = void 0;
30
+ var react_1 = __importStar(require("react"));
31
+ var ui_i18n_1 = __importDefault(require("ui-i18n"));
32
+ var classnames_1 = __importDefault(require("classnames"));
33
+ var Close_1 = __importDefault(require("@mui/icons-material/Close"));
34
+ var CollapseButton_1 = require("../CollapseButton");
35
+ var SmallIconButton_1 = require("../SmallIconButton");
36
+ var withTooltip_1 = require("../HOCs/withTooltip");
37
+ var FacetTitle_1 = __importDefault(require("./components/FacetTitle/FacetTitle"));
38
+ var Recommended_svg_1 = __importDefault(require("./Recommended.svg"));
39
+ var FacetContainer_module_css_1 = __importDefault(require("./FacetContainer.module.css"));
40
+ exports.RecommendedIconWithTooltip = (0, withTooltip_1.withTooltip)(Recommended_svg_1.default);
41
+ var FacetContainer = function (_a) {
42
+ var _b;
43
+ var children = _a.children, title = _a.title, chipLabel = _a.chipLabel, pathToTitle = _a.pathToTitle, _c = _a.isOpenByDefault, isOpenByDefault = _c === void 0 ? true : _c, _d = _a.isHighlighted, isHighlighted = _d === void 0 ? false : _d, _e = _a.isRecommended, isRecommended = _e === void 0 ? false : _e, onDeleteChip = _a.onDeleteChip, onClose = _a.onClose;
44
+ var _f = (0, react_1.useState)(isOpenByDefault), open = _f[0], setOpen = _f[1];
45
+ var toggleOpen = function () {
46
+ setOpen(!open);
47
+ };
48
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)(FacetContainer_module_css_1.default.facetContainer, (_b = {},
49
+ _b[FacetContainer_module_css_1.default.openedFacetContainer] = open,
50
+ _b[FacetContainer_module_css_1.default.closedFacetContainer] = !open,
51
+ _b[FacetContainer_module_css_1.default.highlighted] = isHighlighted,
52
+ _b)), "data-reltio-id": "search-facet-container-".concat(title) },
53
+ react_1.default.createElement("div", { className: FacetContainer_module_css_1.default.titleContainer },
54
+ react_1.default.createElement(SmallIconButton_1.SmallIconButtonWithTooltip, { tooltipTitle: ui_i18n_1.default.text('Remove'), icon: Close_1.default, onClick: onClose, className: FacetContainer_module_css_1.default.iconButton, size: "XXS" }),
55
+ isRecommended && (react_1.default.createElement(exports.RecommendedIconWithTooltip, { className: FacetContainer_module_css_1.default.recommendedIcon, tooltipTitle: ui_i18n_1.default.text('Recommended'), showForDisabled: true })),
56
+ react_1.default.createElement(FacetTitle_1.default, { title: title, pathToTitle: pathToTitle, chipLabel: chipLabel, onDelete: onDeleteChip, onClick: toggleOpen }),
57
+ react_1.default.createElement(CollapseButton_1.CollapseButton, { onClick: toggleOpen, isOpen: open, className: FacetContainer_module_css_1.default.iconButton, size: "S", tooltipTitle: open ? ui_i18n_1.default.text('Collapse attribute') : ui_i18n_1.default.text('Expand attribute'), tooltipPlacement: "bottom-end" })),
58
+ open ? children : null));
59
+ };
60
+ exports.FacetContainer = FacetContainer;
@@ -0,0 +1,9 @@
1
+ const styles = {"facetContainer":"FacetContainer-facetContainer--PGQJm","openedFacetContainer":"FacetContainer-openedFacetContainer--T0y7f","closedFacetContainer":"FacetContainer-closedFacetContainer--s6-qP","iconButton":"FacetContainer-iconButton--FOXN9","recommendedIcon":"FacetContainer-recommendedIcon--v3mLt","titleContainer":"FacetContainer-titleContainer--mxRz2","expandIcon":"FacetContainer-expandIcon--eNUwN","expanded":"FacetContainer-expanded--XgtFv","highlighted":"FacetContainer-highlighted--Cf-qC","animate":"FacetContainer-animate--nGob0"};
2
+ if (typeof document !== 'undefined') {
3
+ const head = document.head || document.getElementsByTagName('head')[0]
4
+ const style = document.createElement('style');
5
+ style.type = 'text/css'
6
+ style.innerHTML = `.FacetContainer-facetContainer--PGQJm{border-bottom:1px solid rgba(0,0,0,.33);border-radius:1px;display:flex;flex-direction:column;flex-grow:1;flex-shrink:0;padding:0 16px;position:relative}.FacetContainer-facetContainer--PGQJm:last-child{border-bottom:1px solid #fff}.FacetContainer-openedFacetContainer--T0y7f{padding-bottom:15px}.FacetContainer-closedFacetContainer--s6-qP{padding-bottom:5px}.FacetContainer-iconButton--FOXN9{visibility:hidden}.FacetContainer-iconButton--FOXN9:first-child{height:24px;margin-left:-16px;width:24px}.FacetContainer-recommendedIcon--v3mLt{flex-shrink:0;height:18px;margin-right:6px;width:18px}.FacetContainer-titleContainer--mxRz2{align-items:center;border-radius:1px;display:flex;flex-direction:row;flex-shrink:0;height:42px;margin-left:-16px;padding-left:16px}.FacetContainer-titleContainer--mxRz2:hover .FacetContainer-iconButton--FOXN9{visibility:visible}.FacetContainer-expandIcon--eNUwN{color:rgba(0,0,0,.54);margin:0 2px;transition:transform .15s ease}.FacetContainer-expanded--XgtFv{transform:rotate(180deg)}@keyframes FacetContainer-animate--nGob0{0%{background:#fffbeb}66%{background:#fffbeb}to{background:transparent}}.FacetContainer-highlighted--Cf-qC{animation-duration:3s;animation-iteration-count:1;animation-name:FacetContainer-animate--nGob0}`;
7
+ head.appendChild(style);
8
+ }
9
+ module.exports = styles;
@@ -0,0 +1,9 @@
1
+ const styles = {"root":"ChipsCount-root--nvCui","deleteIcon":"ChipsCount-deleteIcon--5PYeW","outlined":"ChipsCount-outlined--GUmLb","label":"ChipsCount-label--G-hwC"};
2
+ if (typeof document !== 'undefined') {
3
+ const head = document.head || document.getElementsByTagName('head')[0]
4
+ const style = document.createElement('style');
5
+ style.type = 'text/css'
6
+ style.innerHTML = `.ChipsCount-root--nvCui{background-color:transparent;border:1px solid rgba(0,0,0,.12);border-radius:16px;box-sizing:border-box;height:18px}.ChipsCount-root--nvCui .ChipsCount-deleteIcon--5PYeW{color:rgba(0,0,0,.38);height:12px;margin:0;width:12px}.ChipsCount-outlined--GUmLb .ChipsCount-deleteIcon--5PYeW{margin-right:2px}.ChipsCount-label--G-hwC{color:rgba(0,0,0,.38);font-size:12px;font-weight:500;line-height:16px;padding-left:4px;padding-right:4px}`;
7
+ head.appendChild(style);
8
+ }
9
+ module.exports = styles;
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { ChipProps } from '@mui/material/Chip';
3
+ export declare const ClearIconWithTooltip: React.ForwardRefExoticComponent<Omit<{
4
+ tooltipTitle?: import("@mui/material").TooltipProps["title"];
5
+ tooltipPlacement?: import("@mui/material").TooltipProps["placement"];
6
+ showForDisabled?: boolean;
7
+ } & {
8
+ children?: React.ReactNode;
9
+ classes?: Partial<import("@mui/material").SvgIconClasses>;
10
+ color?: import("@mui/types").OverridableStringUnion<"inherit" | "action" | "disabled" | "primary" | "secondary" | "error" | "info" | "success" | "warning", import("@mui/material").SvgIconPropsColorOverrides>;
11
+ fontSize?: import("@mui/types").OverridableStringUnion<"inherit" | "large" | "medium" | "small", import("@mui/material").SvgIconPropsSizeOverrides>;
12
+ htmlColor?: string;
13
+ inheritViewBox?: boolean;
14
+ shapeRendering?: string;
15
+ sx?: import("@mui/system").SxProps<import("@mui/material").Theme>;
16
+ titleAccess?: string;
17
+ viewBox?: string;
18
+ } & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<React.SVGProps<SVGSVGElement>, "ref"> & {
19
+ ref?: React.Ref<SVGSVGElement>;
20
+ }, "color" | "fontSize" | "shapeRendering" | "children" | "sx" | keyof import("@mui/material/OverridableComponent").CommonProps | "viewBox" | "htmlColor" | "inheritViewBox" | "titleAccess">, "ref"> & React.RefAttributes<HTMLElement>>;
21
+ type Props = Omit<ChipProps, 'onDelete' | 'label'> & {
22
+ label: number;
23
+ onDelete?: () => void;
24
+ };
25
+ declare const ChipsCount: ({ label, onDelete, ...extraProps }: Props) => React.JSX.Element;
26
+ export default ChipsCount;
@@ -0,0 +1,45 @@
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 __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.ClearIconWithTooltip = void 0;
29
+ var react_1 = __importDefault(require("react"));
30
+ var ui_i18n_1 = __importDefault(require("ui-i18n"));
31
+ var Chip_1 = __importDefault(require("@mui/material/Chip"));
32
+ var Cancel_1 = __importDefault(require("@mui/icons-material/Cancel"));
33
+ var withTooltip_1 = require("../../../HOCs/withTooltip");
34
+ var ChipCount_module_css_1 = __importDefault(require("./ChipCount.module.css"));
35
+ exports.ClearIconWithTooltip = (0, withTooltip_1.withTooltip)(Cancel_1.default);
36
+ var ChipsCount = function (_a) {
37
+ var label = _a.label, onDelete = _a.onDelete, extraProps = __rest(_a, ["label", "onDelete"]);
38
+ return (react_1.default.createElement(Chip_1.default, __assign({ className: ChipCount_module_css_1.default.root, label: ui_i18n_1.default.number(label), onDelete: onDelete, variant: "outlined", classes: {
39
+ root: ChipCount_module_css_1.default.root,
40
+ outlined: ChipCount_module_css_1.default.outlined,
41
+ deleteIcon: ChipCount_module_css_1.default.deleteIcon,
42
+ label: ChipCount_module_css_1.default.label
43
+ }, deleteIcon: react_1.default.createElement(exports.ClearIconWithTooltip, { tooltipTitle: ui_i18n_1.default.text('Clear') }) }, extraProps)));
44
+ };
45
+ exports.default = ChipsCount;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ title?: string;
4
+ chipLabel?: number;
5
+ onDelete?: () => void;
6
+ pathToTitle?: string[];
7
+ onClick?: () => void;
8
+ };
9
+ declare const FacetTitle: ({ title, chipLabel, onDelete, pathToTitle, onClick }: Props) => React.JSX.Element;
10
+ export default FacetTitle;
@@ -0,0 +1,36 @@
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 ExpandedValueTooltip_1 = require("../../../ExpandedValueTooltip");
19
+ var HierarchicalAttributeTooltip_1 = require("../../../HierarchicalAttributeTooltip");
20
+ var ChipsCount_1 = __importDefault(require("../ChipsCount/ChipsCount"));
21
+ var FacetTitle_module_css_1 = __importDefault(require("./FacetTitle.module.css"));
22
+ var FacetTitle = function (_a) {
23
+ var _b = _a.title, title = _b === void 0 ? '' : _b, _c = _a.chipLabel, chipLabel = _c === void 0 ? 0 : _c, onDelete = _a.onDelete, pathToTitle = _a.pathToTitle, onClick = _a.onClick;
24
+ var isNested = Boolean(pathToTitle && pathToTitle.length > 2);
25
+ var TooltipComponent = isNested ? HierarchicalAttributeTooltip_1.HierarchicalAttributeTooltip : ExpandedValueTooltip_1.ExpandedValueTooltip;
26
+ var tooltipProps = isNested ? { pathToTitle: pathToTitle } : { value: title };
27
+ return (react_1.default.createElement("div", { className: FacetTitle_module_css_1.default.container, onClick: onClick },
28
+ isNested && (react_1.default.createElement(HierarchicalAttributeTooltip_1.HierarchicalAttributeTooltip, __assign({ placement: "bottom-start" }, tooltipProps),
29
+ react_1.default.createElement("div", { className: FacetTitle_module_css_1.default.parent }, pathToTitle[pathToTitle.length - 2]))),
30
+ react_1.default.createElement("div", { className: FacetTitle_module_css_1.default.titleContainer },
31
+ react_1.default.createElement(TooltipComponent, __assign({ placement: "bottom-start" }, tooltipProps),
32
+ react_1.default.createElement("span", { className: FacetTitle_module_css_1.default.title }, title)),
33
+ chipLabel !== 0 && (react_1.default.createElement("div", { className: FacetTitle_module_css_1.default.chip },
34
+ react_1.default.createElement(ChipsCount_1.default, { label: chipLabel, onDelete: onDelete }))))));
35
+ };
36
+ exports.default = FacetTitle;
@@ -0,0 +1,9 @@
1
+ const styles = {"container":"FacetTitle-container--fegMx","parent":"FacetTitle-parent--0sIc8","titleContainer":"FacetTitle-titleContainer--e8PWF","title":"FacetTitle-title--Four7","chip":"FacetTitle-chip--L9nDB"};
2
+ if (typeof document !== 'undefined') {
3
+ const head = document.head || document.getElementsByTagName('head')[0]
4
+ const style = document.createElement('style');
5
+ style.type = 'text/css'
6
+ style.innerHTML = `.FacetTitle-container--fegMx{cursor:pointer;display:flex;flex-direction:column;flex-grow:1;height:100%;justify-content:center;min-width:0}.FacetTitle-parent--0sIc8{color:var(--mui-palette-text-secondary);font-size:13px;letter-spacing:0;line-height:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.FacetTitle-titleContainer--e8PWF{align-items:flex-end;display:flex;flex-direction:row;height:18px;overflow:hidden;width:100%}.FacetTitle-title--Four7{color:var(--mui-palette-text-primary);font-size:14px;font-weight:500;letter-spacing:.24px;line-height:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.FacetTitle-chip--L9nDB{display:inline;margin-left:6px}`;
7
+ head.appendChild(style);
8
+ }
9
+ module.exports = styles;
@@ -0,0 +1 @@
1
+ export { FacetContainer } from './FacetContainer';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FacetContainer = void 0;
4
+ var FacetContainer_1 = require("./FacetContainer");
5
+ Object.defineProperty(exports, "FacetContainer", { enumerable: true, get: function () { return FacetContainer_1.FacetContainer; } });
@@ -4,10 +4,10 @@ import { MoreFacetItem } from './types';
4
4
  type Props = {
5
5
  open?: boolean;
6
6
  data?: MoreFacetItem[];
7
- selectedFacets: FacetConfig[];
7
+ selectedFacetsFieldNames: string[];
8
8
  onOpen: () => void;
9
9
  onClose: () => void;
10
10
  onFacetToggle: (item: FacetConfig, selected: boolean) => void;
11
11
  };
12
- export declare const FacetsSelector: ({ open, data, selectedFacets, onOpen, onClose, onFacetToggle }: Props) => React.JSX.Element;
12
+ export declare const FacetsSelector: ({ open, data, selectedFacetsFieldNames, onOpen, onClose, onFacetToggle }: Props) => React.JSX.Element;
13
13
  export default FacetsSelector;
@@ -34,7 +34,7 @@ var SearchInput_1 = require("../SearchInput");
34
34
  var helpers_1 = require("./helpers");
35
35
  var FacetsSelector_module_css_1 = __importDefault(require("./FacetsSelector.module.css"));
36
36
  var FacetsSelector = function (_a) {
37
- var open = _a.open, data = _a.data, selectedFacets = _a.selectedFacets, onOpen = _a.onOpen, onClose = _a.onClose, onFacetToggle = _a.onFacetToggle;
37
+ var open = _a.open, data = _a.data, selectedFacetsFieldNames = _a.selectedFacetsFieldNames, onOpen = _a.onOpen, onClose = _a.onClose, onFacetToggle = _a.onFacetToggle;
38
38
  var _b = (0, react_1.useState)(''), filterText = _b[0], setFilterText = _b[1];
39
39
  var _c = (0, react_1.useState)(null), lastFacetClicked = _c[0], setLastFacetClicked = _c[1];
40
40
  var searchInputRootRef = (0, react_1.useRef)(null);
@@ -55,7 +55,7 @@ var FacetsSelector = function (_a) {
55
55
  }, [onOpen]);
56
56
  return (react_1.default.createElement(react_1.default.Fragment, null,
57
57
  react_1.default.createElement(SearchInput_1.SearchInput, { classes: { root: FacetsSelector_module_css_1.default.inputContainer }, onSearch: setFilterText, onFocus: handleOpen, rootRef: searchInputRootRef, value: filterText, placeholder: ui_i18n_1.default.text('Search & add attributes'), height: 40, "data-reltio-id": "reltio-search-more-facets-search-input" }),
58
- react_1.default.createElement(AttributeSelectorPopup_1.AttributeSelectorPopup, { open: open, selectedFacets: selectedFacets, data: filteredList, lastFacetClicked: lastFacetClicked, anchorRef: searchInputRootRef, onListItemClick: handleListItemClick, onClose: handleClose, onSearch: setFilterText })));
58
+ react_1.default.createElement(AttributeSelectorPopup_1.AttributeSelectorPopup, { open: open, selectedFacetsFieldNames: selectedFacetsFieldNames, data: filteredList, lastFacetClicked: lastFacetClicked, anchorRef: searchInputRootRef, onListItemClick: handleListItemClick, onClose: handleClose, onSearch: setFilterText })));
59
59
  };
60
60
  exports.FacetsSelector = FacetsSelector;
61
61
  exports.default = exports.FacetsSelector;
@@ -3,7 +3,7 @@ import { FacetConfig } from '@reltio/mdm-sdk';
3
3
  import { MoreFacetItem, SelectedFacet } from '../../types';
4
4
  type Props = {
5
5
  open?: boolean;
6
- selectedFacets: FacetConfig[];
6
+ selectedFacetsFieldNames: string[];
7
7
  data?: MoreFacetItem[];
8
8
  lastFacetClicked?: SelectedFacet;
9
9
  anchorRef: React.RefObject<HTMLInputElement>;
@@ -11,5 +11,5 @@ type Props = {
11
11
  onSearch?: (value?: string) => void;
12
12
  onClose?: () => void;
13
13
  };
14
- export declare const AttributeSelectorPopup: ({ open, selectedFacets, data, lastFacetClicked, anchorRef, onListItemClick, onSearch, onClose }: Props) => React.JSX.Element;
14
+ export declare const AttributeSelectorPopup: ({ open, selectedFacetsFieldNames, data, lastFacetClicked, anchorRef, onListItemClick, onSearch, onClose }: Props) => React.JSX.Element;
15
15
  export {};
@@ -42,7 +42,7 @@ var AttributeSelectorPopup_module_css_1 = __importDefault(require("./AttributeSe
42
42
  var defaultLastFacetClicked = {};
43
43
  var AttributeSelectorPopup = function (_a) {
44
44
  var _b, _c;
45
- var open = _a.open, selectedFacets = _a.selectedFacets, _d = _a.data, data = _d === void 0 ? [] : _d, _e = _a.lastFacetClicked, lastFacetClicked = _e === void 0 ? defaultLastFacetClicked : _e, anchorRef = _a.anchorRef, onListItemClick = _a.onListItemClick, onSearch = _a.onSearch, onClose = _a.onClose;
45
+ var open = _a.open, selectedFacetsFieldNames = _a.selectedFacetsFieldNames, _d = _a.data, data = _d === void 0 ? [] : _d, _e = _a.lastFacetClicked, lastFacetClicked = _e === void 0 ? defaultLastFacetClicked : _e, anchorRef = _a.anchorRef, onListItemClick = _a.onListItemClick, onSearch = _a.onSearch, onClose = _a.onClose;
46
46
  var _f = (0, react_1.useState)(constants_1.DEFAULT_LIST_HEIGHT), listHeight = _f[0], setListHeight = _f[1];
47
47
  var _g = (0, helpers_1.adjustVerticalPopupLayout)(anchorRef.current, constants_1.DEFAULT_ATTRIBUTE_SELECTOR_POPUP_HEIGHT), verticalOrigin = _g.verticalOrigin, _h = _g.popupHeight, popupHeight = _h === void 0 ? constants_1.DEFAULT_ATTRIBUTE_SELECTOR_POPUP_HEIGHT : _h;
48
48
  var maxListHeight = popupHeight - constants_1.POPUP_HEADER_HEIGHT;
@@ -90,17 +90,17 @@ var AttributeSelectorPopup = function (_a) {
90
90
  var popupWidth = (_c = (_b = anchorRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) !== null && _c !== void 0 ? _c : 0;
91
91
  var handleSearchOnEnter = (0, react_1.useCallback)(function (_a) {
92
92
  var item = _a.item, groupData = _a.groupData;
93
- onListItemClick(item, !(0, helpers_1.isSelectedFacet)({ facet: item, selectedFacets: selectedFacets }), groupData.groupId);
94
- }, [onListItemClick, selectedFacets]);
93
+ onListItemClick(item, !(0, helpers_1.isSelectedFacet)({ facet: item, selectedFacetsFieldNames: selectedFacetsFieldNames }), groupData.groupId);
94
+ }, [onListItemClick, selectedFacetsFieldNames]);
95
95
  var _j = (0, useKeyboardNavigation_1.useKeyboardNavigation)({
96
96
  items: items,
97
97
  open: open,
98
98
  onSelectFocusedItem: handleSearchOnEnter,
99
- selectedItems: selectedFacets
99
+ selectedItems: selectedFacetsFieldNames
100
100
  }), focusIndex = _j.focusIndex, handleKeyDown = _j.handleKeyDown;
101
101
  var containerWidth = Math.max(popupWidth || (0, mdm_sdk_1.getMaxItemWidth)('title')(groupedItems), constants_1.DEFAULT_MIN_CONTAINER_WIDTH);
102
102
  return (react_1.default.createElement(SelectionPopup_1.SelectionPopup, { open: open, action: popupActionRef, title: ui_i18n_1.default.text('Select attribute'), containerWidth: containerWidth, searchInputOnKeyDown: handleKeyDown, containerHeight: constants_1.POPUP_HEADER_HEIGHT + listHeight, anchorOrigin: popupOrigin, transformOrigin: popupOrigin, headerPlacement: verticalOrigin === 'bottom' ? 'bottom' : 'top', anchorEl: anchorRef.current, disableRestoreFocus: true, onSearch: onSearch, onClose: onClose },
103
- react_1.default.createElement(FacetsList_1.FacetsList, { focusIndex: focusIndex, selectedFacets: selectedFacets, onListItemClick: onListItemClick, items: items, height: listHeight, onInnerContainerResize: handleResizeList }),
103
+ react_1.default.createElement(FacetsList_1.FacetsList, { focusIndex: focusIndex, selectedFacetsFieldNames: selectedFacetsFieldNames, onListItemClick: onListItemClick, items: items, height: listHeight, onInnerContainerResize: handleResizeList }),
104
104
  items.length === 0 && (react_1.default.createElement("div", { className: AttributeSelectorPopup_module_css_1.default.noResultsCaptionContainer },
105
105
  react_1.default.createElement(Typography_1.default, { variant: "caption", display: "block", gutterBottom: true }, ui_i18n_1.default.text('No results found'))))));
106
106
  };
@@ -1,5 +1,5 @@
1
1
  import React, { ComponentProps } from 'react';
2
- import { AttributeType, FacetConfig } from '@reltio/mdm-sdk';
2
+ import { AttributeType } from '@reltio/mdm-sdk';
3
3
  import { VirtualGroupedList } from '../../../VirtualGroupedList';
4
4
  type Data = {
5
5
  fieldName: string;
@@ -10,8 +10,8 @@ type Data = {
10
10
  };
11
11
  type Props = Omit<ComponentProps<typeof VirtualGroupedList>, 'renderItem' | 'getItemSize'> & {
12
12
  focusIndex: number;
13
- selectedFacets: FacetConfig[];
13
+ selectedFacetsFieldNames: string[];
14
14
  onListItemClick: (data: Data, checked: boolean, groupId: string) => void;
15
15
  };
16
- export declare const FacetsList: ({ onListItemClick, focusIndex, selectedFacets, ...otherProps }: Props) => React.JSX.Element;
16
+ export declare const FacetsList: ({ onListItemClick, focusIndex, selectedFacetsFieldNames, ...otherProps }: Props) => React.JSX.Element;
17
17
  export {};
@@ -58,24 +58,24 @@ var Highlighter_1 = require("../../../Highlighter");
58
58
  var AttributeGroupIcon_1 = require("../../../AttributeGroupIcon");
59
59
  var constants_1 = require("../../constants");
60
60
  var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
61
+ var ExpandedValueTooltip_1 = require("../../../ExpandedValueTooltip");
61
62
  var FacetsList_module_css_1 = __importDefault(require("./FacetsList.module.css"));
62
63
  var ITEM_GROUP_TITLE_HEIGHT = 40;
63
64
  var FacetsList = function (_a) {
64
- var onListItemClick = _a.onListItemClick, focusIndex = _a.focusIndex, selectedFacets = _a.selectedFacets, otherProps = __rest(_a, ["onListItemClick", "focusIndex", "selectedFacets"]);
65
- var selectedFacetsRef = (0, react_1.useRef)(null);
66
- selectedFacetsRef.current = selectedFacets;
65
+ var onListItemClick = _a.onListItemClick, focusIndex = _a.focusIndex, selectedFacetsFieldNames = _a.selectedFacetsFieldNames, otherProps = __rest(_a, ["onListItemClick", "focusIndex", "selectedFacetsFieldNames"]);
67
66
  var focusIndexRef = (0, react_1.useRef)(null);
68
67
  focusIndexRef.current = focusIndex;
69
68
  var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
70
69
  var renderItem = (0, react_1.useCallback)(function (style, _a, index) {
71
70
  var item = _a.item, level = _a.level, groupId = _a.groupId;
72
- var checked = (0, helpers_1.isSelectedFacet)({ facet: item, selectedFacets: selectedFacetsRef.current });
71
+ var checked = (0, helpers_1.isSelectedFacet)({ facet: item, selectedFacetsFieldNames: selectedFacetsFieldNames });
73
72
  var isFocused = focusIndexRef.current === index;
74
73
  return (react_1.default.createElement(AttributeListItem_1.AttributeListItem, { key: "item-".concat(groupId, "-").concat(item.fieldName), onClick: onListItemClick, data: item, label: react_1.default.createElement(Highlighter_1.Highlighter, { text: item.title, highlight: item.filterText }), labelInText: item.title, level: level, style: style, checked: checked, isFocused: isFocused, groupId: groupId, LogoIcon: item.LogoIcon }));
75
- }, [onListItemClick]);
74
+ }, [onListItemClick, selectedFacetsFieldNames]);
76
75
  var renderGroupTitle = (0, react_1.useCallback)(function (style, item) { return (react_1.default.createElement(ListItem_1.default, { component: 'div', className: FacetsList_module_css_1.default.subHeader, style: style, key: "group-".concat(item.item.id) },
77
76
  item.item.needGroupIcon && react_1.default.createElement(AttributeGroupIcon_1.AttributeGroupIcon, { metadata: metadata, group: item.item }),
78
- item.item.title)); }, [metadata]);
77
+ react_1.default.createElement(ExpandedValueTooltip_1.ExpandedValueTooltip, { value: item.item.title },
78
+ react_1.default.createElement("div", { className: FacetsList_module_css_1.default.subHeaderTitle }, item.item.title)))); }, [metadata]);
79
79
  var getItemSize = (0, react_1.useCallback)(function (i, item) { return (item.items ? ITEM_GROUP_TITLE_HEIGHT : constants_1.FACET_LIST_ITEM_HEIGHT); }, []);
80
80
  return (react_1.default.createElement(VirtualGroupedList_1.VirtualGroupedList, __assign({ getItemSize: getItemSize, renderGroupTitle: renderGroupTitle, renderItem: renderItem, focusIndex: focusIndex }, otherProps, { disableHorizontalScrollbar: true })));
81
81
  };
@@ -1,9 +1,9 @@
1
- const styles = {"subHeader":"FacetsList-subHeader--jcWLn","icon":"FacetsList-icon--HO3ZO","recommendedIcon":"FacetsList-recommendedIcon--ekXsX"};
1
+ const styles = {"subHeader":"FacetsList-subHeader--jcWLn","icon":"FacetsList-icon--HO3ZO","recommendedIcon":"FacetsList-recommendedIcon--ekXsX","subHeaderTitle":"FacetsList-subHeaderTitle--iOKhO"};
2
2
  if (typeof document !== 'undefined') {
3
3
  const head = document.head || document.getElementsByTagName('head')[0]
4
4
  const style = document.createElement('style');
5
5
  style.type = 'text/css'
6
- style.innerHTML = `.FacetsList-subHeader--jcWLn{align-items:center;background-color:#f5f5f5;color:rgba(0,0,0,.84);display:flex;font-size:14px;font-weight:500;margin:0;padding:0 16px}.FacetsList-subHeader--jcWLn .FacetsList-icon--HO3ZO{margin-right:16px;max-height:25px;max-width:25px}.FacetsList-recommendedIcon--ekXsX:is(.FacetsList-subHeader--jcWLn .FacetsList-icon--HO3ZO){height:20px;width:20px}`;
6
+ style.innerHTML = `.FacetsList-subHeader--jcWLn{align-items:center;background-color:#f5f5f5;color:rgba(0,0,0,.84);display:flex;font-size:14px;font-weight:500;margin:0;padding:0 16px}.FacetsList-subHeader--jcWLn .FacetsList-icon--HO3ZO{margin-right:16px;max-height:25px;max-width:25px}.FacetsList-recommendedIcon--ekXsX:is(.FacetsList-subHeader--jcWLn .FacetsList-icon--HO3ZO){height:20px;width:20px}.FacetsList-subHeaderTitle--iOKhO{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`;
7
7
  head.appendChild(style);
8
8
  }
9
9
  module.exports = styles;
@@ -5,9 +5,9 @@ declare const adjustVerticalPopupLayout: (anchorEl: HTMLElement, popupHeight: nu
5
5
  popupHeight: number;
6
6
  };
7
7
  declare const filterItemsInGroups: (groups: MoreFacetItem[], filterText: string) => MoreFacetItem[];
8
- declare const isSelectedFacet: ({ facet, selectedFacets }: {
8
+ declare const isSelectedFacet: ({ facet, selectedFacetsFieldNames }: {
9
9
  facet: any;
10
- selectedFacets: any;
10
+ selectedFacetsFieldNames: any;
11
11
  }) => boolean;
12
12
  declare const constructPopoverOrigin: (verticalOrigin: PopoverOrigin["vertical"], horizontalOrigin?: PopoverOrigin["horizontal"]) => {
13
13
  vertical: number | "bottom" | "top" | "center";
@@ -54,8 +54,8 @@ var filterItemsInGroups = function (groups, filterText) {
54
54
  };
55
55
  exports.filterItemsInGroups = filterItemsInGroups;
56
56
  var isSelectedFacet = function (_a) {
57
- var facet = _a.facet, selectedFacets = _a.selectedFacets;
58
- return !!selectedFacets.find(function (selFacet) { return selFacet.fieldName === facet.fieldName || selFacet.fieldName.includes("".concat(facet.fieldName, ".")); });
57
+ var facet = _a.facet, selectedFacetsFieldNames = _a.selectedFacetsFieldNames;
58
+ return !!selectedFacetsFieldNames.find(function (fieldName) { return fieldName === facet.fieldName || fieldName.includes("".concat(facet.fieldName, ".")); });
59
59
  };
60
60
  exports.isSelectedFacet = isSelectedFacet;
61
61
  var constructPopoverOrigin = function (verticalOrigin, horizontalOrigin) {
@@ -68,7 +68,21 @@ var defaultProps = {
68
68
  entityUri: 'entities/123',
69
69
  anchorEl: document.createElement('div')
70
70
  };
71
- var defaultMdmValues = { uiPath: 'http://localhost:3000/ui/sokol/', metadata: { entityTypes: [], relationTypes: [] } };
71
+ var getDefaultMetadata = function (masking) {
72
+ if (masking === void 0) { masking = false; }
73
+ return ({
74
+ entityTypes: [
75
+ {
76
+ uri: 'configuration/entityTypes/HCP',
77
+ attributes: [
78
+ __assign({ uri: 'configuration/entityTypes/HCP/attributes/FirstName', type: 'String', name: 'FirstName', label: 'First Name' }, (masking && { masking: { regexPattern: '.*' } }))
79
+ ]
80
+ }
81
+ ],
82
+ relationTypes: []
83
+ });
84
+ };
85
+ var defaultMdmValues = { uiPath: 'http://localhost:3000/ui/sokol/', metadata: getDefaultMetadata(), showMasking: true };
72
86
  var defaultMdmActions = { openEntity: jest.fn() };
73
87
  var setUp = function (_a) {
74
88
  var _b = _a === void 0 ? {} : _a, _c = _b.props, props = _c === void 0 ? defaultProps : _c, _d = _b.mdmValues, mdmValues = _d === void 0 ? defaultMdmValues : _d, _e = _b.mdmActions, mdmActions = _e === void 0 ? defaultMdmActions : _e;
@@ -141,6 +155,9 @@ describe('Hierarchy node title tests', function () {
141
155
  }); })];
142
156
  case 2:
143
157
  _a.sent();
158
+ expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith('entities/123', {
159
+ options: 'sendHidden,addRefAttrUriToCrosswalk'
160
+ });
144
161
  (0, react_2.within)(tooltip).getByAltText('fallback entity avatar');
145
162
  (0, react_2.within)(tooltip).getByText('perfect entity');
146
163
  (0, react_2.within)(tooltip).getByText('ID:');
@@ -153,4 +170,69 @@ describe('Hierarchy node title tests', function () {
153
170
  }
154
171
  });
155
172
  }); });
173
+ it('should pass sendMasked option to getEntity if metadata has masking', function () { return __awaiter(void 0, void 0, void 0, function () {
174
+ var user, entityWithMasking;
175
+ return __generator(this, function (_a) {
176
+ switch (_a.label) {
177
+ case 0:
178
+ user = setUp({ mdmValues: __assign(__assign({}, defaultMdmValues), { metadata: getDefaultMetadata(true) }) }).user;
179
+ return [4 /*yield*/, user.hover(react_2.screen.getByText('Title'))];
180
+ case 1:
181
+ _a.sent();
182
+ expect(react_2.screen.getByRole('tooltip')).toBeInTheDocument();
183
+ entityWithMasking = {
184
+ uri: 'entities/123',
185
+ label: '***t entity',
186
+ type: 'configuration/entityTypes/HCP'
187
+ };
188
+ return [4 /*yield*/, (0, react_2.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
189
+ return __generator(this, function (_a) {
190
+ switch (_a.label) {
191
+ case 0: return [4 /*yield*/, resolveGetEntity(entityWithMasking)];
192
+ case 1:
193
+ _a.sent();
194
+ return [2 /*return*/];
195
+ }
196
+ });
197
+ }); })];
198
+ case 2:
199
+ _a.sent();
200
+ expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith('entities/123', {
201
+ options: 'sendHidden,addRefAttrUriToCrosswalk,sendMasked'
202
+ });
203
+ return [2 /*return*/];
204
+ }
205
+ });
206
+ }); });
207
+ it('should not pass sendMasked option to getEntity if metadata has masking but showMasking is false', function () { return __awaiter(void 0, void 0, void 0, function () {
208
+ var user;
209
+ return __generator(this, function (_a) {
210
+ switch (_a.label) {
211
+ case 0:
212
+ user = setUp({
213
+ mdmValues: __assign(__assign({}, defaultMdmValues), { metadata: getDefaultMetadata(true), showMasking: false })
214
+ }).user;
215
+ return [4 /*yield*/, user.hover(react_2.screen.getByText('Title'))];
216
+ case 1:
217
+ _a.sent();
218
+ expect(react_2.screen.getByRole('tooltip')).toBeInTheDocument();
219
+ return [4 /*yield*/, (0, react_2.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0: return [4 /*yield*/, resolveGetEntity(entity)];
223
+ case 1:
224
+ _a.sent();
225
+ return [2 /*return*/];
226
+ }
227
+ });
228
+ }); })];
229
+ case 2:
230
+ _a.sent();
231
+ expect(mdm_sdk_1.getEntity).toHaveBeenCalledWith('entities/123', {
232
+ options: 'sendHidden,addRefAttrUriToCrosswalk'
233
+ });
234
+ return [2 /*return*/];
235
+ }
236
+ });
237
+ }); });
156
238
  });
@@ -4,20 +4,24 @@ exports.useEntityDetails = void 0;
4
4
  var react_1 = require("react");
5
5
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
6
6
  var useSafePromise_1 = require("../hooks/useSafePromise");
7
+ var MdmModuleContext_1 = require("../contexts/MdmModuleContext");
7
8
  var useEntityDetails = function (entityUri) {
8
9
  var _a = (0, react_1.useState)(null), entityDetails = _a[0], setEntityDetails = _a[1];
9
10
  var _b = (0, react_1.useState)(false), isLoading = _b[0], setIsLoading = _b[1];
10
11
  var safePromise = (0, useSafePromise_1.useSafePromise)();
11
12
  var cancelRequest = (0, react_1.useCallback)(function () { return safePromise(Promise.resolve()); }, [safePromise]);
13
+ var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
14
+ var showMasking = (0, MdmModuleContext_1.useMdmShowMasking)();
15
+ var entityOptions = (0, react_1.useMemo)(function () { return (0, mdm_sdk_1.addGetEntityMaskingOptions)(metadata, { showMasking: showMasking, showAccess: false }); }, [metadata, showMasking]);
12
16
  var showEntityDetails = (0, react_1.useCallback)((0, mdm_sdk_1.debounce)(function () {
13
17
  setIsLoading(true);
14
- safePromise((0, mdm_sdk_1.getEntity)(entityUri))
18
+ safePromise((0, mdm_sdk_1.getEntity)(entityUri, entityOptions))
15
19
  .then(setEntityDetails)
16
20
  .catch(function (error) {
17
21
  console.warn('Failed to load entity', error);
18
22
  })
19
23
  .finally(function () { return setIsLoading(false); });
20
- }, 1000), [entityUri, safePromise]);
24
+ }, 1000), [entityUri, safePromise, entityOptions]);
21
25
  var hideEntityDetails = (0, react_1.useCallback)(function () {
22
26
  cancelRequest();
23
27
  showEntityDetails.cancel();