@reltio/components 1.4.2078 → 1.4.2080

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 (111) hide show
  1. package/ExpandableSearchInput/ExpandableSearchInput.d.ts +4 -1
  2. package/ExpandableSearchInput/ExpandableSearchInput.js +4 -4
  3. package/ExpandableSearchInput/ExpandableSearchInput.module.css.js +9 -0
  4. package/SegmentsTable/CellRenderer.module.css.js +9 -0
  5. package/SegmentsTable/SegmentsTable.d.ts +13 -0
  6. package/SegmentsTable/SegmentsTable.js +70 -0
  7. package/SegmentsTable/SegmentsTable.module.css.js +9 -0
  8. package/SegmentsTable/SegmentsTable.test.d.ts +1 -0
  9. package/SegmentsTable/SegmentsTable.test.js +165 -0
  10. package/SegmentsTable/components/AttributeCellRenderer/AttributeCellRenderer.d.ts +6 -0
  11. package/SegmentsTable/components/AttributeCellRenderer/AttributeCellRenderer.js +8 -0
  12. package/SegmentsTable/components/AttributeCellRenderer/index.d.ts +1 -0
  13. package/SegmentsTable/components/AttributeCellRenderer/index.js +1 -0
  14. package/SegmentsTable/components/AudienceCountCellRenderer/AudienceCountCellRenderer.d.ts +6 -0
  15. package/SegmentsTable/components/AudienceCountCellRenderer/AudienceCountCellRenderer.js +8 -0
  16. package/SegmentsTable/components/AudienceCountCellRenderer/AudienceCountCellRenderer.module.css.js +9 -0
  17. package/SegmentsTable/components/AudienceCountCellRenderer/index.d.ts +1 -0
  18. package/SegmentsTable/components/AudienceCountCellRenderer/index.js +1 -0
  19. package/SegmentsTable/components/BarCellRenderer/BarCellRenderer.d.ts +9 -0
  20. package/SegmentsTable/components/BarCellRenderer/BarCellRenderer.js +9 -0
  21. package/SegmentsTable/components/BarCellRenderer/BarCellRenderer.module.css.js +9 -0
  22. package/SegmentsTable/components/BarCellRenderer/index.d.ts +1 -0
  23. package/SegmentsTable/components/BarCellRenderer/index.js +1 -0
  24. package/SegmentsTable/components/BarHeadCellRenderer/BarHeadCellRenderer.d.ts +5 -0
  25. package/SegmentsTable/components/BarHeadCellRenderer/BarHeadCellRenderer.js +12 -0
  26. package/SegmentsTable/components/BarHeadCellRenderer/BarHeadCellRenderer.module.css.js +9 -0
  27. package/SegmentsTable/components/BarHeadCellRenderer/index.d.ts +1 -0
  28. package/SegmentsTable/components/BarHeadCellRenderer/index.js +1 -0
  29. package/SegmentsTable/components/HeadCellRenderer/HeadCellRenderer.d.ts +9 -0
  30. package/SegmentsTable/components/HeadCellRenderer/HeadCellRenderer.js +33 -0
  31. package/SegmentsTable/components/HeadCellRenderer/HeadCellRenderer.module.css.js +9 -0
  32. package/SegmentsTable/components/HeadCellRenderer/index.d.ts +1 -0
  33. package/SegmentsTable/components/HeadCellRenderer/index.js +1 -0
  34. package/SegmentsTable/components/LabelCellRenderer/LabelCellRenderer.d.ts +9 -0
  35. package/SegmentsTable/components/LabelCellRenderer/LabelCellRenderer.js +14 -0
  36. package/SegmentsTable/components/LabelCellRenderer/LabelCellRenderer.module.css.js +9 -0
  37. package/SegmentsTable/components/LabelCellRenderer/index.d.ts +1 -0
  38. package/SegmentsTable/components/LabelCellRenderer/index.js +1 -0
  39. package/SegmentsTable/helpers.d.ts +3 -0
  40. package/SegmentsTable/helpers.js +16 -0
  41. package/SegmentsTable/index.d.ts +1 -0
  42. package/SegmentsTable/index.js +1 -0
  43. package/SimpleAttribute/IntegrationSimpleAttribute.test.js +109 -4
  44. package/cjs/ExpandableSearchInput/ExpandableSearchInput.d.ts +4 -1
  45. package/cjs/ExpandableSearchInput/ExpandableSearchInput.js +6 -6
  46. package/cjs/ExpandableSearchInput/ExpandableSearchInput.module.css.js +9 -0
  47. package/cjs/SegmentsTable/CellRenderer.module.css.js +9 -0
  48. package/cjs/SegmentsTable/SegmentsTable.d.ts +13 -0
  49. package/cjs/SegmentsTable/SegmentsTable.js +100 -0
  50. package/cjs/SegmentsTable/SegmentsTable.module.css.js +9 -0
  51. package/cjs/SegmentsTable/SegmentsTable.test.d.ts +1 -0
  52. package/cjs/SegmentsTable/SegmentsTable.test.js +170 -0
  53. package/cjs/SegmentsTable/components/AttributeCellRenderer/AttributeCellRenderer.d.ts +6 -0
  54. package/cjs/SegmentsTable/components/AttributeCellRenderer/AttributeCellRenderer.js +15 -0
  55. package/cjs/SegmentsTable/components/AttributeCellRenderer/index.d.ts +1 -0
  56. package/cjs/SegmentsTable/components/AttributeCellRenderer/index.js +5 -0
  57. package/cjs/SegmentsTable/components/AudienceCountCellRenderer/AudienceCountCellRenderer.d.ts +6 -0
  58. package/cjs/SegmentsTable/components/AudienceCountCellRenderer/AudienceCountCellRenderer.js +15 -0
  59. package/cjs/SegmentsTable/components/AudienceCountCellRenderer/AudienceCountCellRenderer.module.css.js +9 -0
  60. package/cjs/SegmentsTable/components/AudienceCountCellRenderer/index.d.ts +1 -0
  61. package/cjs/SegmentsTable/components/AudienceCountCellRenderer/index.js +5 -0
  62. package/cjs/SegmentsTable/components/BarCellRenderer/BarCellRenderer.d.ts +9 -0
  63. package/cjs/SegmentsTable/components/BarCellRenderer/BarCellRenderer.js +16 -0
  64. package/cjs/SegmentsTable/components/BarCellRenderer/BarCellRenderer.module.css.js +9 -0
  65. package/cjs/SegmentsTable/components/BarCellRenderer/index.d.ts +1 -0
  66. package/cjs/SegmentsTable/components/BarCellRenderer/index.js +5 -0
  67. package/cjs/SegmentsTable/components/BarHeadCellRenderer/BarHeadCellRenderer.d.ts +5 -0
  68. package/cjs/SegmentsTable/components/BarHeadCellRenderer/BarHeadCellRenderer.js +17 -0
  69. package/cjs/SegmentsTable/components/BarHeadCellRenderer/BarHeadCellRenderer.module.css.js +9 -0
  70. package/cjs/SegmentsTable/components/BarHeadCellRenderer/index.d.ts +1 -0
  71. package/cjs/SegmentsTable/components/BarHeadCellRenderer/index.js +8 -0
  72. package/cjs/SegmentsTable/components/HeadCellRenderer/HeadCellRenderer.d.ts +9 -0
  73. package/cjs/SegmentsTable/components/HeadCellRenderer/HeadCellRenderer.js +40 -0
  74. package/cjs/SegmentsTable/components/HeadCellRenderer/HeadCellRenderer.module.css.js +9 -0
  75. package/cjs/SegmentsTable/components/HeadCellRenderer/index.d.ts +1 -0
  76. package/cjs/SegmentsTable/components/HeadCellRenderer/index.js +5 -0
  77. package/cjs/SegmentsTable/components/LabelCellRenderer/LabelCellRenderer.d.ts +9 -0
  78. package/cjs/SegmentsTable/components/LabelCellRenderer/LabelCellRenderer.js +21 -0
  79. package/cjs/SegmentsTable/components/LabelCellRenderer/LabelCellRenderer.module.css.js +9 -0
  80. package/cjs/SegmentsTable/components/LabelCellRenderer/index.d.ts +1 -0
  81. package/cjs/SegmentsTable/components/LabelCellRenderer/index.js +5 -0
  82. package/cjs/SegmentsTable/helpers.d.ts +3 -0
  83. package/cjs/SegmentsTable/helpers.js +23 -0
  84. package/cjs/SegmentsTable/index.d.ts +1 -0
  85. package/cjs/SegmentsTable/index.js +5 -0
  86. package/cjs/SimpleAttribute/IntegrationSimpleAttribute.test.js +108 -3
  87. package/cjs/hooks/useMaskedAttribute/helpers.d.ts +6 -0
  88. package/cjs/hooks/useMaskedAttribute/helpers.js +72 -0
  89. package/cjs/hooks/useMaskedAttribute/useMaskedAttribute.d.ts +4 -3
  90. package/cjs/hooks/useMaskedAttribute/useMaskedAttribute.js +58 -4
  91. package/cjs/hooks/useSegmentsRequest/helper.d.ts +2 -0
  92. package/cjs/hooks/useSegmentsRequest/helper.js +51 -0
  93. package/cjs/hooks/useSegmentsRequest/index.d.ts +1 -0
  94. package/cjs/hooks/useSegmentsRequest/index.js +5 -0
  95. package/cjs/hooks/useSegmentsRequest/useSegmentsRequest.d.ts +42 -0
  96. package/cjs/hooks/useSegmentsRequest/useSegmentsRequest.js +146 -0
  97. package/hooks/useMaskedAttribute/helpers.d.ts +6 -0
  98. package/hooks/useMaskedAttribute/helpers.js +68 -0
  99. package/hooks/useMaskedAttribute/useMaskedAttribute.d.ts +4 -3
  100. package/hooks/useMaskedAttribute/useMaskedAttribute.js +60 -6
  101. package/hooks/useSegmentsRequest/helper.d.ts +2 -0
  102. package/hooks/useSegmentsRequest/helper.js +47 -0
  103. package/hooks/useSegmentsRequest/index.d.ts +1 -0
  104. package/hooks/useSegmentsRequest/index.js +1 -0
  105. package/hooks/useSegmentsRequest/useSegmentsRequest.d.ts +42 -0
  106. package/hooks/useSegmentsRequest/useSegmentsRequest.js +142 -0
  107. package/package.json +2 -2
  108. package/ExpandableSearchInput/styles.d.ts +0 -1
  109. package/ExpandableSearchInput/styles.js +0 -22
  110. package/cjs/ExpandableSearchInput/styles.d.ts +0 -1
  111. package/cjs/ExpandableSearchInput/styles.js +0 -25
