@reltio/components 1.4.916 → 1.4.917
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/history/HistoryFilterButton/HistoryFilterButton.js +7 -1
- package/cjs/components/history/hooks/useHistory.d.ts +1 -2
- package/cjs/components/history/hooks/useHistory.js +14 -5
- package/cjs/components/history/hooks/useHistoryWithTotal.d.ts +2 -2
- package/cjs/components/history/hooks/useHistoryWithTotal.js +5 -5
- package/cjs/components/history/utils/filters.d.ts +3 -0
- package/cjs/components/history/utils/filters.js +67 -0
- package/esm/components/history/HistoryFilterButton/HistoryFilterButton.js +8 -2
- package/esm/components/history/hooks/useHistory.d.ts +1 -2
- package/esm/components/history/hooks/useHistory.js +14 -5
- package/esm/components/history/hooks/useHistoryWithTotal.d.ts +2 -2
- package/esm/components/history/hooks/useHistoryWithTotal.js +5 -5
- package/esm/components/history/utils/filters.d.ts +3 -0
- package/esm/components/history/utils/filters.js +60 -0
- package/package.json +3 -3
|
@@ -41,6 +41,7 @@ var Button_1 = __importDefault(require("@material-ui/core/Button"));
|
|
|
41
41
|
var Popover_1 = __importDefault(require("@material-ui/core/Popover"));
|
|
42
42
|
var Typography_1 = __importDefault(require("@material-ui/core/Typography"));
|
|
43
43
|
var SmallIconButton_1 = require("../../SmallIconButton");
|
|
44
|
+
var filters_1 = require("../utils/filters");
|
|
44
45
|
var UserSelector_1 = __importDefault(require("../../UserSelector/UserSelector"));
|
|
45
46
|
var AttributeSelector_1 = __importDefault(require("../../AttributeSelector/AttributeSelector"));
|
|
46
47
|
var DateRangeSelector_1 = __importDefault(require("../DateRangeSelector/DateRangeSelector"));
|
|
@@ -80,7 +81,12 @@ var HistoryFilterButton = function (_a) {
|
|
|
80
81
|
react_1.default.createElement(Button_1.default, { onClick: clearCurrentValue, className: styles.clearButton }, ui_i18n_1.default.text('Clear all')),
|
|
81
82
|
react_1.default.createElement(Button_1.default, { onClick: closePopup }, ui_i18n_1.default.text('Cancel')),
|
|
82
83
|
react_1.default.createElement(Button_1.default, { color: "primary", onClick: function () {
|
|
83
|
-
|
|
84
|
+
if (dateRange && filters_1.isDateRangeValid(dateRange)) {
|
|
85
|
+
onApplyFilter(currentValue);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
onApplyFilter(ramda_1.dissoc('dateRange', currentValue));
|
|
89
|
+
}
|
|
84
90
|
closePopup();
|
|
85
91
|
} }, ui_i18n_1.default.text('Apply'))))));
|
|
86
92
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { HistoryFilter } from '../types';
|
|
3
2
|
declare type Props = {
|
|
4
3
|
entityUri: string;
|
|
@@ -8,10 +7,10 @@ export declare const useHistory: ({ entityUri, enabled }: Props) => {
|
|
|
8
7
|
isLoading: boolean;
|
|
9
8
|
canLoadMore: boolean;
|
|
10
9
|
onLoadMore: () => void;
|
|
10
|
+
onApplyFilter: (filter: HistoryFilter) => void;
|
|
11
11
|
historicUris: string[];
|
|
12
12
|
historyWithTotal: import("@reltio/mdm-sdk").HistoryWithTotal;
|
|
13
13
|
historyFilter: HistoryFilter;
|
|
14
|
-
setHistoryFilter: import("react").Dispatch<import("react").SetStateAction<HistoryFilter>>;
|
|
15
14
|
reloadHistory: () => void;
|
|
16
15
|
};
|
|
17
16
|
export {};
|
|
@@ -4,11 +4,16 @@ exports.useHistory = void 0;
|
|
|
4
4
|
var react_1 = require("react");
|
|
5
5
|
var useHistoricUris_1 = require("./useHistoricUris");
|
|
6
6
|
var useHistoryWithTotal_1 = require("./useHistoryWithTotal");
|
|
7
|
+
var types_1 = require("../types");
|
|
8
|
+
var filters_1 = require("../utils/filters");
|
|
7
9
|
var MAX_HISTORY_ROWS = 32;
|
|
8
10
|
var useHistory = function (_a) {
|
|
9
11
|
var entityUri = _a.entityUri, enabled = _a.enabled;
|
|
10
|
-
var _b = react_1.useState(
|
|
12
|
+
var _b = react_1.useState({
|
|
13
|
+
activities: [types_1.HistoryActivityType.MERGE, types_1.HistoryActivityType.UNMERGE, types_1.HistoryActivityType.UPDATE]
|
|
14
|
+
}), historyFilter = _b[0], setHistoryFilter = _b[1];
|
|
11
15
|
var _c = react_1.useState(0), historyPage = _c[0], setHistoryPage = _c[1];
|
|
16
|
+
var historyFilterString = react_1.useMemo(function () { return filters_1.buildHistoryFilterString(historyFilter); }, [historyFilter]);
|
|
12
17
|
var _d = useHistoricUris_1.useHistoricUris({
|
|
13
18
|
entityUri: entityUri,
|
|
14
19
|
enabled: enabled
|
|
@@ -16,16 +21,20 @@ var useHistory = function (_a) {
|
|
|
16
21
|
var _e = useHistoryWithTotal_1.useHistoryWithTotal({
|
|
17
22
|
entityUri: entityUri,
|
|
18
23
|
enabled: enabled && !!historicUris,
|
|
24
|
+
filter: historyFilterString,
|
|
19
25
|
historicUris: historicUris,
|
|
20
26
|
max: MAX_HISTORY_ROWS,
|
|
21
27
|
offset: historyPage * MAX_HISTORY_ROWS,
|
|
22
|
-
order: 'desc'
|
|
23
|
-
showAll: true
|
|
28
|
+
order: 'desc'
|
|
24
29
|
}), isHistoryLoading = _e.isLoading, historyWithTotal = _e.historyWithTotal, loadMore = _e.loadMore, loadData = _e.loadData;
|
|
25
|
-
var canLoadMore = react_1.useMemo(function () { return (historyPage + 1) * MAX_HISTORY_ROWS
|
|
30
|
+
var canLoadMore = react_1.useMemo(function () { return (historyPage + 1) * MAX_HISTORY_ROWS < (historyWithTotal === null || historyWithTotal === void 0 ? void 0 : historyWithTotal.total); }, [
|
|
26
31
|
historyWithTotal,
|
|
27
32
|
historyPage
|
|
28
33
|
]);
|
|
34
|
+
var onApplyFilter = react_1.useCallback(function (filter) {
|
|
35
|
+
setHistoryPage(0);
|
|
36
|
+
setHistoryFilter(filter);
|
|
37
|
+
}, []);
|
|
29
38
|
var onLoadMore = react_1.useCallback(function () {
|
|
30
39
|
if (!canLoadMore)
|
|
31
40
|
return;
|
|
@@ -40,10 +49,10 @@ var useHistory = function (_a) {
|
|
|
40
49
|
isLoading: isHistoryLoading || isHistoricUrisLoading,
|
|
41
50
|
canLoadMore: canLoadMore,
|
|
42
51
|
onLoadMore: onLoadMore,
|
|
52
|
+
onApplyFilter: onApplyFilter,
|
|
43
53
|
historicUris: historicUris,
|
|
44
54
|
historyWithTotal: historyWithTotal,
|
|
45
55
|
historyFilter: historyFilter,
|
|
46
|
-
setHistoryFilter: setHistoryFilter,
|
|
47
56
|
reloadHistory: reloadHistory
|
|
48
57
|
};
|
|
49
58
|
};
|
|
@@ -7,9 +7,9 @@ declare type Props = {
|
|
|
7
7
|
max?: number;
|
|
8
8
|
offset?: number;
|
|
9
9
|
order?: string;
|
|
10
|
-
filter?:
|
|
10
|
+
filter?: string;
|
|
11
11
|
};
|
|
12
|
-
export declare const useHistoryWithTotal: ({ entityUri, enabled, historicUris, ...options }: Props) => {
|
|
12
|
+
export declare const useHistoryWithTotal: ({ entityUri, enabled, historicUris, filter, ...options }: Props) => {
|
|
13
13
|
isLoading: boolean;
|
|
14
14
|
historyWithTotal: HistoryWithTotal;
|
|
15
15
|
loadMore: (offset: number) => void;
|
|
@@ -32,7 +32,7 @@ var react_1 = require("react");
|
|
|
32
32
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
33
33
|
var hooks_1 = require("../../../hooks");
|
|
34
34
|
var useHistoryWithTotal = function (_a) {
|
|
35
|
-
var entityUri = _a.entityUri, _b = _a.enabled, enabled = _b === void 0 ? true : _b, historicUris = _a.historicUris, options = __rest(_a, ["entityUri", "enabled", "historicUris"]);
|
|
35
|
+
var entityUri = _a.entityUri, _b = _a.enabled, enabled = _b === void 0 ? true : _b, historicUris = _a.historicUris, filter = _a.filter, options = __rest(_a, ["entityUri", "enabled", "historicUris", "filter"]);
|
|
36
36
|
var _c = react_1.useState(null), historyWithTotal = _c[0], setHistoryWithTotal = _c[1];
|
|
37
37
|
var _d = react_1.useState(false), isLoading = _d[0], setIsLoading = _d[1];
|
|
38
38
|
var safePromise = hooks_1.useSafePromise();
|
|
@@ -43,7 +43,7 @@ var useHistoryWithTotal = function (_a) {
|
|
|
43
43
|
var loadData = react_1.useCallback(function () {
|
|
44
44
|
if (entityUri && historicUris) {
|
|
45
45
|
setIsLoading(true);
|
|
46
|
-
safePromise(mdm_sdk_1.getHistoryWithTotal(__assign({ entityUri: entityUri, historicUris: historicUris }, options)))
|
|
46
|
+
safePromise(mdm_sdk_1.getHistoryWithTotal(__assign({ entityUri: entityUri, historicUris: historicUris, filter: filter }, options)))
|
|
47
47
|
.then(function (results) {
|
|
48
48
|
setHistoryWithTotal(results);
|
|
49
49
|
})
|
|
@@ -55,11 +55,11 @@ var useHistoryWithTotal = function (_a) {
|
|
|
55
55
|
else {
|
|
56
56
|
setHistoryWithTotal(null);
|
|
57
57
|
}
|
|
58
|
-
}, [entityUri, historicUris]);
|
|
58
|
+
}, [entityUri, historicUris, filter]);
|
|
59
59
|
var loadMore = react_1.useCallback(function (offset) {
|
|
60
60
|
if (entityUri && historicUris) {
|
|
61
61
|
setIsLoading(true);
|
|
62
|
-
safePromise(mdm_sdk_1.getHistoryWithTotal(__assign(__assign({ entityUri: entityUri, historicUris: historicUris }, options), { offset: offset })))
|
|
62
|
+
safePromise(mdm_sdk_1.getHistoryWithTotal(__assign(__assign({ entityUri: entityUri, historicUris: historicUris, filter: filter }, options), { offset: offset })))
|
|
63
63
|
.then(function (results) {
|
|
64
64
|
setHistoryWithTotal(function (prev) { return (__assign(__assign({}, prev), { changes: __spreadArray(__spreadArray([], prev === null || prev === void 0 ? void 0 : prev.changes), results.changes) })); });
|
|
65
65
|
})
|
|
@@ -68,7 +68,7 @@ var useHistoryWithTotal = function (_a) {
|
|
|
68
68
|
setIsLoading(false);
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
|
-
}, [entityUri, historicUris]);
|
|
71
|
+
}, [entityUri, historicUris, filter]);
|
|
72
72
|
react_1.useEffect(function () {
|
|
73
73
|
if (enabled) {
|
|
74
74
|
loadData();
|
|
@@ -0,0 +1,67 @@
|
|
|
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.isDateRangeValid = exports.buildHistoryFilterString = void 0;
|
|
7
|
+
var moment_1 = __importDefault(require("moment"));
|
|
8
|
+
var ramda_1 = require("ramda");
|
|
9
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
10
|
+
var HistoryFilter_1 = require("../types/HistoryFilter");
|
|
11
|
+
var ActivityTypes_1 = require("../../activityLog/types/ActivityTypes");
|
|
12
|
+
var types_1 = require("../../../types");
|
|
13
|
+
var wrapInBrackets = function (str) { return "(" + str + ")"; };
|
|
14
|
+
var multiValueFilter = function (filterClauseFn) { return ramda_1.pipe(ramda_1.map(filterClauseFn), ramda_1.join(' or ')); };
|
|
15
|
+
var durationToTimestamp = function (period) {
|
|
16
|
+
var amount = period[0], unit = period[1];
|
|
17
|
+
return moment_1.default().subtract(amount, unit).valueOf();
|
|
18
|
+
};
|
|
19
|
+
var convertHistoryTypes = ramda_1.chain(ramda_1.cond([
|
|
20
|
+
[
|
|
21
|
+
ramda_1.equals(HistoryFilter_1.HistoryActivityType.MERGE),
|
|
22
|
+
function () { return [
|
|
23
|
+
ActivityTypes_1.ActivityTypes.ENTITIES_MERGED,
|
|
24
|
+
ActivityTypes_1.ActivityTypes.ENTITIES_MERGED_MANUALLY,
|
|
25
|
+
ActivityTypes_1.ActivityTypes.ENTITIES_MERGED_ON_THE_FLY
|
|
26
|
+
]; }
|
|
27
|
+
],
|
|
28
|
+
[ramda_1.equals(HistoryFilter_1.HistoryActivityType.UNMERGE), function () { return [ActivityTypes_1.ActivityTypes.ENTITIES_SPLITTED]; }],
|
|
29
|
+
[ramda_1.equals(HistoryFilter_1.HistoryActivityType.UPDATE), function () { return [ActivityTypes_1.ActivityTypes.ENTITY_CHANGED]; }]
|
|
30
|
+
]));
|
|
31
|
+
var buildActivityFilterClause = ramda_1.pipe(ramda_1.defaultTo([]), convertHistoryTypes, ramda_1.concat([ActivityTypes_1.ActivityTypes.ENTITY_CREATED, ActivityTypes_1.ActivityTypes.ENTITY_REMOVED, ActivityTypes_1.ActivityTypes.ENTITY_LOST_MERGE]), multiValueFilter(function (value) { return "equals(type, '" + value + "')"; }));
|
|
32
|
+
var buildUserFilterClause = function (user) { return "equals(user, '" + mdm_sdk_1.escapeQueryValue(user) + "')"; };
|
|
33
|
+
var buildAttributeFilterClause = function (attribute) { return "changes(" + mdm_sdk_1.escapeQueryValue(attribute.value) + ")"; };
|
|
34
|
+
var buildDateRangeFilterClause = function (_a) {
|
|
35
|
+
var type = _a.type, period = _a.period;
|
|
36
|
+
switch (type) {
|
|
37
|
+
case types_1.DateRangeTypes.WITHIN: {
|
|
38
|
+
return "gte(timestamp, " + durationToTimestamp(period) + ")";
|
|
39
|
+
}
|
|
40
|
+
case types_1.DateRangeTypes.AGO: {
|
|
41
|
+
return "lte(timestamp, " + durationToTimestamp(period) + ")";
|
|
42
|
+
}
|
|
43
|
+
case types_1.DateRangeTypes.BETWEEN: {
|
|
44
|
+
var start = period[0], end = period[1];
|
|
45
|
+
return "gte(timestamp, " + start.valueOf() + ") and lte(timestamp, " + moment_1.default(end).endOf('date').valueOf() + ")";
|
|
46
|
+
}
|
|
47
|
+
default: {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.buildHistoryFilterString = ramda_1.pipe(ramda_1.defaultTo({}), ramda_1.reject(mdm_sdk_1.isEmptyValue), ramda_1.evolve({
|
|
53
|
+
users: multiValueFilter(buildUserFilterClause),
|
|
54
|
+
attributes: multiValueFilter(buildAttributeFilterClause),
|
|
55
|
+
dateRange: buildDateRangeFilterClause
|
|
56
|
+
}), ramda_1.over(ramda_1.lensProp('activities'), buildActivityFilterClause), ramda_1.values, ramda_1.reject(mdm_sdk_1.isEmptyValue), ramda_1.append("not equals(user, 'collaboration-service')"), ramda_1.map(wrapInBrackets), ramda_1.join(' and '));
|
|
57
|
+
var isDateRangeValid = function (value) {
|
|
58
|
+
if (value.type === types_1.DateRangeTypes.AGO || value.type === types_1.DateRangeTypes.WITHIN) {
|
|
59
|
+
var _a = value.period, amount = _a[0], unit = _a[1];
|
|
60
|
+
return ramda_1.type(amount) === 'Number' && ramda_1.type(unit) === 'String' && amount > 0;
|
|
61
|
+
}
|
|
62
|
+
else if (value.type === types_1.DateRangeTypes.BETWEEN) {
|
|
63
|
+
var _b = value.period, startDate = _b[0], endDate = _b[1];
|
|
64
|
+
return startDate instanceof Date && endDate instanceof Date;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
exports.isDateRangeValid = isDateRangeValid;
|
|
@@ -11,12 +11,13 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
};
|
|
12
12
|
import React, { useState } from 'react';
|
|
13
13
|
import i18n from 'ui-i18n';
|
|
14
|
-
import { curry } from 'ramda';
|
|
14
|
+
import { curry, dissoc } from 'ramda';
|
|
15
15
|
import FilterListIcon from '@material-ui/icons/FilterList';
|
|
16
16
|
import Button from '@material-ui/core/Button';
|
|
17
17
|
import Popover from '@material-ui/core/Popover';
|
|
18
18
|
import Typography from '@material-ui/core/Typography';
|
|
19
19
|
import { SmallIconButton } from '../../SmallIconButton';
|
|
20
|
+
import { isDateRangeValid } from '../utils/filters';
|
|
20
21
|
import UserSelector from '../../UserSelector/UserSelector';
|
|
21
22
|
import AttributeSelector from '../../AttributeSelector/AttributeSelector';
|
|
22
23
|
import DateRangeSelector from '../DateRangeSelector/DateRangeSelector';
|
|
@@ -56,7 +57,12 @@ var HistoryFilterButton = function (_a) {
|
|
|
56
57
|
React.createElement(Button, { onClick: clearCurrentValue, className: styles.clearButton }, i18n.text('Clear all')),
|
|
57
58
|
React.createElement(Button, { onClick: closePopup }, i18n.text('Cancel')),
|
|
58
59
|
React.createElement(Button, { color: "primary", onClick: function () {
|
|
59
|
-
|
|
60
|
+
if (dateRange && isDateRangeValid(dateRange)) {
|
|
61
|
+
onApplyFilter(currentValue);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
onApplyFilter(dissoc('dateRange', currentValue));
|
|
65
|
+
}
|
|
60
66
|
closePopup();
|
|
61
67
|
} }, i18n.text('Apply'))))));
|
|
62
68
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { HistoryFilter } from '../types';
|
|
3
2
|
declare type Props = {
|
|
4
3
|
entityUri: string;
|
|
@@ -8,10 +7,10 @@ export declare const useHistory: ({ entityUri, enabled }: Props) => {
|
|
|
8
7
|
isLoading: boolean;
|
|
9
8
|
canLoadMore: boolean;
|
|
10
9
|
onLoadMore: () => void;
|
|
10
|
+
onApplyFilter: (filter: HistoryFilter) => void;
|
|
11
11
|
historicUris: string[];
|
|
12
12
|
historyWithTotal: import("@reltio/mdm-sdk").HistoryWithTotal;
|
|
13
13
|
historyFilter: HistoryFilter;
|
|
14
|
-
setHistoryFilter: import("react").Dispatch<import("react").SetStateAction<HistoryFilter>>;
|
|
15
14
|
reloadHistory: () => void;
|
|
16
15
|
};
|
|
17
16
|
export {};
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { useState, useMemo, useCallback } from 'react';
|
|
2
2
|
import { useHistoricUris } from './useHistoricUris';
|
|
3
3
|
import { useHistoryWithTotal } from './useHistoryWithTotal';
|
|
4
|
+
import { HistoryActivityType } from '../types';
|
|
5
|
+
import { buildHistoryFilterString } from '../utils/filters';
|
|
4
6
|
var MAX_HISTORY_ROWS = 32;
|
|
5
7
|
export var useHistory = function (_a) {
|
|
6
8
|
var entityUri = _a.entityUri, enabled = _a.enabled;
|
|
7
|
-
var _b = useState(
|
|
9
|
+
var _b = useState({
|
|
10
|
+
activities: [HistoryActivityType.MERGE, HistoryActivityType.UNMERGE, HistoryActivityType.UPDATE]
|
|
11
|
+
}), historyFilter = _b[0], setHistoryFilter = _b[1];
|
|
8
12
|
var _c = useState(0), historyPage = _c[0], setHistoryPage = _c[1];
|
|
13
|
+
var historyFilterString = useMemo(function () { return buildHistoryFilterString(historyFilter); }, [historyFilter]);
|
|
9
14
|
var _d = useHistoricUris({
|
|
10
15
|
entityUri: entityUri,
|
|
11
16
|
enabled: enabled
|
|
@@ -13,16 +18,20 @@ export var useHistory = function (_a) {
|
|
|
13
18
|
var _e = useHistoryWithTotal({
|
|
14
19
|
entityUri: entityUri,
|
|
15
20
|
enabled: enabled && !!historicUris,
|
|
21
|
+
filter: historyFilterString,
|
|
16
22
|
historicUris: historicUris,
|
|
17
23
|
max: MAX_HISTORY_ROWS,
|
|
18
24
|
offset: historyPage * MAX_HISTORY_ROWS,
|
|
19
|
-
order: 'desc'
|
|
20
|
-
showAll: true
|
|
25
|
+
order: 'desc'
|
|
21
26
|
}), isHistoryLoading = _e.isLoading, historyWithTotal = _e.historyWithTotal, loadMore = _e.loadMore, loadData = _e.loadData;
|
|
22
|
-
var canLoadMore = useMemo(function () { return (historyPage + 1) * MAX_HISTORY_ROWS
|
|
27
|
+
var canLoadMore = useMemo(function () { return (historyPage + 1) * MAX_HISTORY_ROWS < (historyWithTotal === null || historyWithTotal === void 0 ? void 0 : historyWithTotal.total); }, [
|
|
23
28
|
historyWithTotal,
|
|
24
29
|
historyPage
|
|
25
30
|
]);
|
|
31
|
+
var onApplyFilter = useCallback(function (filter) {
|
|
32
|
+
setHistoryPage(0);
|
|
33
|
+
setHistoryFilter(filter);
|
|
34
|
+
}, []);
|
|
26
35
|
var onLoadMore = useCallback(function () {
|
|
27
36
|
if (!canLoadMore)
|
|
28
37
|
return;
|
|
@@ -37,10 +46,10 @@ export var useHistory = function (_a) {
|
|
|
37
46
|
isLoading: isHistoryLoading || isHistoricUrisLoading,
|
|
38
47
|
canLoadMore: canLoadMore,
|
|
39
48
|
onLoadMore: onLoadMore,
|
|
49
|
+
onApplyFilter: onApplyFilter,
|
|
40
50
|
historicUris: historicUris,
|
|
41
51
|
historyWithTotal: historyWithTotal,
|
|
42
52
|
historyFilter: historyFilter,
|
|
43
|
-
setHistoryFilter: setHistoryFilter,
|
|
44
53
|
reloadHistory: reloadHistory
|
|
45
54
|
};
|
|
46
55
|
};
|
|
@@ -7,9 +7,9 @@ declare type Props = {
|
|
|
7
7
|
max?: number;
|
|
8
8
|
offset?: number;
|
|
9
9
|
order?: string;
|
|
10
|
-
filter?:
|
|
10
|
+
filter?: string;
|
|
11
11
|
};
|
|
12
|
-
export declare const useHistoryWithTotal: ({ entityUri, enabled, historicUris, ...options }: Props) => {
|
|
12
|
+
export declare const useHistoryWithTotal: ({ entityUri, enabled, historicUris, filter, ...options }: Props) => {
|
|
13
13
|
isLoading: boolean;
|
|
14
14
|
historyWithTotal: HistoryWithTotal;
|
|
15
15
|
loadMore: (offset: number) => void;
|
|
@@ -29,7 +29,7 @@ import { useCallback, useEffect, useState } from 'react';
|
|
|
29
29
|
import { getHistoryWithTotal } from '@reltio/mdm-sdk';
|
|
30
30
|
import { useSafePromise } from '../../../hooks';
|
|
31
31
|
export var useHistoryWithTotal = function (_a) {
|
|
32
|
-
var entityUri = _a.entityUri, _b = _a.enabled, enabled = _b === void 0 ? true : _b, historicUris = _a.historicUris, options = __rest(_a, ["entityUri", "enabled", "historicUris"]);
|
|
32
|
+
var entityUri = _a.entityUri, _b = _a.enabled, enabled = _b === void 0 ? true : _b, historicUris = _a.historicUris, filter = _a.filter, options = __rest(_a, ["entityUri", "enabled", "historicUris", "filter"]);
|
|
33
33
|
var _c = useState(null), historyWithTotal = _c[0], setHistoryWithTotal = _c[1];
|
|
34
34
|
var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
|
|
35
35
|
var safePromise = useSafePromise();
|
|
@@ -40,7 +40,7 @@ export var useHistoryWithTotal = function (_a) {
|
|
|
40
40
|
var loadData = useCallback(function () {
|
|
41
41
|
if (entityUri && historicUris) {
|
|
42
42
|
setIsLoading(true);
|
|
43
|
-
safePromise(getHistoryWithTotal(__assign({ entityUri: entityUri, historicUris: historicUris }, options)))
|
|
43
|
+
safePromise(getHistoryWithTotal(__assign({ entityUri: entityUri, historicUris: historicUris, filter: filter }, options)))
|
|
44
44
|
.then(function (results) {
|
|
45
45
|
setHistoryWithTotal(results);
|
|
46
46
|
})
|
|
@@ -52,11 +52,11 @@ export var useHistoryWithTotal = function (_a) {
|
|
|
52
52
|
else {
|
|
53
53
|
setHistoryWithTotal(null);
|
|
54
54
|
}
|
|
55
|
-
}, [entityUri, historicUris]);
|
|
55
|
+
}, [entityUri, historicUris, filter]);
|
|
56
56
|
var loadMore = useCallback(function (offset) {
|
|
57
57
|
if (entityUri && historicUris) {
|
|
58
58
|
setIsLoading(true);
|
|
59
|
-
safePromise(getHistoryWithTotal(__assign(__assign({ entityUri: entityUri, historicUris: historicUris }, options), { offset: offset })))
|
|
59
|
+
safePromise(getHistoryWithTotal(__assign(__assign({ entityUri: entityUri, historicUris: historicUris, filter: filter }, options), { offset: offset })))
|
|
60
60
|
.then(function (results) {
|
|
61
61
|
setHistoryWithTotal(function (prev) { return (__assign(__assign({}, prev), { changes: __spreadArray(__spreadArray([], prev === null || prev === void 0 ? void 0 : prev.changes), results.changes) })); });
|
|
62
62
|
})
|
|
@@ -65,7 +65,7 @@ export var useHistoryWithTotal = function (_a) {
|
|
|
65
65
|
setIsLoading(false);
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
-
}, [entityUri, historicUris]);
|
|
68
|
+
}, [entityUri, historicUris, filter]);
|
|
69
69
|
useEffect(function () {
|
|
70
70
|
if (enabled) {
|
|
71
71
|
loadData();
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import moment from 'moment';
|
|
2
|
+
import { type, pipe, defaultTo, reject, map, join, cond, equals, append, concat, chain, evolve, values, over, lensProp } from 'ramda';
|
|
3
|
+
import { isEmptyValue, escapeQueryValue } from '@reltio/mdm-sdk';
|
|
4
|
+
import { HistoryActivityType } from '../types/HistoryFilter';
|
|
5
|
+
import { ActivityTypes } from '../../activityLog/types/ActivityTypes';
|
|
6
|
+
import { DateRangeTypes } from '../../../types';
|
|
7
|
+
var wrapInBrackets = function (str) { return "(" + str + ")"; };
|
|
8
|
+
var multiValueFilter = function (filterClauseFn) { return pipe(map(filterClauseFn), join(' or ')); };
|
|
9
|
+
var durationToTimestamp = function (period) {
|
|
10
|
+
var amount = period[0], unit = period[1];
|
|
11
|
+
return moment().subtract(amount, unit).valueOf();
|
|
12
|
+
};
|
|
13
|
+
var convertHistoryTypes = chain(cond([
|
|
14
|
+
[
|
|
15
|
+
equals(HistoryActivityType.MERGE),
|
|
16
|
+
function () { return [
|
|
17
|
+
ActivityTypes.ENTITIES_MERGED,
|
|
18
|
+
ActivityTypes.ENTITIES_MERGED_MANUALLY,
|
|
19
|
+
ActivityTypes.ENTITIES_MERGED_ON_THE_FLY
|
|
20
|
+
]; }
|
|
21
|
+
],
|
|
22
|
+
[equals(HistoryActivityType.UNMERGE), function () { return [ActivityTypes.ENTITIES_SPLITTED]; }],
|
|
23
|
+
[equals(HistoryActivityType.UPDATE), function () { return [ActivityTypes.ENTITY_CHANGED]; }]
|
|
24
|
+
]));
|
|
25
|
+
var buildActivityFilterClause = pipe(defaultTo([]), convertHistoryTypes, concat([ActivityTypes.ENTITY_CREATED, ActivityTypes.ENTITY_REMOVED, ActivityTypes.ENTITY_LOST_MERGE]), multiValueFilter(function (value) { return "equals(type, '" + value + "')"; }));
|
|
26
|
+
var buildUserFilterClause = function (user) { return "equals(user, '" + escapeQueryValue(user) + "')"; };
|
|
27
|
+
var buildAttributeFilterClause = function (attribute) { return "changes(" + escapeQueryValue(attribute.value) + ")"; };
|
|
28
|
+
var buildDateRangeFilterClause = function (_a) {
|
|
29
|
+
var type = _a.type, period = _a.period;
|
|
30
|
+
switch (type) {
|
|
31
|
+
case DateRangeTypes.WITHIN: {
|
|
32
|
+
return "gte(timestamp, " + durationToTimestamp(period) + ")";
|
|
33
|
+
}
|
|
34
|
+
case DateRangeTypes.AGO: {
|
|
35
|
+
return "lte(timestamp, " + durationToTimestamp(period) + ")";
|
|
36
|
+
}
|
|
37
|
+
case DateRangeTypes.BETWEEN: {
|
|
38
|
+
var start = period[0], end = period[1];
|
|
39
|
+
return "gte(timestamp, " + start.valueOf() + ") and lte(timestamp, " + moment(end).endOf('date').valueOf() + ")";
|
|
40
|
+
}
|
|
41
|
+
default: {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
export var buildHistoryFilterString = pipe(defaultTo({}), reject(isEmptyValue), evolve({
|
|
47
|
+
users: multiValueFilter(buildUserFilterClause),
|
|
48
|
+
attributes: multiValueFilter(buildAttributeFilterClause),
|
|
49
|
+
dateRange: buildDateRangeFilterClause
|
|
50
|
+
}), over(lensProp('activities'), buildActivityFilterClause), values, reject(isEmptyValue), append("not equals(user, 'collaboration-service')"), map(wrapInBrackets), join(' and '));
|
|
51
|
+
export var isDateRangeValid = function (value) {
|
|
52
|
+
if (value.type === DateRangeTypes.AGO || value.type === DateRangeTypes.WITHIN) {
|
|
53
|
+
var _a = value.period, amount = _a[0], unit = _a[1];
|
|
54
|
+
return type(amount) === 'Number' && type(unit) === 'String' && amount > 0;
|
|
55
|
+
}
|
|
56
|
+
else if (value.type === DateRangeTypes.BETWEEN) {
|
|
57
|
+
var _b = value.period, startDate = _b[0], endDate = _b[1];
|
|
58
|
+
return startDate instanceof Date && endDate instanceof Date;
|
|
59
|
+
}
|
|
60
|
+
};
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.917",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@date-io/moment": "^1.3.5",
|
|
9
9
|
"@react-google-maps/api": "^2.7.0",
|
|
10
|
-
"@reltio/mdm-module": "^1.4.
|
|
11
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
10
|
+
"@reltio/mdm-module": "^1.4.917",
|
|
11
|
+
"@reltio/mdm-sdk": "^1.4.917",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"d3-cloud": "^1.2.5",
|
|
14
14
|
"d3-geo": "^2.0.1",
|