@reltio/components 1.4.1969 → 1.4.1971

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.
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ReadableQueryPrimitive } from '@reltio/mdm-sdk';
3
3
  export declare const ReadableSearchQuery: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & {
4
+ classes?: Record<string, string>;
4
5
  readableQuery?: ReadableQueryPrimitive[];
5
6
  } & React.RefAttributes<HTMLElement>>;
@@ -53,11 +53,11 @@ var react_1 = __importStar(require("react"));
53
53
  var classnames_1 = __importDefault(require("classnames"));
54
54
  var styles_1 = require("./styles");
55
55
  exports.ReadableSearchQuery = (0, react_1.forwardRef)(function (_a, ref) {
56
- var _b = _a.readableQuery, readableQuery = _b === void 0 ? [] : _b, className = _a.className, otherProps = __rest(_a, ["readableQuery", "className"]);
56
+ var _b = _a.readableQuery, readableQuery = _b === void 0 ? [] : _b, className = _a.className, _c = _a.classes, classes = _c === void 0 ? {} : _c, otherProps = __rest(_a, ["readableQuery", "className", "classes"]);
57
57
  var styles = (0, styles_1.useStyles)();
58
58
  return (react_1.default.createElement("span", __assign({ ref: ref, className: (0, classnames_1.default)(styles.query, className), "data-reltio-id": "search-readable-query" }, otherProps), readableQuery.map(function (_a, i) {
59
59
  var type = _a.type, text = _a.text;
60
- return (react_1.default.createElement("span", { key: i, className: styles[type] }, text));
60
+ return (react_1.default.createElement("span", { key: i, className: (0, classnames_1.default)(styles[type], classes[type]) }, text));
61
61
  })));
62
62
  });
