@reltio/components 1.4.1731 → 1.4.1733

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 (43) hide show
  1. package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +7 -3
  2. package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +34 -19
  3. package/cjs/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js +7 -5
  4. package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +3 -2
  5. package/cjs/components/AttributesFiltersBuilder/components/ValuesEditor/ValuesEditor.js +5 -3
  6. package/cjs/components/AttributesFiltersBuilder/components/ValuesEditor/styles.js +1 -1
  7. package/cjs/components/AttributesFiltersBuilder/helpers.d.ts +5 -4
  8. package/cjs/components/AttributesFiltersBuilder/helpers.js +33 -19
  9. package/cjs/components/AttributesFiltersBuilder/types.d.ts +3 -2
  10. package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +10 -3
  11. package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.js +10 -6
  12. package/cjs/components/BasicAttributeSelector/styles.js +1 -0
  13. package/cjs/components/LogicOperator/LogicOperator.d.ts +9 -0
  14. package/cjs/components/LogicOperator/LogicOperator.js +29 -0
  15. package/cjs/components/LogicOperator/styles.d.ts +2 -0
  16. package/cjs/components/LogicOperator/styles.js +15 -0
  17. package/cjs/components/ReltioGridLayout/ReltioGridLayout.d.ts +3 -6
  18. package/cjs/components/ReltioGridLayout/ReltioGridLayout.js +19 -1
  19. package/cjs/components/index.d.ts +1 -0
  20. package/cjs/components/index.js +3 -1
  21. package/cjs/types/index.d.ts +16 -13
  22. package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +7 -3
  23. package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +36 -21
  24. package/esm/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js +9 -7
  25. package/esm/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +3 -2
  26. package/esm/components/AttributesFiltersBuilder/components/ValuesEditor/ValuesEditor.js +5 -3
  27. package/esm/components/AttributesFiltersBuilder/components/ValuesEditor/styles.js +1 -1
  28. package/esm/components/AttributesFiltersBuilder/helpers.d.ts +5 -4
  29. package/esm/components/AttributesFiltersBuilder/helpers.js +34 -20
  30. package/esm/components/AttributesFiltersBuilder/types.d.ts +3 -2
  31. package/esm/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +10 -3
  32. package/esm/components/AttributesFiltersButton/AttributesFiltersButton.js +10 -6
  33. package/esm/components/BasicAttributeSelector/styles.js +1 -0
  34. package/esm/components/LogicOperator/LogicOperator.d.ts +9 -0
  35. package/esm/components/LogicOperator/LogicOperator.js +24 -0
  36. package/esm/components/LogicOperator/styles.d.ts +2 -0
  37. package/esm/components/LogicOperator/styles.js +13 -0
  38. package/esm/components/ReltioGridLayout/ReltioGridLayout.d.ts +3 -6
  39. package/esm/components/ReltioGridLayout/ReltioGridLayout.js +21 -3
  40. package/esm/components/index.d.ts +1 -0
  41. package/esm/components/index.js +1 -0
  42. package/esm/types/index.d.ts +16 -13
  43. package/package.json +2 -2
@@ -1,17 +1,7 @@
1
1
  import React from 'react';
