@reltio/components 1.4.1956 → 1.4.1958
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/AttributesFiltersBuilder/AttributesFiltersBuilder.js +1 -1
- package/cjs/AttributesFiltersBuilder/helpers.d.ts +1 -1
- package/cjs/AttributesFiltersBuilder/helpers.js +25 -22
- package/cjs/AttributesFiltersButton/AttributesFiltersButton.js +1 -1
- package/cjs/AttributesFiltersButton/components/ActionButtons/styles.js +2 -2
- package/cjs/AttributesFiltersButton/styles.d.ts +1 -1
- package/cjs/AttributesFiltersButton/styles.js +10 -7
- package/cjs/CustomDateRangeEditor/CustomDateRangeEditor.js +1 -1
- package/cjs/DateIntervalSelector/DateIntervalSelector.js +1 -1
- package/cjs/DateRangeSelector/DateRangeSelector.d.ts +9 -0
- package/cjs/DateRangeSelector/DateRangeSelector.js +144 -0
- package/cjs/DateRangeSelector/DateRangeSelector.specs.js +294 -0
- package/cjs/DateRangeSelector/index.d.ts +1 -0
- package/cjs/DateRangeSelector/index.js +5 -0
- package/cjs/DateRangeSelector/styles.d.ts +1 -0
- package/cjs/DateRangeSelector/styles.js +30 -0
- package/cjs/UpSetChart/UpSetChart.js +3 -38
- package/cjs/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/DateRangeSelector.js +3 -108
- package/cjs/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/styles.d.ts +1 -1
- package/cjs/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/styles.js +0 -54
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +6 -4
- package/esm/AttributesFiltersBuilder/AttributesFiltersBuilder.js +2 -2
- package/esm/AttributesFiltersBuilder/helpers.d.ts +1 -1
- package/esm/AttributesFiltersBuilder/helpers.js +24 -21
- package/esm/AttributesFiltersButton/AttributesFiltersButton.js +1 -1
- package/esm/AttributesFiltersButton/components/ActionButtons/styles.js +2 -2
- package/esm/AttributesFiltersButton/styles.d.ts +1 -1
- package/esm/AttributesFiltersButton/styles.js +10 -7
- package/esm/CustomDateRangeEditor/CustomDateRangeEditor.js +1 -1
- package/esm/DateIntervalSelector/DateIntervalSelector.js +1 -1
- package/esm/DateRangeSelector/DateRangeSelector.d.ts +9 -0
- package/esm/DateRangeSelector/DateRangeSelector.js +114 -0
- package/esm/DateRangeSelector/DateRangeSelector.specs.js +289 -0
- package/esm/DateRangeSelector/index.d.ts +1 -0
- package/esm/DateRangeSelector/index.js +1 -0
- package/esm/DateRangeSelector/styles.d.ts +1 -0
- package/esm/DateRangeSelector/styles.js +27 -0
- package/esm/UpSetChart/UpSetChart.js +3 -15
- package/esm/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/DateRangeSelector.js +3 -85
- package/esm/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/styles.d.ts +1 -1
- package/esm/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/styles.js +0 -54
- package/esm/index.d.ts +1 -0
- package/esm/index.js +1 -0
- package/package.json +2 -6
- package/cjs/UpSetChart/UpSetChart.test.d.ts +0 -1
- package/cjs/UpSetChart/UpSetChart.test.js +0 -67
- package/cjs/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/DateRangeSelector.specs.js +0 -185
- package/esm/UpSetChart/UpSetChart.test.d.ts +0 -1
- package/esm/UpSetChart/UpSetChart.test.js +0 -62
- package/esm/features/activity-log/ActivityFilterEditor/components/DateRangeSelector/DateRangeSelector.specs.js +0 -180
- /package/cjs/{features/activity-log/ActivityFilterEditor/components/DateRangeSelector → DateRangeSelector}/DateRangeSelector.specs.d.ts +0 -0
- /package/esm/{features/activity-log/ActivityFilterEditor/components/DateRangeSelector → DateRangeSelector}/DateRangeSelector.specs.d.ts +0 -0
|
@@ -75,7 +75,7 @@ var AttributesFiltersBuilder = function (_a) {
|
|
|
75
75
|
var currentEntityType = (0, react_1.useMemo)(function () {
|
|
76
76
|
var entityTypesUris = attributesTypesGroups.map(function (_a) {
|
|
77
77
|
var attributeTypes = _a.attributeTypes;
|
|
78
|
-
return (0, helpers_1.
|
|
78
|
+
return (0, helpers_1.getOperationalTypeUriFromAttrTypes)(attributeTypes);
|
|
79
79
|
});
|
|
80
80
|
var closestEntityTypeAncestorUri = (0, mdm_sdk_1.findClosestCommonAncestor)(metadata, entityTypesUris);
|
|
81
81
|
return (0, mdm_sdk_1.getEntityType)(metadata, closestEntityTypeAncestorUri);
|
|
@@ -10,4 +10,4 @@ export declare const getRowsDataFromFilters: (filters: SearchFilter[], attribute
|
|
|
10
10
|
id: number;
|
|
11
11
|
values: import("@reltio/mdm-sdk").SearchValue[];
|
|
12
12
|
}[];
|
|
13
|
-
export declare const
|
|
13
|
+
export declare const getOperationalTypeUriFromAttrTypes: (attributeTypes: AttributeType[]) => any;
|
|
@@ -20,30 +20,33 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
20
20
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
21
|
};
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.
|
|
23
|
+
exports.getOperationalTypeUriFromAttrTypes = exports.getRowsDataFromFilters = exports.findValue = exports.getAttributeSelectorItems = void 0;
|
|
24
24
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
25
25
|
var ramda_1 = require("ramda");
|
|
26
|
-
var createAttributeItem = function (metadata, attrType,
|
|
27
|
-
var entityTypeLabel = (0, mdm_sdk_1.getEntityTypeLabel)(metadata, { type: entityTypeUri });
|
|
26
|
+
var createAttributeItem = function (metadata, attrType, operationalTypeUri, parents) {
|
|
28
27
|
var title = attrType.label || attrType.name;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
if ((0, mdm_sdk_1.isSpecialAttribute)(attrType)) {
|
|
29
|
+
return { attrType: attrType, title: title, fieldName: attrType.name };
|
|
30
|
+
}
|
|
31
|
+
if ((0, mdm_sdk_1.isInteractionTypeUri)(operationalTypeUri)) {
|
|
32
|
+
return { attrType: attrType, title: title, fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attrType.uri, parents) };
|
|
33
|
+
}
|
|
34
|
+
var entityTypeLabel = (0, mdm_sdk_1.getEntityTypeLabel)(metadata, { type: operationalTypeUri });
|
|
35
|
+
return {
|
|
36
|
+
attrType: attrType,
|
|
37
|
+
title: title,
|
|
38
|
+
entityTypeUri: operationalTypeUri,
|
|
39
|
+
pathToTitle: Array.isArray(parents)
|
|
40
|
+
? __spreadArray(__spreadArray([entityTypeLabel], (0, ramda_1.chain)((0, ramda_1.prop)('label'), parents), true), [title], false) : [entityTypeLabel, title],
|
|
41
|
+
fieldName: (0, mdm_sdk_1.attributeUriToSearchUri)(attrType.uri, parents)
|
|
42
|
+
};
|
|
40
43
|
};
|
|
41
|
-
var createAttributesConfig = function (metadata, attrNode,
|
|
44
|
+
var createAttributesConfig = function (metadata, attrNode, operationalTypeUri, parents) {
|
|
42
45
|
if (parents === void 0) { parents = []; }
|
|
43
|
-
var resConfig = __assign(__assign({}, createAttributeItem(metadata, attrNode,
|
|
46
|
+
var resConfig = __assign(__assign({}, createAttributeItem(metadata, attrNode, operationalTypeUri, parents)), { uri: attrNode.uri });
|
|
44
47
|
var children = attrNode.children
|
|
45
48
|
? attrNode.children.map(function (childNode) {
|
|
46
|
-
return createAttributesConfig(metadata, childNode,
|
|
49
|
+
return createAttributesConfig(metadata, childNode, operationalTypeUri, parents.concat(attrNode));
|
|
47
50
|
})
|
|
48
51
|
: [];
|
|
49
52
|
if (children.length) {
|
|
@@ -54,13 +57,13 @@ var createAttributesConfig = function (metadata, attrNode, entityTypeUri, parent
|
|
|
54
57
|
var getAttributeSelectorItems = function (metadata, attributesTypesGroups, attributesTypesGroupFilter) {
|
|
55
58
|
var attributeSelectorItemsGroup = attributesTypesGroups.map(function (_a) {
|
|
56
59
|
var id = _a.id, title = _a.title, attributeTypes = _a.attributeTypes;
|
|
57
|
-
var
|
|
60
|
+
var operationalTypeUri = (0, exports.getOperationalTypeUriFromAttrTypes)(attributeTypes);
|
|
58
61
|
return {
|
|
59
62
|
id: id,
|
|
60
63
|
title: title,
|
|
61
64
|
attributes: (0, mdm_sdk_1.getAttributesTreeFromAttributes)(attributeTypes, metadata).map(function (attrNode) {
|
|
62
|
-
var
|
|
63
|
-
return createAttributesConfig(metadata, attrNode,
|
|
65
|
+
var uri = (0, mdm_sdk_1.isSpecialAttribute)(attrNode) ? null : operationalTypeUri;
|
|
66
|
+
return createAttributesConfig(metadata, attrNode, uri);
|
|
64
67
|
})
|
|
65
68
|
};
|
|
66
69
|
});
|
|
@@ -108,8 +111,8 @@ var getRowsDataFromFilters = function (filters, attributesGroupArr) {
|
|
|
108
111
|
});
|
|
109
112
|
};
|
|
110
113
|
exports.getRowsDataFromFilters = getRowsDataFromFilters;
|
|
111
|
-
var
|
|
114
|
+
var getOperationalTypeUriFromAttrTypes = function (attributeTypes) {
|
|
112
115
|
var regularAttribute = (0, mdm_sdk_1.findRegularAttribute)(attributeTypes);
|
|
113
116
|
return regularAttribute ? (0, mdm_sdk_1.getBaseUri)(regularAttribute.uri) : null;
|
|
114
117
|
};
|
|
115
|
-
exports.
|
|
118
|
+
exports.getOperationalTypeUriFromAttrTypes = getOperationalTypeUriFromAttrTypes;
|
|
@@ -85,7 +85,7 @@ var AttributesFiltersButton = function (_a) {
|
|
|
85
85
|
horizontal: 'left'
|
|
86
86
|
} },
|
|
87
87
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
88
|
-
react_1.default.createElement(Typography_1.default, { variant: "h6" }, title !== null && title !== void 0 ? title : ui_i18n_1.default.text('Filter')),
|
|
88
|
+
react_1.default.createElement(Typography_1.default, { variant: "h6", className: styles.title }, title !== null && title !== void 0 ? title : ui_i18n_1.default.text('Filter')),
|
|
89
89
|
react_1.default.createElement("div", { className: styles.filtersBuilderWrapper },
|
|
90
90
|
children,
|
|
91
91
|
react_1.default.createElement(AttributesFiltersBuilder_1.AttributesFiltersBuilder, { attributesTypesGroups: attributesTypesGroups, attributesTypesGroupFilter: attributesTypesGroupFilter, filters: filters, onChange: setFilters, components: components, onFilterAttributeChange: onFilterAttributeChange, classes: classes })),
|
|
@@ -20,7 +20,7 @@ exports.useStyles = (0, styles_1.makeStyles)(function () { return ({
|
|
|
20
20
|
buttonsWrapper: {
|
|
21
21
|
display: 'flex'
|
|
22
22
|
},
|
|
23
|
-
applyButton: __assign(__assign({}, allButtonsStyle), { marginRight: '
|
|
23
|
+
applyButton: __assign(__assign({}, allButtonsStyle), { marginRight: '12px' }),
|
|
24
24
|
cancelButton: __assign(__assign({}, allButtonsStyle), { marginLeft: 'auto' }),
|
|
25
|
-
clearButon: __assign({}, allButtonsStyle)
|
|
25
|
+
clearButon: __assign(__assign({}, allButtonsStyle), { marginLeft: '12px' })
|
|
26
26
|
}); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"divider" | "triggerButton" | "filtersBuilderWrapper" | "popupContent" | "changedFiltersIndicator">;
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"title" | "divider" | "triggerButton" | "filtersBuilderWrapper" | "popupContent" | "changedFiltersIndicator">;
|
|
@@ -4,6 +4,9 @@ exports.useStyles = void 0;
|
|
|
4
4
|
var styles_1 = require("@mui/material/styles");
|
|
5
5
|
var styles_2 = require("@mui/styles");
|
|
6
6
|
exports.useStyles = (0, styles_2.makeStyles)(function (theme) { return ({
|
|
7
|
+
title: {
|
|
8
|
+
padding: '0px 16px'
|
|
9
|
+
},
|
|
7
10
|
triggerButton: {
|
|
8
11
|
minWidth: 0,
|
|
9
12
|
color: 'rgba(0,0,0,0.54)',
|
|
@@ -12,18 +15,18 @@ exports.useStyles = (0, styles_2.makeStyles)(function (theme) { return ({
|
|
|
12
15
|
marginRight: '12px'
|
|
13
16
|
},
|
|
14
17
|
filtersBuilderWrapper: {
|
|
15
|
-
|
|
18
|
+
padding: '8px 16px',
|
|
19
|
+
display: 'flex',
|
|
20
|
+
flexDirection: 'column'
|
|
16
21
|
},
|
|
17
22
|
popupContent: {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
paddingBottom: '6px',
|
|
23
|
+
paddingTop: '12px',
|
|
24
|
+
paddingBottom: '8px',
|
|
21
25
|
width: '770px'
|
|
22
26
|
},
|
|
23
27
|
divider: {
|
|
24
|
-
marginBottom: '
|
|
25
|
-
|
|
26
|
-
borderColor: 'rgba(0, 0, 0, 0.121569)'
|
|
28
|
+
marginBottom: '4px',
|
|
29
|
+
borderColor: 'rgba(0, 0, 0, 0.1)'
|
|
27
30
|
},
|
|
28
31
|
changedFiltersIndicator: {
|
|
29
32
|
backgroundColor: (0, styles_1.alpha)(theme.palette.primary.main, 0.12)
|
|
@@ -60,7 +60,7 @@ var CustomDateRangeEditor = function (_a) {
|
|
|
60
60
|
var onCancel = function () {
|
|
61
61
|
setOpen(false);
|
|
62
62
|
};
|
|
63
|
-
return (react_1.default.createElement("div", { className: styles.root },
|
|
63
|
+
return (react_1.default.createElement("div", { "data-reltio-id": "custom-date-range-editor", className: styles.root },
|
|
64
64
|
react_1.default.createElement(TextField_1.default, { fullWidth: true, value: values.map(function (value) { return formatValue(value, placeholder); }).join(' \u2014 '), onClick: handleToggle, variant: "filled", ref: inputRef, InputProps: {
|
|
65
65
|
endAdornment: (react_1.default.createElement(ReactSelectDropdownIndicatorWithIconButton_1.ReactSelectDropdownIndicatorWithIconButton, { selectProps: { classes: styles, menuIsOpen: open }, innerProps: {} })),
|
|
66
66
|
disableUnderline: (0, ramda_1.isNil)(values),
|
|
@@ -23,7 +23,7 @@ var DateIntervalSelector = function (_a) {
|
|
|
23
23
|
};
|
|
24
24
|
var onNumberChange = (0, ramda_1.pipe)(events_1.getValue, parseInt, getIntervalFromValue, onChange);
|
|
25
25
|
var onUnitChange = (0, ramda_1.pipe)(getIntervalFromUnit, onChange);
|
|
26
|
-
return (react_1.default.createElement("div", { className: styles.root },
|
|
26
|
+
return (react_1.default.createElement("div", { "data-reltio-id": "date-interval-selector", className: styles.root },
|
|
27
27
|
react_1.default.createElement(TextField_1.default, { variant: "standard", type: "number", value: value || '', onChange: onNumberChange, inputProps: { min: 1, onFocus: onFocus }, InputProps: { classes: { root: styles.input } }, className: styles.inputNumber }),
|
|
28
28
|
react_1.default.createElement(SimpleDropDownSelector_1.SimpleDropDownSelector, { label: '', placeholder: (0, utils_1.capitalize)(unit), className: styles.inputUnit, value: { value: unit, label: (0, utils_1.capitalize)((0, mdm_sdk_1.getIntervalUnitLabel)(unit)) }, options: periods.map(function (value) { return ({
|
|
29
29
|
value: value,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DateRangeFilter, DateRangeTypes } from '@reltio/mdm-sdk';
|
|
3
|
+
type Props = {
|
|
4
|
+
value: DateRangeFilter;
|
|
5
|
+
dateRangeTypes?: DateRangeTypes[];
|
|
6
|
+
onChange: (range: DateRangeFilter) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare const DateRangeSelector: ({ value, onChange, dateRangeTypes }: Props) => React.JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,144 @@
|
|
|
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.DateRangeSelector = void 0;
|
|
41
|
+
var react_1 = __importStar(require("react"));
|
|
42
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
43
|
+
var ramda_1 = require("ramda");
|
|
44
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
45
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
46
|
+
var FormControlLabel_1 = __importDefault(require("@mui/material/FormControlLabel"));
|
|
47
|
+
var Radio_1 = __importDefault(require("@mui/material/Radio"));
|
|
48
|
+
var RadioGroup_1 = __importDefault(require("@mui/material/RadioGroup"));
|
|
49
|
+
var Typography_1 = __importDefault(require("@mui/material/Typography"));
|
|
50
|
+
var DateIntervalSelector_1 = require("../DateIntervalSelector");
|
|
51
|
+
var CustomDateRangeEditor_1 = require("../CustomDateRangeEditor");
|
|
52
|
+
var useDidUpdateEffect_1 = require("../hooks/useDidUpdateEffect");
|
|
53
|
+
var events_1 = require("../helpers/events");
|
|
54
|
+
var styles_1 = require("./styles");
|
|
55
|
+
var emptyDates = [null, null];
|
|
56
|
+
var emptyInterval = [null, 'minutes'];
|
|
57
|
+
var DateRangeSelector = function (_a) {
|
|
58
|
+
var value = _a.value, onChange = _a.onChange, dateRangeTypes = _a.dateRangeTypes;
|
|
59
|
+
var styles = (0, styles_1.useStyles)();
|
|
60
|
+
var getInitPeriodByType = function (type) {
|
|
61
|
+
if ((value === null || value === void 0 ? void 0 : value.type) === type) {
|
|
62
|
+
return value.period;
|
|
63
|
+
}
|
|
64
|
+
else if (type === mdm_sdk_1.DateRangeTypes.WITHIN || type === mdm_sdk_1.DateRangeTypes.AGO) {
|
|
65
|
+
return emptyInterval;
|
|
66
|
+
}
|
|
67
|
+
else if (type === mdm_sdk_1.DateRangeTypes.BETWEEN) {
|
|
68
|
+
return emptyDates;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var _b = (0, react_1.useState)(getInitPeriodByType(mdm_sdk_1.DateRangeTypes.BETWEEN)), datesInterval = _b[0], setDatesInterval = _b[1];
|
|
72
|
+
var _c = (0, react_1.useState)(getInitPeriodByType(mdm_sdk_1.DateRangeTypes.WITHIN)), withinInterval = _c[0], setWithinInterval = _c[1];
|
|
73
|
+
var _d = (0, react_1.useState)(getInitPeriodByType(mdm_sdk_1.DateRangeTypes.AGO)), agoInterval = _d[0], setAgoInterval = _d[1];
|
|
74
|
+
var getCurrentPeriodByType = function (type) {
|
|
75
|
+
if (type === mdm_sdk_1.DateRangeTypes.WITHIN) {
|
|
76
|
+
return withinInterval;
|
|
77
|
+
}
|
|
78
|
+
else if (type === mdm_sdk_1.DateRangeTypes.AGO) {
|
|
79
|
+
return agoInterval;
|
|
80
|
+
}
|
|
81
|
+
else if (type === mdm_sdk_1.DateRangeTypes.BETWEEN) {
|
|
82
|
+
return datesInterval;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var changeType = function (type) {
|
|
86
|
+
if ((value === null || value === void 0 ? void 0 : value.type) !== type) {
|
|
87
|
+
onChange({ period: getCurrentPeriodByType(type), type: type });
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var changePeriod = function (period) {
|
|
91
|
+
onChange(__assign(__assign({}, value), { period: period }));
|
|
92
|
+
};
|
|
93
|
+
var isEditorVisible = function (_a) {
|
|
94
|
+
var type = _a.type;
|
|
95
|
+
return !dateRangeTypes || dateRangeTypes.includes(type);
|
|
96
|
+
};
|
|
97
|
+
(0, useDidUpdateEffect_1.useDidUpdateEffect)(function () {
|
|
98
|
+
if (value) {
|
|
99
|
+
if (value.type === mdm_sdk_1.DateRangeTypes.WITHIN) {
|
|
100
|
+
setWithinInterval(value.period);
|
|
101
|
+
}
|
|
102
|
+
else if (value.type === mdm_sdk_1.DateRangeTypes.AGO) {
|
|
103
|
+
setAgoInterval(value.period);
|
|
104
|
+
}
|
|
105
|
+
else if (value.type === mdm_sdk_1.DateRangeTypes.BETWEEN) {
|
|
106
|
+
setDatesInterval(value.period);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
setDatesInterval(emptyDates);
|
|
111
|
+
setWithinInterval(emptyInterval);
|
|
112
|
+
setAgoInterval(emptyInterval);
|
|
113
|
+
}
|
|
114
|
+
}, [value]);
|
|
115
|
+
var editors = [
|
|
116
|
+
{
|
|
117
|
+
label: ui_i18n_1.default.text('Within the last'),
|
|
118
|
+
type: mdm_sdk_1.DateRangeTypes.WITHIN,
|
|
119
|
+
editor: (react_1.default.createElement(DateIntervalSelector_1.DateIntervalSelector, { interval: withinInterval, onChange: changePeriod, onFocus: function () { return changeType(mdm_sdk_1.DateRangeTypes.WITHIN); } })),
|
|
120
|
+
className: styles.dateOptionWithin
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
label: ui_i18n_1.default.text('More than'),
|
|
124
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
125
|
+
editor: (react_1.default.createElement(react_1.default.Fragment, null,
|
|
126
|
+
react_1.default.createElement(DateIntervalSelector_1.DateIntervalSelector, { interval: agoInterval, onChange: changePeriod, onFocus: function () { return changeType(mdm_sdk_1.DateRangeTypes.AGO); } }),
|
|
127
|
+
react_1.default.createElement(Typography_1.default, { className: styles.agoLabel, variant: 'subtitle1' }, ui_i18n_1.default.text('Ago')))),
|
|
128
|
+
className: styles.dateOptionAgo
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
label: ui_i18n_1.default.text('Date range'),
|
|
132
|
+
type: mdm_sdk_1.DateRangeTypes.BETWEEN,
|
|
133
|
+
editor: (react_1.default.createElement(CustomDateRangeEditor_1.CustomDateRangeEditor, { values: datesInterval, onChange: changePeriod, onFocus: function () { return changeType(mdm_sdk_1.DateRangeTypes.BETWEEN); } })),
|
|
134
|
+
className: styles.dateOption
|
|
135
|
+
}
|
|
136
|
+
];
|
|
137
|
+
return (react_1.default.createElement(RadioGroup_1.default, { value: (value === null || value === void 0 ? void 0 : value.type) || null, onChange: (0, ramda_1.pipe)(events_1.getValue, changeType), "data-reltio-id": "reltio-date-range-selector" }, editors.filter(isEditorVisible).map(function (_a) {
|
|
138
|
+
var type = _a.type, editor = _a.editor, label = _a.label, className = _a.className;
|
|
139
|
+
return (react_1.default.createElement("div", { key: type, className: className },
|
|
140
|
+
react_1.default.createElement(FormControlLabel_1.default, { value: type, label: label, control: react_1.default.createElement(Radio_1.default, { color: "primary" }), classes: { label: (0, classnames_1.default)(styles.dateOptionLabel, styles.labels) } }),
|
|
141
|
+
editor));
|
|
142
|
+
})));
|
|
143
|
+
};
|
|
144
|
+
exports.DateRangeSelector = DateRangeSelector;
|
|
@@ -0,0 +1,294 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
var react_1 = __importDefault(require("react"));
|
|
54
|
+
var react_2 = require("@testing-library/react");
|
|
55
|
+
var user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
56
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
57
|
+
var LocalizationProvider_1 = require("@mui/x-date-pickers/LocalizationProvider");
|
|
58
|
+
var AdapterMoment_1 = require("@mui/x-date-pickers/AdapterMoment");
|
|
59
|
+
var DateRangeSelector_1 = require("./DateRangeSelector");
|
|
60
|
+
describe('DateRangeSelector tests', function () {
|
|
61
|
+
var value = {
|
|
62
|
+
type: mdm_sdk_1.DateRangeTypes.WITHIN,
|
|
63
|
+
period: [4, 'months']
|
|
64
|
+
};
|
|
65
|
+
var defaultProps = { value: value, onChange: jest.fn() };
|
|
66
|
+
var setUp = function (props) {
|
|
67
|
+
if (props === void 0) { props = {}; }
|
|
68
|
+
var user = user_event_1.default.setup();
|
|
69
|
+
var Providers = function (_a) {
|
|
70
|
+
var children = _a.children;
|
|
71
|
+
return (react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment }, children));
|
|
72
|
+
};
|
|
73
|
+
return __assign({ user: user }, (0, react_2.render)(react_1.default.createElement(DateRangeSelector_1.DateRangeSelector, __assign({}, defaultProps, props)), { wrapper: Providers }));
|
|
74
|
+
};
|
|
75
|
+
beforeEach(function () {
|
|
76
|
+
jest.clearAllMocks();
|
|
77
|
+
});
|
|
78
|
+
it('should render correct default state', function () {
|
|
79
|
+
setUp();
|
|
80
|
+
var radios = react_2.screen.getAllByRole('radio');
|
|
81
|
+
expect(radios).toHaveLength(3);
|
|
82
|
+
expect(radios[0]).toBeChecked();
|
|
83
|
+
var selectors = react_2.screen.getAllByTestId('date-interval-selector');
|
|
84
|
+
var valueEditors = react_2.screen.getAllByRole('spinbutton');
|
|
85
|
+
var periodSelectors = react_2.screen.getAllByRole('combobox');
|
|
86
|
+
expect(selectors).toHaveLength(2);
|
|
87
|
+
expect(valueEditors).toHaveLength(2);
|
|
88
|
+
expect(periodSelectors).toHaveLength(2);
|
|
89
|
+
react_2.screen.getByText('Within the last');
|
|
90
|
+
expect(valueEditors[0]).toHaveValue(4);
|
|
91
|
+
react_2.screen.getByText('Months');
|
|
92
|
+
react_2.screen.getByText('More than');
|
|
93
|
+
expect(valueEditors[1]).not.toHaveValue();
|
|
94
|
+
react_2.screen.getByText('Minutes');
|
|
95
|
+
react_2.screen.getByText('Ago');
|
|
96
|
+
react_2.screen.getByText('Date range');
|
|
97
|
+
react_2.screen.getByTestId('custom-date-range-editor');
|
|
98
|
+
});
|
|
99
|
+
it('should render correctly with empty value', function () {
|
|
100
|
+
setUp({ value: null });
|
|
101
|
+
var radios = react_2.screen.getAllByRole('radio');
|
|
102
|
+
expect(radios[0]).not.toBeChecked();
|
|
103
|
+
expect(radios[1]).not.toBeChecked();
|
|
104
|
+
expect(radios[2]).not.toBeChecked();
|
|
105
|
+
var selectors = react_2.screen.getAllByTestId('date-interval-selector');
|
|
106
|
+
var valueEditors = react_2.screen.getAllByRole('spinbutton');
|
|
107
|
+
var periodSelectors = react_2.screen.getAllByRole('combobox');
|
|
108
|
+
var selectorsValues = react_2.screen.getAllByText('Minutes');
|
|
109
|
+
expect(selectors).toHaveLength(2);
|
|
110
|
+
expect(valueEditors).toHaveLength(2);
|
|
111
|
+
expect(periodSelectors).toHaveLength(2);
|
|
112
|
+
expect(selectorsValues).toHaveLength(2);
|
|
113
|
+
react_2.screen.getByText('Within the last');
|
|
114
|
+
expect(valueEditors[0]).not.toHaveValue();
|
|
115
|
+
react_2.screen.getByText('More than');
|
|
116
|
+
expect(valueEditors[1]).not.toHaveValue();
|
|
117
|
+
react_2.screen.getByText('Ago');
|
|
118
|
+
react_2.screen.getByText('Date range');
|
|
119
|
+
react_2.screen.getByTestId('custom-date-range-editor');
|
|
120
|
+
});
|
|
121
|
+
describe('Within', function () {
|
|
122
|
+
it('should call props.onChange when type is changed to withing', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
123
|
+
var value, user;
|
|
124
|
+
return __generator(this, function (_a) {
|
|
125
|
+
switch (_a.label) {
|
|
126
|
+
case 0:
|
|
127
|
+
value = {
|
|
128
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
129
|
+
period: [4, 'months']
|
|
130
|
+
};
|
|
131
|
+
user = setUp({ value: value }).user;
|
|
132
|
+
return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Within the last'))];
|
|
133
|
+
case 1:
|
|
134
|
+
_a.sent();
|
|
135
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
136
|
+
type: mdm_sdk_1.DateRangeTypes.WITHIN,
|
|
137
|
+
period: [null, 'minutes']
|
|
138
|
+
});
|
|
139
|
+
return [2 /*return*/];
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}); });
|
|
143
|
+
it('should call props.onChange when within number is changed', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
144
|
+
var user;
|
|
145
|
+
return __generator(this, function (_a) {
|
|
146
|
+
switch (_a.label) {
|
|
147
|
+
case 0:
|
|
148
|
+
user = setUp().user;
|
|
149
|
+
return [4 /*yield*/, user.type(react_2.screen.getAllByRole('spinbutton')[0], '3')];
|
|
150
|
+
case 1:
|
|
151
|
+
_a.sent();
|
|
152
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
153
|
+
type: mdm_sdk_1.DateRangeTypes.WITHIN,
|
|
154
|
+
period: [43, 'months']
|
|
155
|
+
});
|
|
156
|
+
return [2 /*return*/];
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}); });
|
|
160
|
+
it('should call props.onChange when ago period is changed', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
161
|
+
var user;
|
|
162
|
+
return __generator(this, function (_a) {
|
|
163
|
+
switch (_a.label) {
|
|
164
|
+
case 0:
|
|
165
|
+
user = setUp().user;
|
|
166
|
+
return [4 /*yield*/, user.click(react_2.screen.getAllByRole('combobox')[0])];
|
|
167
|
+
case 1:
|
|
168
|
+
_a.sent();
|
|
169
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText('Days'))];
|
|
170
|
+
case 2:
|
|
171
|
+
_a.sent();
|
|
172
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
173
|
+
type: mdm_sdk_1.DateRangeTypes.WITHIN,
|
|
174
|
+
period: [4, 'days']
|
|
175
|
+
});
|
|
176
|
+
return [2 /*return*/];
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}); });
|
|
180
|
+
});
|
|
181
|
+
describe('Ago', function () {
|
|
182
|
+
it('should call props.onChange when type is changed to ago', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
183
|
+
var user;
|
|
184
|
+
return __generator(this, function (_a) {
|
|
185
|
+
switch (_a.label) {
|
|
186
|
+
case 0:
|
|
187
|
+
user = setUp().user;
|
|
188
|
+
return [4 /*yield*/, user.click(react_2.screen.getByLabelText('More than'))];
|
|
189
|
+
case 1:
|
|
190
|
+
_a.sent();
|
|
191
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
192
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
193
|
+
period: [null, 'minutes']
|
|
194
|
+
});
|
|
195
|
+
return [2 /*return*/];
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}); });
|
|
199
|
+
it('should call props.onChange when within number is changed', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
200
|
+
var value, user;
|
|
201
|
+
return __generator(this, function (_a) {
|
|
202
|
+
switch (_a.label) {
|
|
203
|
+
case 0:
|
|
204
|
+
value = {
|
|
205
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
206
|
+
period: [1, 'months']
|
|
207
|
+
};
|
|
208
|
+
user = setUp({ value: value }).user;
|
|
209
|
+
return [4 /*yield*/, user.type(react_2.screen.getAllByRole('spinbutton')[1], '3')];
|
|
210
|
+
case 1:
|
|
211
|
+
_a.sent();
|
|
212
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
213
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
214
|
+
period: [13, 'months']
|
|
215
|
+
});
|
|
216
|
+
return [2 /*return*/];
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}); });
|
|
220
|
+
it('should call props.onChange when ago period is changed', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
221
|
+
var value, user;
|
|
222
|
+
return __generator(this, function (_a) {
|
|
223
|
+
switch (_a.label) {
|
|
224
|
+
case 0:
|
|
225
|
+
value = {
|
|
226
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
227
|
+
period: [4, 'months']
|
|
228
|
+
};
|
|
229
|
+
user = setUp({ value: value }).user;
|
|
230
|
+
return [4 /*yield*/, user.click(react_2.screen.getAllByRole('combobox')[1])];
|
|
231
|
+
case 1:
|
|
232
|
+
_a.sent();
|
|
233
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText('Days'))];
|
|
234
|
+
case 2:
|
|
235
|
+
_a.sent();
|
|
236
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
237
|
+
type: mdm_sdk_1.DateRangeTypes.AGO,
|
|
238
|
+
period: [4, 'days']
|
|
239
|
+
});
|
|
240
|
+
return [2 /*return*/];
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}); });
|
|
244
|
+
});
|
|
245
|
+
describe('Between', function () {
|
|
246
|
+
it('should call props.onChange when type is changed to between', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
247
|
+
var user;
|
|
248
|
+
return __generator(this, function (_a) {
|
|
249
|
+
switch (_a.label) {
|
|
250
|
+
case 0:
|
|
251
|
+
user = setUp().user;
|
|
252
|
+
return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Date range'))];
|
|
253
|
+
case 1:
|
|
254
|
+
_a.sent();
|
|
255
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
256
|
+
type: mdm_sdk_1.DateRangeTypes.BETWEEN,
|
|
257
|
+
period: [null, null]
|
|
258
|
+
});
|
|
259
|
+
return [2 /*return*/];
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}); });
|
|
263
|
+
it('should call props.onChange when between period is changed', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
264
|
+
var value, user;
|
|
265
|
+
return __generator(this, function (_a) {
|
|
266
|
+
switch (_a.label) {
|
|
267
|
+
case 0:
|
|
268
|
+
value = {
|
|
269
|
+
type: mdm_sdk_1.DateRangeTypes.BETWEEN,
|
|
270
|
+
period: [new Date(123), new Date(456)]
|
|
271
|
+
};
|
|
272
|
+
user = setUp({ value: value }).user;
|
|
273
|
+
return [4 /*yield*/, user.click(react_2.screen.getByRole('textbox'))];
|
|
274
|
+
case 1:
|
|
275
|
+
_a.sent();
|
|
276
|
+
return [4 /*yield*/, user.type(react_2.screen.getByText('From'), '01/03/2022')];
|
|
277
|
+
case 2:
|
|
278
|
+
_a.sent();
|
|
279
|
+
return [4 /*yield*/, user.type(react_2.screen.getByText('To'), '02/03/2022')];
|
|
280
|
+
case 3:
|
|
281
|
+
_a.sent();
|
|
282
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText('Update'))];
|
|
283
|
+
case 4:
|
|
284
|
+
_a.sent();
|
|
285
|
+
expect(defaultProps.onChange).toHaveBeenCalledWith({
|
|
286
|
+
type: mdm_sdk_1.DateRangeTypes.BETWEEN,
|
|
287
|
+
period: [new Date('01/03/2022'), new Date('02/03/2022')]
|
|
288
|
+
});
|
|
289
|
+
return [2 /*return*/];
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}); });
|
|
293
|
+
});
|
|
294
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DateRangeSelector } from './DateRangeSelector';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DateRangeSelector = void 0;
|
|
4
|
+
var DateRangeSelector_1 = require("./DateRangeSelector");
|
|
5
|
+
Object.defineProperty(exports, "DateRangeSelector", { enumerable: true, get: function () { return DateRangeSelector_1.DateRangeSelector; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"labels" | "agoLabel" | "dateOption" | "dateOptionAgo" | "dateOptionWithin" | "dateOptionLabel">;
|