63
63
  exports.ReadableSearchQuery.displayName = 'ReadableSearchQuery';
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { ReadableQueryPrimitive } from '@reltio/mdm-sdk';
3
+ type Classes = {
4
+ root?: string;
5
+ queryWrapper?: string;
6
+ title?: string;
7
+ [key: string]: string;
8
+ };
9
+ type Props = {
10
+ readableQuery: ReadableQueryPrimitive[];
11
+ classes?: Classes;
12
+ title?: string;
13
+ };
14
+ export declare const ReadableSearchQueryBuilder: ({ readableQuery, classes, title }: Props) => React.JSX.Element;
15
+ export {};
@@ -0,0 +1,128 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ var __importDefault = (this && this.__importDefault) || function (mod) {
62
+ return (mod && mod.__esModule) ? mod : { "default": mod };
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.ReadableSearchQueryBuilder = void 0;
66
+ var react_1 = __importStar(require("react"));
67
+ var ui_i18n_1 = __importDefault(require("ui-i18n"));
68
+ var classnames_1 = __importDefault(require("classnames"));
69
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
70
+ var Tooltip_1 = __importDefault(require("@mui/material/Tooltip"));
71
+ var ReadableSearchQuery_1 = require("../ReadableSearchQuery");
72
+ var styles_1 = require("./styles");
73
+ var ReadableSearchQueryBuilder = function (_a) {
74
+ var readableQuery = _a.readableQuery, _b = _a.classes, classes = _b === void 0 ? {} : _b, _c = _a.title, title = _c === void 0 ? ui_i18n_1.default.text('Search query') : _c;
75
+ var styles = (0, styles_1.useStyles)();
76
+ var initialTooltipTitle = ui_i18n_1.default.text('Copy to clipboard');
77
+ var _d = (0, react_1.useState)(initialTooltipTitle), tooltipTitle = _d[0], setTooltipTitle = _d[1];
78
+ var _e = (0, react_1.useState)(0), queryMouseEnterX = _e[0], setQueryMouseEnterX = _e[1];
79
+ var _f = (0, react_1.useState)(0), queryMouseEnterY = _f[0], setQueryMouseEnterY = _f[1];
80
+ var onQueryMouseEnter = (0, react_1.useCallback)(function (e) {
81
+ setQueryMouseEnterX(e.clientX);
82
+ setQueryMouseEnterY(e.clientY);
83
+ }, []);
84
+ var onTooltipClose = (0, react_1.useCallback)(function () {
85
+ setTooltipTitle(initialTooltipTitle);
86
+ }, [initialTooltipTitle]);
87
+ var copyQueryToClipboard = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
88
+ var _a;
89
+ return __generator(this, function (_b) {
90
+ switch (_b.label) {
91
+ case 0:
92
+ _b.trys.push([0, 2, , 3]);
93
+ return [4 /*yield*/, navigator.clipboard.writeText((0, mdm_sdk_1.readableQueryToString)(readableQuery))];
94
+ case 1:
95
+ _b.sent();
96
+ setTooltipTitle(ui_i18n_1.default.text('Query was copied'));
97
+ return [3 /*break*/, 3];
98
+ case 2:
99
+ _a = _b.sent();
100
+ setTooltipTitle(ui_i18n_1.default.text('Error'));
101
+ return [3 /*break*/, 3];
102
+ case 3: return [2 /*return*/];
103
+ }
104
+ });
105
+ }); }, [readableQuery]);
106
+ // When query is too long and div.queryContainer has scroll, we have wrong tooltip position.
107
+ // Possible solution is wrap in Tooltip div.queryContainer component, but it's too wide for short queries.
108
+ // So, we decided to place tooltip near position where cursor was entered on div.query
109
+ var popperProps = (0, react_1.useMemo)(function () { return ({
110
+ anchorEl: {
111
+ clientWidth: 1,
112
+ clientHeight: 1,
113
+ getBoundingClientRect: function () { return ({
114
+ left: queryMouseEnterX,
115
+ bottom: queryMouseEnterY,
116
+ height: 1,
117
+ right: queryMouseEnterX,
118
+ width: 1,
119
+ top: queryMouseEnterY
120
+ }); }
121
+ }
122
+ }); }, [queryMouseEnterX, queryMouseEnterY]);
123
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.root, classes.root) },
124
+ react_1.default.createElement("span", { className: classes.title }, title),
125
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.queryWrapper, classes.queryWrapper) }, readableQuery.length > 0 ? (react_1.default.createElement(Tooltip_1.default, { key: tooltipTitle, title: tooltipTitle, onClose: onTooltipClose, PopperProps: popperProps },
126
+ react_1.default.createElement(ReadableSearchQuery_1.ReadableSearchQuery, { readableQuery: readableQuery, onMouseEnter: onQueryMouseEnter, onClick: copyQueryToClipboard, classes: classes, className: styles.query }))) : (react_1.default.createElement("span", { className: styles.noQuery }, ui_i18n_1.default.text('Build your search and view your search query here'))))));
127
+ };
128
+ exports.ReadableSearchQueryBuilder = ReadableSearchQueryBuilder;
@@ -0,0 +1,137 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var react_1 = __importDefault(require("react"));
54
+ var react_2 = require("@testing-library/react");
55
+ var ReadableSearchQueryBuilder_1 = require("./ReadableSearchQueryBuilder");
56
+ var defaultReadableQuery = [
57
+ { text: 'REGISTRY: ', type: 'entityTypeLabel' },
58
+ { text: 'Name', type: 'attributeLabel' },
59
+ { text: ' ', type: 'space' },
60
+ { text: '≠', type: 'attributeFilter' },
61
+ { text: ' ', type: 'space' },
62
+ { text: '"John"', type: 'attributeValue' }
63
+ ];
64
+ var defaultProps = {
65
+ readableQuery: defaultReadableQuery
66
+ };
67
+ var setUp = function (props) {
68
+ if (props === void 0) { props = defaultProps; }
69
+ return __assign({}, (0, react_2.render)(react_1.default.createElement(ReadableSearchQueryBuilder_1.ReadableSearchQueryBuilder, __assign({}, props))));
70
+ };
71
+ describe('Readable search query builder behaviour', function () {
72
+ beforeEach(function () {
73
+ Object.assign(navigator, { clipboard: { writeText: jest.fn() } });
74
+ });
75
+ afterEach(function () {
76
+ jest.clearAllMocks();
77
+ });
78
+ it('should render correctly', function () {
79
+ setUp();
80
+ react_2.screen.getByText('Search query');
81
+ expect(react_2.screen.getByTestId('search-readable-query')).toHaveTextContent('REGISTRY: Name ≠ "John"');
82
+ expect(react_2.screen.queryByText('Build your search and view your search query here')).not.toBeInTheDocument();
83
+ });
84
+ it('should render custom title correctly', function () {
85
+ var props = __assign(__assign({}, defaultProps), { title: 'Custom title' });
86
+ setUp(props);
87
+ react_2.screen.getByText('Custom title');
88
+ });
89
+ it('should render special message when readable query is empty', function () {
90
+ var props = __assign(__assign({}, defaultProps), { readableQuery: [] });
91
+ setUp(props);
92
+ expect(react_2.screen.queryByTestId('search-readable-query')).not.toBeInTheDocument();
93
+ react_2.screen.getByText('Build your search and view your search query here');
94
+ });
95
+ it('should copy text of readable query in clipboard on query click', function () { return __awaiter(void 0, void 0, void 0, function () {
96
+ var query;
97
+ return __generator(this, function (_a) {
98
+ switch (_a.label) {
99
+ case 0:
100
+ navigator.clipboard.writeText.mockResolvedValue(null);
101
+ setUp();
102
+ query = react_2.screen.getByTestId('search-readable-query');
103
+ // eslint-disable-next-line testing-library/prefer-user-event
104
+ react_2.fireEvent.mouseOver(query);
105
+ react_2.screen.getByLabelText('Copy to clipboard');
106
+ // eslint-disable-next-line testing-library/prefer-user-event
107
+ react_2.fireEvent.click(query);
108
+ return [4 /*yield*/, react_2.screen.findByLabelText('Query was copied')];
109
+ case 1:
110
+ _a.sent();
111
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith('REGISTRY: Name ≠ "John"');
112
+ return [2 /*return*/];
113
+ }
114
+ });
115
+ }); });
116
+ it('should show error text in tooltip if attempt to copy text to clipboard was failed', function () { return __awaiter(void 0, void 0, void 0, function () {
117
+ var query;
118
+ return __generator(this, function (_a) {
119
+ switch (_a.label) {
120
+ case 0:
121
+ navigator.clipboard.writeText.mockRejectedValue(null);
122
+ setUp();
123
+ query = react_2.screen.getByTestId('search-readable-query');
124
+ // eslint-disable-next-line testing-library/prefer-user-event
125
+ react_2.fireEvent.mouseOver(query);
126
+ react_2.screen.getByLabelText('Copy to clipboard');
127
+ // eslint-disable-next-line testing-library/prefer-user-event
128
+ react_2.fireEvent.click(query);
129
+ return [4 /*yield*/, react_2.screen.findByLabelText('Error')];
130
+ case 1:
131
+ _a.sent();
132
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith('REGISTRY: Name ≠ "John"');
133
+ return [2 /*return*/];
134
+ }
135
+ });
136
+ }); });
137
+ });
@@ -0,0 +1 @@
1
+ export { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReadableSearchQueryBuilder = void 0;
4
+ var ReadableSearchQueryBuilder_1 = require("./ReadableSearchQueryBuilder");
5
+ Object.defineProperty(exports, "ReadableSearchQueryBuilder", { enumerable: true, get: function () { return ReadableSearchQueryBuilder_1.ReadableSearchQueryBuilder; } });
@@ -0,0 +1 @@
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"root" | "query" | "queryWrapper" | "noQuery">;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useStyles = void 0;
4
+ var styles_1 = require("@mui/styles");
5
+ exports.useStyles = (0, styles_1.makeStyles)({
6
+ root: {
7
+ fontSize: '12px',
8
+ lineHeight: '16px',
9
+ color: 'rgba(0,0,0,0.38)'
10
+ },
11
+ queryWrapper: {
12
+ height: 'auto',
13
+ maxHeight: '48px',
14
+ paddingTop: '4px',
15
+ overflow: 'auto'
16
+ },
17
+ query: {
18
+ cursor: 'pointer'
19
+ },
20
+ noQuery: {
21
+ color: '#000000'
22
+ }
23
+ });
package/cjs/index.d.ts CHANGED
@@ -129,6 +129,7 @@ export { StepNavigation } from './StepNavigation';
129
129
  export { TableSkeleton } from './TableSkeleton';
130
130
  export { LogicOperator } from './LogicOperator';
131
131
  export { ReadableSearchQuery } from './ReadableSearchQuery';
132
+ export { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
132
133
  export { ImportButton } from './ImportButton';
133
134
  export { LinearLoadIndicator } from './LinearLoadIndicator';
134
135
  export { Link } from './Link';
package/cjs/index.js CHANGED
@@ -16,11 +16,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.NestedAttributeEditor = exports.NestedAttribute = exports.MoreAttributesButton = exports.InlineReferenceAttribute = exports.InlineNestedAttribute = exports.InlineImageAttribute = exports.InlineAttributesPager = exports.InfoIcon = exports.EditableImageAttributesLine = exports.FilterButton = exports.FacetViewHeader = exports.ExpandedValueTooltip = exports.EntitySelector = exports.EntityCreator = exports.AttributesPager = exports.AttributesList = exports.EditableAttribute = exports.DropDownMenuButton = exports.DescriptionIcon = exports.DefaultCellValueRenderer = exports.ControlAttributeIcon = exports.ColumnsSettingsPopup = exports.ColumnsSettings = exports.ColorBar = exports.CollapseRowButton = exports.BasicChartsFactory = exports.ChartsFactory = exports.CardinalityMessage = exports.BranchDecorator = exports.BasicViewHeader = exports.BasicViewContent = exports.BasicView = exports.BasicTablePagination = exports.basicTableViewState = exports.BasicTable = exports.BasicAttributeSelector = exports.BarChart = exports.AvatarWithFallback = exports.AutoSizeList = exports.AttributesView = exports.AttributesValuesEditor = exports.AttributesFiltersButton = exports.AttributesFiltersBuilder = exports.AttributesFilterSelector = exports.AttributesErrorsPanel = exports.AttributeListItem = exports.AttributeGroupIcon = exports.ArrowExpandButton = exports.ActionsPanel = exports.ActionButton = void 0;
18
18
  exports.ConnectionEditor = exports.DropDownSelector = exports.ReactSelectOptionWithCheckIcon = exports.ReactSelectMenuWithPopper = exports.ReactSelectMenuList = exports.ReactSelectLoadMoreButton = exports.ReactSelectDropdownIndicatorWithIconButton = exports.ReactSelectDropdownIndicator = exports.Highlighter = exports.HierarchyNodeTitle = exports.HierarchicalAttributeTooltip = exports.HideOnShrink = exports.ExpandableSearchInput = exports.ErrorPopup = exports.ErrorBoundary = exports.EntityUriLink = exports.EntityTypesSelector = exports.EntityTypeIcon = exports.EntityTypeBadge = exports.EntityAvatar = exports.EMPTY_STATE_VARIANTS = exports.EMPTY_STATE_ICONS = exports.EmptyState = exports.Drawer = exports.DataTypeValue = exports.DataTenantBadge = exports.ConnectionRelationTypeSelector = exports.CollaborationItem = exports.ConfirmationDialog = exports.CommentsContainer = exports.ColoredSourceIcon = exports.CollapseButton = exports.TreeChart = exports.TableWithBars = exports.SourceIcon = exports.SmallIconButtonWithTooltip = exports.SmallIconButton = exports.SimpleAttributeEditor = exports.SimpleAttribute = exports.RowCellAutoSizer = exports.RelationTypeSelector = exports.ReferenceAttributeEditor = exports.ReferenceAttribute = exports.ImageAttributesLine = exports.ReadOnlyAttributesPager = exports.ReadOnlyAttributesList = exports.ReadOnlyAttribute = exports.ReadOnlyAttributeValuesBlock = exports.PieChart = exports.OvIcon = void 0;
19
- exports.Popper = exports.MultipleInput = exports.ModeSwitcherSelect = exports.ModeSwitcher = exports.TransitiveMatchBlock = exports.SimpleMatchRulesBuilder = exports.SimpleMatchRulesBlock = exports.SimpleMatchRules = exports.MatchRulesBlock = exports.LoadingSpinner = exports.Link = exports.LinearLoadIndicator = exports.ImportButton = exports.ReadableSearchQuery = exports.LogicOperator = exports.TableSkeleton = exports.StepNavigation = exports.TenantLabel = exports.RelevanceScoreBadge = exports.RequiredMark = exports.SettingsMenu = exports.TenantsDropDownSelector = exports.TenantIcon = exports.SourceSystemsSelector = exports.MatchRulesSelector = exports.MultiValueSelector = exports.ProfilesList = exports.NotMatchButton = exports.MergeButton = exports.ProfileMatchCard = exports.ImageGalleryDialog = exports.RelationTypesSelector = exports.ScreenProfileBand = exports.ProfileBandNavigation = exports.EmptyStub = exports.SaveSegmentDialog = exports.MaskingSwitcher = exports.FileTypeEditor = exports.EmptySearchResult = exports.DropDownEditor = exports.FilterValueEditor = exports.MultiValueChip = exports.TextEditor = exports.DateRangeEditor = exports.NumberEditor = exports.DataTypeValueEditor = exports.DateEditor = exports.ErrorWrapper = exports.ErrorMessage = exports.ConfigureColumnsPopup = void 0;
20
- exports.CollaborationContext = exports.BlockImageGalleryDialogContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = exports.MdmModuleProvider = exports.withTableContext = exports.withFilterAtBottom = exports.withPercents = exports.withContext = exports.withDateRangeSelector = exports.withDragHandle = exports.withAsyncMount = exports.withTooltip = exports.DateRangeSelector = exports.UpSetChart = exports.GaugeChart = exports.RelationEditor = exports.ReltioMap = exports.Marginator = exports.LightArrowTooltip = exports.ScrollableTabs = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopup = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.RCTree = exports.reactSortableTreeHelpers = exports.ReactSortableTree = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = void 0;
21
- exports.MaskedAttributesProvider = exports.SegmentationContext = exports.useReloadData = exports.ReloadDataProvider = exports.useAttributeValueConfigPermissions = exports.ConfigPermissionsContextProvider = exports.ConfigPermissionsContext = exports.useActionsHook = exports.ActionsHookProvider = exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.isHighlightedAttributeType = exports.isHighlightedErrorType = exports.ScrollType = exports.ScrollToElementProvider = exports.ScrollToElementContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.useEntityLoadingIndication = exports.EntityLoadingIndicationProvider = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.usePerspectivesSettings = exports.PerspectivesSettingsContext = exports.PivotingAttributeContext = exports.UsersContext = exports.InitialCollaborationContextValue = exports.CollaborationContextProvider = void 0;
22
- exports.useSegmentationRequest = exports.resolveMarkers = exports.useMarkers = exports.useMaskedAttribute = exports.useKeyboardNavigation = exports.useDynamicRowCellHeight = exports.useClickableStyle = exports.BasicTableCellRenderer = exports.useBasicTableCellRenderer = exports.useHiddenAttributes = exports.useSavedSearchesRequest = exports.useRequestDCRReview = exports.useAutoFocus = exports.useExpandInvalidRelations = exports.useLayoutResetter = exports.useIsMountedRef = exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = exports.useMatchesColumnsData = exports.useScrollToAttributeError = exports.ProfileTablesContext = exports.HiddenAttributesContext = exports.BasicTableContext = exports.BasicTableRowCollapseContext = exports.useDeleteUnmaskedAttributeForRelation = exports.useUnmaskedAttributeValue = exports.useUnmaskAttributeValue = exports.useMaskAttributeValue = void 0;
23
- exports.FakeMouseEvent = exports.rerenderWrapper = exports.mockElementSizes = exports.fixClicksOnResizablePanes = exports.mockBasicTableSizing = exports.getMuiIconsByName = exports.getMuiIconByName = exports.delayPromise = exports.deepFreeze = exports.awaitMockPromises = exports.TestStylesProvider = exports.TestPerspectivesSettingsProvider = exports.mergeClasses = exports.isControlOrCommandPressed = exports.getValue = exports.getChecked = exports.showErrorMessage = exports.showDefaultErrorMessage = exports.enrichDataWithPercents = exports.defaultRenderRowCell = exports.defaultGetRowCellHeight = exports.columnFilterToMdmFilter = exports.buildColumnsSizeById = exports.buildColumnsFilter = void 0;
19
+ exports.MultipleInput = exports.ModeSwitcherSelect = exports.ModeSwitcher = exports.TransitiveMatchBlock = exports.SimpleMatchRulesBuilder = exports.SimpleMatchRulesBlock = exports.SimpleMatchRules = exports.MatchRulesBlock = exports.LoadingSpinner = exports.Link = exports.LinearLoadIndicator = exports.ImportButton = exports.ReadableSearchQueryBuilder = exports.ReadableSearchQuery = exports.LogicOperator = exports.TableSkeleton = exports.StepNavigation = exports.TenantLabel = exports.RelevanceScoreBadge = exports.RequiredMark = exports.SettingsMenu = exports.TenantsDropDownSelector = exports.TenantIcon = exports.SourceSystemsSelector = exports.MatchRulesSelector = exports.MultiValueSelector = exports.ProfilesList = exports.NotMatchButton = exports.MergeButton = exports.ProfileMatchCard = exports.ImageGalleryDialog = exports.RelationTypesSelector = exports.ScreenProfileBand = exports.ProfileBandNavigation = exports.EmptyStub = exports.SaveSegmentDialog = exports.MaskingSwitcher = exports.FileTypeEditor = exports.EmptySearchResult = exports.DropDownEditor = exports.FilterValueEditor = exports.MultiValueChip = exports.TextEditor = exports.DateRangeEditor = exports.NumberEditor = exports.DataTypeValueEditor = exports.DateEditor = exports.ErrorWrapper = exports.ErrorMessage = exports.ConfigureColumnsPopup = void 0;
20
+ exports.BlockImageGalleryDialogContext = exports.PopupBoundariesContext = exports.HistoryDiffContext = exports.AsyncMountContext = exports.MdmModuleProvider = exports.withTableContext = exports.withFilterAtBottom = exports.withPercents = exports.withContext = exports.withDateRangeSelector = exports.withDragHandle = exports.withAsyncMount = exports.withTooltip = exports.DateRangeSelector = exports.UpSetChart = exports.GaugeChart = exports.RelationEditor = exports.ReltioMap = exports.Marginator = exports.LightArrowTooltip = exports.ScrollableTabs = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopup = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.RCTree = exports.reactSortableTreeHelpers = exports.ReactSortableTree = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = exports.Popper = void 0;
21
+ exports.SegmentationContext = exports.useReloadData = exports.ReloadDataProvider = exports.useAttributeValueConfigPermissions = exports.ConfigPermissionsContextProvider = exports.ConfigPermissionsContext = exports.useActionsHook = exports.ActionsHookProvider = exports.PageRequestsAbortingContext = exports.DependentLookupAutopopulationContext = exports.FeaturesContext = exports.LabelsContext = exports.UrlGeneratorsContext = exports.isHighlightedAttributeType = exports.isHighlightedErrorType = exports.ScrollType = exports.ScrollToElementProvider = exports.ScrollToElementContext = exports.SearchValueContext = exports.InterceptHandlersContext = exports.HighlightedValuesContext = exports.SnackbarContext = exports.SearchFiltersContext = exports.useReloadFacet = exports.ReloadFacetProvider = exports.useReloadAllFacets = exports.SandboxAPIContext = exports.EntityContext = exports.RelatedObjectUrisContext = exports.WorkflowTasksContext = exports.useEntityLoadingIndication = exports.EntityLoadingIndicationProvider = exports.EntityMarkerContext = exports.useAttributeExpanded = exports.ExpandedAttributesProvider = exports.useHighlightedCrosswalks = exports.useCrosswalkHighlight = exports.useCrosswalkFocus = exports.useCrosswalkColor = exports.CrosswalksDisplayProvider = exports.EntitiesMapContext = exports.IdContext = exports.ProfilePerspectiveViewContext = exports.usePerspectivesSettings = exports.PerspectivesSettingsContext = exports.PivotingAttributeContext = exports.UsersContext = exports.InitialCollaborationContextValue = exports.CollaborationContextProvider = exports.CollaborationContext = void 0;
22
+ exports.resolveMarkers = exports.useMarkers = exports.useMaskedAttribute = exports.useKeyboardNavigation = exports.useDynamicRowCellHeight = exports.useClickableStyle = exports.BasicTableCellRenderer = exports.useBasicTableCellRenderer = exports.useHiddenAttributes = exports.useSavedSearchesRequest = exports.useRequestDCRReview = exports.useAutoFocus = exports.useExpandInvalidRelations = exports.useLayoutResetter = exports.useIsMountedRef = exports.useSnackbar = exports.useSavedStateForEntityType = exports.useReadableSearchState = exports.useEditableConnection = exports.useCustomScripts = exports.useMarkAsNotMatchRequest = exports.useMergeAllRequest = exports.usePagingSimulator = exports.useMatchesLoader = exports.useConfigPermissions = exports.useWhyDidYouUpdate = exports.useUsers = exports.useSavedState = exports.useSafePromise = exports.useRunOnceAfterValueInitialization = exports.useRelationsLoader = exports.useRelationTypeSelector = exports.usePrevious = exports.useDidUpdateEffect = exports.useCommentsEntitiesMap = exports.useCollaboration = exports.useAsyncMount = exports.useAPI = exports.useActions = exports.useMatchesColumnsData = exports.useScrollToAttributeError = exports.ProfileTablesContext = exports.HiddenAttributesContext = exports.BasicTableContext = exports.BasicTableRowCollapseContext = exports.useDeleteUnmaskedAttributeForRelation = exports.useUnmaskedAttributeValue = exports.useUnmaskAttributeValue = exports.useMaskAttributeValue = exports.MaskedAttributesProvider = void 0;
23
+ exports.FakeMouseEvent = exports.rerenderWrapper = exports.mockElementSizes = exports.fixClicksOnResizablePanes = exports.mockBasicTableSizing = exports.getMuiIconsByName = exports.getMuiIconByName = exports.delayPromise = exports.deepFreeze = exports.awaitMockPromises = exports.TestStylesProvider = exports.TestPerspectivesSettingsProvider = exports.mergeClasses = exports.isControlOrCommandPressed = exports.getValue = exports.getChecked = exports.showErrorMessage = exports.showDefaultErrorMessage = exports.enrichDataWithPercents = exports.defaultRenderRowCell = exports.defaultGetRowCellHeight = exports.columnFilterToMdmFilter = exports.buildColumnsSizeById = exports.buildColumnsFilter = exports.useSegmentationRequest = void 0;
24
24
  // components
25
25
  var ActionButton_1 = require("./ActionButton");
26
26
  Object.defineProperty(exports, "ActionButton", { enumerable: true, get: function () { return ActionButton_1.ActionButton; } });
@@ -290,6 +290,8 @@ var LogicOperator_1 = require("./LogicOperator");
290
290
  Object.defineProperty(exports, "LogicOperator", { enumerable: true, get: function () { return LogicOperator_1.LogicOperator; } });
291
291
  var ReadableSearchQuery_1 = require("./ReadableSearchQuery");
292
292
  Object.defineProperty(exports, "ReadableSearchQuery", { enumerable: true, get: function () { return ReadableSearchQuery_1.ReadableSearchQuery; } });
293
+ var ReadableSearchQueryBuilder_1 = require("./ReadableSearchQueryBuilder");
294
+ Object.defineProperty(exports, "ReadableSearchQueryBuilder", { enumerable: true, get: function () { return ReadableSearchQueryBuilder_1.ReadableSearchQueryBuilder; } });
293
295
  var ImportButton_1 = require("./ImportButton");
294
296
  Object.defineProperty(exports, "ImportButton", { enumerable: true, get: function () { return ImportButton_1.ImportButton; } });
295
297
  var LinearLoadIndicator_1 = require("./LinearLoadIndicator");
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ReadableQueryPrimitive } from '@reltio/mdm-sdk';
3
3
  export declare const ReadableSearchQuery: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & {
4
+ classes?: Record<string, string>;
4
5
  readableQuery?: ReadableQueryPrimitive[];
5
6
  } & React.RefAttributes<HTMLElement>>;
@@ -24,11 +24,11 @@ import React, { forwardRef } from 'react';
24
24
  import classnames from 'classnames';
25
25
  import { useStyles } from './styles';
26
26
  export var ReadableSearchQuery = forwardRef(function (_a, ref) {
27
- var _b = _a.readableQuery, readableQuery = _b === void 0 ? [] : _b, className = _a.className, otherProps = __rest(_a, ["readableQuery", "className"]);
27
+ var _b = _a.readableQuery, readableQuery = _b === void 0 ? [] : _b, className = _a.className, _c = _a.classes, classes = _c === void 0 ? {} : _c, otherProps = __rest(_a, ["readableQuery", "className", "classes"]);
28
28
  var styles = useStyles();
29
29
  return (React.createElement("span", __assign({ ref: ref, className: classnames(styles.query, className), "data-reltio-id": "search-readable-query" }, otherProps), readableQuery.map(function (_a, i) {
30
30
  var type = _a.type, text = _a.text;
31
- return (React.createElement("span", { key: i, className: styles[type] }, text));
31
+ return (React.createElement("span", { key: i, className: classnames(styles[type], classes[type]) }, text));
32
32
  })));
33
33
  });
34
34
  ReadableSearchQuery.displayName = 'ReadableSearchQuery';
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { ReadableQueryPrimitive } from '@reltio/mdm-sdk';
3
+ type Classes = {
4
+ root?: string;
5
+ queryWrapper?: string;
6
+ title?: string;
7
+ [key: string]: string;
8
+ };
9
+ type Props = {
10
+ readableQuery: ReadableQueryPrimitive[];
11
+ classes?: Classes;
12
+ title?: string;
13
+ };
14
+ export declare const ReadableSearchQueryBuilder: ({ readableQuery, classes, title }: Props) => React.JSX.Element;
15
+ export {};
@@ -0,0 +1,98 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import React, { useState, useMemo, useCallback } from 'react';
38
+ import i18n from 'ui-i18n';
39
+ import classnames from 'classnames';
40
+ import { readableQueryToString } from '@reltio/mdm-sdk';
41
+ import Tooltip from '@mui/material/Tooltip';
42
+ import { ReadableSearchQuery } from '../ReadableSearchQuery';
43
+ import { useStyles } from './styles';
44
+ export var ReadableSearchQueryBuilder = function (_a) {
45
+ var readableQuery = _a.readableQuery, _b = _a.classes, classes = _b === void 0 ? {} : _b, _c = _a.title, title = _c === void 0 ? i18n.text('Search query') : _c;
46
+ var styles = useStyles();
47
+ var initialTooltipTitle = i18n.text('Copy to clipboard');
48
+ var _d = useState(initialTooltipTitle), tooltipTitle = _d[0], setTooltipTitle = _d[1];
49
+ var _e = useState(0), queryMouseEnterX = _e[0], setQueryMouseEnterX = _e[1];
50
+ var _f = useState(0), queryMouseEnterY = _f[0], setQueryMouseEnterY = _f[1];
51
+ var onQueryMouseEnter = useCallback(function (e) {
52
+ setQueryMouseEnterX(e.clientX);
53
+ setQueryMouseEnterY(e.clientY);
54
+ }, []);
55
+ var onTooltipClose = useCallback(function () {
56
+ setTooltipTitle(initialTooltipTitle);
57
+ }, [initialTooltipTitle]);
58
+ var copyQueryToClipboard = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
59
+ var _a;
60
+ return __generator(this, function (_b) {
61
+ switch (_b.label) {
62
+ case 0:
63
+ _b.trys.push([0, 2, , 3]);
64
+ return [4 /*yield*/, navigator.clipboard.writeText(readableQueryToString(readableQuery))];
65
+ case 1:
66
+ _b.sent();
67
+ setTooltipTitle(i18n.text('Query was copied'));
68
+ return [3 /*break*/, 3];
69
+ case 2:
70
+ _a = _b.sent();
71
+ setTooltipTitle(i18n.text('Error'));
72
+ return [3 /*break*/, 3];
73
+ case 3: return [2 /*return*/];
74
+ }
75
+ });
76
+ }); }, [readableQuery]);
77
+ // When query is too long and div.queryContainer has scroll, we have wrong tooltip position.
78
+ // Possible solution is wrap in Tooltip div.queryContainer component, but it's too wide for short queries.
79
+ // So, we decided to place tooltip near position where cursor was entered on div.query
80
+ var popperProps = useMemo(function () { return ({
81
+ anchorEl: {
82
+ clientWidth: 1,
83
+ clientHeight: 1,
84
+ getBoundingClientRect: function () { return ({
85
+ left: queryMouseEnterX,
86
+ bottom: queryMouseEnterY,
87
+ height: 1,
88
+ right: queryMouseEnterX,
89
+ width: 1,
90
+ top: queryMouseEnterY
91
+ }); }
92
+ }
93
+ }); }, [queryMouseEnterX, queryMouseEnterY]);
94
+ return (React.createElement("div", { className: classnames(styles.root, classes.root) },
95
+ React.createElement("span", { className: classes.title }, title),
96
+ React.createElement("div", { className: classnames(styles.queryWrapper, classes.queryWrapper) }, readableQuery.length > 0 ? (React.createElement(Tooltip, { key: tooltipTitle, title: tooltipTitle, onClose: onTooltipClose, PopperProps: popperProps },
97
+ React.createElement(ReadableSearchQuery, { readableQuery: readableQuery, onMouseEnter: onQueryMouseEnter, onClick: copyQueryToClipboard, classes: classes, className: styles.query }))) : (React.createElement("span", { className: styles.noQuery }, i18n.text('Build your search and view your search query here'))))));
98
+ };
@@ -0,0 +1,132 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import React from 'react';
49
+ import { fireEvent, render, screen } from '@testing-library/react';
50
+ import { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
51
+ var defaultReadableQuery = [
52
+ { text: 'REGISTRY: ', type: 'entityTypeLabel' },
53
+ { text: 'Name', type: 'attributeLabel' },
54
+ { text: ' ', type: 'space' },
55
+ { text: '≠', type: 'attributeFilter' },
56
+ { text: ' ', type: 'space' },
57
+ { text: '"John"', type: 'attributeValue' }
58
+ ];
59
+ var defaultProps = {
60
+ readableQuery: defaultReadableQuery
61
+ };
62
+ var setUp = function (props) {
63
+ if (props === void 0) { props = defaultProps; }
64
+ return __assign({}, render(React.createElement(ReadableSearchQueryBuilder, __assign({}, props))));
65
+ };
66
+ describe('Readable search query builder behaviour', function () {
67
+ beforeEach(function () {
68
+ Object.assign(navigator, { clipboard: { writeText: jest.fn() } });
69
+ });
70
+ afterEach(function () {
71
+ jest.clearAllMocks();
72
+ });
73
+ it('should render correctly', function () {
74
+ setUp();
75
+ screen.getByText('Search query');
76
+ expect(screen.getByTestId('search-readable-query')).toHaveTextContent('REGISTRY: Name ≠ "John"');
77
+ expect(screen.queryByText('Build your search and view your search query here')).not.toBeInTheDocument();
78
+ });
79
+ it('should render custom title correctly', function () {
80
+ var props = __assign(__assign({}, defaultProps), { title: 'Custom title' });
81
+ setUp(props);
82
+ screen.getByText('Custom title');
83
+ });
84
+ it('should render special message when readable query is empty', function () {
85
+ var props = __assign(__assign({}, defaultProps), { readableQuery: [] });
86
+ setUp(props);
87
+ expect(screen.queryByTestId('search-readable-query')).not.toBeInTheDocument();
88
+ screen.getByText('Build your search and view your search query here');
89
+ });
90
+ it('should copy text of readable query in clipboard on query click', function () { return __awaiter(void 0, void 0, void 0, function () {
91
+ var query;
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0:
95
+ navigator.clipboard.writeText.mockResolvedValue(null);
96
+ setUp();
97
+ query = screen.getByTestId('search-readable-query');
98
+ // eslint-disable-next-line testing-library/prefer-user-event
99
+ fireEvent.mouseOver(query);
100
+ screen.getByLabelText('Copy to clipboard');
101
+ // eslint-disable-next-line testing-library/prefer-user-event
102
+ fireEvent.click(query);
103
+ return [4 /*yield*/, screen.findByLabelText('Query was copied')];
104
+ case 1:
105
+ _a.sent();
106
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith('REGISTRY: Name ≠ "John"');
107
+ return [2 /*return*/];
108
+ }
109
+ });
110
+ }); });
111
+ it('should show error text in tooltip if attempt to copy text to clipboard was failed', function () { return __awaiter(void 0, void 0, void 0, function () {
112
+ var query;
113
+ return __generator(this, function (_a) {
114
+ switch (_a.label) {
115
+ case 0:
116
+ navigator.clipboard.writeText.mockRejectedValue(null);
117
+ setUp();
118
+ query = screen.getByTestId('search-readable-query');
119
+ // eslint-disable-next-line testing-library/prefer-user-event
120
+ fireEvent.mouseOver(query);
121
+ screen.getByLabelText('Copy to clipboard');
122
+ // eslint-disable-next-line testing-library/prefer-user-event
123
+ fireEvent.click(query);
124
+ return [4 /*yield*/, screen.findByLabelText('Error')];
125
+ case 1:
126
+ _a.sent();
127
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith('REGISTRY: Name ≠ "John"');
128
+ return [2 /*return*/];
129
+ }
130
+ });
131
+ }); });
132
+ });
@@ -0,0 +1 @@
1
+ export { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
@@ -0,0 +1 @@
1
+ export { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
@@ -0,0 +1 @@
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"root" | "query" | "queryWrapper" | "noQuery">;
@@ -0,0 +1,20 @@
1
+ import { makeStyles } from '@mui/styles';
2
+ export var useStyles = makeStyles({
3
+ root: {
4
+ fontSize: '12px',
5
+ lineHeight: '16px',
6
+ color: 'rgba(0,0,0,0.38)'
7
+ },
8
+ queryWrapper: {
9
+ height: 'auto',
10
+ maxHeight: '48px',
11
+ paddingTop: '4px',
12
+ overflow: 'auto'
13
+ },
14
+ query: {
15
+ cursor: 'pointer'
16
+ },
17
+ noQuery: {
18
+ color: '#000000'
19
+ }
20
+ });
package/esm/index.d.ts CHANGED
@@ -129,6 +129,7 @@ export { StepNavigation } from './StepNavigation';
129
129
  export { TableSkeleton } from './TableSkeleton';
130
130
  export { LogicOperator } from './LogicOperator';
131
131
  export { ReadableSearchQuery } from './ReadableSearchQuery';
132
+ export { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
132
133
  export { ImportButton } from './ImportButton';
133
134
  export { LinearLoadIndicator } from './LinearLoadIndicator';
134
135
  export { Link } from './Link';
package/esm/index.js CHANGED
@@ -130,6 +130,7 @@ export { StepNavigation } from './StepNavigation';
130
130
  export { TableSkeleton } from './TableSkeleton';
131
131
  export { LogicOperator } from './LogicOperator';
132
132
  export { ReadableSearchQuery } from './ReadableSearchQuery';
133
+ export { ReadableSearchQueryBuilder } from './ReadableSearchQueryBuilder';
133
134
  export { ImportButton } from './ImportButton';
134
135
  export { LinearLoadIndicator } from './LinearLoadIndicator';
135
136
  export { Link } from './Link';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1969",
3
+ "version": "1.4.1971",
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
  "@fluentui/react-context-selector": "^9.1.26",
9
9
  "@react-google-maps/api": "2.7.0",
10
10
  "@react-sigma/core": "3.4.0",
11
- "@reltio/mdm-sdk": "^1.4.1872",
11
+ "@reltio/mdm-sdk": "^1.4.1874",
12
12
  "d3-cloud": "^1.2.5",
13
13
  "d3-geo": "^2.0.1",
14
14
  "d3-hierarchy": "^2.0.0",