2
- import { AttributeType, SearchFilter } from '@reltio/mdm-sdk';
3
- export type ReactGridLayoutItem = {
4
- i: string;
5
- x: number;
6
- y: number;
7
- w: number;
8
- h: number;
9
- minW?: number;
10
- minH?: number;
11
- maxW?: number;
12
- maxH?: number;
13
- static?: boolean;
14
- };
2
+ import { AttributeType, SearchFilter, SearchOperator } from '@reltio/mdm-sdk';
3
+ import { Layout as LayoutItem } from 'react-grid-layout';
4
+ export type ReactGridLayoutItem = LayoutItem;
15
5
  export type ReltioGridLayoutOptions = {
16
6
  cols: number;
17
7
  rowHeight: number;
@@ -46,6 +36,7 @@ export type FiltersRowData = {
46
36
  filter: string;
47
37
  id: number;
48
38
  values: SearchFilter['values'];
39
+ operator?: SearchOperator;
49
40
  };
50
41
  export type AttributeSelectorItem = {
51
42
  attrType?: AttributeType;
@@ -62,6 +53,11 @@ export type AttributeSelectorItemsGroup = {
62
53
  title: string;
63
54
  attributes: AttributeSelectorItem[];
64
55
  };
56
+ export type AttributesTypesGroup = {
57
+ id?: string;
58
+ title: string;
59
+ attributeTypes: AttributeType[];
60
+ };
65
61
  export type AttributeSelectionInfo = {
66
62
  index: number;
67
63
  checked: boolean;
@@ -137,3 +133,10 @@ export type AnyAction = {
137
133
  type: string;
138
134
  [key: string]: any;
139
135
  };
136
+ export type AttributesFilterComponentsClasses = {
137
+ attributeSelectorContainer?: string;
138
+ valuesEditorContainer?: string;
139
+ filterSelectorContainer?: string;
140
+ actionsContainer?: string;
141
+ filterPopup?: string;
142
+ };
@@ -1,13 +1,17 @@
1
1
  import React from 'react';
2
- import { SearchFilter, AttributeType } from '@reltio/mdm-sdk';
2
+ import { SearchFilter } from '@reltio/mdm-sdk';
3
+ import { AttributeSelectionInfo, AttributesFilterComponentsClasses, AttributesTypesGroup } from '../../types';
3
4
  type Props = {
5
+ classes?: AttributesFilterComponentsClasses;
4
6
  filters: SearchFilter[];
5
7
  onChange: (filters: SearchFilter[]) => void;
6
- attributeTypes: AttributeType[];
8
+ attributesTypesGroups: AttributesTypesGroup[];
7
9
  components?: {
8
10
  ValuesEditor?: React.ElementType;
9
11
  FilterSelector?: React.ElementType;
12
+ LogicalOperator?: React.ElementType;
10
13
  };
14
+ onFilterAttributeChange?: (attrSelectInfo: AttributeSelectionInfo) => void;
11
15
  };
12
- declare const _default: React.MemoExoticComponent<({ attributeTypes, filters, onChange, components }: Props) => JSX.Element>;
16
+ declare const _default: React.MemoExoticComponent<({ classes, attributesTypesGroups, filters, onChange, components, onFilterAttributeChange }: Props) => JSX.Element>;
13
17
  export default _default;
@@ -1,3 +1,14 @@
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
+ };
1
12
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
13
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
14
  if (ar || !(i in from)) {
@@ -9,35 +20,43 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
20
  };
10
21
  import React, { useCallback, useRef, useMemo, useEffect, memo } from 'react';
11
22
  import { always, evolve } from 'ramda';
12
- import { getEntityType } from '@reltio/mdm-sdk';
13
- import { getAttributeSelectorItems, getRowsDataFromFilters, getEntityTypeFromAttrTypes } from './helpers';
23
+ import { SearchOperator, findClosestCommonAncestor, getEntityType } from '@reltio/mdm-sdk';
24
+ import { getAttributeSelectorItems, getEntityTypeFromAttrTypes, getRowsDataFromFilters } from './helpers';
14
25
  import FilterSelector from './components/FilterSelector/FilterSelector';
15
26
  import RowActions from './components/RowActions/RowActions';
16
27
  import QueryBuilderRowsGroup from '../QueryBuilderRowsGroup/QueryBuilderRowsGroup';
28
+ import { useMdmMetadata } from '../../contexts';
29
+ import { EmptyStub } from '../../core';
17
30
  import AttributeSelector from './components/AttributeSelector/AttributeSelector';
18
31
  import ValuesEditor from './components/ValuesEditor/ValuesEditor';
19
- import { useMdmMetadata } from '../../contexts';
20
32
  import { useStyles } from './styles';
21
- var EMPTY_FILTER = { fieldName: null, filter: null, values: [] };
22
- var Stub = function () { return null; };
33
+ var EMPTY_FILTER = { fieldName: null, filter: null, operator: SearchOperator.and, values: [] };
23
34
  var AttributesFiltersBuilder = function (_a) {
24
- var attributeTypes = _a.attributeTypes, filters = _a.filters, onChange = _a.onChange, _b = _a.components, components = _b === void 0 ? {} : _b;
25
- var CustomValuesEditor = components.ValuesEditor, CustomFilterSelector = components.FilterSelector;
26
- var _c = useStyles(), attrSelector = _c.attrSelector, filterSelector = _c.filterSelector, actionContainer = _c.actionContainer;
35
+ var _b = _a.classes, classes = _b === void 0 ? {} : _b, attributesTypesGroups = _a.attributesTypesGroups, filters = _a.filters, onChange = _a.onChange, _c = _a.components, components = _c === void 0 ? {} : _c, onFilterAttributeChange = _a.onFilterAttributeChange;
36
+ var CustomValuesEditor = components.ValuesEditor, CustomFilterSelector = components.FilterSelector, _d = components.LogicalOperator, LogicalOperator = _d === void 0 ? EmptyStub : _d;
37
+ var styles = useStyles();
27
38
  var actualFilters = useRef(filters);
28
39
  var attributeFilterRef = useRef(null);
29
40
  var lastAttributesCountRef = useRef(null);
30
41
  var attributesCountRef = useRef(null);
31
42
  var metadata = useMdmMetadata();
32
- var entityType = getEntityType(metadata, getEntityTypeFromAttrTypes(attributeTypes));
33
43
  actualFilters.current = filters;
34
44
  var rowClasses = useMemo(function () { return ({
35
- attributeSelectorContainer: attrSelector,
36
- filterSelectorContainer: filterSelector,
37
- actionsContainer: actionContainer
38
- }); }, [attrSelector, filterSelector, actionContainer]);
39
- var attributeSelectorItems = useMemo(function () { return getAttributeSelectorItems(attributeTypes, entityType, metadata); }, [attributeTypes, metadata, entityType]);
40
- var rowsData = useMemo(function () { return (filters.length ? getRowsDataFromFilters(filters, attributeSelectorItems) : []); }, [attributeSelectorItems, filters]);
45
+ attributeSelectorContainer: classes.attributeSelectorContainer || styles.attrSelector,
46
+ valuesEditorContainer: classes.valuesEditorContainer || '',
47
+ filterSelectorContainer: styles.filterSelector,
48
+ actionsContainer: styles.actionContainer
49
+ }); }, [classes, styles]);
50
+ var currentEntityType = useMemo(function () {
51
+ var entityTypesUris = attributesTypesGroups.map(function (_a) {
52
+ var attributeTypes = _a.attributeTypes;
53
+ return getEntityTypeFromAttrTypes(attributeTypes);
54
+ });
55
+ var closestEntityTypeAncestorUri = findClosestCommonAncestor(metadata, entityTypesUris);
56
+ return getEntityType(metadata, closestEntityTypeAncestorUri);
57
+ }, [attributesTypesGroups, metadata]);
58
+ var attributeSelectorItemsGroups = useMemo(function () { return getAttributeSelectorItems(attributesTypesGroups, metadata); }, [attributesTypesGroups, metadata]);
59
+ var rowsData = useMemo(function () { return (filters.length ? getRowsDataFromFilters(filters, attributeSelectorItemsGroups) : []); }, [attributeSelectorItemsGroups, filters]);
41
60
  attributesCountRef.current = rowsData.length;