@@ -2,6 +2,9 @@ import React from 'react';
2
2
  type Props = {
3
3
  query: string;
4
4
  onChange: (value: string) => void;
5
+ classes?: {
6
+ searchButton: string;
7
+ };
5
8
  };
6
- export declare const ExpandableSearchInput: ({ query, onChange }: Props) => React.JSX.Element;
9
+ export declare const ExpandableSearchInput: ({ query, onChange, classes }: Props) => React.JSX.Element;
7
10
  export {};
@@ -1,5 +1,6 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import i18n from 'ui-i18n';
3
+ import classnames from 'classnames';
3
4
  import { always, F, pipe, propEq, T, tap, trim, when } from 'ramda';
4
5
  import CloseIcon from '@mui/icons-material/Close';
5
6
  import IconButton from '@mui/material/IconButton';
@@ -8,17 +9,16 @@ import InputAdornment from '@mui/material/InputAdornment';
8
9
  import SearchIcon from '@mui/icons-material/Search';
9
10
  import { SmallIconButton } from '../SmallIconButton';
10
11
  import { getValue } from '../helpers/events';
11
- import { useStyles } from './styles';
12
+ import styles from './ExpandableSearchInput.module.css';
12
13
  export var ExpandableSearchInput = function (_a) {
13
- var query = _a.query, onChange = _a.onChange;
14
+ var query = _a.query, onChange = _a.onChange, classes = _a.classes;
14
15
  var _b = useState(query), value = _b[0], setValue = _b[1];
15
16
  var _c = useState(!!query), isOpen = _c[0], setIsOpen = _c[1];
16
17
  useEffect(function () {
17
18
  setValue(query);
18
19
  }, [query]);
19
- var styles = useStyles();
20
20
  return isOpen ? (React.createElement(Input, { "data-reltio-id": "expandable-search-input", className: styles.input, value: value, autoFocus: true, placeholder: i18n.text('Search'), disableUnderline: true, onChange: pipe(getValue, setValue), startAdornment: React.createElement(InputAdornment, { position: "start" },
21
21
  React.createElement(SearchIcon, { className: styles.startAdornment })), endAdornment: React.createElement(InputAdornment, { position: "end" },
22
- React.createElement(SmallIconButton, { size: "S", icon: CloseIcon, className: styles.endAdornment, onClick: pipe(F, setIsOpen, always(''), tap(onChange), setValue) })), onKeyPress: when(propEq('key', 'Enter'), pipe(always(value), trim, onChange)) })) : (React.createElement(IconButton, { "data-reltio-id": "expandable-search-button", className: styles.searchButton, onClick: pipe(T, setIsOpen), size: "large" },
22
+ React.createElement(SmallIconButton, { size: "S", icon: CloseIcon, className: styles.endAdornment, onClick: pipe(F, setIsOpen, always(''), tap(onChange), setValue) })), onKeyPress: when(propEq('key', 'Enter'), pipe(always(value), trim, onChange)) })) : (React.createElement(IconButton, { "data-reltio-id": "expandable-search-button", className: classnames(styles.searchButton, classes === null || classes === void 0 ? void 0 : classes.searchButton), onClick: pipe(T, setIsOpen), size: "large" },
23
23
  React.createElement(SearchIcon, null)));
