@reltio/components 1.4.1731 → 1.4.1732
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +7 -3
- package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +34 -19
- package/cjs/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js +7 -5
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +3 -2
- package/cjs/components/AttributesFiltersBuilder/components/ValuesEditor/ValuesEditor.js +5 -3
- package/cjs/components/AttributesFiltersBuilder/components/ValuesEditor/styles.js +1 -1
- package/cjs/components/AttributesFiltersBuilder/helpers.d.ts +5 -4
- package/cjs/components/AttributesFiltersBuilder/helpers.js +33 -19
- package/cjs/components/AttributesFiltersBuilder/types.d.ts +3 -2
- package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +10 -3
- package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.js +10 -6
- package/cjs/components/BasicAttributeSelector/styles.js +1 -0
- package/cjs/components/LogicOperator/LogicOperator.d.ts +9 -0
- package/cjs/components/LogicOperator/LogicOperator.js +29 -0
- package/cjs/components/LogicOperator/styles.d.ts +2 -0
- package/cjs/components/LogicOperator/styles.js +15 -0
- package/cjs/components/index.d.ts +1 -0
- package/cjs/components/index.js +3 -1
- package/cjs/types/index.d.ts +14 -1
- package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +7 -3
- package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +36 -21
- package/esm/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js +9 -7
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +3 -2
- package/esm/components/AttributesFiltersBuilder/components/ValuesEditor/ValuesEditor.js +5 -3
- package/esm/components/AttributesFiltersBuilder/components/ValuesEditor/styles.js +1 -1
- package/esm/components/AttributesFiltersBuilder/helpers.d.ts +5 -4
- package/esm/components/AttributesFiltersBuilder/helpers.js +34 -20
- package/esm/components/AttributesFiltersBuilder/types.d.ts +3 -2
- package/esm/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +10 -3
- package/esm/components/AttributesFiltersButton/AttributesFiltersButton.js +10 -6
- package/esm/components/BasicAttributeSelector/styles.js +1 -0
- package/esm/components/LogicOperator/LogicOperator.d.ts +9 -0
- package/esm/components/LogicOperator/LogicOperator.js +24 -0
- package/esm/components/LogicOperator/styles.d.ts +2 -0
- package/esm/components/LogicOperator/styles.js +13 -0
- package/esm/components/index.d.ts +1 -0
- package/esm/components/index.js +1 -0
- package/esm/types/index.d.ts +14 -1
- package/package.json +2 -2
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { SearchFilter
|
|
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
|
-
|
|
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<({
|
|
16
|
+
declare const _default: React.MemoExoticComponent<({ classes, attributesTypesGroups, filters, onChange, components, onFilterAttributeChange }: Props) => JSX.Element>;
|
|
13
17
|
export default _default;
|
|
@@ -1,4 +1,15 @@
|
|
|
1
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
|
+
};
|
|
2
13
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
14
|
if (k2 === undefined) k2 = k;
|
|
4
15
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -42,30 +53,38 @@ var helpers_1 = require("./helpers");
|
|
|
42
53
|
var FilterSelector_1 = __importDefault(require("./components/FilterSelector/FilterSelector"));
|
|
43
54
|
var RowActions_1 = __importDefault(require("./components/RowActions/RowActions"));
|
|
44
55
|
var QueryBuilderRowsGroup_1 = __importDefault(require("../QueryBuilderRowsGroup/QueryBuilderRowsGroup"));
|
|
56
|
+
var contexts_1 = require("../../contexts");
|
|
57
|
+
var core_1 = require("../../core");
|
|
45
58
|
var AttributeSelector_1 = __importDefault(require("./components/AttributeSelector/AttributeSelector"));
|
|
46
59
|
var ValuesEditor_1 = __importDefault(require("./components/ValuesEditor/ValuesEditor"));
|
|
47
|
-
var contexts_1 = require("../../contexts");
|
|
48
60
|
var styles_1 = require("./styles");
|
|
49
|
-
var EMPTY_FILTER = { fieldName: null, filter: null, values: [] };
|
|
50
|
-
var Stub = function () { return null; };
|
|
61
|
+
var EMPTY_FILTER = { fieldName: null, filter: null, operator: mdm_sdk_1.SearchOperator.and, values: [] };
|
|
51
62
|
var AttributesFiltersBuilder = function (_a) {
|
|
52
|
-
var
|
|
53
|
-
var CustomValuesEditor = components.ValuesEditor, CustomFilterSelector = components.FilterSelector;
|
|
54
|
-
var
|
|
63
|
+
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;
|
|
64
|
+
var CustomValuesEditor = components.ValuesEditor, CustomFilterSelector = components.FilterSelector, _d = components.LogicalOperator, LogicalOperator = _d === void 0 ? core_1.EmptyStub : _d;
|
|
65
|
+
var styles = (0, styles_1.useStyles)();
|
|
55
66
|
var actualFilters = (0, react_1.useRef)(filters);
|
|
56
67
|
var attributeFilterRef = (0, react_1.useRef)(null);
|
|
57
68
|
var lastAttributesCountRef = (0, react_1.useRef)(null);
|
|
58
69
|
var attributesCountRef = (0, react_1.useRef)(null);
|
|
59
70
|
var metadata = (0, contexts_1.useMdmMetadata)();
|
|
60
|
-
var entityType = (0, mdm_sdk_1.getEntityType)(metadata, (0, helpers_1.getEntityTypeFromAttrTypes)(attributeTypes));
|
|
61
71
|
actualFilters.current = filters;
|
|
62
72
|
var rowClasses = (0, react_1.useMemo)(function () { return ({
|
|
63
|
-
attributeSelectorContainer: attrSelector,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
var
|
|
73
|
+
attributeSelectorContainer: classes.attributeSelectorContainer || styles.attrSelector,
|
|
74
|
+
valuesEditorContainer: classes.valuesEditorContainer || '',
|
|
75
|
+
filterSelectorContainer: styles.filterSelector,
|
|
76
|
+
actionsContainer: styles.actionContainer
|
|
77
|
+
}); }, [classes, styles]);
|
|
78
|
+
var currentEntityType = (0, react_1.useMemo)(function () {
|
|
79
|
+
var entityTypesUris = attributesTypesGroups.map(function (_a) {
|
|
80
|
+
var attributeTypes = _a.attributeTypes;
|
|
81
|
+
return (0, helpers_1.getEntityTypeFromAttrTypes)(attributeTypes);
|
|
82
|
+
});
|
|
83
|
+
var closestEntityTypeAncestorUri = (0, mdm_sdk_1.findClosestCommonAncestor)(metadata, entityTypesUris);
|
|
84
|
+
return (0, mdm_sdk_1.getEntityType)(metadata, closestEntityTypeAncestorUri);
|
|
85
|
+
}, [attributesTypesGroups, metadata]);
|
|
86
|
+
var attributeSelectorItemsGroups = (0, react_1.useMemo)(function () { return (0, helpers_1.getAttributeSelectorItems)(attributesTypesGroups, metadata); }, [attributesTypesGroups, metadata]);
|
|
87
|
+
var rowsData = (0, react_1.useMemo)(function () { return (filters.length ? (0, helpers_1.getRowsDataFromFilters)(filters, attributeSelectorItemsGroups) : []); }, [attributeSelectorItemsGroups, filters]);
|
|
69
88
|
attributesCountRef.current = rowsData.length;
|
|
70
89
|
(0, react_1.useEffect)(function () {
|
|
71
90
|
if (attributeFilterRef.current && lastAttributesCountRef.current !== attributesCountRef.current) {
|
|
@@ -91,11 +110,7 @@ var AttributesFiltersBuilder = function (_a) {
|
|
|
91
110
|
}, [onChange]);
|
|
92
111
|
var duplicateRow = (0, react_1.useCallback)(function (index) {
|
|
93
112
|
var newFilters = __spreadArray([], actualFilters.current, true);
|
|
94
|
-
newFilters.splice(index + 1, 0, {
|
|
95
|
-
fieldName: actualFilters.current[index].fieldName,
|
|
96
|
-
filter: actualFilters.current[index].filter,
|
|
97
|
-
values: actualFilters.current[index].values
|
|
98
|
-
});
|
|
113
|
+
newFilters.splice(index + 1, 0, __assign({}, actualFilters.current[index]));
|
|
99
114
|
onChange(newFilters);
|
|
100
115
|
}, [onChange]);
|
|
101
116
|
var changeFilter = (0, react_1.useCallback)(function (newFilter, id) {
|
|
@@ -108,6 +123,6 @@ var AttributesFiltersBuilder = function (_a) {
|
|
|
108
123
|
var addNewFilter = (0, react_1.useCallback)(function (newFilter) {
|
|
109
124
|
onChange(__spreadArray(__spreadArray([], actualFilters.current, true), [newFilter], false));
|
|
110
125
|
}, [onChange]);
|
|
111
|
-
return (react_1.default.createElement(QueryBuilderRowsGroup_1.default, { rowClasses: rowClasses, rowsData: rowsData, AttributeSelectorComponent: AttributeSelector_1.default, FilterSelectorComponent: CustomFilterSelector || FilterSelector_1.default, ValuesEditorComponent: CustomValuesEditor || ValuesEditor_1.default, ActionsComponent: RowActions_1.default, LogicOperatorComponent:
|
|
126
|
+
return (react_1.default.createElement(QueryBuilderRowsGroup_1.default, { rowClasses: rowClasses, rowsData: rowsData, AttributeSelectorComponent: AttributeSelector_1.default, FilterSelectorComponent: CustomFilterSelector || FilterSelector_1.default, ValuesEditorComponent: CustomValuesEditor || ValuesEditor_1.default, ActionsComponent: RowActions_1.default, 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 }));
|
|
112
127
|
};
|
|
113
128
|
exports.default = (0, react_1.memo)(AttributesFiltersBuilder);
|
package/cjs/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js
CHANGED
|
@@ -31,15 +31,15 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
|
31
31
|
var BasicAttributeSelector_1 = __importDefault(require("../../../BasicAttributeSelector/BasicAttributeSelector"));
|
|
32
32
|
var AttributeSelector = function (_a) {
|
|
33
33
|
var rowData = _a.rowData, rowContext = _a.rowContext, attributeSelectorProps = _a.attributeSelectorProps;
|
|
34
|
-
var _b = rowData || {}, attribute = _b.attribute, id = _b.id, filter = _b.filter;
|
|
35
|
-
var changeFilter = rowContext.changeFilter, addNewFilter = rowContext.addNewFilter,
|
|
34
|
+
var _b = rowData || {}, attribute = _b.attribute, id = _b.id, filter = _b.filter, operator = _b.operator;
|
|
35
|
+
var changeFilter = rowContext.changeFilter, addNewFilter = rowContext.addNewFilter, attributeSelectorItemsGroups = rowContext.attributeSelectorItemsGroups, onFilterAttributeChange = rowContext.onFilterAttributeChange;
|
|
36
36
|
var getSelectedAttributeLabel = (0, react_1.useCallback)(function (data) { return (0, mdm_sdk_1.getSearchGroupAttributeLabel)({ data: data }); }, []);
|
|
37
|
-
var itemsGroup = (0, react_1.useMemo)(function () { return [{ id: '', title: '', attributes: attributesGroup }]; }, [attributesGroup]);
|
|
38
37
|
var changeAttribute = (0, react_1.useCallback)(function (selectInfo) {
|
|
39
38
|
if (rowData) {
|
|
40
39
|
var newFilter = {
|
|
41
40
|
fieldName: selectInfo.attribute.fieldName,
|
|
42
41
|
filter: filter,
|
|
42
|
+
operator: operator,
|
|
43
43
|
values: []
|
|
44
44
|
};
|
|
45
45
|
changeFilter(newFilter, id);
|
|
@@ -48,10 +48,12 @@ var AttributeSelector = function (_a) {
|
|
|
48
48
|
addNewFilter({
|
|
49
49
|
fieldName: selectInfo.attribute.fieldName,
|
|
50
50
|
filter: null,
|
|
51
|
+
operator: mdm_sdk_1.SearchOperator.and,
|
|
51
52
|
values: []
|
|
52
53
|
});
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
onFilterAttributeChange && onFilterAttributeChange(selectInfo);
|
|
56
|
+
}, [rowData, onFilterAttributeChange, filter, operator, changeFilter, id, addNewFilter]);
|
|
57
|
+
return (react_1.default.createElement(BasicAttributeSelector_1.default, { itemsGroups: attributeSelectorItemsGroups, ungroup: attributeSelectorItemsGroups.length < 2, single: true, value: attribute, getLabel: getSelectedAttributeLabel, onSelect: changeAttribute, onOpenPopup: attributeSelectorProps.onOpen }));
|
|
56
58
|
};
|
|
57
59
|
exports.default = (0, react_1.memo)(AttributeSelector);
|
|
@@ -38,7 +38,7 @@ var FilterSelector = function (_a) {
|
|
|
38
38
|
var _b;
|
|
39
39
|
var rowData = _a.rowData, rowContext = _a.rowContext, textFieldInputRef = _a.textFieldInputRef, optionsProp = _a.options;
|
|
40
40
|
var styles = (0, styles_1.default)();
|
|
41
|
-
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;
|
|
41
|
+
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;
|
|
42
42
|
var changeFilter = rowContext.changeFilter;
|
|
43
43
|
var options = optionsProp ||
|
|
44
44
|
(attrType &&
|
|
@@ -48,10 +48,11 @@ var FilterSelector = function (_a) {
|
|
|
48
48
|
var newFilter = {
|
|
49
49
|
fieldName: fieldName,
|
|
50
50
|
filter: filterOption.value,
|
|
51
|
+
operator: operator,
|
|
51
52
|
values: []
|
|
52
53
|
};
|
|
53
54
|
changeFilter(newFilter, id);
|
|
54
|
-
}, [changeFilter, id
|
|
55
|
+
}, [fieldName, operator, changeFilter, id]);
|
|
55
56
|
(0, react_1.useEffect)(function () {
|
|
56
57
|
if ((fieldName && !filter) || (fieldName && !(0, helpers_1.findValue)(options, filter))) {
|
|
57
58
|
onChangeFilter(options[0]);
|
|
@@ -35,14 +35,15 @@ var ValuesEditor = function (_a) {
|
|
|
35
35
|
var styles = (0, styles_1.useStyles)();
|
|
36
36
|
var canFilterAcceptValues = (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && (0, mdm_sdk_1.checkIfOptionHasValues)(rowData.filter);
|
|
37
37
|
var changeFilter = rowContext.changeFilter;
|
|
38
|
-
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;
|
|
38
|
+
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;
|
|
39
39
|
var valueDataTypeDefinition = attrType && (0, mdm_sdk_1.getAttrDataTypeDefinition)(attrType);
|
|
40
40
|
var filterValueDataTypeDefinition = valueDataTypeDefinition && (0, mdm_sdk_1.getDataTypeDefinitionForFilterValue)(valueDataTypeDefinition, filter);
|
|
41
41
|
var editorFilter = (0, react_1.useMemo)(function () { return ({
|
|
42
42
|
filter: filter,
|
|
43
43
|
fieldName: fieldName,
|
|
44
|
+
operator: operator,
|
|
44
45
|
values: values || []
|
|
45
|
-
}); }, [filter, fieldName, values]);
|
|
46
|
+
}); }, [filter, fieldName, operator, values]);
|
|
46
47
|
var TextFieldProps = (0, react_1.useMemo)(function () { return ({
|
|
47
48
|
InputProps: {
|
|
48
49
|
classes: {
|
|
@@ -55,10 +56,11 @@ var ValuesEditor = function (_a) {
|
|
|
55
56
|
var newFilter = {
|
|
56
57
|
fieldName: fieldName,
|
|
57
58
|
filter: filter,
|
|
59
|
+
operator: operator,
|
|
58
60
|
values: newValues
|
|
59
61
|
};
|
|
60
62
|
changeFilter(newFilter, id);
|
|
61
|
-
}, [
|
|
63
|
+
}, [fieldName, filter, operator, changeFilter, id]);
|
|
62
64
|
return (react_1.default.createElement("div", { className: styles.valuesEditor }, (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && canFilterAcceptValues && (react_1.default.createElement(FilterValueEditor_1.default, { "data-reltio-id": "filter-value-editor", filter: editorFilter, onChange: changeValue, dataTypeDefinition: filterValueDataTypeDefinition, fullWidth: true, TextFieldProps: TextFieldProps, color: "primary", classes: editorClasses, orientation: "horizontal" }))));
|
|
63
65
|
};
|
|
64
66
|
exports.default = (0, react_1.memo)(ValuesEditor);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { AttributeType,
|
|
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: (
|
|
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[],
|
|
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
|
}[];
|
|
@@ -51,40 +51,54 @@ var createAttributesConfig = function (metadata, attrNode, entityTypeUri, parent
|
|
|
51
51
|
}
|
|
52
52
|
return resConfig;
|
|
53
53
|
};
|
|
54
|
-
var getAttributeSelectorItems = function (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var
|
|
58
|
-
return
|
|
54
|
+
var getAttributeSelectorItems = function (attributesTypesGroups, metadata) {
|
|
55
|
+
return attributesTypesGroups.map(function (_a) {
|
|
56
|
+
var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
|
|
57
|
+
var entityType = (0, mdm_sdk_1.getEntityType)(metadata, (0, exports.getEntityTypeFromAttrTypes)(attributeTypes));
|
|
58
|
+
return {
|
|
59
|
+
id: id,
|
|
60
|
+
title: title,
|
|
61
|
+
attributes: (0, mdm_sdk_1.getAttributesTreeFromAttributes)(attributeTypes, metadata).map(function (attrNode) {
|
|
62
|
+
var entityTypeUri = (0, mdm_sdk_1.isSpecialAttribute)(attrNode) ? null : entityType.uri;
|
|
63
|
+
return createAttributesConfig(metadata, attrNode, entityTypeUri);
|
|
64
|
+
})
|
|
65
|
+
};
|
|
59
66
|
});
|
|
60
67
|
};
|
|
61
68
|
exports.getAttributeSelectorItems = getAttributeSelectorItems;
|
|
62
69
|
var findAttributeSelectorItem = function (fieldName, attributesGroup) {
|
|
63
70
|
var attrGroup;
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
var
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
var _loop_1 = function (attributesGroupItem) {
|
|
72
|
+
var findAttribute = function (fieldName, attributesSelectorItems) {
|
|
73
|
+
for (var _i = 0, attributesSelectorItems_1 = attributesSelectorItems; _i < attributesSelectorItems_1.length; _i++) {
|
|
74
|
+
var attributeGroup = attributesSelectorItems_1[_i];
|
|
75
|
+
if (fieldName === attributeGroup.fieldName) {
|
|
76
|
+
attrGroup = attributeGroup;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if ('children' in attributeGroup) {
|
|
80
|
+
findAttribute(fieldName, attributeGroup.children);
|
|
81
|
+
}
|
|
73
82
|
}
|
|
74
|
-
}
|
|
83
|
+
};
|
|
84
|
+
findAttribute(fieldName, attributesGroupItem.attributes);
|
|
75
85
|
};
|
|
76
|
-
|
|
86
|
+
for (var _i = 0, attributesGroup_1 = attributesGroup; _i < attributesGroup_1.length; _i++) {
|
|
87
|
+
var attributesGroupItem = attributesGroup_1[_i];
|
|
88
|
+
_loop_1(attributesGroupItem);
|
|
89
|
+
}
|
|
77
90
|
return attrGroup;
|
|
78
91
|
};
|
|
79
92
|
var findValue = function (options, filter) {
|
|
80
93
|
return options ? options.find(function (option) { return option.value === filter; }) : null;
|
|
81
94
|
};
|
|
82
95
|
exports.findValue = findValue;
|
|
83
|
-
var getRowsDataFromFilters = function (filters,
|
|
96
|
+
var getRowsDataFromFilters = function (filters, attributesGroupArr) {
|
|
84
97
|
return filters.map(function (filter, index) {
|
|
85
98
|
return {
|
|
86
|
-
attribute: filter.fieldName ? findAttributeSelectorItem(filter.fieldName,
|
|
99
|
+
attribute: filter.fieldName ? findAttributeSelectorItem(filter.fieldName, attributesGroupArr) : undefined,
|
|
87
100
|
filter: filter.filter,
|
|
101
|
+
operator: filter.operator,
|
|
88
102
|
id: index,
|
|
89
103
|
values: filter.values
|
|
90
104
|
};
|
|
@@ -92,7 +106,7 @@ var getRowsDataFromFilters = function (filters, attributesGroup) {
|
|
|
92
106
|
};
|
|
93
107
|
exports.getRowsDataFromFilters = getRowsDataFromFilters;
|
|
94
108
|
var getEntityTypeFromAttrTypes = function (attributeTypes) {
|
|
95
|
-
var regularAttribute =
|
|
109
|
+
var regularAttribute = (0, mdm_sdk_1.findRegularAttribute)(attributeTypes);
|
|
96
110
|
return regularAttribute ? (0, mdm_sdk_1.getBaseUri)(regularAttribute.uri) : null;
|
|
97
111
|
};
|
|
98
112
|
exports.getEntityTypeFromAttrTypes = getEntityTypeFromAttrTypes;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { SearchFilter, TEntityType } from '@reltio/mdm-sdk';
|
|
2
|
-
import {
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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;
|
|
@@ -33,12 +33,13 @@ var Button_1 = __importDefault(require("@mui/material/Button"));
|
|
|
33
33
|
var FilterList_1 = __importDefault(require("@mui/icons-material/FilterList"));
|
|
34
34
|
var Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
35
35
|
var Divider_1 = __importDefault(require("@mui/material/Divider"));
|
|
36
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
36
37
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
37
38
|
var AttributesFiltersBuilder_1 = __importDefault(require("../AttributesFiltersBuilder/AttributesFiltersBuilder"));
|
|
38
39
|
var ActionButtons_1 = __importDefault(require("./ActionButtons/ActionButtons"));
|
|
39
40
|
var styles_1 = require("./styles");
|
|
40
41
|
var AttributesFiltersButton = function (_a) {
|
|
41
|
-
var filtersProp = _a.filters,
|
|
42
|
+
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;
|
|
42
43
|
var styles = (0, styles_1.useStyles)();
|
|
43
44
|
var buttonRef = (0, react_1.useRef)();
|
|
44
45
|
var _b = (0, react_1.useState)(false), isOpen = _b[0], setIsOpen = _b[1];
|
|
@@ -58,21 +59,24 @@ var AttributesFiltersButton = function (_a) {
|
|
|
58
59
|
}, [filtersProp, isOpen]);
|
|
59
60
|
var applyButtonHandler = (0, react_1.useCallback)(function () {
|
|
60
61
|
onChange(filters);
|
|
62
|
+
onApply && onApply();
|
|
61
63
|
togglePopup();
|
|
62
|
-
}, [filters, onChange]);
|
|
64
|
+
}, [filters, onChange, onApply]);
|
|
63
65
|
var cancelButtonHandler = (0, react_1.useCallback)(function () {
|
|
66
|
+
onCancel && onCancel();
|
|
64
67
|
togglePopup();
|
|
65
|
-
}, []);
|
|
68
|
+
}, [onCancel]);
|
|
66
69
|
var clearAllButtonHandler = (0, react_1.useCallback)(function () {
|
|
70
|
+
onClear && onClear();
|
|
67
71
|
setFilters([]);
|
|
68
|
-
}, []);
|
|
72
|
+
}, [onClear]);
|
|
69
73
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
70
74
|
react_1.default.createElement(Button_1.default, { "data-reltio-id": dataReltioId, ref: buttonRef, color: buttonColor, classes: {
|
|
71
75
|
root: styles.triggerButton,
|
|
72
76
|
textPrimary: styles.changedFiltersIndicator
|
|
73
77
|
}, onClick: togglePopup },
|
|
74
78
|
react_1.default.createElement(FilterList_1.default, { color: buttonColor })),
|
|
75
|
-
react_1.default.createElement(Popover_1.default, { open: isOpen, classes: { paper: styles.popupContent }, anchorEl: buttonRef.current, onClose: togglePopup, anchorOrigin: {
|
|
79
|
+
react_1.default.createElement(Popover_1.default, { open: isOpen, classes: { paper: (0, classnames_1.default)(styles.popupContent, classes === null || classes === void 0 ? void 0 : classes.filterPopup) }, anchorEl: buttonRef.current, onClose: togglePopup, anchorOrigin: {
|
|
76
80
|
vertical: 'bottom',
|
|
77
81
|
horizontal: 'right'
|
|
78
82
|
}, transformOrigin: {
|
|
@@ -83,7 +87,7 @@ var AttributesFiltersButton = function (_a) {
|
|
|
83
87
|
react_1.default.createElement(Typography_1.default, { variant: "h6" }, ui_i18n_1.default.text('Filter')),
|
|
84
88
|
react_1.default.createElement("div", { className: styles.filtersBuilderWrapper },
|
|
85
89
|
children,
|
|
86
|
-
react_1.default.createElement(AttributesFiltersBuilder_1.default, {
|
|
90
|
+
react_1.default.createElement(AttributesFiltersBuilder_1.default, { attributesTypesGroups: attributesTypesGroups, filters: filters, onChange: setFilters, components: components, onFilterAttributeChange: onFilterAttributeChange, classes: classes })),
|
|
87
91
|
react_1.default.createElement(Divider_1.default, { className: styles.divider }),
|
|
88
92
|
react_1.default.createElement(ActionButtons_1.default, { onApply: applyButtonHandler, onCancel: cancelButtonHandler, onClear: clearAllButtonHandler })))));
|
|
89
93
|
};
|
|
@@ -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,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
var react_1 = __importDefault(require("react"));
|
|
18
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
19
|
+
var components_1 = require("@reltio/components");
|
|
20
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
21
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
22
|
+
var styles_1 = __importDefault(require("./styles"));
|
|
23
|
+
var LogicOperator = function (_a) {
|
|
24
|
+
var className = _a.className, value = _a.value, onChange = _a.onChange;
|
|
25
|
+
var classes = (0, styles_1.default)();
|
|
26
|
+
var entries = mdm_sdk_1.operatorOptions.map(function (operator) { return (__assign(__assign({}, operator), { label: ui_i18n_1.default.text(operator.label) })); });
|
|
27
|
+
return (react_1.default.createElement(components_1.DropDownEditor, { className: (0, classnames_1.default)(classes.dropDown, className), classes: classes, value: value, entries: entries, onChange: onChange }));
|
|
28
|
+
};
|
|
29
|
+
exports.default = LogicOperator;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var styles_1 = require("@mui/styles");
|
|
4
|
+
var useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
5
|
+
select: {
|
|
6
|
+
padding: '6px 16px 7px'
|
|
7
|
+
},
|
|
8
|
+
dropDown: {
|
|
9
|
+
width: '100px',
|
|
10
|
+
'&:before': {
|
|
11
|
+
content: 'none !important'
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}); });
|
|
15
|
+
exports.default = useStyles;
|
|
@@ -155,3 +155,4 @@ export { default as MultilineMenuItem } from './MultilineMenuItem/MultilineMenuI
|
|
|
155
155
|
export { default as TenantLabel } from './TenantLabel/TenantLabel';
|
|
156
156
|
export { default as StepNavigation } from './StepNavigation/StepNavigation';
|
|
157
157
|
export { TableSkeleton } from './TableSkeleton/TableSkeleton';
|
|
158
|
+
export { default as LogicOperator } from './LogicOperator/LogicOperator';
|
package/cjs/components/index.js
CHANGED
|
@@ -20,7 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
exports.EmptyState = exports.NoResults = exports.NoData = exports.DropDownSelector = exports.DropDownMenuButton = exports.Drawer = exports.DataTypeValue = exports.ConnectionRelationTypeSelector = exports.ConfigureColumnsPopup = exports.MenuWithPopper = exports.MenuList = exports.LoadMoreButton = exports.DropdownIndicatorWithIconButton = exports.DropdownIndicator = exports.CommentsContainer = exports.ColorBar = exports.CollapseButton = exports.CollaborationItem = exports.ClickAwayProvider = exports.BasicViewHeader = exports.BasicViewContent = exports.BasicView = exports.ScreenProfileBand = exports.ProfileBandNavigation = exports.AvatarWithFallback = exports.AutoSizeList = exports.ReadOnlyAttributesPager = exports.SimpleAttribute = exports.ReferenceAttribute = exports.NestedAttribute = exports.EditableImageAttributesLine = exports.ImageAttributesLine = exports.ReadOnlyAttributesList = exports.ReadOnlyAttributeValuesBlock = exports.EditableAttribute = exports.ReadOnlyAttribute = exports.CardinalityMessage = exports.AttributesPager = exports.SimpleAttributeEditor = exports.RelationTypeSelector = exports.ReferenceAttributeEditor = exports.NestedAttributeEditor = exports.MoreAttributesButton = exports.EntitySelector = exports.EntityCreator = exports.AttributesList = exports.BranchDecorator = exports.DescriptionIcon = exports.AttributesView = exports.AttributeListItem = void 0;
|
|
21
21
|
exports.useKeyboardNavigation = exports.WhiteSearchInput = exports.SearchInput = exports.ProfileResizablePanes = exports.ResizablePanes = exports.ReltioGridLayout = exports.ReactSortableTreeUtils = exports.ReactSortableTreeHandlers = exports.ReactSortableTree = exports.ReactSelectOptionFilters = exports.MultiSelect = exports.QueryBuilderRowsGroup = exports.QueryBuilderRow = exports.ProfileCard = exports.ProfileBand = exports.PotentialMatchReviewCard = exports.PopupWithArrow = exports.Popper = exports.MultipleInput = exports.ModeSwitcherSelect = exports.ModeSwitcher = exports.TransitiveMatchBlock = exports.SimpleMatchRulesBlock = exports.MatchRuleVariant = exports.MatchRulesBlock = exports.LoadingSpinner = exports.Link = exports.LinearLoadIndicator = exports.ImportModes = exports.ImportButton = exports.ImageGalleryDialog = exports.Highlighter = exports.HierarchicalAttributeTooltip = exports.HideOnShrink = exports.FlipCard = exports.FacetViewHeader = exports.ExternalInvalidRelations = exports.ExpandedValueTooltip = exports.ErrorWrapper = exports.ErrorPopup = exports.AttributesErrorsPanel = exports.ErrorBoundary = exports.EntityUriLink = exports.RelationTypesSelector = exports.EntityTypesSelector = exports.EntityTypeIcon = exports.EntityTypeBadge = exports.EntityAvatar = exports.EMPTY_STATE_VARIANTS = exports.EMPTY_STATE_ICONS = void 0;
|
|
22
22
|
exports.RequiredMark = exports.HierarchyNodeTitle = exports.DataTenantBadge = exports.SettingsMenu = exports.TenantsDropDownSelector = exports.TenantIcon = exports.SourceSystemsSelector = exports.MatchRulesSelector = exports.MultiValueSelector = exports.DragAndDrop = exports.ConnectionEditor = exports.AttributesFiltersBuilder = exports.AttributesFiltersButton = exports.AttributeGroupIcon = exports.BasicAttributeSelector = exports.ProfilesList = exports.ActionButtonMode = exports.ActionButton = exports.NotMatchButton = exports.MergeButton = exports.ProfileMatchCard = exports.RelationEditor = exports.OvIcon = exports.ErrorMessage = exports.ReltioMap = exports.ConfirmDeleteDialog = exports.ConfirmationDialog = exports.Marginator = exports.LightArrowTooltip = exports.ArrowExpandButton = exports.ScrollableTabs = exports.ExpandableSearchInput = exports.VirtualGroupedList = exports.ViewMoreToggle = exports.VerticalHeadingsTable = exports.VerticalDivider = exports.AttributeTitle = exports.Spacer = exports.ColoredSourceIcon = exports.SourceIcon = exports.SmallIconButtonWithTooltip = exports.SmallIconButton = exports.SimpleDropDownSelector = exports.SidePanelContentHeader = exports.SidePanel = exports.SidePanelEmptyState = exports.SideButtonsPanel = exports.SelectorWithOnlyOptionAutoSelect = exports.SelectionPopupPopper = exports.SelectionPopup = void 0;
|
|
23
|
-
exports.TableSkeleton = exports.StepNavigation = exports.TenantLabel = exports.MultilineMenuItem = exports.RelevanceScoreBadge = void 0;
|
|
23
|
+
exports.LogicOperator = exports.TableSkeleton = exports.StepNavigation = exports.TenantLabel = exports.MultilineMenuItem = exports.RelevanceScoreBadge = void 0;
|
|
24
24
|
__exportStar(require("./activityLog"), exports);
|
|
25
25
|
var AttributeListItem_1 = require("./AttributeListItem/AttributeListItem");
|
|
26
26
|
Object.defineProperty(exports, "AttributeListItem", { enumerable: true, get: function () { return __importDefault(AttributeListItem_1).default; } });
|
|
@@ -333,3 +333,5 @@ var StepNavigation_1 = require("./StepNavigation/StepNavigation");
|
|
|
333
333
|
Object.defineProperty(exports, "StepNavigation", { enumerable: true, get: function () { return __importDefault(StepNavigation_1).default; } });
|
|
334
334
|
var TableSkeleton_1 = require("./TableSkeleton/TableSkeleton");
|
|
335
335
|
Object.defineProperty(exports, "TableSkeleton", { enumerable: true, get: function () { return TableSkeleton_1.TableSkeleton; } });
|
|
336
|
+
var LogicOperator_1 = require("./LogicOperator/LogicOperator");
|
|
337
|
+
Object.defineProperty(exports, "LogicOperator", { enumerable: true, get: function () { return __importDefault(LogicOperator_1).default; } });
|
package/cjs/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { AttributeType, SearchFilter } from '@reltio/mdm-sdk';
|
|
2
|
+
import { AttributeType, SearchFilter, SearchOperator } from '@reltio/mdm-sdk';
|
|
3
3
|
export type ReactGridLayoutItem = {
|
|
4
4
|
i: string;
|
|
5
5
|
x: number;
|
|
@@ -46,6 +46,7 @@ export type FiltersRowData = {
|
|
|
46
46
|
filter: string;
|
|
47
47
|
id: number;
|
|
48
48
|
values: SearchFilter['values'];
|
|
49
|
+
operator?: SearchOperator;
|
|
49
50
|
};
|
|
50
51
|
export type AttributeSelectorItem = {
|
|
51
52
|
attrType?: AttributeType;
|
|
@@ -62,6 +63,11 @@ export type AttributeSelectorItemsGroup = {
|
|
|
62
63
|
title: string;
|
|
63
64
|
attributes: AttributeSelectorItem[];
|
|
64
65
|
};
|
|
66
|
+
export type AttributesTypesGroup = {
|
|
67
|
+
id?: string;
|
|
68
|
+
title: string;
|
|
69
|
+
attributeTypes: AttributeType[];
|
|
70
|
+
};
|
|
65
71
|
export type AttributeSelectionInfo = {
|
|
66
72
|
index: number;
|
|
67
73
|
checked: boolean;
|
|
@@ -137,3 +143,10 @@ export type AnyAction = {
|
|
|
137
143
|
type: string;
|
|
138
144
|
[key: string]: any;
|
|
139
145
|
};
|
|
146
|
+
export type AttributesFilterComponentsClasses = {
|
|
147
|
+
attributeSelectorContainer?: string;
|
|
148
|
+
valuesEditorContainer?: string;
|
|
149
|
+
filterSelectorContainer?: string;
|
|
150
|
+
actionsContainer?: string;
|
|
151
|
+
filterPopup?: string;
|
|
152
|
+
};
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { SearchFilter
|
|
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
|
-
|
|
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<({
|
|
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,
|
|
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
|
|
25
|
-
var CustomValuesEditor = components.ValuesEditor, CustomFilterSelector = components.FilterSelector;
|
|
26
|
-
var
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var
|
|
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:
|
|
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);
|
package/esm/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import React, { useCallback,
|
|
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,
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
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
|
-
}, [
|
|
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);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { AttributeType,
|
|
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: (
|
|
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[],
|
|
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 (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var
|
|
55
|
-
return
|
|
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
|
|
61
|
-
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
|
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 {
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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, {
|
|
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
|
};
|
|
@@ -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,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;
|
|
@@ -155,3 +155,4 @@ export { default as MultilineMenuItem } from './MultilineMenuItem/MultilineMenuI
|
|
|
155
155
|
export { default as TenantLabel } from './TenantLabel/TenantLabel';
|
|
156
156
|
export { default as StepNavigation } from './StepNavigation/StepNavigation';
|
|
157
157
|
export { TableSkeleton } from './TableSkeleton/TableSkeleton';
|
|
158
|
+
export { default as LogicOperator } from './LogicOperator/LogicOperator';
|
package/esm/components/index.js
CHANGED
|
@@ -155,3 +155,4 @@ export { default as MultilineMenuItem } from './MultilineMenuItem/MultilineMenuI
|
|
|
155
155
|
export { default as TenantLabel } from './TenantLabel/TenantLabel';
|
|
156
156
|
export { default as StepNavigation } from './StepNavigation/StepNavigation';
|
|
157
157
|
export { TableSkeleton } from './TableSkeleton/TableSkeleton';
|
|
158
|
+
export { default as LogicOperator } from './LogicOperator/LogicOperator';
|
package/esm/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { AttributeType, SearchFilter } from '@reltio/mdm-sdk';
|
|
2
|
+
import { AttributeType, SearchFilter, SearchOperator } from '@reltio/mdm-sdk';
|
|
3
3
|
export type ReactGridLayoutItem = {
|
|
4
4
|
i: string;
|
|
5
5
|
x: number;
|
|
@@ -46,6 +46,7 @@ export type FiltersRowData = {
|
|
|
46
46
|
filter: string;
|
|
47
47
|
id: number;
|
|
48
48
|
values: SearchFilter['values'];
|
|
49
|
+
operator?: SearchOperator;
|
|
49
50
|
};
|
|
50
51
|
export type AttributeSelectorItem = {
|
|
51
52
|
attrType?: AttributeType;
|
|
@@ -62,6 +63,11 @@ export type AttributeSelectorItemsGroup = {
|
|
|
62
63
|
title: string;
|
|
63
64
|
attributes: AttributeSelectorItem[];
|
|
64
65
|
};
|
|
66
|
+
export type AttributesTypesGroup = {
|
|
67
|
+
id?: string;
|
|
68
|
+
title: string;
|
|
69
|
+
attributeTypes: AttributeType[];
|
|
70
|
+
};
|
|
65
71
|
export type AttributeSelectionInfo = {
|
|
66
72
|
index: number;
|
|
67
73
|
checked: boolean;
|
|
@@ -137,3 +143,10 @@ export type AnyAction = {
|
|
|
137
143
|
type: string;
|
|
138
144
|
[key: string]: any;
|
|
139
145
|
};
|
|
146
|
+
export type AttributesFilterComponentsClasses = {
|
|
147
|
+
attributeSelectorContainer?: string;
|
|
148
|
+
valuesEditorContainer?: string;
|
|
149
|
+
filterSelectorContainer?: string;
|
|
150
|
+
actionsContainer?: string;
|
|
151
|
+
filterPopup?: string;
|
|
152
|
+
};
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1732",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@fluentui/react-context-selector": "^9.1.26",
|
|
9
9
|
"@react-google-maps/api": "2.7.0",
|
|
10
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
10
|
+
"@reltio/mdm-sdk": "^1.4.1717",
|
|
11
11
|
"classnames": "^2.2.5",
|
|
12
12
|
"d3-cloud": "^1.2.5",
|
|
13
13
|
"d3-geo": "^2.0.1",
|