42
61
  useEffect(function () {
43
62
  if (attributeFilterRef.current && lastAttributesCountRef.current !== attributesCountRef.current) {
@@ -63,11 +82,7 @@ var AttributesFiltersBuilder = function (_a) {
63
82
  }, [onChange]);
64
83
  var duplicateRow = useCallback(function (index) {
65
84
  var newFilters = __spreadArray([], actualFilters.current, true);
66
- newFilters.splice(index + 1, 0, {
67
- fieldName: actualFilters.current[index].fieldName,
68
- filter: actualFilters.current[index].filter,
69
- values: actualFilters.current[index].values
70
- });
85
+ newFilters.splice(index + 1, 0, __assign({}, actualFilters.current[index]));
71
86
  onChange(newFilters);
72
87
  }, [onChange]);
73
88
  var changeFilter = useCallback(function (newFilter, id) {
@@ -80,6 +95,6 @@ var AttributesFiltersBuilder = function (_a) {
80
95
  var addNewFilter = useCallback(function (newFilter) {
81
96
  onChange(__spreadArray(__spreadArray([], actualFilters.current, true), [newFilter], false));
82
97
  }, [onChange]);
83
- return (React.createElement(QueryBuilderRowsGroup, { rowClasses: rowClasses, rowsData: rowsData, AttributeSelectorComponent: AttributeSelector, FilterSelectorComponent: CustomFilterSelector || FilterSelector, ValuesEditorComponent: CustomValuesEditor || ValuesEditor, ActionsComponent: RowActions, LogicOperatorComponent: Stub, filterSelectorRefIndex: lastAttributesCountRef.current, filterSelectorRef: attributeFilterRef, lastRowAttributeSelectorProps: lastRowAttributeSelectorProps, attributesGroup: attributeSelectorItems, changeFilter: changeFilter, addNewFilter: addNewFilter, addRowAfterIndex: addRowAfterIndex, removeRow: removeRow, duplicateRow: duplicateRow, entityType: entityType }));
98
+ return (React.createElement(QueryBuilderRowsGroup, { rowClasses: rowClasses, rowsData: rowsData, AttributeSelectorComponent: AttributeSelector, FilterSelectorComponent: CustomFilterSelector || FilterSelector, ValuesEditorComponent: CustomValuesEditor || ValuesEditor, ActionsComponent: RowActions, LogicOperatorComponent: LogicalOperator, filterSelectorRefIndex: lastAttributesCountRef.current, filterSelectorRef: attributeFilterRef, lastRowAttributeSelectorProps: lastRowAttributeSelectorProps, attributeSelectorItemsGroups: attributeSelectorItemsGroups, entityType: currentEntityType, changeFilter: changeFilter, addNewFilter: addNewFilter, addRowAfterIndex: addRowAfterIndex, removeRow: removeRow, duplicateRow: duplicateRow, onFilterAttributeChange: onFilterAttributeChange }));
84
99
  };
85
100
  export default memo(AttributesFiltersBuilder);
@@ -1,17 +1,17 @@
1
- import React, { useCallback, useMemo, memo } from 'react';
2
- import { getSearchGroupAttributeLabel } from '@reltio/mdm-sdk';
1
+ import React, { useCallback, memo } from 'react';
2
+ import { SearchOperator, getSearchGroupAttributeLabel } from '@reltio/mdm-sdk';
3
3
  import BasicAttributeSelector from '../../../BasicAttributeSelector/BasicAttributeSelector';
4
4
  var AttributeSelector = function (_a) {
5
5
  var rowData = _a.rowData, rowContext = _a.rowContext, attributeSelectorProps = _a.attributeSelectorProps;
6
- var _b = rowData || {}, attribute = _b.attribute, id = _b.id, filter = _b.filter;
7
- var changeFilter = rowContext.changeFilter, addNewFilter = rowContext.addNewFilter, attributesGroup = rowContext.attributesGroup;
6
+ var _b = rowData || {}, attribute = _b.attribute, id = _b.id, filter = _b.filter, operator = _b.operator;
7
+ var changeFilter = rowContext.changeFilter, addNewFilter = rowContext.addNewFilter, attributeSelectorItemsGroups = rowContext.attributeSelectorItemsGroups, onFilterAttributeChange = rowContext.onFilterAttributeChange;
8
8
  var getSelectedAttributeLabel = useCallback(function (data) { return getSearchGroupAttributeLabel({ data: data }); }, []);
9
- var itemsGroup = useMemo(function () { return [{ id: '', title: '', attributes: attributesGroup }]; }, [attributesGroup]);
10
9
  var changeAttribute = useCallback(function (selectInfo) {
11
10
  if (rowData) {
12
11
  var newFilter = {
13
12
  fieldName: selectInfo.attribute.fieldName,
14
13
  filter: filter,
14
+ operator: operator,
15
15
  values: []
16
16
  };
17
17
  changeFilter(newFilter, id);
@@ -20,10 +20,12 @@ var AttributeSelector = function (_a) {
20
20
  addNewFilter({
21
21
  fieldName: selectInfo.attribute.fieldName,
22
22
  filter: null,
23
+ operator: SearchOperator.and,
23
24
  values: []
24
25
  });
25
26
  }
26
- }, [addNewFilter, changeFilter, id, rowData, filter]);
27
- return (React.createElement(BasicAttributeSelector, { itemsGroups: itemsGroup, ungroup: true, single: true, value: attribute, getLabel: getSelectedAttributeLabel, onSelect: changeAttribute, onOpenPopup: attributeSelectorProps.onOpen }));
27
+ onFilterAttributeChange && onFilterAttributeChange(selectInfo);
28
+ }, [rowData, onFilterAttributeChange, filter, operator, changeFilter, id, addNewFilter]);
29
+ return (React.createElement(BasicAttributeSelector, { itemsGroups: attributeSelectorItemsGroups, ungroup: attributeSelectorItemsGroups.length < 2, single: true, value: attribute, getLabel: getSelectedAttributeLabel, onSelect: changeAttribute, onOpenPopup: attributeSelectorProps.onOpen }));
28
30
  };
29
31
  export default memo(AttributeSelector);
@@ -10,7 +10,7 @@ var FilterSelector = function (_a) {
10
10
  var _b;
11
11
  var rowData = _a.rowData, rowContext = _a.rowContext, textFieldInputRef = _a.textFieldInputRef, optionsProp = _a.options;
12
12
  var styles = useStyles();
13
- var _c = rowData || {}, _d = _c.attribute, _e = _d === void 0 ? {} : _d, _f = _e.attrType, attrType = _f === void 0 ? {} : _f, _g = _e.fieldName, fieldName = _g === void 0 ? null : _g, filter = _c.filter, id = _c.id;
13
+ var _c = rowData || {}, _d = _c.attribute, _e = _d === void 0 ? {} : _d, _f = _e.attrType, attrType = _f === void 0 ? {} : _f, _g = _e.fieldName, fieldName = _g === void 0 ? null : _g, filter = _c.filter, id = _c.id, operator = _c.operator;
14
14
  var changeFilter = rowContext.changeFilter;
15
15
  var options = optionsProp ||
16
16
  (attrType &&
@@ -20,10 +20,11 @@ var FilterSelector = function (_a) {
20
20
  var newFilter = {
21
21
  fieldName: fieldName,
22
22
  filter: filterOption.value,
23
+ operator: operator,
23
24
  values: []
24
25
  };
25
26
  changeFilter(newFilter, id);
26
- }, [changeFilter, id, fieldName]);
27
+ }, [fieldName, operator, changeFilter, id]);
27
28
  useEffect(function () {
28
29
  if ((fieldName && !filter) || (fieldName && !findValue(options, filter))) {
29
30
  onChangeFilter(options[0]);
@@ -7,14 +7,15 @@ var ValuesEditor = function (_a) {
7
7
  var styles = useStyles();
8
8
  var canFilterAcceptValues = (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && checkIfOptionHasValues(rowData.filter);
9
9
  var changeFilter = rowContext.changeFilter;
10
- var _b = (rowData || {}), _c = _b.values, values = _c === void 0 ? [] : _c, _d = _b.attribute, _e = _d === void 0 ? {} : _d, attrType = _e.attrType, _f = _e.fieldName, fieldName = _f === void 0 ? null : _f, filter = _b.filter, id = _b.id;
10
+ var _b = (rowData || {}), _c = _b.values, values = _c === void 0 ? [] : _c, _d = _b.attribute, _e = _d === void 0 ? {} : _d, attrType = _e.attrType, _f = _e.fieldName, fieldName = _f === void 0 ? null : _f, filter = _b.filter, id = _b.id, operator = _b.operator;
11
11
  var valueDataTypeDefinition = attrType && getAttrDataTypeDefinition(attrType);
12
12
  var filterValueDataTypeDefinition = valueDataTypeDefinition && getDataTypeDefinitionForFilterValue(valueDataTypeDefinition, filter);
13
13
  var editorFilter = useMemo(function () { return ({
14
14
  filter: filter,
15
15
  fieldName: fieldName,
16
+ operator: operator,
16
17
  values: values || []
17
- }); }, [filter, fieldName, values]);
18
+ }); }, [filter, fieldName, operator, values]);
18
19
  var TextFieldProps = useMemo(function () { return ({
19
20
  InputProps: {
20
21
  classes: {
@@ -27,10 +28,11 @@ var ValuesEditor = function (_a) {
27
28
  var newFilter = {
28
29
  fieldName: fieldName,
29
30
  filter: filter,
31
+ operator: operator,
30
32
  values: newValues
31
33
  };
32
34
  changeFilter(newFilter, id);
33
- }, [changeFilter, id, fieldName, filter]);
35
+ }, [fieldName, filter, operator, changeFilter, id]);
34
36
  return (React.createElement("div", { className: styles.valuesEditor }, (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && canFilterAcceptValues && (React.createElement(FilterValueEditor, { "data-reltio-id": "filter-value-editor", filter: editorFilter, onChange: changeValue, dataTypeDefinition: filterValueDataTypeDefinition, fullWidth: true, TextFieldProps: TextFieldProps, color: "primary", classes: editorClasses, orientation: "horizontal" }))));
35
37
  };
36
38
  export default memo(ValuesEditor);
@@ -17,7 +17,7 @@ export var useStyles = makeStyles({
17
17
  valuesEditor: {
18
18
  display: 'flex',
19
19
  alignItems: 'center',
20
- width: '222px!important',
20
+ width: '100%',
21
21
  minHeight: '40px',
22
22
  flexShrink: 0
23
23
  }
@@ -1,11 +1,12 @@
1
- import { AttributeType, TEntityType, Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
- import { AttributeSelectorItem } from '../../types';
1
+ import { AttributeType, Metadata, SearchFilter } from '@reltio/mdm-sdk';
2
+ import { AttributeSelectorItem, AttributeSelectorItemsGroup, AttributesTypesGroup } from '../../types';
3
3
  import { FilterOption } from './types';
4
- export declare const getAttributeSelectorItems: (attributeTypes: AttributeType[], entityType: TEntityType, metadata: Metadata) => AttributeSelectorItem[];
4
+ export declare const getAttributeSelectorItems: (attributesTypesGroups: AttributesTypesGroup[], metadata: Metadata) => AttributeSelectorItemsGroup[];
5
5
  export declare const findValue: (options: FilterOption[], filter: string) => FilterOption;
6
- export declare const getRowsDataFromFilters: (filters: SearchFilter[], attributesGroup: AttributeSelectorItem[]) => {
6
+ export declare const getRowsDataFromFilters: (filters: SearchFilter[], attributesGroupArr: AttributeSelectorItemsGroup[]) => {
7
7
  attribute: AttributeSelectorItem;
8
8
  filter: string;
9
+ operator: import("@reltio/mdm-sdk").SearchOperator;
9
10
  id: number;
10
11
  values: (import("@reltio/mdm-sdk").PrimitiveValue | Pick<import("@reltio/mdm-sdk").SimpleAttributeValue, "value" | "lookupCode">)[] | [(import("@reltio/mdm-sdk").PrimitiveValue | Pick<import("@reltio/mdm-sdk").SimpleAttributeValue, "value" | "lookupCode">)[]];
11
12
  }[];
@@ -18,7 +18,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
18
  }
19
19
  return to.concat(ar || Array.prototype.slice.call(from));
20
20
  };
21
- import { getAttributesTreeFromAttributes, attributeUriToSearchUri, isSpecialAttribute, getBaseUri, getEntityTypeLabel } from '@reltio/mdm-sdk';
21
+ import { getAttributesTreeFromAttributes, attributeUriToSearchUri, isSpecialAttribute, getBaseUri, getEntityTypeLabel, getEntityType, findRegularAttribute } from '@reltio/mdm-sdk';
22
22
  import { chain, prop } from 'ramda';
23
23
  var createAttributeItem = function (metadata, attrType, entityTypeUri, parents) {
24
24
  var entityTypeLabel = getEntityTypeLabel(metadata, { type: entityTypeUri });
@@ -48,44 +48,58 @@ var createAttributesConfig = function (metadata, attrNode, entityTypeUri, parent
48
48
  }
49
49
  return resConfig;
50
50
  };
51
- export var getAttributeSelectorItems = function (attributeTypes, entityType, metadata) {
52
- if (entityType === void 0) { entityType = {}; }
53
- return getAttributesTreeFromAttributes(attributeTypes, metadata).map(function (attrNode) {
54
- var entityTypeUri = isSpecialAttribute(attrNode) ? null : entityType.uri;
55
- return createAttributesConfig(metadata, attrNode, entityTypeUri);
51
+ export var getAttributeSelectorItems = function (attributesTypesGroups, metadata) {
52
+ return attributesTypesGroups.map(function (_a) {
53
+ var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
54
+ var entityType = getEntityType(metadata, getEntityTypeFromAttrTypes(attributeTypes));
55
+ return {
56
+ id: id,
57
+ title: title,
58
+ attributes: getAttributesTreeFromAttributes(attributeTypes, metadata).map(function (attrNode) {
59
+ var entityTypeUri = isSpecialAttribute(attrNode) ? null : entityType.uri;
60
+ return createAttributesConfig(metadata, attrNode, entityTypeUri);
61
+ })
62
+ };
56
63
  });
57
64
  };
58
65
  var findAttributeSelectorItem = function (fieldName, attributesGroup) {
59
66
  var attrGroup;
60
- var findAttribute = function (fieldName, attributesGroup) {
61
- for (var _i = 0, attributesGroup_1 = attributesGroup; _i < attributesGroup_1.length; _i++) {
62
- var attributeGroup = attributesGroup_1[_i];
63
- if (fieldName === attributeGroup.fieldName) {
64
- attrGroup = attributeGroup;
65
- return;
66
- }
67
- if ('children' in attributeGroup) {
68
- findAttribute(fieldName, attributeGroup.children);
67
+ var _loop_1 = function (attributesGroupItem) {
68
+ var findAttribute = function (fieldName, attributesSelectorItems) {
69
+ for (var _i = 0, attributesSelectorItems_1 = attributesSelectorItems; _i < attributesSelectorItems_1.length; _i++) {
70
+ var attributeGroup = attributesSelectorItems_1[_i];
71
+ if (fieldName === attributeGroup.fieldName) {
72
+ attrGroup = attributeGroup;
73
+ return;
74
+ }
75
+ if ('children' in attributeGroup) {
76
+ findAttribute(fieldName, attributeGroup.children);
77
+ }
69
78
  }
70
- }
79
+ };
80
+ findAttribute(fieldName, attributesGroupItem.attributes);
71
81
  };
72
- findAttribute(fieldName, attributesGroup);
82
+ for (var _i = 0, attributesGroup_1 = attributesGroup; _i < attributesGroup_1.length; _i++) {
83
+ var attributesGroupItem = attributesGroup_1[_i];
84
+ _loop_1(attributesGroupItem);
85
+ }
73
86
  return attrGroup;
74
87
  };
75
88
  export var findValue = function (options, filter) {
76
89
  return options ? options.find(function (option) { return option.value === filter; }) : null;
77
90
  };
78
- export var getRowsDataFromFilters = function (filters, attributesGroup) {
91
+ export var getRowsDataFromFilters = function (filters, attributesGroupArr) {
79
92
  return filters.map(function (filter, index) {
80
93
  return {
81
- attribute: filter.fieldName ? findAttributeSelectorItem(filter.fieldName, attributesGroup) : undefined,
94
+ attribute: filter.fieldName ? findAttributeSelectorItem(filter.fieldName, attributesGroupArr) : undefined,
82
95
  filter: filter.filter,
96
+ operator: filter.operator,
83
97
  id: index,
84
98
  values: filter.values
85
99
  };
86
100
  });
87
101
  };
88
102
  export var getEntityTypeFromAttrTypes = function (attributeTypes) {
89
- var regularAttribute = attributeTypes.find(function (attribute) { return !isSpecialAttribute(attribute); });
103
+ var regularAttribute = findRegularAttribute(attributeTypes);
90
104
  return regularAttribute ? getBaseUri(regularAttribute.uri) : null;
91
105
  };
@@ -1,17 +1,18 @@
1
1
  import { SearchFilter, TEntityType } from '@reltio/mdm-sdk';
2
- import { AttributeSelectorItem, FiltersRowData } from '../../types';
2
+ import { AttributeSelectionInfo, AttributeSelectorItemsGroup, FiltersRowData } from '../../types';
3
3
  export type FilterOption = {
4
4
  value: string;
5
5
  label: string;
6
6
  };
7
7
  export type RowContext = {
8
- attributesGroup: AttributeSelectorItem[];
8
+ attributeSelectorItemsGroups: AttributeSelectorItemsGroup[];
9
9
  entityType: TEntityType;
10
10
  addNewFilter: (newFilter: SearchFilter) => void;
11
11
  addRowAfterIndex: (index: number) => void;
12
12
  changeFilter: (newFilter: SearchFilter, id: number) => void;
13
13
  duplicateRow: (index: number) => void;
14
14
  removeRow: (index: number) => void;
15
+ onFilterAttributeChange?: (attrSelectInfo: AttributeSelectionInfo) => void;
15
16
  };
16
17
  export type AttributeFiltersComponentProps = {
17
18
  rowData: FiltersRowData;
@@ -1,17 +1,24 @@
1
1
  import React from 'react';
2
- import { SearchFilter, AttributeType } from '@reltio/mdm-sdk';
2
+ import { SearchFilter } from '@reltio/mdm-sdk';
3
+ import { AttributeSelectionInfo, AttributesFilterComponentsClasses, AttributesTypesGroup } from '../../types';
3
4
  type Props = {
5
+ classes?: AttributesFilterComponentsClasses;
4
6
  filters: SearchFilter[];
5
7
  onChange: (filters: SearchFilter[]) => void;
6
- attributeTypes: AttributeType[];
8
+ attributesTypesGroups: AttributesTypesGroup[];
7
9
  components?: {
8
10
  ValuesEditor?: React.ElementType;
9
11
  FilterSelector?: React.ElementType;
12
+ LogicalOperator?: React.ElementType;
10
13
  };
11
14
  children?: React.ReactNode;
12
15
  onTogglePopup?: (open: boolean) => void;
13
16
  isFiltersApplied?: boolean;
14
17
  dataReltioId?: string;
18
+ onFilterAttributeChange?: (attrSelectInfo: AttributeSelectionInfo) => void;
19
+ onClear?: () => void;
20
+ onCancel?: () => void;
21
+ onApply?: () => void;
15
22
  };
16
- declare const _default: React.MemoExoticComponent<({ filters: filtersProp, attributeTypes, onChange, components, children, onTogglePopup, isFiltersApplied: isFiltersAppliedProp, dataReltioId }: Props) => JSX.Element>;
23
+ declare const _default: React.MemoExoticComponent<({ filters: filtersProp, classes, attributesTypesGroups, onChange, components, children, onTogglePopup, isFiltersApplied: isFiltersAppliedProp, dataReltioId, onFilterAttributeChange, onCancel, onClear, onApply }: Props) => JSX.Element>;
17
24
  export default _default;
@@ -5,12 +5,13 @@ import Button from '@mui/material/Button';
5
5
  import FilterIcon from '@mui/icons-material/FilterList';
6
6
  import Typography from '@mui/material/Typography';
7
7
  import Divider from '@mui/material/Divider';
8
+ import classNames from 'classnames';
8
9
  import { buildFilterQueryString } from '@reltio/mdm-sdk';
9
10
  import AttributesFiltersBuilder from '../AttributesFiltersBuilder/AttributesFiltersBuilder';
10
11
  import ActionButtons from './ActionButtons/ActionButtons';
11
12
  import { useStyles } from './styles';
12
13
  var AttributesFiltersButton = function (_a) {
13
- var filtersProp = _a.filters, attributeTypes = _a.attributeTypes, onChange = _a.onChange, components = _a.components, children = _a.children, onTogglePopup = _a.onTogglePopup, isFiltersAppliedProp = _a.isFiltersApplied, dataReltioId = _a.dataReltioId;
14
+ var filtersProp = _a.filters, classes = _a.classes, attributesTypesGroups = _a.attributesTypesGroups, onChange = _a.onChange, components = _a.components, children = _a.children, onTogglePopup = _a.onTogglePopup, isFiltersAppliedProp = _a.isFiltersApplied, dataReltioId = _a.dataReltioId, onFilterAttributeChange = _a.onFilterAttributeChange, onCancel = _a.onCancel, onClear = _a.onClear, onApply = _a.onApply;
14
15
  var styles = useStyles();
15
16
  var buttonRef = useRef();
16
17
  var _b = useState(false), isOpen = _b[0], setIsOpen = _b[1];
@@ -30,21 +31,24 @@ var AttributesFiltersButton = function (_a) {
30
31
  }, [filtersProp, isOpen]);
31
32
  var applyButtonHandler = useCallback(function () {
32
33
  onChange(filters);
34
+ onApply && onApply();
33
35
  togglePopup();
34
- }, [filters, onChange]);
36
+ }, [filters, onChange, onApply]);
35
37
  var cancelButtonHandler = useCallback(function () {
38
+ onCancel && onCancel();
36
39
  togglePopup();
37
- }, []);
40
+ }, [onCancel]);
38
41
  var clearAllButtonHandler = useCallback(function () {
42
+ onClear && onClear();
39
43
  setFilters([]);
40
- }, []);
44
+ }, [onClear]);
41
45
  return (React.createElement(React.Fragment, null,
42
46
  React.createElement(Button, { "data-reltio-id": dataReltioId, ref: buttonRef, color: buttonColor, classes: {
43
47
  root: styles.triggerButton,
44
48
  textPrimary: styles.changedFiltersIndicator
45
49
  }, onClick: togglePopup },
46
50
  React.createElement(FilterIcon, { color: buttonColor })),
47
- React.createElement(Popover, { open: isOpen, classes: { paper: styles.popupContent }, anchorEl: buttonRef.current, onClose: togglePopup, anchorOrigin: {
51
+ React.createElement(Popover, { open: isOpen, classes: { paper: classNames(styles.popupContent, classes === null || classes === void 0 ? void 0 : classes.filterPopup) }, anchorEl: buttonRef.current, onClose: togglePopup, anchorOrigin: {
48
52
  vertical: 'bottom',
49
53
  horizontal: 'right'
50
54
  }, transformOrigin: {
@@ -55,7 +59,7 @@ var AttributesFiltersButton = function (_a) {
55
59
  React.createElement(Typography, { variant: "h6" }, i18n.text('Filter')),
56
60
  React.createElement("div", { className: styles.filtersBuilderWrapper },
57
61
  children,
58
- React.createElement(AttributesFiltersBuilder, { attributeTypes: attributeTypes, filters: filters, onChange: setFilters, components: components })),
62
+ React.createElement(AttributesFiltersBuilder, { attributesTypesGroups: attributesTypesGroups, filters: filters, onChange: setFilters, components: components, onFilterAttributeChange: onFilterAttributeChange, classes: classes })),
59
63
  React.createElement(Divider, { className: styles.divider }),
60
64
  React.createElement(ActionButtons, { onApply: applyButtonHandler, onCancel: cancelButtonHandler, onClear: clearAllButtonHandler })))));
61
65
  };
@@ -2,6 +2,7 @@ import { makeStyles } from '@mui/styles';
2
2
  var useStyles = makeStyles({
3
3
  selector: {
4
4
  minWidth: '200px',
5
+ width: '100%',
5
6
  alignItems: 'stretch',
6
7
  background: 'rgba(0,0,0, 0.0267)',
7
8
  boxSizing: 'border-box',
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { SearchOperator } from '@reltio/mdm-sdk';
3
+ type Props = {
4
+ className?: string;
5
+ value: string;
6
+ onChange: (value: SearchOperator) => void;
7
+ };
8
+ declare const LogicOperator: ({ className, value, onChange }: Props) => JSX.Element;
9
+ export default LogicOperator;
@@ -0,0 +1,24 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import React from 'react';
13
+ import classnames from 'classnames';
14
+ import { DropDownEditor } from '@reltio/components';
15
+ import { operatorOptions } from '@reltio/mdm-sdk';
16
+ import i18n from 'ui-i18n';
17
+ import useStyles from './styles';
18
+ var LogicOperator = function (_a) {
19
+ var className = _a.className, value = _a.value, onChange = _a.onChange;
20
+ var classes = useStyles();
21
+ var entries = operatorOptions.map(function (operator) { return (__assign(__assign({}, operator), { label: i18n.text(operator.label) })); });
22
+ return (React.createElement(DropDownEditor, { className: classnames(classes.dropDown, className), classes: classes, value: value, entries: entries, onChange: onChange }));
23
+ };
24
+ export default LogicOperator;
@@ -0,0 +1,2 @@
1
+ declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"select" | "dropDown">;
2
+ export default useStyles;
@@ -0,0 +1,13 @@
1
+ import { makeStyles } from '@mui/styles';
2
+ var useStyles = makeStyles(function () { return ({
3
+ select: {
4
+ padding: '6px 16px 7px'
5
+ },
6
+ dropDown: {
7
+ width: '100px',
8
+ '&:before': {
9
+ content: 'none !important'
10
+ }
11
+ }
12
+ }); });
13
+ export default useStyles;
@@ -1,5 +1,5 @@
1
1
  import React, { ElementType } from 'react';
2
- import { DragOverEvent } from 'react-grid-layout';
2
+ import { ReactGridLayoutProps } from 'react-grid-layout';
3
3
  import { ReltioGridLayoutItem } from '@reltio/mdm-sdk';
4
4
  import { ReactGridLayoutItem, ReltioGridLayoutOptions } from '../../types';
5
5
  type Props<ViewConfig = Record<string, unknown>> = {
@@ -8,10 +8,7 @@ type Props<ViewConfig = Record<string, unknown>> = {
8
8
  layoutOptions?: ReltioGridLayoutOptions;
9
9
  onLayoutChanged?: (layout: ReltioGridLayoutItem[]) => void;
10
10
  onDrop?: (layout: ReltioGridLayoutItem[], layoutItem: ReltioGridLayoutItem, e: Event) => void;
11
- onDropDragOver?: (e: DragOverEvent) => {
12
- w?: number;
13
- h?: number;
14
- } | false | undefined;
11
+ onDropDragOver?: ReactGridLayoutProps['onDropDragOver'];
15
12
  onRemove?: (id: string) => void;
16
13
  LayoutItem: ElementType;
17
14
  draggableHandle?: string;
@@ -22,7 +19,7 @@ type Props<ViewConfig = Record<string, unknown>> = {
22
19
  root?: string;
23
20
  item?: string;
24
21
  };
25
- onResize?: (layout: ReactGridLayoutItem[], oldLayoutItem: ReactGridLayoutItem, layoutItem: ReactGridLayoutItem, placeholder: ReactGridLayoutItem) => void;
22
+ onResize?: ReactGridLayoutProps['onResize'];
26
23
  };
27
24
  declare const _default: React.MemoExoticComponent<{
28
25
  ({ views, layout, layoutOptions, onLayoutChanged, draggableHandle, LayoutItem, onRemove, onDrop, droppingItem, isDroppable, onDropDragOver, isStatic, classes, onResize }: Props<Record<string, unknown>>): JSX.Element;