@reltio/components 1.4.1193 → 1.4.1197
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/ActionButton/styles.d.ts +1 -1
- package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +5 -1
- package/cjs/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +4 -3
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.d.ts +3 -2
- package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +5 -4
- package/cjs/components/AttributesFiltersBuilder/components/ValuesEditor/ValuesEditor.js +2 -11
- package/cjs/components/AttributesFiltersBuilder/index.d.ts +4 -0
- package/cjs/components/AttributesFiltersBuilder/index.js +12 -0
- package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +5 -1
- package/cjs/components/AttributesFiltersButton/AttributesFiltersButton.js +2 -2
- package/cjs/components/{AttributesFiltersBuilder/components/MatchRulesSelector → MatchRulesSelector}/MatchRulesSelector.d.ts +2 -6
- package/cjs/components/{AttributesFiltersBuilder/components/MatchRulesSelector → MatchRulesSelector}/MatchRulesSelector.js +1 -7
- package/cjs/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/MultiValueSelector.d.ts +0 -0
- package/cjs/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/MultiValueSelector.js +6 -6
- package/cjs/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/styles.d.ts +0 -0
- package/cjs/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/styles.js +0 -0
- package/cjs/components/ValueChip/styles.d.ts +1 -1
- package/cjs/components/attributes/ImageAttributesLine/styles.d.ts +1 -1
- package/cjs/components/attributes/editMode/MoreAttributesButton/styles.d.ts +1 -1
- package/cjs/components/commonReactSelectComponents/LoadMoreButton.d.ts +8 -0
- package/cjs/components/commonReactSelectComponents/LoadMoreButton.js +17 -0
- package/cjs/components/commonReactSelectComponents/MenuList.d.ts +3 -0
- package/cjs/components/commonReactSelectComponents/MenuList.js +25 -0
- package/cjs/components/commonReactSelectComponents/styles.d.ts +1 -0
- package/cjs/components/commonReactSelectComponents/styles.js +24 -0
- package/cjs/components/crosswalks/CrosswalkAttributes/styles.d.ts +1 -1
- package/cjs/components/editors/DataTypeValueEditor/useEditorContext.d.ts +8 -2
- package/cjs/components/editors/DataTypeValueEditor/useEditorContext.js +5 -4
- package/cjs/components/editors/DependentLookupEditor/DependentLookupEditor.js +52 -10
- package/cjs/components/editors/TypeaheadEditor/TypeaheadEditor.js +32 -7
- package/cjs/components/history/HistoryGraph/HistoryCircle.d.ts +1 -1
- package/cjs/components/history/HistoryGraph/HistoryGraph.d.ts +1 -1
- package/cjs/components/index.d.ts +5 -0
- package/cjs/components/index.js +12 -3
- package/esm/components/ActionButton/styles.d.ts +1 -1
- package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.d.ts +5 -1
- package/esm/components/AttributesFiltersBuilder/AttributesFiltersBuilder.js +4 -3
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.d.ts +3 -2
- package/esm/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.js +5 -4
- package/esm/components/AttributesFiltersBuilder/components/ValuesEditor/ValuesEditor.js +3 -12
- package/esm/components/AttributesFiltersBuilder/index.d.ts +4 -0
- package/esm/components/AttributesFiltersBuilder/index.js +3 -0
- package/esm/components/AttributesFiltersButton/AttributesFiltersButton.d.ts +5 -1
- package/esm/components/AttributesFiltersButton/AttributesFiltersButton.js +2 -2
- package/esm/components/{AttributesFiltersBuilder/components/MatchRulesSelector → MatchRulesSelector}/MatchRulesSelector.d.ts +2 -6
- package/esm/components/{AttributesFiltersBuilder/components/MatchRulesSelector → MatchRulesSelector}/MatchRulesSelector.js +2 -7
- package/esm/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/MultiValueSelector.d.ts +0 -0
- package/esm/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/MultiValueSelector.js +6 -6
- package/esm/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/styles.d.ts +0 -0
- package/esm/components/{AttributesFiltersBuilder/components/MultiValueSelector → MultiValueSelector}/styles.js +0 -0
- package/esm/components/ValueChip/styles.d.ts +1 -1
- package/esm/components/attributes/ImageAttributesLine/styles.d.ts +1 -1
- package/esm/components/attributes/editMode/MoreAttributesButton/styles.d.ts +1 -1
- package/esm/components/commonReactSelectComponents/LoadMoreButton.d.ts +8 -0
- package/esm/components/commonReactSelectComponents/LoadMoreButton.js +12 -0
- package/esm/components/commonReactSelectComponents/MenuList.d.ts +3 -0
- package/esm/components/commonReactSelectComponents/MenuList.js +20 -0
- package/esm/components/commonReactSelectComponents/styles.d.ts +1 -0
- package/esm/components/commonReactSelectComponents/styles.js +21 -0
- package/esm/components/crosswalks/CrosswalkAttributes/styles.d.ts +1 -1
- package/esm/components/editors/DataTypeValueEditor/useEditorContext.d.ts +8 -2
- package/esm/components/editors/DataTypeValueEditor/useEditorContext.js +5 -4
- package/esm/components/editors/DependentLookupEditor/DependentLookupEditor.js +54 -12
- package/esm/components/editors/TypeaheadEditor/TypeaheadEditor.js +34 -9
- package/esm/components/history/HistoryGraph/HistoryCircle.d.ts +1 -1
- package/esm/components/history/HistoryGraph/HistoryGraph.d.ts +1 -1
- package/esm/components/index.d.ts +5 -0
- package/esm/components/index.js +5 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"label" | "button" | "
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"label" | "button" | "startIcon" | "menuItem" | "menuText" | "iconButton" | "overflowStyle" | "menuIcon">;
|
|
@@ -4,6 +4,10 @@ declare type Props = {
|
|
|
4
4
|
filters: SearchFilter[];
|
|
5
5
|
onChange: (filters: SearchFilter[]) => void;
|
|
6
6
|
attributeTypes: AttributeType[];
|
|
7
|
+
components?: {
|
|
8
|
+
ValuesEditor?: React.ElementType;
|
|
9
|
+
FilterSelector?: React.ElementType;
|
|
10
|
+
};
|
|
7
11
|
};
|
|
8
|
-
declare const _default: React.MemoExoticComponent<({ attributeTypes, filters, onChange }: Props) => JSX.Element>;
|
|
12
|
+
declare const _default: React.MemoExoticComponent<({ attributeTypes, filters, onChange, components }: Props) => JSX.Element>;
|
|
9
13
|
export default _default;
|
|
@@ -42,10 +42,11 @@ var styles_1 = require("./styles");
|
|
|
42
42
|
var EMPTY_FILTER = { fieldName: null, filter: null, values: [] };
|
|
43
43
|
var Stub = function () { return null; };
|
|
44
44
|
var AttributesFiltersBuilder = function (_a) {
|
|
45
|
-
var attributeTypes = _a.attributeTypes, filters = _a.filters, onChange = _a.onChange;
|
|
45
|
+
var attributeTypes = _a.attributeTypes, filters = _a.filters, onChange = _a.onChange, _b = _a.components, components = _b === void 0 ? {} : _b;
|
|
46
|
+
var CustomValuesEditor = components.ValuesEditor, CustomFilterSelector = components.FilterSelector;
|
|
46
47
|
var metadata = react_redux_1.useSelector(mdm_module_1.default.selectors.getMetadata);
|
|
47
48
|
var entityType = mdm_sdk_1.getEntityType(metadata, helpers_1.getEntityTypeFromAttrTypes(attributeTypes));
|
|
48
|
-
var
|
|
49
|
+
var _c = styles_1.useStyles(), attrSelector = _c.attrSelector, filterSelector = _c.filterSelector, actionContainer = _c.actionContainer;
|
|
49
50
|
var actualFilters = react_1.useRef(filters);
|
|
50
51
|
actualFilters.current = filters;
|
|
51
52
|
var attributeFilterRef = react_1.useRef(null);
|
|
@@ -107,6 +108,6 @@ var AttributesFiltersBuilder = function (_a) {
|
|
|
107
108
|
var addNewFilter = react_1.useCallback(function (newFilter) {
|
|
108
109
|
onChange(__spreadArray(__spreadArray([], actualFilters.current), [newFilter]));
|
|
109
110
|
}, [onChange]);
|
|
110
|
-
return (react_1.default.createElement(QueryBuilderRowsGroup_1.default, { rowClasses: rowClasses, rowsData: rowsData, AttributeSelectorComponent: AttributeSelector_1.default, FilterSelectorComponent: FilterSelector_1.default, ValuesEditorComponent: ValuesEditor_1.default, ActionsComponent: RowActions_1.default, LogicOperatorComponent: Stub, filterSelectorRefIndex: lastAttributesCountRef.current, filterSelectorRef: attributeFilterRef, lastRowAttributeSelectorProps: lastRowAttributeSelectorProps, attributesGroup: attributeSelectorItems, changeFilter: changeFilter, addNewFilter: addNewFilter, addRowAfterIndex: addRowAfterIndex, removeRow: removeRow, duplicateRow: duplicateRow, entityType: entityType }));
|
|
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: Stub, filterSelectorRefIndex: lastAttributesCountRef.current, filterSelectorRef: attributeFilterRef, lastRowAttributeSelectorProps: lastRowAttributeSelectorProps, attributesGroup: attributeSelectorItems, changeFilter: changeFilter, addNewFilter: addNewFilter, addRowAfterIndex: addRowAfterIndex, removeRow: removeRow, duplicateRow: duplicateRow, entityType: entityType }));
|
|
111
112
|
};
|
|
112
113
|
exports.default = react_1.memo(AttributesFiltersBuilder);
|
package/cjs/components/AttributesFiltersBuilder/components/FilterSelector/FilterSelector.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { AttributeFiltersComponentProps } from '../../types';
|
|
2
|
+
import { AttributeFiltersComponentProps, FilterOption } from '../../types';
|
|
3
3
|
declare type Props = AttributeFiltersComponentProps & {
|
|
4
4
|
textFieldInputRef: React.MutableRefObject<HTMLInputElement>;
|
|
5
|
+
options?: FilterOption[];
|
|
5
6
|
};
|
|
6
|
-
declare const _default: React.MemoExoticComponent<({ rowData, rowContext, textFieldInputRef }: Props) => JSX.Element>;
|
|
7
|
+
declare const _default: React.MemoExoticComponent<({ rowData, rowContext, textFieldInputRef, options: optionsProp }: Props) => JSX.Element>;
|
|
7
8
|
export default _default;
|
|
@@ -31,13 +31,14 @@ var SimpleDropDownSelector_1 = __importDefault(require("../../../SimpleDropDownS
|
|
|
31
31
|
var helpers_1 = require("../../helpers");
|
|
32
32
|
var styles_1 = __importDefault(require("./styles"));
|
|
33
33
|
var FilterSelector = function (_a) {
|
|
34
|
-
var rowData = _a.rowData, rowContext = _a.rowContext, textFieldInputRef = _a.textFieldInputRef;
|
|
34
|
+
var rowData = _a.rowData, rowContext = _a.rowContext, textFieldInputRef = _a.textFieldInputRef, optionsProp = _a.options;
|
|
35
35
|
var styles = styles_1.default();
|
|
36
36
|
var _b = rowData || {}, _c = _b.attribute, _d = _c === void 0 ? {} : _c, _e = _d.attrType, attrType = _e === void 0 ? {} : _e, _f = _d.fieldName, fieldName = _f === void 0 ? null : _f, filter = _b.filter, id = _b.id;
|
|
37
37
|
var changeFilter = rowContext.changeFilter;
|
|
38
|
-
var options =
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
var options = optionsProp ||
|
|
39
|
+
(attrType &&
|
|
40
|
+
fieldName &&
|
|
41
|
+
ramda_1.pipe(mdm_sdk_1.getFilterOptionsForQueryBuilder, ramda_1.map(function (value) { return ({ value: value, label: capitalize_1.default(mdm_sdk_1.getFilterOptionLabel(value)) }); }))(attrType, fieldName));
|
|
41
42
|
var onChangeFilter = react_1.useCallback(function (filterOption) {
|
|
42
43
|
var newFilter = {
|
|
43
44
|
fieldName: fieldName,
|
|
@@ -25,13 +25,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
25
25
|
var react_1 = __importStar(require("react"));
|
|
26
26
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
27
27
|
var FilterValueEditor_1 = __importDefault(require("../../../editors/FilterEditor/FilterValueEditor"));
|
|
28
|
-
var MatchRulesSelector_1 = __importDefault(require("../MatchRulesSelector/MatchRulesSelector"));
|
|
29
28
|
var styles_1 = require("./styles");
|
|
30
29
|
var ValuesEditor = function (_a) {
|
|
31
30
|
var rowData = _a.rowData, rowContext = _a.rowContext;
|
|
32
31
|
var styles = styles_1.useStyles();
|
|
33
32
|
var canFilterAcceptValues = (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && mdm_sdk_1.checkIfOptionHasValues(rowData.filter);
|
|
34
|
-
var changeFilter = rowContext.changeFilter
|
|
33
|
+
var changeFilter = rowContext.changeFilter;
|
|
35
34
|
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;
|
|
36
35
|
var valueDataTypeDefinition = attrType && mdm_sdk_1.getAttrDataTypeDefinition(attrType);
|
|
37
36
|
var filterValueDataTypeDefinition = valueDataTypeDefinition && mdm_sdk_1.getDataTypeDefinitionForFilterValue(valueDataTypeDefinition, filter);
|
|
@@ -56,14 +55,6 @@ var ValuesEditor = function (_a) {
|
|
|
56
55
|
};
|
|
57
56
|
changeFilter(newFilter, id);
|
|
58
57
|
}, [changeFilter, id, fieldName, filter]);
|
|
59
|
-
|
|
60
|
-
if (mdm_sdk_1.isMatchRuleAttrType(attrType)) {
|
|
61
|
-
return (react_1.default.createElement(MatchRulesSelector_1.default, { entityType: entityType, name: attrType.name, values: values, onChange: changeValue, TextFieldProps: TextFieldProps, fullWidth: true }));
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
return (react_1.default.createElement(FilterValueEditor_1.default, { filter: editorFilter, onChange: changeValue, dataTypeDefinition: filterValueDataTypeDefinition, fullWidth: true, TextFieldProps: TextFieldProps, color: "primary", classes: editorClasses, orientation: "horizontal" }));
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
return react_1.default.createElement("div", { className: styles.valuesEditor }, (rowData === null || rowData === void 0 ? void 0 : rowData.attribute) && canFilterAcceptValues && renderEditor());
|
|
58
|
+
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, { filter: editorFilter, onChange: changeValue, dataTypeDefinition: filterValueDataTypeDefinition, fullWidth: true, TextFieldProps: TextFieldProps, color: "primary", classes: editorClasses, orientation: "horizontal" }))));
|
|
68
59
|
};
|
|
69
60
|
exports.default = react_1.memo(ValuesEditor);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as AttributesFiltersBuilder } from './AttributesFiltersBuilder';
|
|
2
|
+
export { default as AttributesValuesEditor } from './components/ValuesEditor/ValuesEditor';
|
|
3
|
+
export { default as AttributesFilterSelector } from './components/FilterSelector/FilterSelector';
|
|
4
|
+
export type { AttributeFiltersComponentProps } from './types';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AttributesFilterSelector = exports.AttributesValuesEditor = exports.AttributesFiltersBuilder = void 0;
|
|
7
|
+
var AttributesFiltersBuilder_1 = require("./AttributesFiltersBuilder");
|
|
8
|
+
Object.defineProperty(exports, "AttributesFiltersBuilder", { enumerable: true, get: function () { return __importDefault(AttributesFiltersBuilder_1).default; } });
|
|
9
|
+
var ValuesEditor_1 = require("./components/ValuesEditor/ValuesEditor");
|
|
10
|
+
Object.defineProperty(exports, "AttributesValuesEditor", { enumerable: true, get: function () { return __importDefault(ValuesEditor_1).default; } });
|
|
11
|
+
var FilterSelector_1 = require("./components/FilterSelector/FilterSelector");
|
|
12
|
+
Object.defineProperty(exports, "AttributesFilterSelector", { enumerable: true, get: function () { return __importDefault(FilterSelector_1).default; } });
|
|
@@ -4,6 +4,10 @@ declare type Props = {
|
|
|
4
4
|
filters: SearchFilter[];
|
|
5
5
|
onChange: (filters: SearchFilter[]) => void;
|
|
6
6
|
attributeTypes: AttributeType[];
|
|
7
|
+
components?: {
|
|
8
|
+
ValuesEditor?: React.ElementType;
|
|
9
|
+
FilterSelector?: React.ElementType;
|
|
10
|
+
};
|
|
7
11
|
};
|
|
8
|
-
declare const _default: React.MemoExoticComponent<({ filters: filtersProp, attributeTypes, onChange }: Props) => JSX.Element>;
|
|
12
|
+
declare const _default: React.MemoExoticComponent<({ filters: filtersProp, attributeTypes, onChange, components }: Props) => JSX.Element>;
|
|
9
13
|
export default _default;
|
|
@@ -34,7 +34,7 @@ var AttributesFiltersBuilder_1 = __importDefault(require("../AttributesFiltersBu
|
|
|
34
34
|
var ActionButtons_1 = __importDefault(require("./ActionButtons/ActionButtons"));
|
|
35
35
|
var styles_1 = require("./styles");
|
|
36
36
|
var AttributesFiltersButton = function (_a) {
|
|
37
|
-
var filtersProp = _a.filters, attributeTypes = _a.attributeTypes, onChange = _a.onChange;
|
|
37
|
+
var filtersProp = _a.filters, attributeTypes = _a.attributeTypes, onChange = _a.onChange, components = _a.components;
|
|
38
38
|
var styles = styles_1.useStyles();
|
|
39
39
|
var buttonRef = react_1.useRef();
|
|
40
40
|
var _b = react_1.useState(false), isOpen = _b[0], setIsOpen = _b[1];
|
|
@@ -73,7 +73,7 @@ var AttributesFiltersButton = function (_a) {
|
|
|
73
73
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
74
74
|
react_1.default.createElement(Typography_1.default, { variant: "h6" }, ui_i18n_1.default.text('Filter')),
|
|
75
75
|
react_1.default.createElement("div", { className: styles.filtersBuilderWrapper },
|
|
76
|
-
react_1.default.createElement(AttributesFiltersBuilder_1.default, { attributeTypes: attributeTypes, filters: filters, onChange: setFilters })),
|
|
76
|
+
react_1.default.createElement(AttributesFiltersBuilder_1.default, { attributeTypes: attributeTypes, filters: filters, onChange: setFilters, components: components })),
|
|
77
77
|
react_1.default.createElement(Divider_1.default, { className: styles.divider }),
|
|
78
78
|
react_1.default.createElement(ActionButtons_1.default, { onApply: applyButtonHandler, onCancel: cancelButtonHandler, onClear: clearAllButtonHandler })))));
|
|
79
79
|
};
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { TEntityType } from '@reltio/mdm-sdk';
|
|
2
|
+
import { TEntityType, MatchRulesAttrNames } from '@reltio/mdm-sdk';
|
|
3
3
|
import { TextFieldProps as TextFieldPropsType } from '@material-ui/core/TextField';
|
|
4
|
-
export declare enum MatchRulesAttributeNames {
|
|
5
|
-
matchRules = "matchRules",
|
|
6
|
-
MLRecommendedMatch = "MLRecommendedMatch"
|
|
7
|
-
}
|
|
8
4
|
declare type Props = {
|
|
9
|
-
name:
|
|
5
|
+
name: MatchRulesAttrNames;
|
|
10
6
|
values?: string[];
|
|
11
7
|
onChange: (values: string[]) => void;
|
|
12
8
|
TextFieldProps?: Partial<TextFieldPropsType>;
|
|
@@ -22,7 +22,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.MatchRulesAttributeNames = void 0;
|
|
26
25
|
var react_1 = __importStar(require("react"));
|
|
27
26
|
var react_redux_1 = require("react-redux");
|
|
28
27
|
var mdm_module_1 = __importDefault(require("@reltio/mdm-module"));
|
|
@@ -35,11 +34,6 @@ var prepareOptions = function (options) {
|
|
|
35
34
|
return ({ label: label, value: uri });
|
|
36
35
|
});
|
|
37
36
|
};
|
|
38
|
-
var MatchRulesAttributeNames;
|
|
39
|
-
(function (MatchRulesAttributeNames) {
|
|
40
|
-
MatchRulesAttributeNames["matchRules"] = "matchRules";
|
|
41
|
-
MatchRulesAttributeNames["MLRecommendedMatch"] = "MLRecommendedMatch";
|
|
42
|
-
})(MatchRulesAttributeNames = exports.MatchRulesAttributeNames || (exports.MatchRulesAttributeNames = {}));
|
|
43
37
|
var MatchRulesSelector = function (_a) {
|
|
44
38
|
var name = _a.name, values = _a.values, onChange = _a.onChange, entityType = _a.entityType, TextFieldProps = _a.TextFieldProps, fullWidth = _a.fullWidth;
|
|
45
39
|
var metadata = react_redux_1.useSelector(mdm_module_1.default.selectors.getMetadata);
|
|
@@ -47,7 +41,7 @@ var MatchRulesSelector = function (_a) {
|
|
|
47
41
|
entityType === null || entityType === void 0 ? void 0 : entityType.uri,
|
|
48
42
|
metadata
|
|
49
43
|
]), mlMatchRules = _b[0], matchRules = _b[1];
|
|
50
|
-
var options = react_1.useMemo(function () { return prepareOptions(name ===
|
|
44
|
+
var options = react_1.useMemo(function () { return prepareOptions(name === mdm_sdk_1.MatchRulesAttrNames.matchRules ? matchRules : mlMatchRules); }, [name, matchRules, mlMatchRules]);
|
|
51
45
|
return (react_1.default.createElement(MultiValueSelector_1.default, { values: values, onChange: onChange, options: options, TextFieldProps: TextFieldProps, fullWidth: fullWidth }));
|
|
52
46
|
};
|
|
53
47
|
MatchRulesSelector.displayName = 'MatchRulesSelector';
|
|
File without changes
|
|
@@ -47,12 +47,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
47
47
|
var react_1 = __importStar(require("react"));
|
|
48
48
|
var ramda_1 = require("ramda");
|
|
49
49
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
50
|
-
var DropdownIndicatorWithIconButton_1 = __importDefault(require("
|
|
51
|
-
var OptionWithCheckIcon_1 = __importDefault(require("
|
|
52
|
-
var MenuWithPopper_1 = __importDefault(require("
|
|
53
|
-
var MultiValueChip_1 = __importDefault(require("
|
|
54
|
-
var MultiSelect_1 = __importDefault(require("
|
|
55
|
-
var core_1 = require("
|
|
50
|
+
var DropdownIndicatorWithIconButton_1 = __importDefault(require("../commonReactSelectComponents/DropdownIndicatorWithIconButton"));
|
|
51
|
+
var OptionWithCheckIcon_1 = __importDefault(require("../commonReactSelectComponents/OptionWithCheckIcon/OptionWithCheckIcon"));
|
|
52
|
+
var MenuWithPopper_1 = __importDefault(require("../commonReactSelectComponents/MenuWithPopper"));
|
|
53
|
+
var MultiValueChip_1 = __importDefault(require("../editors/commonComponents/MultiValueChip/MultiValueChip"));
|
|
54
|
+
var MultiSelect_1 = __importDefault(require("../ReactSelect/MultiSelect"));
|
|
55
|
+
var core_1 = require("../../core");
|
|
56
56
|
var styles_1 = require("./styles");
|
|
57
57
|
var MultiValueSelector = function (_a) {
|
|
58
58
|
var _b = _a.values, values = _b === void 0 ? [] : _b, onChange = _a.onChange, options = _a.options, fullWidth = _a.fullWidth, _c = _a.TextFieldProps, TextFieldProps = _c === void 0 ? {} : _c;
|
|
File without changes
|
|
File without changes
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const useChipStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"label" | "root" | "deleteIcon">;
|
|
2
|
-
export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"
|
|
2
|
+
export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"count" | "label" | "container">;
|
|
@@ -3,4 +3,4 @@ export declare type SIZES_TYPE = {
|
|
|
3
3
|
imageWidth: number;
|
|
4
4
|
imageHeight: number;
|
|
5
5
|
};
|
|
6
|
-
export declare const useStyles: (props: SIZES_TYPE) => import("@material-ui/core/styles/withStyles").ClassNameMap<"number" | "
|
|
6
|
+
export declare const useStyles: (props: SIZES_TYPE) => import("@material-ui/core/styles/withStyles").ClassNameMap<"number" | "moreButton" | "imageBox" | "moreButtonContainer">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"icon" | "dense" | "
|
|
1
|
+
export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"icon" | "dense" | "moreButton" | "buttonLabel" | "subHeader" | "moreAttributes" | "popupContainer" | "moreAttributesPopup" | "noResultsCaptionContainer">;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare type Props = {
|
|
3
|
+
loading: boolean;
|
|
4
|
+
onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
5
|
+
onMouseDown?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
6
|
+
};
|
|
7
|
+
declare const LoadMoreButton: ({ loading, onClick, onMouseDown }: Props) => JSX.Element;
|
|
8
|
+
export default LoadMoreButton;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var Button_1 = __importDefault(require("@material-ui/core/Button"));
|
|
8
|
+
var core_1 = require("@material-ui/core");
|
|
9
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
10
|
+
var styles_1 = require("./styles");
|
|
11
|
+
var LoadMoreButton = function (_a) {
|
|
12
|
+
var loading = _a.loading, onClick = _a.onClick, onMouseDown = _a.onMouseDown;
|
|
13
|
+
var styles = styles_1.useStyles();
|
|
14
|
+
return (react_1.default.createElement("div", { className: styles.loadMoreContainer }, loading ? (react_1.default.createElement(core_1.CircularProgress, { className: styles.loadingSpinner, size: 24 })) : (react_1.default.createElement(Button_1.default, { color: "primary", onClick: onClick, onMouseDown: onMouseDown, className: styles.moreButton },
|
|
15
|
+
react_1.default.createElement("div", { className: styles.buttonLabel }, ui_i18n_1.default.text('Load more'))))));
|
|
16
|
+
};
|
|
17
|
+
exports.default = LoadMoreButton;
|
|
@@ -0,0 +1,25 @@
|
|
|
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 react_select_1 = require("react-select");
|
|
19
|
+
var MenuList = function (props) {
|
|
20
|
+
var menuListFooter = props.selectProps.menuListFooter, children = props.children;
|
|
21
|
+
return (react_1.default.createElement(react_select_1.components.MenuList, __assign({}, props),
|
|
22
|
+
children,
|
|
23
|
+
menuListFooter));
|
|
24
|
+
};
|
|
25
|
+
exports.default = MenuList;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"loadMoreContainer" | "moreButton" | "buttonLabel" | "loadingSpinner">;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useStyles = void 0;
|
|
4
|
+
var styles_1 = require("@material-ui/core/styles");
|
|
5
|
+
exports.useStyles = styles_1.makeStyles({
|
|
6
|
+
loadMoreContainer: {
|
|
7
|
+
display: 'flex',
|
|
8
|
+
height: '32px'
|
|
9
|
+
},
|
|
10
|
+
moreButton: {
|
|
11
|
+
padding: '9px 38px 9px 38px'
|
|
12
|
+
},
|
|
13
|
+
buttonLabel: {
|
|
14
|
+
fontSize: '14px',
|
|
15
|
+
fontWeight: 500,
|
|
16
|
+
lineHeight: '16px',
|
|
17
|
+
whiteSpace: 'nowrap',
|
|
18
|
+
overflow: 'hidden'
|
|
19
|
+
},
|
|
20
|
+
loadingSpinner: {
|
|
21
|
+
alignSelf: 'center',
|
|
22
|
+
marginLeft: '40px'
|
|
23
|
+
}
|
|
24
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"attributeValue" | "text" | "input" | "
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@material-ui/core/styles/withStyles").ClassNameMap<"attributeValue" | "text" | "input" | "moreButton" | "editor" | "sourceIcon" | "attributeTitle" | "attributeWrapper">;
|
|
@@ -20,14 +20,20 @@ declare function useEditorContext(fieldName: any, dataTypeDefinition: any): {
|
|
|
20
20
|
} | {
|
|
21
21
|
lookups: any;
|
|
22
22
|
lookupCode: any;
|
|
23
|
-
getLookups: (type
|
|
23
|
+
getLookups: ({ type, parents, displayNamePrefix, max, offset }: {
|
|
24
|
+
type: any;
|
|
25
|
+
parents: any;
|
|
26
|
+
displayNamePrefix: any;
|
|
27
|
+
max: any;
|
|
28
|
+
offset: any;
|
|
29
|
+
}) => Promise<any>;
|
|
24
30
|
resolveLookups: (type: any, codeValues: any) => Promise<void>;
|
|
25
31
|
entries?: undefined;
|
|
26
32
|
getSuggestions?: undefined;
|
|
27
33
|
format?: undefined;
|
|
28
34
|
tenant?: undefined;
|
|
29
35
|
} | {
|
|
30
|
-
getSuggestions: (searchValue: any) => Promise<string[]>;
|
|
36
|
+
getSuggestions: (searchValue: any, max: any, pageNo: any) => Promise<string[]>;
|
|
31
37
|
entries?: undefined;
|
|
32
38
|
lookups?: undefined;
|
|
33
39
|
lookupCode?: undefined;
|
|
@@ -41,11 +41,11 @@ var useEditorContext = function (fieldName, dataTypeDefinition) {
|
|
|
41
41
|
var attributePresentations = react_redux_1.useSelector(mdm_module_1.default.selectors.getAttributePresentations);
|
|
42
42
|
var globalSearchRequestOptions = react_redux_1.useSelector(mdm_module_1.default.selectors.getGlobalSearchRequestOptions);
|
|
43
43
|
var dispatch = react_redux_1.useDispatch();
|
|
44
|
-
var typeaheadGetSuggestion = react_1.useCallback(function (searchValue) {
|
|
44
|
+
var typeaheadGetSuggestion = react_1.useCallback(function (searchValue, max, pageNo) {
|
|
45
45
|
return mdm_sdk_1.getFacetedAttributeData({
|
|
46
46
|
fieldName: fieldName,
|
|
47
47
|
searchValue: searchValue,
|
|
48
|
-
options: __assign({}, globalSearchRequestOptions)
|
|
48
|
+
options: __assign(__assign({}, globalSearchRequestOptions), { max: max, pageNo: pageNo })
|
|
49
49
|
}).then(function (response) { return Object.keys(response[fieldName]); });
|
|
50
50
|
}, [fieldName, globalSearchRequestOptions]);
|
|
51
51
|
var type = dataTypeDefinition.type, values = dataTypeDefinition.values, lookupCode = dataTypeDefinition.lookupCode, uri = dataTypeDefinition.uri, dependentLookupCode = dataTypeDefinition.dependentLookupCode, options = dataTypeDefinition.options;
|
|
@@ -66,8 +66,9 @@ var useEditorContext = function (fieldName, dataTypeDefinition) {
|
|
|
66
66
|
return {
|
|
67
67
|
lookups: lookups,
|
|
68
68
|
lookupCode: dependentLookupCode,
|
|
69
|
-
getLookups: function (
|
|
70
|
-
|
|
69
|
+
getLookups: function (_a) {
|
|
70
|
+
var type = _a.type, parents = _a.parents, displayNamePrefix = _a.displayNamePrefix, max = _a.max, offset = _a.offset;
|
|
71
|
+
return mdm_sdk_1.getDependentLookups({ type: type, parents: parents, displayNamePrefix: displayNamePrefix, max: max, offset: offset }).then(function (_a) {
|
|
71
72
|
var codeValues = _a.codeValues;
|
|
72
73
|
return ramda_1.propOr({}, type, codeValues);
|
|
73
74
|
});
|
|
@@ -48,13 +48,14 @@ exports.DEBOUNCE_INTERVAL = void 0;
|
|
|
48
48
|
var react_1 = __importStar(require("react"));
|
|
49
49
|
var prop_types_1 = __importDefault(require("prop-types"));
|
|
50
50
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
51
|
-
var
|
|
51
|
+
var Select_1 = __importDefault(require("../../ReactSelect/Select"));
|
|
52
52
|
var ramda_1 = require("ramda");
|
|
53
53
|
var helpers_1 = require("./helpers");
|
|
54
54
|
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
55
55
|
var utils_1 = require("../../../core/utils");
|
|
56
56
|
var DropdownIndicator_1 = __importDefault(require("../../commonReactSelectComponents/DropdownIndicator"));
|
|
57
57
|
var MenuWithPopper_1 = __importDefault(require("../../commonReactSelectComponents/MenuWithPopper"));
|
|
58
|
+
var MenuList_1 = __importDefault(require("../../commonReactSelectComponents/MenuList"));
|
|
58
59
|
var styles_1 = require("./styles");
|
|
59
60
|
var useLookupsResolver_1 = __importDefault(require("./useLookupsResolver"));
|
|
60
61
|
var MultiValueChip_1 = __importDefault(require("../commonComponents/MultiValueChip/MultiValueChip"));
|
|
@@ -62,15 +63,18 @@ var OptionWithCheckIcon_1 = __importDefault(require("../../commonReactSelectComp
|
|
|
62
63
|
var useDefaultOptions_1 = __importDefault(require("./useDefaultOptions"));
|
|
63
64
|
var useAutopopulation_1 = __importDefault(require("./useAutopopulation"));
|
|
64
65
|
var useSavingFocus_1 = __importDefault(require("./useSavingFocus"));
|
|
66
|
+
var LoadMoreButton_1 = __importDefault(require("../../commonReactSelectComponents/LoadMoreButton"));
|
|
65
67
|
var SelectComponents = {
|
|
66
68
|
IndicatorSeparator: utils_1.EmptyStub,
|
|
67
69
|
LoadingIndicator: utils_1.EmptyStub,
|
|
68
70
|
Option: OptionWithCheckIcon_1.default,
|
|
69
71
|
DropdownIndicator: DropdownIndicator_1.default,
|
|
70
72
|
Menu: MenuWithPopper_1.default,
|
|
73
|
+
MenuList: MenuList_1.default,
|
|
71
74
|
MultiValue: MultiValueChip_1.default
|
|
72
75
|
};
|
|
73
76
|
exports.DEBOUNCE_INTERVAL = 400;
|
|
77
|
+
var MAX_DEPENDENT_LOOKUP_VALUES = 50;
|
|
74
78
|
var DependentLookupEditor = function (_a) {
|
|
75
79
|
var multiple = _a.multiple, value = _a.value, lookupTypeCode = _a.lookupCode, TextFieldProps = _a.TextFieldProps, parents = _a.parents, onChange = _a.onChange, getLookups = _a.getLookups, _b = _a.lookups, lookups = _b === void 0 ? {} : _b, resolveLookups = _a.resolveLookups, fullWidth = _a.fullWidth, disabled = _a.disabled, placeholder = _a.placeholder, autopopulationId = _a.autopopulationId, otherProps = __rest(_a, ["multiple", "value", "lookupCode", "TextFieldProps", "parents", "onChange", "getLookups", "lookups", "resolveLookups", "fullWidth", "disabled", "placeholder", "autopopulationId"]);
|
|
76
80
|
var inputRef = react_1.useRef(null);
|
|
@@ -84,16 +88,54 @@ var DependentLookupEditor = function (_a) {
|
|
|
84
88
|
});
|
|
85
89
|
useSavingFocus_1.default(selectRef, inputRef, disabled);
|
|
86
90
|
var _c = react_1.useState(''), inputValue = _c[0], setInputValue = _c[1];
|
|
87
|
-
var
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
var _d = react_1.useState([]), options = _d[0], setOptions = _d[1];
|
|
92
|
+
var _e = react_1.useState(1), pageNumber = _e[0], setPageNumber = _e[1];
|
|
93
|
+
var _f = react_1.useState(false), nextPageIsLoading = _f[0], setNextPageIsLoading = _f[1];
|
|
94
|
+
var handleInputChange = function (value) {
|
|
95
|
+
if (value !== inputValue) {
|
|
96
|
+
setInputValue(value);
|
|
97
|
+
setPageNumber(1);
|
|
98
|
+
debouncedLoadOptions(value, setOptions);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
var loadOptions = react_1.useCallback(function (value, pageNumber) {
|
|
102
|
+
if (pageNumber === void 0) { pageNumber = 1; }
|
|
103
|
+
return getLookups({
|
|
104
|
+
type: lookupTypeCode,
|
|
105
|
+
parents: parents,
|
|
106
|
+
displayNamePrefix: value,
|
|
107
|
+
max: MAX_DEPENDENT_LOOKUP_VALUES + 1,
|
|
108
|
+
offset: (pageNumber - 1) * MAX_DEPENDENT_LOOKUP_VALUES
|
|
109
|
+
}).then(function (buildOptions) { return helpers_1.buildLookupOptions(buildOptions); });
|
|
110
|
+
}, [lookupTypeCode, parents]);
|
|
111
|
+
var loadMoreOptions = react_1.useCallback(function () {
|
|
112
|
+
setNextPageIsLoading(true);
|
|
113
|
+
loadOptions(inputValue, pageNumber + 1)
|
|
114
|
+
.then(function (buildOptions) {
|
|
115
|
+
setOptions(function (options) {
|
|
116
|
+
return ramda_1.concat(options.slice(0, pageNumber * MAX_DEPENDENT_LOOKUP_VALUES), buildOptions);
|
|
117
|
+
});
|
|
118
|
+
setPageNumber(function (page) { return page + 1; });
|
|
119
|
+
})
|
|
120
|
+
.catch(function () { return []; })
|
|
121
|
+
.finally(function () { return setNextPageIsLoading(false); });
|
|
122
|
+
}, [loadOptions, inputValue, pageNumber]);
|
|
91
123
|
var debouncedLoadOptions = react_1.useCallback(mdm_sdk_1.debounce(function (value, callback) {
|
|
124
|
+
setNextPageIsLoading(true);
|
|
92
125
|
loadOptions(value)
|
|
93
126
|
.then(function (options) { return callback(options); })
|
|
94
|
-
.catch(function () { return callback([]); })
|
|
127
|
+
.catch(function () { return callback([]); })
|
|
128
|
+
.finally(function () { return setNextPageIsLoading(false); });
|
|
95
129
|
}, exports.DEBOUNCE_INTERVAL), [loadOptions]);
|
|
96
|
-
var
|
|
130
|
+
var _g = useDefaultOptions_1.default(loadOptions), defaultOptions = _g.defaultOptions, initialDefaultOptions = _g.initialDefaultOptions, isLoadingDefaultOptions = _g.isLoading;
|
|
131
|
+
react_1.useEffect(function () {
|
|
132
|
+
setOptions(defaultOptions);
|
|
133
|
+
}, [defaultOptions]);
|
|
134
|
+
var displayedOptions = react_1.useMemo(function () { return options.slice(0, pageNumber * MAX_DEPENDENT_LOOKUP_VALUES); }, [
|
|
135
|
+
options,
|
|
136
|
+
pageNumber
|
|
137
|
+
]);
|
|
138
|
+
var showMoreButton = options.length > displayedOptions.length;
|
|
97
139
|
var isEmptyValue = multiple ? ramda_1.isEmpty(value) : !(value === null || value === void 0 ? void 0 : value.lookupCode) && !(value === null || value === void 0 ? void 0 : value.value);
|
|
98
140
|
var markAsTouched = useAutopopulation_1.default({
|
|
99
141
|
id: autopopulationId,
|
|
@@ -102,13 +144,13 @@ var DependentLookupEditor = function (_a) {
|
|
|
102
144
|
multiple: multiple,
|
|
103
145
|
onChange: onChange
|
|
104
146
|
}).markAsTouched;
|
|
105
|
-
return (react_1.default.createElement(
|
|
147
|
+
return (react_1.default.createElement(Select_1.default, __assign({}, otherProps, { isMulti: multiple, classes: styles, menuPortalTarget: document.body, menuPlacement: "auto", TextFieldProps: __assign(__assign({}, TextFieldProps), { ref: inputRef, disabled: (TextFieldProps === null || TextFieldProps === void 0 ? void 0 : TextFieldProps.disabled) || disabled }), inputRef: inputRef, innerRef: selectRef, styles: {
|
|
106
148
|
menuPortal: function (base) { return (__assign(__assign({}, base), { zIndex: 1300 })); },
|
|
107
149
|
container: function (base) { return (__assign(__assign({}, base), (fullWidth ? { width: '100%' } : {}))); }
|
|
108
|
-
}, loadingMessage: function () { return ui_i18n_1.default.text('Loading...'); }, noOptionsMessage: function () { return ui_i18n_1.default.text('No results found'); }, components: SelectComponents, isClearable: true, isSearchable: true, inputValue: inputValue, onInputChange:
|
|
150
|
+
}, loadingMessage: function () { return ui_i18n_1.default.text('Loading...'); }, noOptionsMessage: function () { return ui_i18n_1.default.text('No results found'); }, components: SelectComponents, isClearable: true, isSearchable: true, inputValue: inputValue, onInputChange: handleInputChange, isLoading: !inputValue && isLoadingDefaultOptions, hideSelectedOptions: false, placeholder: placeholder || '', isDisabled: disabled, options: displayedOptions, getOptionValue: ramda_1.either(ramda_1.prop('value'), ramda_1.prop('lookupCode')), getOptionLabel: helpers_1.getOptionLabel, onChange: function (value) {
|
|
109
151
|
markAsTouched();
|
|
110
152
|
onChange(value);
|
|
111
|
-
}, value: ramda_1.defaultTo(multiple ? [] : null, value) })));
|
|
153
|
+
}, value: ramda_1.defaultTo(multiple ? [] : null, value), menuListFooter: showMoreButton && react_1.default.createElement(LoadMoreButton_1.default, { loading: nextPageIsLoading, onClick: loadMoreOptions }) })));
|
|
112
154
|
};
|
|
113
155
|
DependentLookupEditor.propTypes = {
|
|
114
156
|
multiple: prop_types_1.default.bool,
|
|
@@ -65,21 +65,44 @@ var utils_1 = require("../../../core/utils");
|
|
|
65
65
|
var styles_1 = require("./styles");
|
|
66
66
|
var ExpandedValueTooltip_1 = __importDefault(require("../../ExpandedValueTooltip/ExpandedValueTooltip"));
|
|
67
67
|
var ValueChip_1 = __importDefault(require("../../ValueChip/ValueChip"));
|
|
68
|
+
var LoadMoreButton_1 = __importDefault(require("../../commonReactSelectComponents/LoadMoreButton"));
|
|
69
|
+
var hooks_1 = require("../../../hooks");
|
|
68
70
|
var FETCH_DEBOUNCE_INTERVAL = 300;
|
|
71
|
+
var PAGE_SIZE = 50;
|
|
69
72
|
var TypeaheadEditor = function (_a) {
|
|
70
73
|
var value = _a.value, getSuggestions = _a.getSuggestions, onChange = _a.onChange, multiple = _a.multiple, fullWidth = _a.fullWidth, _b = _a.InputProps, InputProps = _b === void 0 ? {} : _b, inputProps = __rest(_a, ["value", "getSuggestions", "onChange", "multiple", "fullWidth", "InputProps"]);
|
|
71
74
|
var _c = react_1.useState([]), suggestions = _c[0], setSuggestions = _c[1];
|
|
72
75
|
var _d = react_1.useState(false), isPlaceholderVisible = _d[0], setPlaceholderVisibility = _d[1];
|
|
76
|
+
var _e = react_1.useState(1), pageNumber = _e[0], setPageNumber = _e[1];
|
|
77
|
+
var _f = react_1.useState(false), nextPageIsLoading = _f[0], setNextPageIsLoading = _f[1];
|
|
78
|
+
var pageSizeForRequest = PAGE_SIZE + 1;
|
|
79
|
+
var _g = react_1.useState(''), currentValue = _g[0], setCurrentValue = _g[1];
|
|
80
|
+
value = ramda_1.defaultTo(multiple ? [] : '', value);
|
|
81
|
+
var inputValue = multiple ? currentValue : value;
|
|
82
|
+
hooks_1.useDidUpdateEffect(function () {
|
|
83
|
+
setPageNumber(1);
|
|
84
|
+
}, [inputValue]);
|
|
73
85
|
var inputRef = react_1.useRef();
|
|
74
86
|
var styles = styles_1.useStyles();
|
|
75
87
|
var isFocused = function () { var _a; return ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('input')) === document.activeElement; };
|
|
76
|
-
var fetchSuggestions = ramda_1.pipe(ramda_1.prop('value'), ramda_1.trim, getSuggestions, ramda_1.andThen(ramda_1.pipe(ramda_1.tap(setSuggestions), ramda_1.both(ramda_1.isEmpty, isFocused), setPlaceholderVisibility)));
|
|
88
|
+
var fetchSuggestions = ramda_1.pipe(ramda_1.prop('value'), ramda_1.trim, function (value) { return getSuggestions(value, pageSizeForRequest); }, ramda_1.andThen(ramda_1.pipe(ramda_1.tap(setSuggestions), ramda_1.both(ramda_1.isEmpty, isFocused), setPlaceholderVisibility)));
|
|
89
|
+
var onLoadMoreSuggestions = function () {
|
|
90
|
+
setNextPageIsLoading(true);
|
|
91
|
+
getSuggestions(inputValue, pageSizeForRequest, pageNumber + 1)
|
|
92
|
+
.then(ramda_1.pipe(ramda_1.concat(suggestions), setSuggestions, ramda_1.always(pageNumber + 1), setPageNumber))
|
|
93
|
+
.finally(function () {
|
|
94
|
+
setNextPageIsLoading(false);
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
var onMouseDown = function (event) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
};
|
|
77
100
|
var debouncedFetchSuggestions = react_1.useCallback(mdm_sdk_1.debounce(fetchSuggestions, FETCH_DEBOUNCE_INTERVAL), [
|
|
78
101
|
getSuggestions
|
|
79
102
|
]);
|
|
80
|
-
|
|
81
|
-
var
|
|
82
|
-
var
|
|
103
|
+
var displayedSuggestions = react_1.useMemo(function () { return suggestions.slice(0, pageNumber * PAGE_SIZE); }, [suggestions, pageNumber]);
|
|
104
|
+
var showMoreButton = suggestions.length > displayedSuggestions.length;
|
|
105
|
+
var _h = react_1.useState(false), hasHighlightedItem = _h[0], setHasHighlightedItem = _h[1];
|
|
83
106
|
var onInputChange = function (_a) {
|
|
84
107
|
var newValue = _a.newValue, method = _a.method;
|
|
85
108
|
switch (method) {
|
|
@@ -113,11 +136,11 @@ var TypeaheadEditor = function (_a) {
|
|
|
113
136
|
}
|
|
114
137
|
}
|
|
115
138
|
};
|
|
116
|
-
return (react_1.default.createElement(react_autosuggest_1.default, { suggestions:
|
|
139
|
+
return (react_1.default.createElement(react_autosuggest_1.default, { suggestions: displayedSuggestions, shouldRenderSuggestions: ramda_1.T, inputProps: __assign(__assign({ value: inputValue, onChange: ramda_1.pipe(ramda_1.nthArg(1), onInputChange), onKeyDown: function (event) {
|
|
117
140
|
if (event.keyCode === 13 && multiple && !hasHighlightedItem) {
|
|
118
141
|
onInputChange({ method: 'enter', newValue: currentValue });
|
|
119
142
|
}
|
|
120
|
-
}, fullWidth: fullWidth }, inputProps), { autoComplete: 'nope' }), getSuggestionValue: ramda_1.identity, onSuggestionsFetchRequested: ramda_1.ifElse(ramda_1.propEq('reason', 'input-changed'), debouncedFetchSuggestions, fetchSuggestions), onSuggestionsClearRequested: ramda_1.pipe(ramda_1.always([]), setSuggestions, ramda_1.F, setPlaceholderVisibility), renderInputComponent: function (_a) {
|
|
143
|
+
}, fullWidth: fullWidth }, inputProps), { autoComplete: 'nope' }), getSuggestionValue: ramda_1.identity, onSuggestionsFetchRequested: ramda_1.ifElse(ramda_1.propEq('reason', 'input-changed'), debouncedFetchSuggestions, fetchSuggestions), onSuggestionsClearRequested: ramda_1.pipe(ramda_1.always([]), setSuggestions, ramda_1.F, setPlaceholderVisibility, ramda_1.always(1), setPageNumber), renderInputComponent: function (_a) {
|
|
121
144
|
var _b;
|
|
122
145
|
var ref = _a.ref, onInputChange = _a.onChange, otherProps = __rest(_a, ["ref", "onChange"]);
|
|
123
146
|
var commonClasses = {
|
|
@@ -128,7 +151,9 @@ var TypeaheadEditor = function (_a) {
|
|
|
128
151
|
}, renderSuggestionsContainer: function (_a) {
|
|
129
152
|
var children = _a.children, _b = _a.containerProps, ref = _b.ref, restContainerProps = __rest(_b, ["ref"]);
|
|
130
153
|
return (react_1.default.createElement(Popper_1.default, { anchorEl: inputRef.current, open: Boolean(children) || isPlaceholderVisible },
|
|
131
|
-
react_1.default.createElement(Paper_1.default, __assign({ ref: ref, square: true }, restContainerProps, { style: { width: ramda_1.prop('clientWidth', inputRef.current) } }),
|
|
154
|
+
react_1.default.createElement(Paper_1.default, __assign({ ref: ref, square: true }, restContainerProps, { style: { width: ramda_1.prop('clientWidth', inputRef.current) } }),
|
|
155
|
+
children || react_1.default.createElement(EmptySearchResult_1.NoResults, { className: styles['typeahead__suggestions-placeholder'] }),
|
|
156
|
+
showMoreButton && !isPlaceholderVisible && (react_1.default.createElement(LoadMoreButton_1.default, { onClick: onLoadMoreSuggestions, onMouseDown: onMouseDown, loading: nextPageIsLoading })))));
|
|
132
157
|
}, renderSuggestion: function (suggestion, _a) {
|
|
133
158
|
var isHighlighted = _a.isHighlighted;
|
|
134
159
|
return (react_1.default.createElement(MenuItem_1.default, { className: styles['typeahead__suggestions-menuItem'], selected: isHighlighted, component: "div" },
|