24
24
  };
@@ -0,0 +1,9 @@
1
+ const styles = {"searchButton":"ExpandableSearchInput-searchButton--Quegj","input":"ExpandableSearchInput-input--ZVai5","startAdornment":"ExpandableSearchInput-startAdornment--1qJKE","endAdornment":"ExpandableSearchInput-endAdornment--YHXxA"};
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 = `.ExpandableSearchInput-searchButton--Quegj{padding:8px}.ExpandableSearchInput-input--ZVai5{background:rgba(0,0,0,.03) 2px;flex:1 1;font-size:14px;margin-right:4px;max-width:350px;min-width:160px;padding:4px 0}.ExpandableSearchInput-startAdornment--1qJKE{color:rgba(0,0,0,.54);padding-left:8px}.ExpandableSearchInput-endAdornment--YHXxA{margin-right:4px}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1,9 @@
1
+ const styles = {"attribute":"SegmentsTable-attribute--xdeVk"};
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 = `.SegmentsTable-attribute--xdeVk{align-items:center;color:var(--mui-palette-text-primary);display:flex;font-size:13px;font-weight:400;height:100%;line-height:15px;overflow:hidden;padding:0 16px;position:relative;white-space:nowrap}.SegmentsTable-attribute--xdeVk:after{background:linear-gradient(90deg,hsla(0,0%,100%,.2),#fff);content:"";height:100%;pointer-events:none;position:absolute;right:0;top:0;width:40px}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1,13 @@
1
+ import React, { RefObject } from 'react';
2
+ import { Segment } from '@reltio/mdm-sdk';
3
+ import { Sorting } from '../types/basicTable';
4
+ type Props = {
5
+ width: number;
6
+ height: number;
7
+ segments: Segment[];
8
+ basicTableRef?: RefObject<HTMLDivElement>;
9
+ onSort: (field: string) => void;
10
+ sorting?: Sorting;
11
+ };
12
+ export declare const SegmentsTable: ({ width, height, segments, basicTableRef, onSort, sorting }: Props) => React.JSX.Element;
13
+ export {};
@@ -0,0 +1,70 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import i18n from 'ui-i18n';
3
+ import { BasicTable } from '../BasicTable';
4
+ import { getSegmentTableData } from './helpers';
5
+ import { HeadCellRenderer } from './components/HeadCellRenderer';
6
+ import { AttributeCellRenderer } from './components/AttributeCellRenderer';
7
+ import { LabelCellRenderer } from './components/LabelCellRenderer';
8
+ import { AudienceCountCellRenderer } from './components/AudienceCountCellRenderer';
9
+ import { BarCellRenderer } from './components/BarCellRenderer';
10
+ import { BarHeadCellRenderer } from './components/BarHeadCellRenderer';
11
+ import styles from './SegmentsTable.module.css';
12
+ export var SegmentsTable = function (_a) {
13
+ var width = _a.width, height = _a.height, segments = _a.segments, basicTableRef = _a.basicTableRef, onSort = _a.onSort, sorting = _a.sorting;
14
+ var containerStyle = useMemo(function () { return ({
15
+ width: width,
16
+ height: height
17
+ }); }, [width, height]);
18
+ var maxCount = useMemo(function () { return Math.max.apply(Math, segments.map(function (item) { return item.count; })); }, [segments]);
19
+ var headData = useMemo(function () { return [
20
+ {
21
+ id: 'label',
22
+ label: i18n.text('Segments'),
23
+ resizable: false,
24
+ minWidth: 130,
25
+ sortable: true,
26
+ initialWidth: width * 0.34,
27
+ headCellRenderer: HeadCellRenderer,
28
+ rowCellValueRenderer: LabelCellRenderer
29
+ },
30
+ {
31
+ id: 'refreshedOn',
32
+ label: i18n.text('Refreshed On'),
33
+ resizable: false,
34
+ minWidth: 160,
35
+ initialWidth: width * 0.18,
36
+ autoResize: false,
37
+ headCellRenderer: HeadCellRenderer,
38
+ rowCellValueRenderer: AttributeCellRenderer
39
+ },
40
+ {
41
+ id: 'audienceCount',
42
+ label: i18n.text('Audience Count'),
43
+ resizable: false,
44
+ minWidth: 130,
45
+ initialWidth: width * 0.14,
46
+ autoResize: false,
47
+ headCellRenderer: HeadCellRenderer,
48
+ rowCellValueRenderer: AudienceCountCellRenderer
49
+ },
50
+ {
51
+ id: 'audienceCountBar',
52
+ label: '',
53
+ resizable: false,
54
+ minWidth: 130,
55
+ initialWidth: width * 0.34,
56
+ maxCount: maxCount,
57
+ headCellRenderer: BarHeadCellRenderer,
58
+ rowCellValueRenderer: BarCellRenderer
59
+ }
60
+ ]; }, [width, maxCount]);
61
+ var context = useMemo(function () { return ({
62
+ maxCount: maxCount
63
+ }); }, [maxCount]);
64
+ var rowsData = useMemo(function () { return getSegmentTableData(segments); }, [segments]);
65
+ var handleSort = useCallback(function (field) {
66
+ onSort(field);
67
+ }, [onSort]);
68
+ return (React.createElement("div", { style: containerStyle, className: styles.container },
69
+ React.createElement(BasicTable, { sorting: sorting, onSort: handleSort, columnsData: headData, rowsData: rowsData, headRowHeight: 48, getRowCellHeight: null, defaultColumnWidth: 100, defaultColumnMinWidth: 100, ref: basicTableRef, context: context })));
70
+ };
@@ -0,0 +1,9 @@
1
+ const styles = {"container":"SegmentsTable-container--LfVXz"};
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 = `.SegmentsTable-container--LfVXz{display:flex;flex-direction:column}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,165 @@
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 = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["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 { render, screen } from '@testing-library/react';
50
+ import { SegmentsTable } from './SegmentsTable';
51
+ import { SavedSearchType } from '@reltio/mdm-sdk';
52
+ import userEvent from '@testing-library/user-event';
53
+ import { mockBasicTableSizing } from '../test-utils';
54
+ var mockSegments = [
55
+ {
56
+ uri: 'savedSearches/0BDCmca',
57
+ name: 'Test Segment 1',
58
+ description: '',
59
+ query: "filter=equals(entity.type%2C'configuration%2FentityTypes%2FHCO')",
60
+ type: SavedSearchType.SEGMENTATION,
61
+ isFavorite: true,
62
+ uiState: {
63
+ groups: [
64
+ {
65
+ operator: 'and',
66
+ entityType: 'configuration/entityTypes/HCO',
67
+ id: 'Qvg_2OeFm7UkX19-9C2jC'
68
+ }
69
+ ]
70
+ },
71
+ createDate: 1730795566249,
72
+ updateDate: 1730795573955,
73
+ isPublic: true,
74
+ owner: 'test.test',
75
+ count: 10000
76
+ },
77
+ {
78
+ uri: 'savedSearches/0BXFqDH',
79
+ name: 'Test Segment 2',
80
+ description: '',
81
+ query: "filter=equals(entity.type%2C'configuration%2FentityTypes%2FHCO')",
82
+ type: SavedSearchType.SEGMENTATION,
83
+ isFavorite: false,
84
+ uiState: {
85
+ groups: [
86
+ {
87
+ operator: 'and',
88
+ entityType: 'configuration/entityTypes/HCO',
89
+ id: 'SWLihLs4pRtsGpwWPXe8M'
90
+ }
91
+ ]
92
+ },
93
+ createDate: 1729868922843,
94
+ updateDate: 1729869197093,
95
+ isPublic: true,
96
+ owner: 'test.test',
97
+ count: 20000
98
+ }
99
+ ];
100
+ var defaultProps = {
101
+ width: 1920,
102
+ height: 1080,
103
+ segments: mockSegments,
104
+ onSort: jest.fn()
105
+ };
106
+ var setUp = function (props) {
107
+ if (props === void 0) { props = {}; }
108
+ var user = userEvent.setup();
109
+ return __assign({ user: user }, render(React.createElement(SegmentsTable, __assign({}, defaultProps, props))));
110
+ };
111
+ describe('SegmentsTable tests', function () {
112
+ var unmockTableSizing;
113
+ beforeAll(function () {
114
+ unmockTableSizing = mockBasicTableSizing();
115
+ });
116
+ afterAll(function () {
117
+ unmockTableSizing();
118
+ });
119
+ beforeEach(function () {
120
+ jest.clearAllMocks();
121
+ });
122
+ it('renders table with correct columns', function () {
123
+ setUp();
124
+ expect(screen.getByText('Segments')).toBeInTheDocument();
125
+ expect(screen.getByText('Refreshed On')).toBeInTheDocument();
126
+ expect(screen.getByText('Audience Count')).toBeInTheDocument();
127
+ });
128
+ it('displays segment data correctly', function () {
129
+ setUp();
130
+ expect(screen.getByText('Test Segment 1')).toBeInTheDocument();
131
+ expect(screen.getByText('Test Segment 2')).toBeInTheDocument();
132
+ expect(screen.getByText('10.0K')).toBeInTheDocument();
133
+ expect(screen.getAllByText('20.0K')).toHaveLength(2);
134
+ });
135
+ it('calls onSort when clicking sortable column header', function () { return __awaiter(void 0, void 0, void 0, function () {
136
+ var user, segmentsHeader;
137
+ return __generator(this, function (_a) {
138
+ switch (_a.label) {
139
+ case 0:
140
+ user = setUp().user;
141
+ segmentsHeader = screen.getByText('Segments');
142
+ return [4 /*yield*/, user.click(segmentsHeader)];
143
+ case 1:
144
+ _a.sent();
145
+ expect(defaultProps.onSort).toHaveBeenCalledWith('label');
146
+ return [2 /*return*/];
147
+ }
148
+ });
149
+ }); });
150
+ it('shows star icon for favorite segments', function () {
151
+ setUp();
152
+ var starIcons = document.querySelectorAll('.starIcon');
153
+ expect(starIcons[0]).toHaveClass('starIconActive');
154
+ expect(starIcons[1]).not.toHaveClass('starIconActive');
155
+ });
156
+ it('displays formatted dates in Refreshed On column', function () {
157
+ setUp();
158
+ expect(screen.getByText('11/05/2024 8:32 AM')).toBeInTheDocument();
159
+ expect(screen.getByText('10/25/2024 3:13 PM')).toBeInTheDocument();
160
+ });
161
+ it('calculates max count correctly for bar visualization', function () {
162
+ setUp();
163
+ expect(screen.getAllByText('20.0K')).toHaveLength(2);
164
+ });
165
+ });
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ value?: string;
4
+ };
5
+ export declare const AttributeCellRenderer: ({ value }: Props) => React.JSX.Element;
6
+ export {};
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { ExpandedValueTooltip } from '../../../ExpandedValueTooltip';
3
+ import styles from '../../CellRenderer.module.css';
4
+ export var AttributeCellRenderer = function (_a) {
5
+ var _b = _a.value, value = _b === void 0 ? '' : _b;
6
+ return (React.createElement(ExpandedValueTooltip, { value: value },
7
+ React.createElement("div", { className: styles.attribute }, value)));
8
+ };
@@ -0,0 +1 @@
1
+ export { AttributeCellRenderer } from './AttributeCellRenderer';
@@ -0,0 +1 @@
1
+ export { AttributeCellRenderer } from './AttributeCellRenderer';
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ value: string;
4
+ };
5
+ export declare const AudienceCountCellRenderer: ({ value }: Props) => React.JSX.Element;
6
+ export {};
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { ExpandedValueTooltip } from '../../../ExpandedValueTooltip';
3
+ import styles from './AudienceCountCellRenderer.module.css';
4
+ export var AudienceCountCellRenderer = function (_a) {
5
+ var value = _a.value;
6
+ return (React.createElement(ExpandedValueTooltip, { value: value },
7
+ React.createElement("div", { className: styles.countValue }, value)));
8
+ };
@@ -0,0 +1,9 @@
1
+ const styles = {"countValue":"AudienceCountCellRenderer-countValue--atqCe"};
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 = `.AudienceCountCellRenderer-countValue--atqCe{align-items:center;color:var(--mui-palette-text-primary);display:flex;font-size:13px;font-weight:400;height:100%;justify-content:end;line-height:15px;overflow:hidden;padding:0 16px;white-space:nowrap}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1 @@
1
+ export { AudienceCountCellRenderer } from './AudienceCountCellRenderer';
@@ -0,0 +1 @@
1
+ export { AudienceCountCellRenderer } from './AudienceCountCellRenderer';
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ value: number;
4
+ columnData: {
5
+ maxCount: number;
6
+ };
7
+ };
8
+ export declare const BarCellRenderer: ({ value, columnData }: Props) => React.JSX.Element;
9
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { ColorBar } from '../../../ColorBar';
3
+ import styles from './BarCellRenderer.module.css';
4
+ export var BarCellRenderer = function (_a) {
5
+ var value = _a.value, columnData = _a.columnData;
6
+ return (React.createElement("div", { className: styles.container },
7
+ React.createElement("div", { className: styles.colorBarContainer },
8
+ React.createElement(ColorBar, { width: value, maxWidth: columnData.maxCount }))));
9
+ };
@@ -0,0 +1,9 @@
1
+ const styles = {"container":"BarCellRenderer-container--AEzOK","colorBarContainer":"BarCellRenderer-colorBarContainer---yasX"};
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 = `.BarCellRenderer-container--AEzOK{align-items:center;display:flex;height:100%;padding:0 16px}.BarCellRenderer-colorBarContainer---yasX{height:20px;position:relative;width:100%}.BarCellRenderer-colorBarContainer---yasX>div{background-color:#0072ce;opacity:1}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1 @@
1
+ export { BarCellRenderer } from './BarCellRenderer';
@@ -0,0 +1 @@
1
+ export { BarCellRenderer } from './BarCellRenderer';
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ declare const _default: React.ComponentType<{
3
+ [x: string]: unknown;
4
+ }>;
5
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { pick } from 'ramda';
3
+ import { withTableContext } from '../../../HOCs/withTableContext';
4
+ import { formatNumberAsMetric } from '@reltio/mdm-sdk';
5
+ import styles from './BarHeadCellRenderer.module.css';
6
+ var BarHeadCellRenderer = function (_a) {
7
+ var maxCount = _a.maxCount;
8
+ return (React.createElement("div", { className: styles.container },
9
+ React.createElement("div", { className: styles.startNumber }, "0"),
10
+ React.createElement("div", { className: styles.endNumber }, formatNumberAsMetric(maxCount, 9999))));
11
+ };
12
+ export default withTableContext(pick(['maxCount']))(BarHeadCellRenderer);
@@ -0,0 +1,9 @@
1
+ const styles = {"container":"BarHeadCellRenderer-container---WESc","startNumber":"BarHeadCellRenderer-startNumber--i2DZ-","endNumber":"BarHeadCellRenderer-endNumber--RRTTn"};
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 = `.BarHeadCellRenderer-container---WESc{align-items:flex-end;box-sizing:border-box;color:var(--mui-palette-text-secondary);display:flex;font-size:12px;height:100%;justify-content:space-between;padding:0 16px 6px;position:relative}.BarHeadCellRenderer-startNumber--i2DZ-:after{left:16px}.BarHeadCellRenderer-endNumber--RRTTn:after,.BarHeadCellRenderer-startNumber--i2DZ-:after{background-color:rgba(0,0,0,.5);bottom:0;content:"";height:4px;position:absolute;width:1px}.BarHeadCellRenderer-endNumber--RRTTn:after{right:16px}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1 @@
1
+ export { default as BarHeadCellRenderer } from './BarHeadCellRenderer';
@@ -0,0 +1 @@
1
+ export { default as BarHeadCellRenderer } from './BarHeadCellRenderer';
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ type HeadCellRendererProps = {
3
+ className?: string;
4
+ headCellData: {
5
+ label: string;
6
+ };
7
+ };
8
+ export declare const HeadCellRenderer: ({ className, headCellData, ...otherProps }: HeadCellRendererProps) => React.JSX.Element;
9
+ export {};
@@ -0,0 +1,33 @@
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 __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import React from 'react';
24
+ import classnames from 'classnames';
25
+ import DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';
26
+ import { ExpandedValueTooltip } from '../../../ExpandedValueTooltip';
27
+ import styles from './HeadCellRenderer.module.css';
28
+ export var HeadCellRenderer = function (_a) {
29
+ var className = _a.className, headCellData = _a.headCellData, otherProps = __rest(_a, ["className", "headCellData"]);
30
+ return (React.createElement("div", { className: classnames(styles.headCell, className) },
31
+ React.createElement(DefaultHeadCellRenderer, __assign({}, otherProps, { headCellData: __assign(__assign({}, headCellData), { label: (React.createElement(ExpandedValueTooltip, { value: headCellData.label },
32
+ React.createElement("div", { className: styles.headLabel }, headCellData.label))) }) }))));
33
+ };
@@ -0,0 +1,9 @@
1
+ const styles = {"headCell":"HeadCellRenderer-headCell--8wzZ7","headLabel":"HeadCellRenderer-headLabel--egn2j"};
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 = `.HeadCellRenderer-headCell--8wzZ7{align-items:center;display:flex;height:100%}.HeadCellRenderer-headCell--8wzZ7>div{padding:0 16px 0 22px;width:100%}.HeadCellRenderer-headCell--8wzZ7>div>span{justify-content:flex-end;width:100%}.HeadCellRenderer-headLabel--egn2j{color:var(--mui-palette-text-primary);font-size:12px;font-weight:500;line-height:16px;overflow:hidden;white-space:nowrap}.HeadCellRenderer-headLabel--egn2j:after{background:linear-gradient(90deg,hsla(0,0%,100%,.2),#fff);content:"";height:100%;pointer-events:none;position:absolute;right:0;top:0;width:40px}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1 @@
1
+ export { HeadCellRenderer } from './HeadCellRenderer';
@@ -0,0 +1 @@
1
+ export { HeadCellRenderer } from './HeadCellRenderer';
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ value?: string;
4
+ rowValue: {
5
+ isFavorite: boolean;
6
+ };
7
+ };
8
+ export declare const LabelCellRenderer: ({ value, rowValue }: Props) => React.JSX.Element;
9
+ export {};
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import classnames from 'classnames';
3
+ import { ExpandedValueTooltip } from '../../../ExpandedValueTooltip';
4
+ import StarOutlinedIcon from '@mui/icons-material/StarOutlined';
5
+ import commonStyles from '../../CellRenderer.module.css';
6
+ import styles from './LabelCellRenderer.module.css';
7
+ export var LabelCellRenderer = function (_a) {
8
+ var _b;
9
+ var _c = _a.value, value = _c === void 0 ? '' : _c, rowValue = _a.rowValue;
10
+ return (React.createElement("div", { className: styles.container },
11
+ React.createElement(StarOutlinedIcon, { className: classnames(styles.starIcon, (_b = {}, _b[styles.starIconActive] = rowValue === null || rowValue === void 0 ? void 0 : rowValue.isFavorite, _b)) }),
12
+ React.createElement(ExpandedValueTooltip, { value: value },
13
+ React.createElement("div", { className: classnames(commonStyles.attribute, styles.labelAttribute) }, value))));
14
+ };
@@ -0,0 +1,9 @@
1
+ const styles = {"labelAttribute":"LabelCellRenderer-labelAttribute--RscXR","container":"LabelCellRenderer-container--R-d2B","starIcon":"LabelCellRenderer-starIcon--5J-BT","starIconActive":"LabelCellRenderer-starIconActive--Ryp7D"};
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 = `.LabelCellRenderer-labelAttribute--RscXR{padding:0;width:100%}.LabelCellRenderer-container--R-d2B{align-items:center;display:flex;gap:8px;height:100%;padding:0 16px}.LabelCellRenderer-starIcon--5J-BT{color:#f5a623;opacity:0}.LabelCellRenderer-starIconActive--Ryp7D{opacity:1}`;
7
+ head.appendChild(style);
8
+ }
9
+ export default styles;
@@ -0,0 +1 @@
1
+ export { LabelCellRenderer } from './LabelCellRenderer';
@@ -0,0 +1 @@
1
+ export { LabelCellRenderer } from './LabelCellRenderer';
@@ -0,0 +1,3 @@
1
+ import { Segment } from '@reltio/mdm-sdk';
2
+ import { ColumnData } from '../types/basicTable';
3
+ export declare const getSegmentTableData: (segments: Segment[]) => ColumnData[];
@@ -0,0 +1,16 @@
1
+ import { formatNumberAsMetric } from '@reltio/mdm-sdk';
2
+ import moment from 'moment';
3
+ export var getSegmentTableData = function (segments) {
4
+ return segments.map(function (segment) {
5
+ var _a;
6
+ return ({
7
+ type: 'segment',
8
+ id: segment.uri,
9
+ label: segment.name,
10
+ isFavorite: segment.isFavorite,
11
+ refreshedOn: moment((_a = segment.updateDate) !== null && _a !== void 0 ? _a : segment.createDate).format('L LT'),
12
+ audienceCount: formatNumberAsMetric(segment.count, 9999),
13
+ audienceCountBar: segment.count
14
+ });
15
+ });
16
+ };
@@ -0,0 +1 @@
1
+ export { SegmentsTable } from './SegmentsTable';
@@ -0,0 +1 @@
1
+ export { SegmentsTable } from './SegmentsTable';