@reltio/components 1.4.1067 → 1.4.1072
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/AttributeGroupIcon/AttributeGroupIcon.d.ts +11 -0
- package/cjs/components/AttributeGroupIcon/AttributeGroupIcon.js +20 -0
- package/cjs/components/AttributeGroupIcon/styles.d.ts +1 -0
- package/cjs/components/AttributeGroupIcon/styles.js +11 -0
- package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +9 -0
- package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +112 -0
- package/cjs/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.d.ts +9 -0
- package/cjs/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js +53 -0
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.d.ts +7 -0
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +56 -0
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/styles.d.ts +2 -0
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/styles.js +9 -0
- package/cjs/components/AttributesFiltersBuilder/components/RowActions/RowActions.d.ts +4 -0
- package/cjs/components/AttributesFiltersBuilder/components/RowActions/RowActions.js +51 -0
- package/cjs/components/AttributesFiltersBuilder/components/RowActions/styles.d.ts +1 -0
- package/cjs/components/AttributesFiltersBuilder/components/RowActions/styles.js +23 -0
- package/cjs/components/AttributesFiltersBuilder/components/ValueEditor/ValueEditor.d.ts +4 -0
- package/cjs/components/AttributesFiltersBuilder/components/ValueEditor/ValueEditor.js +60 -0
- package/cjs/components/AttributesFiltersBuilder/components/ValueEditor/styles.d.ts +1 -0
- package/cjs/components/AttributesFiltersBuilder/components/ValueEditor/styles.js +25 -0
- package/cjs/components/AttributesFiltersBuilder/helpers.d.ts +12 -0
- package/cjs/components/AttributesFiltersBuilder/helpers.js +77 -0
- package/cjs/components/AttributesFiltersBuilder/styles.d.ts +1 -0
- package/cjs/components/AttributesFiltersBuilder/styles.js +21 -0
- package/cjs/components/AttributesFiltersBuilder/types.d.ts +24 -0
- package/cjs/components/AttributesFiltersBuilder/types.js +2 -0
- package/cjs/components/AttributesFiltersButton/ActionButtons/ActionButtons.d.ts +8 -0
- package/cjs/components/AttributesFiltersButton/ActionButtons/ActionButtons.js +18 -0
- package/cjs/components/AttributesFiltersButton/ActionButtons/styles.d.ts +1 -0
- package/cjs/components/AttributesFiltersButton/ActionButtons/styles.js +26 -0
- package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +9 -0
- package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.js +82 -0
- package/cjs/components/AttributesFiltersButton/styles.d.ts +1 -0
- package/cjs/components/AttributesFiltersButton/styles.js +30 -0
- package/cjs/components/BasicAttributeSelector/AttributeTitle/AttributeTitle.d.ts +14 -0
- package/cjs/components/BasicAttributeSelector/AttributeTitle/AttributeTitle.js +27 -0
- package/cjs/components/BasicAttributeSelector/AttributeTitle/styles.d.ts +2 -0
- package/cjs/components/BasicAttributeSelector/AttributeTitle/styles.js +44 -0
- package/cjs/components/BasicAttributeSelector/BasicAttributeSelector.d.ts +4 -0
- package/cjs/components/BasicAttributeSelector/BasicAttributeSelector.js +99 -0
- package/cjs/components/BasicAttributeSelector/helpers.d.ts +22 -0
- package/cjs/components/BasicAttributeSelector/helpers.js +80 -0
- package/cjs/components/BasicAttributeSelector/styles.d.ts +2 -0
- package/cjs/components/BasicAttributeSelector/styles.js +14 -0
- package/cjs/components/ConnectionEditor/ConnectionEditor.d.ts +12 -3
- package/cjs/components/ConnectionEditor/ConnectionEditor.js +72 -5
- package/cjs/components/ConnectionEditor/styles.d.ts +1 -0
- package/cjs/components/ConnectionEditor/styles.js +12 -0
- package/cjs/components/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.js +3 -2
- package/cjs/components/Image/ImageActionsOverlay/styles.d.ts +1 -1
- package/cjs/components/ImageDetailsView/MetaInfoForm/styles.d.ts +1 -1
- package/cjs/components/QueryBuilderRow/QueryBuilderRow.d.ts +2 -2
- package/cjs/components/QueryBuilderRowsGroup/QueryBuilderRowsGroup.d.ts +2 -2
- package/cjs/components/QueryBuilderRowsGroup/QueryBuilderRowsGroup.js +1 -1
- package/cjs/components/SelectAttributesList/SelectAttributesList.d.ts +14 -0
- package/cjs/components/SelectAttributesList/SelectAttributesList.js +75 -0
- package/cjs/components/SelectAttributesList/styles.d.ts +1 -0
- package/cjs/components/SelectAttributesList/styles.js +16 -0
- package/cjs/components/SelectionPopup/SelectionPopup.d.ts +1 -1
- package/cjs/components/SidePanel/SidePanelContentHeader/SidePanelContentHeader.d.ts +2 -2
- package/cjs/components/Title/Title.d.ts +7 -13
- package/cjs/components/Title/Title.js +24 -8
- package/cjs/components/Title/styles.d.ts +1 -1
- package/cjs/components/activityLog/activities/SearchActivity.js +2 -2
- package/cjs/components/attributes/editMode/AttributesPager/AttributeRenderer.js +1 -1
- package/cjs/components/attributes/editMode/AttributesPager/AttributesPager.js +1 -1
- package/cjs/components/attributes/editMode/AttributesPager/SpecialRenderer.js +1 -1
- package/cjs/components/attributes/editMode/ComplexAttribute/ComplexAttribute.js +1 -1
- package/cjs/components/attributes/editMode/EntitySelector/EntitySelector.d.ts +1 -1
- package/cjs/components/attributes/editMode/EntitySelector/EntitySelector.js +13 -6
- package/cjs/components/attributes/editMode/ImageAttributesLine/ImageAttributesLine.js +1 -1
- package/cjs/components/attributes/editMode/Roles/Roles.js +1 -1
- package/cjs/components/attributes/editMode/SimpleAttributeEditor/SimpleAttributeEditor.js +1 -1
- package/cjs/components/attributes/editMode/Tags/Tags.js +1 -1
- package/cjs/components/attributes/readMode/AttributesPager/AttributesPager.js +1 -1
- package/cjs/components/attributes/readMode/AttributesPager/MultiLineRenderer.js +1 -1
- package/cjs/components/attributes/readMode/AttributesPager/OneLineRenderer.js +1 -1
- package/cjs/components/attributes/readMode/AttributesPager/SpecialRenderer.js +1 -1
- package/cjs/components/attributes/readMode/ComplexAttribute/ComplexAttribute.js +1 -1
- package/cjs/components/attributes/readMode/ImageAttributesLine/ImageAttributesLine.js +1 -1
- package/cjs/components/attributes/readMode/SimpleAttribute/SimpleAttribute.js +2 -2
- package/cjs/components/attributes/readMode/SpecialAttributes/Roles/Roles.js +1 -1
- package/cjs/components/attributes/readMode/SpecialAttributes/SpecialAttributesArray.d.ts +2 -1
- package/cjs/components/attributes/readMode/SpecialAttributes/SpecialAttributesArray.js +2 -2
- package/cjs/components/attributes/readMode/SpecialAttributes/Tags/Tags.d.ts +1 -0
- package/cjs/components/attributes/readMode/SpecialAttributes/Tags/Tags.js +1 -1
- package/cjs/components/index.d.ts +4 -0
- package/cjs/components/index.js +9 -1
- package/cjs/components/workflow/hooks/useWorkflowAssignee.d.ts +1 -1
- package/cjs/components/workflow/hooks/useWorkflowAssignee.js +2 -2
- package/cjs/constants/prop-types.d.ts +1 -1
- package/cjs/constants/prop-types.js +1 -1
- package/cjs/hooks/index.d.ts +1 -0
- package/cjs/hooks/index.js +3 -1
- package/cjs/hooks/useEditableConnection.d.ts +10 -4
- package/cjs/hooks/useEditableConnection.js +27 -3
- package/cjs/hooks/useReadableSearchState.d.ts +2 -0
- package/cjs/{components/activityLog/hooks → hooks}/useReadableSearchState.js +0 -0
- package/cjs/icons/Duplicate.d.ts +3 -0
- package/cjs/icons/Duplicate.js +28 -0
- package/cjs/icons/index.d.ts +6 -3
- package/cjs/icons/index.js +14 -7
- package/cjs/types/index.d.ts +40 -0
- package/esm/components/AttributeGroupIcon/AttributeGroupIcon.d.ts +11 -0
- package/esm/components/AttributeGroupIcon/AttributeGroupIcon.js +15 -0
- package/esm/components/AttributeGroupIcon/styles.d.ts +1 -0
- package/esm/components/AttributeGroupIcon/styles.js +8 -0
- package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +9 -0
- package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +88 -0
- package/esm/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.d.ts +9 -0
- package/esm/components/AttributesFiltersBuilder/components/AttributeSelector/AttributeSelector.js +29 -0
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.d.ts +7 -0
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +32 -0
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/styles.d.ts +2 -0
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/styles.js +7 -0
- package/esm/components/AttributesFiltersBuilder/components/RowActions/RowActions.d.ts +4 -0
- package/esm/components/AttributesFiltersBuilder/components/RowActions/RowActions.js +27 -0
- package/esm/components/AttributesFiltersBuilder/components/RowActions/styles.d.ts +1 -0
- package/esm/components/AttributesFiltersBuilder/components/RowActions/styles.js +20 -0
- package/esm/components/AttributesFiltersBuilder/components/ValueEditor/ValueEditor.d.ts +4 -0
- package/esm/components/AttributesFiltersBuilder/components/ValueEditor/ValueEditor.js +36 -0
- package/esm/components/AttributesFiltersBuilder/components/ValueEditor/styles.d.ts +1 -0
- package/esm/components/AttributesFiltersBuilder/components/ValueEditor/styles.js +22 -0
- package/esm/components/AttributesFiltersBuilder/helpers.d.ts +12 -0
- package/esm/components/AttributesFiltersBuilder/helpers.js +70 -0
- package/esm/components/AttributesFiltersBuilder/styles.d.ts +1 -0
- package/esm/components/AttributesFiltersBuilder/styles.js +18 -0
- package/esm/components/AttributesFiltersBuilder/types.d.ts +24 -0
- package/esm/components/AttributesFiltersBuilder/types.js +1 -0
- package/esm/components/AttributesFiltersButton/ActionButtons/ActionButtons.d.ts +8 -0
- package/esm/components/AttributesFiltersButton/ActionButtons/ActionButtons.js +13 -0
- package/esm/components/AttributesFiltersButton/ActionButtons/styles.d.ts +1 -0
- package/esm/components/AttributesFiltersButton/ActionButtons/styles.js +23 -0
- package/esm/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +9 -0
- package/esm/components/AttributesFiltersButton/AttributesFiltersButton.js +58 -0
- package/esm/components/AttributesFiltersButton/styles.d.ts +1 -0
- package/esm/components/AttributesFiltersButton/styles.js +27 -0
- package/esm/components/BasicAttributeSelector/AttributeTitle/AttributeTitle.d.ts +14 -0
- package/esm/components/BasicAttributeSelector/AttributeTitle/AttributeTitle.js +22 -0
- package/esm/components/BasicAttributeSelector/AttributeTitle/styles.d.ts +2 -0
- package/esm/components/BasicAttributeSelector/AttributeTitle/styles.js +42 -0
- package/esm/components/BasicAttributeSelector/BasicAttributeSelector.d.ts +4 -0
- package/esm/components/BasicAttributeSelector/BasicAttributeSelector.js +75 -0
- package/esm/components/BasicAttributeSelector/helpers.d.ts +22 -0
- package/esm/components/BasicAttributeSelector/helpers.js +72 -0
- package/esm/components/BasicAttributeSelector/styles.d.ts +2 -0
- package/esm/components/BasicAttributeSelector/styles.js +12 -0
- package/esm/components/ConnectionEditor/ConnectionEditor.d.ts +12 -3
- package/esm/components/ConnectionEditor/ConnectionEditor.js +74 -7
- package/esm/components/ConnectionEditor/styles.d.ts +1 -0
- package/esm/components/ConnectionEditor/styles.js +9 -0
- package/esm/components/ConnectionRelationTypeSelector/ConnectionRelationTypeSelector.js +3 -2
- package/esm/components/Image/ImageActionsOverlay/styles.d.ts +1 -1
- package/esm/components/ImageDetailsView/MetaInfoForm/styles.d.ts +1 -1
- package/esm/components/QueryBuilderRow/QueryBuilderRow.d.ts +2 -2
- package/esm/components/QueryBuilderRowsGroup/QueryBuilderRowsGroup.d.ts +2 -2
- package/esm/components/QueryBuilderRowsGroup/QueryBuilderRowsGroup.js +1 -1
- package/esm/components/SelectAttributesList/SelectAttributesList.d.ts +14 -0
- package/esm/components/SelectAttributesList/SelectAttributesList.js +51 -0
- package/esm/components/SelectAttributesList/styles.d.ts +1 -0
- package/esm/components/SelectAttributesList/styles.js +13 -0
- package/esm/components/SelectionPopup/SelectionPopup.d.ts +1 -1
- package/esm/components/SidePanel/SidePanelContentHeader/SidePanelContentHeader.d.ts +2 -2
- package/esm/components/Title/Title.d.ts +7 -13
- package/esm/components/Title/Title.js +24 -8
- package/esm/components/Title/styles.d.ts +1 -1
- package/esm/components/activityLog/activities/SearchActivity.js +1 -1
- package/esm/components/attributes/editMode/AttributesPager/AttributeRenderer.js +1 -1
- package/esm/components/attributes/editMode/AttributesPager/AttributesPager.js +1 -1
- package/esm/components/attributes/editMode/AttributesPager/SpecialRenderer.js +1 -1
- package/esm/components/attributes/editMode/ComplexAttribute/ComplexAttribute.js +1 -1
- package/esm/components/attributes/editMode/EntitySelector/EntitySelector.d.ts +1 -1
- package/esm/components/attributes/editMode/EntitySelector/EntitySelector.js +13 -6
- package/esm/components/attributes/editMode/ImageAttributesLine/ImageAttributesLine.js +1 -1
- package/esm/components/attributes/editMode/Roles/Roles.js +1 -1
- package/esm/components/attributes/editMode/SimpleAttributeEditor/SimpleAttributeEditor.js +1 -1
- package/esm/components/attributes/editMode/Tags/Tags.js +1 -1
- package/esm/components/attributes/readMode/AttributesPager/AttributesPager.js +1 -1
- package/esm/components/attributes/readMode/AttributesPager/MultiLineRenderer.js +1 -1
- package/esm/components/attributes/readMode/AttributesPager/OneLineRenderer.js +1 -1
- package/esm/components/attributes/readMode/AttributesPager/SpecialRenderer.js +1 -1
- package/esm/components/attributes/readMode/ComplexAttribute/ComplexAttribute.js +1 -1
- package/esm/components/attributes/readMode/ImageAttributesLine/ImageAttributesLine.js +1 -1
- package/esm/components/attributes/readMode/SimpleAttribute/SimpleAttribute.js +2 -2
- package/esm/components/attributes/readMode/SpecialAttributes/Roles/Roles.js +1 -1
- package/esm/components/attributes/readMode/SpecialAttributes/SpecialAttributesArray.d.ts +2 -1
- package/esm/components/attributes/readMode/SpecialAttributes/SpecialAttributesArray.js +2 -2
- package/esm/components/attributes/readMode/SpecialAttributes/Tags/Tags.d.ts +1 -0
- package/esm/components/attributes/readMode/SpecialAttributes/Tags/Tags.js +1 -1
- package/esm/components/index.d.ts +4 -0
- package/esm/components/index.js +4 -0
- package/esm/components/workflow/hooks/useWorkflowAssignee.d.ts +1 -1
- package/esm/components/workflow/hooks/useWorkflowAssignee.js +1 -1
- package/esm/constants/prop-types.d.ts +1 -1
- package/esm/constants/prop-types.js +1 -1
- package/esm/hooks/index.d.ts +1 -0
- package/esm/hooks/index.js +1 -0
- package/esm/hooks/useEditableConnection.d.ts +10 -4
- package/esm/hooks/useEditableConnection.js +24 -3
- package/esm/hooks/useReadableSearchState.d.ts +2 -0
- package/esm/{components/activityLog/hooks → hooks}/useReadableSearchState.js +0 -0
- package/esm/icons/Duplicate.d.ts +3 -0
- package/esm/icons/Duplicate.js +23 -0
- package/esm/icons/index.d.ts +6 -3
- package/esm/icons/index.js +6 -3
- package/esm/types/index.d.ts +40 -0
- package/package.json +3 -3
- package/cjs/components/activityLog/hooks/useReadableSearchState.d.ts +0 -1
- package/esm/components/activityLog/hooks/useReadableSearchState.d.ts +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { memo, useCallback } from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import CloseIcon from '@material-ui/icons/Close';
|
|
4
|
+
import AddCircleIcon from '@material-ui/icons/AddCircle';
|
|
5
|
+
import { SmallIconButtonWithTooltip } from '../../../SmallIconButton/index';
|
|
6
|
+
import DuplicateIcon from '../../../../icons/Duplicate';
|
|
7
|
+
import { useStyles } from './styles';
|
|
8
|
+
var RowActions = function (_a) {
|
|
9
|
+
var rowData = _a.rowData, rowContext = _a.rowContext;
|
|
10
|
+
var styles = useStyles();
|
|
11
|
+
var _b = rowData || {}, index = _b.id, attribute = _b.attribute;
|
|
12
|
+
var addRowAfterIndex = rowContext.addRowAfterIndex, removeRow = rowContext.removeRow, duplicateRow = rowContext.duplicateRow;
|
|
13
|
+
var onAddRowAfterId = useCallback(function () {
|
|
14
|
+
addRowAfterIndex(index);
|
|
15
|
+
}, [addRowAfterIndex, index]);
|
|
16
|
+
var onRowDuplicate = useCallback(function () {
|
|
17
|
+
duplicateRow(index);
|
|
18
|
+
}, [duplicateRow, index]);
|
|
19
|
+
var onRowDelete = useCallback(function () {
|
|
20
|
+
removeRow(index);
|
|
21
|
+
}, [index, removeRow]);
|
|
22
|
+
return (React.createElement("div", { className: styles.actions },
|
|
23
|
+
React.createElement(SmallIconButtonWithTooltip, { tooltipTitle: i18n.text('Add'), icon: AddCircleIcon, size: "M", onClick: onAddRowAfterId }),
|
|
24
|
+
attribute && (React.createElement(SmallIconButtonWithTooltip, { tooltipTitle: i18n.text('Duplicate'), icon: DuplicateIcon, size: "M", onClick: onRowDuplicate })),
|
|
25
|
+
React.createElement(SmallIconButtonWithTooltip, { tooltipTitle: i18n.text('Delete'), icon: CloseIcon, size: "M", onClick: onRowDelete })));
|
|
26
|
+
};
|
|
27
|
+
export default memo(RowActions);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"actions" | "actionIcon">;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
export var useStyles = makeStyles(function () { return ({
|
|
3
|
+
actions: {
|
|
4
|
+
width: '88px',
|
|
5
|
+
height: '24px',
|
|
6
|
+
display: 'flex',
|
|
7
|
+
alignItems: 'center',
|
|
8
|
+
justifyContent: 'space-between',
|
|
9
|
+
flexShrink: 0,
|
|
10
|
+
'& >span': {
|
|
11
|
+
cursor: 'pointer',
|
|
12
|
+
display: 'flex'
|
|
13
|
+
},
|
|
14
|
+
'& $actionIcon': {
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
color: 'rgba(0, 0, 0, .54)'
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
actionIcon: {}
|
|
20
|
+
}); });
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React, { memo, useMemo, useCallback } from 'react';
|
|
2
|
+
import { checkIfOptionHasValues, getAttrDataTypeDefinition, getDataTypeDefinitionForFilterValue } from '@reltio/mdm-sdk';
|
|
3
|
+
import FilterValueEditor from '../../../editors/FilterEditor/FilterValueEditor';
|
|
4
|
+
import { useStyles } from './styles';
|
|
5
|
+
var ValuesEditor = function (_a) {
|
|
6
|
+
var rowData = _a.rowData, rowContext = _a.rowContext;
|
|
7
|
+
var styles = useStyles();
|
|
8
|
+
var canFilterAcceptValues = (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && checkIfOptionHasValues(rowData.filter);
|
|
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, _f = _e.attrType, attrType = _f === void 0 ? {} : _f, _g = _e.fieldName, fieldName = _g === void 0 ? null : _g, filter = _b.filter, id = _b.id;
|
|
11
|
+
var valueDataTypeDefinition = attrType && getAttrDataTypeDefinition(attrType);
|
|
12
|
+
var filterValueDataTypeDefinition = valueDataTypeDefinition && getDataTypeDefinitionForFilterValue(valueDataTypeDefinition, filter);
|
|
13
|
+
var editorFilter = useMemo(function () { return ({
|
|
14
|
+
filter: filter,
|
|
15
|
+
fieldName: fieldName,
|
|
16
|
+
values: values || []
|
|
17
|
+
}); }, [filter, fieldName, values]);
|
|
18
|
+
var TextFieldProps = useMemo(function () { return ({
|
|
19
|
+
InputProps: {
|
|
20
|
+
classes: {
|
|
21
|
+
root: styles.input
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}); }, [styles]);
|
|
25
|
+
var editorClasses = useMemo(function () { return ({ root: styles.root }); }, [styles]);
|
|
26
|
+
var changeValue = useCallback(function (values) {
|
|
27
|
+
var newFilter = {
|
|
28
|
+
fieldName: fieldName,
|
|
29
|
+
filter: filter,
|
|
30
|
+
values: values
|
|
31
|
+
};
|
|
32
|
+
changeFilter(newFilter, id);
|
|
33
|
+
}, [changeFilter, id, fieldName, filter]);
|
|
34
|
+
return (React.createElement("div", { className: styles.valuesEditor }, (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && canFilterAcceptValues && (React.createElement(FilterValueEditor, { filter: editorFilter, onChange: changeValue, dataTypeDefinition: filterValueDataTypeDefinition, fullWidth: true, TextFieldProps: TextFieldProps, color: "primary", classes: editorClasses, orientation: "horizontal" }))));
|
|
35
|
+
};
|
|
36
|
+
export default memo(ValuesEditor);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"input" | "root" | "valuesEditor">;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
export var useStyles = makeStyles(function () { return ({
|
|
3
|
+
input: {
|
|
4
|
+
margin: 0,
|
|
5
|
+
borderRadius: '4px',
|
|
6
|
+
width: '100%',
|
|
7
|
+
paddingTop: 0,
|
|
8
|
+
paddingBottom: 0
|
|
9
|
+
},
|
|
10
|
+
root: {
|
|
11
|
+
borderRadius: '4px 4px 0 0',
|
|
12
|
+
padding: 0,
|
|
13
|
+
display: 'flex',
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
margin: 0
|
|
16
|
+
},
|
|
17
|
+
valuesEditor: {
|
|
18
|
+
width: '222px!important',
|
|
19
|
+
minHeight: '40px',
|
|
20
|
+
flexShrink: 0
|
|
21
|
+
}
|
|
22
|
+
}); });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AttributeType, TEntityType, Metadata, SearchFilter } from '@reltio/mdm-sdk';
|
|
2
|
+
import { AttributeSelectorItem } from '../../types';
|
|
3
|
+
import { FilterOption } from './types';
|
|
4
|
+
export declare const getAttributeSelectorItems: (attributeTypes: AttributeType[], entityType: TEntityType, metadata: Metadata) => AttributeSelectorItem[];
|
|
5
|
+
export declare const findValue: (options: FilterOption[], filter: string) => FilterOption;
|
|
6
|
+
export declare const getRowsDataFromFilters: (filters: SearchFilter[], attributesGroup: AttributeSelectorItem[]) => {
|
|
7
|
+
attribute: AttributeSelectorItem;
|
|
8
|
+
filter: string;
|
|
9
|
+
id: number;
|
|
10
|
+
values: string[];
|
|
11
|
+
}[];
|
|
12
|
+
export declare const getEntityTypeFromAttrTypes: (attributeTypes: AttributeType[]) => any;
|
|
@@ -0,0 +1,70 @@
|
|
|
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 { getAttributesTreeFromAttributes, attributeUriToSearchUri, isSpecialAttribute, getBaseUri } from '@reltio/mdm-sdk';
|
|
13
|
+
var createAttributeItem = function (attrType, entityTypeUri) {
|
|
14
|
+
var title = attrType.label || attrType.name;
|
|
15
|
+
return {
|
|
16
|
+
title: title,
|
|
17
|
+
fieldName: attributeUriToSearchUri(attrType.uri),
|
|
18
|
+
entityTypeUri: entityTypeUri,
|
|
19
|
+
attrType: attrType
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
var createAttributesConfig = function (attrNode, entityTypeUri, createAttributeConfig) {
|
|
23
|
+
var resConfig = __assign(__assign({}, createAttributeConfig(attrNode, entityTypeUri)), { uri: attrNode.uri });
|
|
24
|
+
var children = attrNode.children
|
|
25
|
+
? attrNode.children.map(function (childNode) { return createAttributesConfig(childNode, entityTypeUri, createAttributeConfig); })
|
|
26
|
+
: [];
|
|
27
|
+
if (children.length)
|
|
28
|
+
resConfig.children = children;
|
|
29
|
+
return resConfig;
|
|
30
|
+
};
|
|
31
|
+
export var getAttributeSelectorItems = function (attributeTypes, entityType, metadata) {
|
|
32
|
+
if (entityType === void 0) { entityType = {}; }
|
|
33
|
+
return getAttributesTreeFromAttributes(attributeTypes, metadata).map(function (attrNode) {
|
|
34
|
+
return createAttributesConfig(attrNode, entityType.uri, createAttributeItem);
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
var findAttributeSelectorItem = function (fieldName, attributesGroup) {
|
|
38
|
+
var attrGroup;
|
|
39
|
+
var findAttribute = function (fieldName, attributesGroup) {
|
|
40
|
+
for (var _i = 0, attributesGroup_1 = attributesGroup; _i < attributesGroup_1.length; _i++) {
|
|
41
|
+
var attributeGroup = attributesGroup_1[_i];
|
|
42
|
+
if (fieldName === attributeGroup.fieldName) {
|
|
43
|
+
attrGroup = attributeGroup;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if ('children' in attributeGroup) {
|
|
47
|
+
findAttribute(fieldName, attributeGroup.children);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
findAttribute(fieldName, attributesGroup);
|
|
52
|
+
return attrGroup;
|
|
53
|
+
};
|
|
54
|
+
export var findValue = function (options, filter) {
|
|
55
|
+
return options ? options.find(function (option) { return option.value === filter; }) : null;
|
|
56
|
+
};
|
|
57
|
+
export var getRowsDataFromFilters = function (filters, attributesGroup) {
|
|
58
|
+
return filters.map(function (filter, index) {
|
|
59
|
+
return {
|
|
60
|
+
attribute: filter.fieldName ? findAttributeSelectorItem(filter.fieldName, attributesGroup) : undefined,
|
|
61
|
+
filter: filter.filter,
|
|
62
|
+
id: index,
|
|
63
|
+
values: filter.values
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
export var getEntityTypeFromAttrTypes = function (attributeTypes) {
|
|
68
|
+
var regularAttribute = attributeTypes.find(function (attribute) { return !isSpecialAttribute(attribute); });
|
|
69
|
+
return regularAttribute ? getBaseUri(regularAttribute.uri) : null;
|
|
70
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"attrSelector" | "filterSelector" | "actionContainer">;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
export var useStyles = makeStyles(function () { return ({
|
|
3
|
+
attrSelector: {
|
|
4
|
+
width: '222px',
|
|
5
|
+
height: '40px',
|
|
6
|
+
flexShrink: 0
|
|
7
|
+
},
|
|
8
|
+
filterSelector: {
|
|
9
|
+
width: '180px',
|
|
10
|
+
flexShrink: 0,
|
|
11
|
+
marginTop: 0,
|
|
12
|
+
marginBottom: 0
|
|
13
|
+
},
|
|
14
|
+
actionContainer: {
|
|
15
|
+
alignItems: 'center',
|
|
16
|
+
marginRight: '15px'
|
|
17
|
+
}
|
|
18
|
+
}); });
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SearchFilter } from '@reltio/mdm-sdk';
|
|
2
|
+
import { AttributeSelectorItem } from '../../types';
|
|
3
|
+
export declare type FilterOption = {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
};
|
|
7
|
+
export declare type RowData = {
|
|
8
|
+
attribute: AttributeSelectorItem;
|
|
9
|
+
filter: string;
|
|
10
|
+
id: number;
|
|
11
|
+
values: string[];
|
|
12
|
+
};
|
|
13
|
+
export declare type RowContext = {
|
|
14
|
+
attributesGroup: AttributeSelectorItem[];
|
|
15
|
+
addNewFilter: (newFilter: SearchFilter) => void;
|
|
16
|
+
addRowAfterIndex: (index: number) => void;
|
|
17
|
+
changeFilter: (newFilter: SearchFilter, id: number) => void;
|
|
18
|
+
duplicateRow: (index: number) => void;
|
|
19
|
+
removeRow: (index: number) => void;
|
|
20
|
+
};
|
|
21
|
+
export declare type AttributeFiltersComponentProps = {
|
|
22
|
+
rowData: RowData;
|
|
23
|
+
rowContext: RowContext;
|
|
24
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import Button from '@material-ui/core/Button';
|
|
4
|
+
import { useStyles } from './styles';
|
|
5
|
+
var ActionButtons = function (_a) {
|
|
6
|
+
var onClear = _a.onClear, onCancel = _a.onCancel, onApply = _a.onApply;
|
|
7
|
+
var styles = useStyles();
|
|
8
|
+
return (React.createElement("div", { className: styles.buttonsWrapper },
|
|
9
|
+
React.createElement(Button, { onClick: onClear, variant: "text", color: "default", className: styles.clearButon }, i18n.text('Clear all')),
|
|
10
|
+
React.createElement(Button, { onClick: onCancel, variant: "text", color: "default", className: styles.cancelButton }, i18n.text('Cancel')),
|
|
11
|
+
React.createElement(Button, { onClick: onApply, variant: "text", color: "primary", className: styles.applyButton }, i18n.text('Apply'))));
|
|
12
|
+
};
|
|
13
|
+
export default ActionButtons;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"buttonsWrapper" | "cancelButton" | "applyButton" | "clearButon">;
|
|
@@ -0,0 +1,23 @@
|
|
|
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 { makeStyles } from '@material-ui/core/styles';
|
|
13
|
+
var allButtonsStyle = {
|
|
14
|
+
alignSelf: 'center'
|
|
15
|
+
};
|
|
16
|
+
export var useStyles = makeStyles(function () { return ({
|
|
17
|
+
buttonsWrapper: {
|
|
18
|
+
display: 'flex'
|
|
19
|
+
},
|
|
20
|
+
applyButton: __assign(__assign({}, allButtonsStyle), { marginRight: '16px' }),
|
|
21
|
+
cancelButton: __assign(__assign({}, allButtonsStyle), { marginLeft: 'auto' }),
|
|
22
|
+
clearButon: __assign({}, allButtonsStyle)
|
|
23
|
+
}); });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SearchFilter, AttributeType } from '@reltio/mdm-sdk';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
filters: SearchFilter[];
|
|
5
|
+
onChange: (filtres: SearchFilter[]) => void;
|
|
6
|
+
attributeTypes: AttributeType[];
|
|
7
|
+
};
|
|
8
|
+
declare const _default: React.MemoExoticComponent<({ filters: filtersProp, attributeTypes, onChange }: Props) => JSX.Element>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React, { useRef, useState, useEffect, useCallback, memo } from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import Popover from '@material-ui/core/Popover';
|
|
4
|
+
import Button from '@material-ui/core/Button';
|
|
5
|
+
import FilterIcon from '@material-ui/icons/FilterList';
|
|
6
|
+
import Typography from '@material-ui/core/Typography';
|
|
7
|
+
import Divider from '@material-ui/core/Divider';
|
|
8
|
+
import AttributesFiltersBuilder from '../AttributesFiltersBuilder/AttributesFiltersBuilder';
|
|
9
|
+
import ActionButtons from './ActionButtons/ActionButtons';
|
|
10
|
+
import { useStyles } from './styles';
|
|
11
|
+
var AttributesFiltersButton = function (_a) {
|
|
12
|
+
var filtersProp = _a.filters, attributeTypes = _a.attributeTypes, onChange = _a.onChange;
|
|
13
|
+
var styles = useStyles();
|
|
14
|
+
var buttonRef = useRef();
|
|
15
|
+
var _b = useState(false), isOpen = _b[0], setIsOpen = _b[1];
|
|
16
|
+
var _c = useState([]), filters = _c[0], setFilters = _c[1];
|
|
17
|
+
var isFiltersApplied = filtersProp.some(function (_a) {
|
|
18
|
+
var fieldName = _a.fieldName, filter = _a.filter, values = _a.values;
|
|
19
|
+
return fieldName && filter && values.length;
|
|
20
|
+
});
|
|
21
|
+
var buttonColor = isFiltersApplied ? 'primary' : 'inherit';
|
|
22
|
+
var togglePopup = function () { return setIsOpen(function (open) { return !open; }); };
|
|
23
|
+
useEffect(function () {
|
|
24
|
+
if (isOpen) {
|
|
25
|
+
setFilters(filtersProp);
|
|
26
|
+
}
|
|
27
|
+
}, [filtersProp, isOpen]);
|
|
28
|
+
var applyButtonHandler = useCallback(function () {
|
|
29
|
+
onChange(filters);
|
|
30
|
+
togglePopup();
|
|
31
|
+
}, [filters, onChange]);
|
|
32
|
+
var cancelButtonHandler = useCallback(function () {
|
|
33
|
+
togglePopup();
|
|
34
|
+
}, []);
|
|
35
|
+
var clearAllButtonHandler = useCallback(function () {
|
|
36
|
+
setFilters([]);
|
|
37
|
+
}, []);
|
|
38
|
+
return (React.createElement(React.Fragment, null,
|
|
39
|
+
React.createElement(Button, { ref: buttonRef, color: buttonColor, classes: {
|
|
40
|
+
root: styles.triggerButton,
|
|
41
|
+
textPrimary: styles.changedFiltersIndicator
|
|
42
|
+
}, onClick: togglePopup },
|
|
43
|
+
React.createElement(FilterIcon, { color: buttonColor })),
|
|
44
|
+
React.createElement(Popover, { open: isOpen, classes: { paper: styles.popupContent }, anchorEl: buttonRef.current, onClose: togglePopup, anchorOrigin: {
|
|
45
|
+
vertical: 'bottom',
|
|
46
|
+
horizontal: 'right'
|
|
47
|
+
}, transformOrigin: {
|
|
48
|
+
vertical: 'top',
|
|
49
|
+
horizontal: 'left'
|
|
50
|
+
} },
|
|
51
|
+
React.createElement(React.Fragment, null,
|
|
52
|
+
React.createElement(Typography, { variant: "h6" }, i18n.text('Filter')),
|
|
53
|
+
React.createElement("div", { className: styles.filtersBuilderWrapper },
|
|
54
|
+
React.createElement(AttributesFiltersBuilder, { attributeTypes: attributeTypes, filters: filters, onChange: setFilters })),
|
|
55
|
+
React.createElement(Divider, { className: styles.divider }),
|
|
56
|
+
React.createElement(ActionButtons, { onApply: applyButtonHandler, onCancel: cancelButtonHandler, onClear: clearAllButtonHandler })))));
|
|
57
|
+
};
|
|
58
|
+
export default memo(AttributesFiltersButton);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"divider" | "triggerButton" | "filtersBuilderWrapper" | "popupContent" | "changedFiltersIndicator">;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { makeStyles, fade } from '@material-ui/core/styles';
|
|
2
|
+
export var useStyles = makeStyles(function (theme) { return ({
|
|
3
|
+
triggerButton: {
|
|
4
|
+
minWidth: 0,
|
|
5
|
+
color: 'rgba(0,0,0,0.54)',
|
|
6
|
+
width: '40px',
|
|
7
|
+
marginLeft: 'auto',
|
|
8
|
+
marginRight: '12px'
|
|
9
|
+
},
|
|
10
|
+
filtersBuilderWrapper: {
|
|
11
|
+
marginTop: '20px'
|
|
12
|
+
},
|
|
13
|
+
popupContent: {
|
|
14
|
+
paddingLeft: '16px',
|
|
15
|
+
paddingTop: '20px',
|
|
16
|
+
paddingBottom: '6px',
|
|
17
|
+
width: '770px'
|
|
18
|
+
},
|
|
19
|
+
divider: {
|
|
20
|
+
marginBottom: '14px',
|
|
21
|
+
marginLeft: '-16px',
|
|
22
|
+
background: 'rgba(0, 0, 0, 0.121569)'
|
|
23
|
+
},
|
|
24
|
+
changedFiltersIndicator: {
|
|
25
|
+
backgroundColor: fade(theme.palette.primary.main, 0.12)
|
|
26
|
+
}
|
|
27
|
+
}); });
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { AttributeSelectorItem } from '../../../types';
|
|
3
|
+
declare type Value = {
|
|
4
|
+
fieldName: string;
|
|
5
|
+
title: string;
|
|
6
|
+
};
|
|
7
|
+
declare type Props = {
|
|
8
|
+
value: AttributeSelectorItem;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
getLabel: (value: Value) => string;
|
|
11
|
+
onSelectAttributeClick: (event: any) => void;
|
|
12
|
+
};
|
|
13
|
+
declare const AttributeTitle: ({ value, getLabel, onSelectAttributeClick, disabled }: Props) => JSX.Element;
|
|
14
|
+
export default AttributeTitle;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
import { either, prop } from 'ramda';
|
|
5
|
+
import { ArrowDropDown } from '@material-ui/icons';
|
|
6
|
+
import ExpandedValueTooltip from '../../ExpandedValueTooltip/ExpandedValueTooltip';
|
|
7
|
+
import SmallIconButton from '../../SmallIconButton/SmallIconButton';
|
|
8
|
+
import useStyles from './styles';
|
|
9
|
+
var defaultGetLabel = either(prop('title'), prop('fieldName'));
|
|
10
|
+
var AttributeTitle = function (_a) {
|
|
11
|
+
var _b, _c, _d;
|
|
12
|
+
var value = _a.value, _e = _a.getLabel, getLabel = _e === void 0 ? defaultGetLabel : _e, onSelectAttributeClick = _a.onSelectAttributeClick, _f = _a.disabled, disabled = _f === void 0 ? false : _f;
|
|
13
|
+
var styles = useStyles();
|
|
14
|
+
var label = value && getLabel(value);
|
|
15
|
+
return (React.createElement("div", { onClick: disabled ? undefined : onSelectAttributeClick, className: classnames(styles.attribute, (_b = {},
|
|
16
|
+
_b[styles.attributeWithValue] = !!label,
|
|
17
|
+
_b), (_c = {}, _c[styles.disabled] = disabled, _c)) },
|
|
18
|
+
React.createElement(ExpandedValueTooltip, { value: label },
|
|
19
|
+
React.createElement("div", { className: classnames(styles.name, (_d = {}, _d[styles.disabled] = disabled, _d)) }, label || React.createElement("span", { className: styles.noSelect }, i18n.text('Select attribute')))),
|
|
20
|
+
React.createElement(SmallIconButton, { size: 'M', icon: ArrowDropDown, disabled: disabled })));
|
|
21
|
+
};
|
|
22
|
+
export default AttributeTitle;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
var useStyles = makeStyles({
|
|
3
|
+
attribute: {
|
|
4
|
+
cursor: 'pointer',
|
|
5
|
+
lineHeight: '16px',
|
|
6
|
+
flexBasis: '100%',
|
|
7
|
+
display: 'flex',
|
|
8
|
+
alignItems: 'center',
|
|
9
|
+
padding: '0 10px 0 16px',
|
|
10
|
+
width: 'calc(100% - 32px)',
|
|
11
|
+
'&$attributeWithValue': {
|
|
12
|
+
borderBottom: '1px solid rgba(0,0,0,0.38)'
|
|
13
|
+
},
|
|
14
|
+
'&$disabled': {
|
|
15
|
+
cursor: 'default'
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
disabled: {},
|
|
19
|
+
attributeWithValue: {},
|
|
20
|
+
noSelect: {},
|
|
21
|
+
name: {
|
|
22
|
+
fontSize: '14px',
|
|
23
|
+
color: 'rgba(0,0,0,0.87)',
|
|
24
|
+
overflow: 'hidden',
|
|
25
|
+
whiteSpace: 'nowrap',
|
|
26
|
+
textOverflow: 'ellipsis',
|
|
27
|
+
direction: 'rtl',
|
|
28
|
+
textAlign: 'left',
|
|
29
|
+
flex: '1 0',
|
|
30
|
+
width: '0',
|
|
31
|
+
'& $noSelect': {
|
|
32
|
+
color: 'rgba(0,0,0,0.38)'
|
|
33
|
+
},
|
|
34
|
+
'&$disabled': {
|
|
35
|
+
color: 'rgba(0,0,0,0.26)',
|
|
36
|
+
'& $noSelect': {
|
|
37
|
+
color: 'rgba(0,0,0,0.26)'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
export default useStyles;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BasicAttributeSelectorProps } from '../../types';
|
|
3
|
+
declare const _default: React.MemoExoticComponent<({ className, itemsGroups, value, getLabel, onSelect, onRestoreFocus, onOpenPopup, disableRestoreFocus, disableEnforceFocus, single, ungroup, disabled, hideCheckBox }: BasicAttributeSelectorProps) => JSX.Element>;
|
|
4
|
+
export default _default;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React, { memo, useCallback, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import i18n from 'ui-i18n';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
import { identity, pipe, tap, prop, flatten, pick, map, chain, when, always } from 'ramda';
|
|
5
|
+
import SelectionPopup from '../SelectionPopup/SelectionPopup';
|
|
6
|
+
import { useKeyboardNavigation } from '../SelectionPopup/helpers';
|
|
7
|
+
import AttributeTitle from './AttributeTitle/AttributeTitle';
|
|
8
|
+
import { filterSelectedAttributes, getAttributeIndex, getContainerWidth, getOnEnterHandler, prepareGroupsForSelectAttributeList } from './helpers';
|
|
9
|
+
import SelectAttributesList from '../SelectAttributesList/SelectAttributesList';
|
|
10
|
+
import { flattenGroupedItemsData } from '../VirtualGroupedList/helpers';
|
|
11
|
+
import useStyles from './styles';
|
|
12
|
+
var ATTRIBUTES_LIST_HEIGHT = 400;
|
|
13
|
+
var ATTRIBUTES_LIST_WIDTH = 308;
|
|
14
|
+
var ATTRIBUTES_POPUP_HEIGHT = 507;
|
|
15
|
+
var BasicAttributeSelector = function (_a) {
|
|
16
|
+
var className = _a.className, itemsGroups = _a.itemsGroups, value = _a.value, getLabel = _a.getLabel, onSelect = _a.onSelect, _b = _a.onRestoreFocus, onRestoreFocus = _b === void 0 ? identity : _b, _c = _a.onOpenPopup, onOpenPopup = _c === void 0 ? identity : _c, _d = _a.disableRestoreFocus, disableRestoreFocus = _d === void 0 ? false : _d, _e = _a.disableEnforceFocus, disableEnforceFocus = _e === void 0 ? false : _e, _f = _a.single, single = _f === void 0 ? false : _f, _g = _a.ungroup, ungroup = _g === void 0 ? false : _g, _h = _a.disabled, disabled = _h === void 0 ? false : _h, _j = _a.hideCheckBox, hideCheckBox = _j === void 0 ? false : _j;
|
|
17
|
+
var styles = useStyles();
|
|
18
|
+
var _k = useState(null), selectAnchor = _k[0], setSelectAnchor = _k[1];
|
|
19
|
+
var openPopup = function (event) {
|
|
20
|
+
onOpenPopup();
|
|
21
|
+
setSelectAnchor(event.currentTarget);
|
|
22
|
+
};
|
|
23
|
+
var closePopup = useCallback(function () { return setSelectAnchor(null); }, []);
|
|
24
|
+
var isPopupOpen = !!selectAnchor;
|
|
25
|
+
var _l = useState(''), filterText = _l[0], setFilterText = _l[1];
|
|
26
|
+
var clearFilterText = useCallback(function () { return setFilterText(''); }, []);
|
|
27
|
+
var _m = useState([]), selectedAttributes = _m[0], setSelectedAttributes = _m[1];
|
|
28
|
+
var clearSelectedAttributes = useCallback(function () { return setSelectedAttributes([]); }, []);
|
|
29
|
+
var filteredItemsGroups = useMemo(function () { return prepareGroupsForSelectAttributeList(filterText, itemsGroups); }, [
|
|
30
|
+
itemsGroups,
|
|
31
|
+
filterText
|
|
32
|
+
]);
|
|
33
|
+
var items = useMemo(function () {
|
|
34
|
+
return pipe(when(always(ungroup), chain(pipe(prop('items'), flatten, map(pick(['item', 'level']))))), flattenGroupedItemsData)(filteredItemsGroups);
|
|
35
|
+
}, [ungroup, filteredItemsGroups]);
|
|
36
|
+
var containerWidth = useMemo(function () { return Math.max(getContainerWidth(filteredItemsGroups), ATTRIBUTES_LIST_WIDTH); }, [
|
|
37
|
+
filteredItemsGroups
|
|
38
|
+
]);
|
|
39
|
+
var handleOnClose = pipe(tap(pipe(clearSelectedAttributes, clearFilterText, closePopup)), onRestoreFocus);
|
|
40
|
+
var searchInputRef = useRef();
|
|
41
|
+
var onListItemClick = useCallback(function (attribute, checked) {
|
|
42
|
+
onSelect({
|
|
43
|
+
checked: checked,
|
|
44
|
+
attribute: attribute,
|
|
45
|
+
index: checked ? selectedAttributes.length : getAttributeIndex(selectedAttributes, attribute),
|
|
46
|
+
selectedAttributes: selectedAttributes
|
|
47
|
+
});
|
|
48
|
+
if (single) {
|
|
49
|
+
setSelectedAttributes(checked ? [attribute] : []);
|
|
50
|
+
handleOnClose({});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
setSelectedAttributes(filterSelectedAttributes({ selectedAttributes: selectedAttributes, attribute: attribute, checked: checked }));
|
|
54
|
+
if (searchInputRef.current) {
|
|
55
|
+
searchInputRef.current.focus();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}, [selectedAttributes, onSelect, single, handleOnClose, searchInputRef]);
|
|
59
|
+
var handleSearchOnEnter = useCallback(getOnEnterHandler({ onListItemClick: onListItemClick, selectedAttributes: selectedAttributes }), [
|
|
60
|
+
onListItemClick,
|
|
61
|
+
selectedAttributes
|
|
62
|
+
]);
|
|
63
|
+
var _o = useKeyboardNavigation({
|
|
64
|
+
items: items,
|
|
65
|
+
open: isPopupOpen,
|
|
66
|
+
onSelectFocusedItem: handleSearchOnEnter,
|
|
67
|
+
selectedItems: selectedAttributes,
|
|
68
|
+
onClose: handleOnClose
|
|
69
|
+
}), focusIndex = _o.focusIndex, handleKeyDown = _o.handleKeyDown;
|
|
70
|
+
return (React.createElement("div", { className: classnames(styles.selector, className), "data-reltio-id": "attribute-selector" },
|
|
71
|
+
React.createElement(AttributeTitle, { value: value, getLabel: getLabel, onSelectAttributeClick: openPopup, disabled: disabled }),
|
|
72
|
+
React.createElement(SelectionPopup, { open: isPopupOpen, anchorEl: selectAnchor, onClose: handleOnClose, onSearch: setFilterText, title: i18n.text('Select attribute'), containerWidth: containerWidth, containerHeight: ATTRIBUTES_POPUP_HEIGHT, searchInputOnKeyDown: handleKeyDown, anchorOrigin: { horizontal: 'right', vertical: 'bottom' }, searchInputRef: searchInputRef, disableRestoreFocus: disableRestoreFocus, disableEnforceFocus: disableEnforceFocus },
|
|
73
|
+
React.createElement(SelectAttributesList, { items: items, onItemClick: onListItemClick, selectedAttributes: selectedAttributes, width: containerWidth, height: ATTRIBUTES_LIST_HEIGHT, focusIndex: focusIndex, hideCheckBox: hideCheckBox }))));
|
|
74
|
+
};
|
|
75
|
+
export default memo(BasicAttributeSelector);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AttributeSelectorItem, AttributeSelectorItemsGroup } from '../../types';
|
|
2
|
+
export declare const isEqualAttributes: any;
|
|
3
|
+
export declare const checkAttributeIncludes: (attribute: AttributeSelectorItem, selectedAttributes: AttributeSelectorItem[]) => boolean;
|
|
4
|
+
export declare const filterItemsTree: (item: AttributeSelectorItem, filterText: string) => boolean;
|
|
5
|
+
export declare const filterSelectedAttributes: ({ attribute, selectedAttributes, checked }: {
|
|
6
|
+
attribute: AttributeSelectorItem;
|
|
7
|
+
selectedAttributes: AttributeSelectorItem[];
|
|
8
|
+
checked: boolean;
|
|
9
|
+
}) => AttributeSelectorItem[];
|
|
10
|
+
export declare const getAttributeIndex: (selectedAttributes: AttributeSelectorItem[], attribute: AttributeSelectorItem) => number;
|
|
11
|
+
export declare const getContainerWidth: (items: any) => any;
|
|
12
|
+
export declare const getOnEnterHandler: ({ onListItemClick, selectedAttributes }: {
|
|
13
|
+
selectedAttributes: AttributeSelectorItem[];
|
|
14
|
+
onListItemClick: (attribute: AttributeSelectorItem, checked: boolean) => void;
|
|
15
|
+
}) => ({ item, groupData }: {
|
|
16
|
+
item: any;
|
|
17
|
+
groupData: any;
|
|
18
|
+
}) => void;
|
|
19
|
+
export declare const prepareGroupsForSelectAttributeList: (filterText: string, groups: AttributeSelectorItemsGroup[]) => {
|
|
20
|
+
item: AttributeSelectorItemsGroup[];
|
|
21
|
+
items: AttributeSelectorItem[];
|
|
22
|
+
};
|