pne-ui 4.0.45 → 4.0.47
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/README.md +17 -0
- package/cjs/component/search-ui/SearchUI.js +15 -11
- package/cjs/component/search-ui/SearchUI.js.map +1 -1
- package/cjs/component/search-ui/SearchUIProvider.d.ts +5 -1
- package/cjs/component/search-ui/SearchUIProvider.js +1 -0
- package/cjs/component/search-ui/SearchUIProvider.js.map +1 -1
- package/cjs/component/search-ui/filters/CriterionContainer.js +3 -0
- package/cjs/component/search-ui/filters/CriterionContainer.js.map +1 -1
- package/cjs/component/search-ui/filters/SearchUIFilters.d.ts +1 -0
- package/cjs/component/search-ui/filters/SearchUIFilters.js +43 -18
- package/cjs/component/search-ui/filters/SearchUIFilters.js.map +1 -1
- package/cjs/component/search-ui/filters/component/criterion/CustomerLevelCriterion.d.ts +2 -0
- package/cjs/component/search-ui/filters/component/criterion/CustomerLevelCriterion.js +92 -0
- package/cjs/component/search-ui/filters/component/criterion/CustomerLevelCriterion.js.map +1 -0
- package/cjs/component/search-ui/filters/component/select/SearchUIAbstractEntityChipSelect.d.ts +12 -0
- package/cjs/component/search-ui/filters/component/select/SearchUIAbstractEntityChipSelect.js +29 -0
- package/cjs/component/search-ui/filters/component/select/SearchUIAbstractEntityChipSelect.js.map +1 -0
- package/cjs/component/search-ui/filters/component/select/SearchUICollapsableGroupSelect.js +1 -0
- package/cjs/component/search-ui/filters/component/select/SearchUICollapsableGroupSelect.js.map +1 -1
- package/cjs/component/search-ui/filters/component/select/SearchUIProcessorLogEntryTypeSelect.d.ts +1 -9
- package/cjs/component/search-ui/filters/component/select/SearchUIProcessorLogEntryTypeSelect.js +3 -19
- package/cjs/component/search-ui/filters/component/select/SearchUIProcessorLogEntryTypeSelect.js.map +1 -1
- package/cjs/component/search-ui/filters/customerLevelDependencies.d.ts +6 -0
- package/cjs/component/search-ui/filters/customerLevelDependencies.js +25 -0
- package/cjs/component/search-ui/filters/customerLevelDependencies.js.map +1 -0
- package/cjs/component/search-ui/filters/state/SearchUIFiltersStoreProvider.d.ts +7 -0
- package/cjs/component/search-ui/filters/state/SearchUIFiltersStoreProvider.js +30 -0
- package/cjs/component/search-ui/filters/state/SearchUIFiltersStoreProvider.js.map +1 -0
- package/cjs/component/search-ui/filters/state/actions.js +209 -51
- package/cjs/component/search-ui/filters/state/actions.js.map +1 -1
- package/cjs/component/search-ui/filters/state/initial.js +6 -0
- package/cjs/component/search-ui/filters/state/initial.js.map +1 -1
- package/cjs/component/search-ui/filters/state/retention.d.ts +5 -0
- package/cjs/component/search-ui/filters/state/retention.js +107 -0
- package/cjs/component/search-ui/filters/state/retention.js.map +1 -0
- package/cjs/component/search-ui/filters/state/store.d.ts +11 -1068
- package/cjs/component/search-ui/filters/state/store.js +22 -2
- package/cjs/component/search-ui/filters/state/store.js.map +1 -1
- package/cjs/component/search-ui/filters/state/type.d.ts +17 -1
- package/cjs/component/search-ui/filters/state/undo.js +1 -0
- package/cjs/component/search-ui/filters/state/undo.js.map +1 -1
- package/cjs/component/search-ui/filters/types.d.ts +18 -1
- package/cjs/component/search-ui/filters/types.js +8 -1
- package/cjs/component/search-ui/filters/types.js.map +1 -1
- package/cjs/component/search-ui/state/initial.js +1 -0
- package/cjs/component/search-ui/state/initial.js.map +1 -1
- package/cjs/component/search-ui/state/store.d.ts +2 -0
- package/cjs/exports/search.d.ts +1 -1
- package/cjs/exports/search.js +2 -1
- package/cjs/exports/search.js.map +1 -1
- package/esm/component/search-ui/SearchUI.js +13 -9
- package/esm/component/search-ui/SearchUI.js.map +1 -1
- package/esm/component/search-ui/SearchUIProvider.d.ts +5 -1
- package/esm/component/search-ui/SearchUIProvider.js +1 -0
- package/esm/component/search-ui/SearchUIProvider.js.map +1 -1
- package/esm/component/search-ui/filters/CriterionContainer.js +3 -0
- package/esm/component/search-ui/filters/CriterionContainer.js.map +1 -1
- package/esm/component/search-ui/filters/SearchUIFilters.d.ts +1 -0
- package/esm/component/search-ui/filters/SearchUIFilters.js +42 -18
- package/esm/component/search-ui/filters/SearchUIFilters.js.map +1 -1
- package/esm/component/search-ui/filters/component/criterion/CustomerLevelCriterion.d.ts +2 -0
- package/esm/component/search-ui/filters/component/criterion/CustomerLevelCriterion.js +87 -0
- package/esm/component/search-ui/filters/component/criterion/CustomerLevelCriterion.js.map +1 -0
- package/esm/component/search-ui/filters/component/select/SearchUIAbstractEntityChipSelect.d.ts +12 -0
- package/esm/component/search-ui/filters/component/select/SearchUIAbstractEntityChipSelect.js +26 -0
- package/esm/component/search-ui/filters/component/select/SearchUIAbstractEntityChipSelect.js.map +1 -0
- package/esm/component/search-ui/filters/component/select/SearchUICollapsableGroupSelect.js +1 -0
- package/esm/component/search-ui/filters/component/select/SearchUICollapsableGroupSelect.js.map +1 -1
- package/esm/component/search-ui/filters/component/select/SearchUIProcessorLogEntryTypeSelect.d.ts +1 -9
- package/esm/component/search-ui/filters/component/select/SearchUIProcessorLogEntryTypeSelect.js +1 -19
- package/esm/component/search-ui/filters/component/select/SearchUIProcessorLogEntryTypeSelect.js.map +1 -1
- package/esm/component/search-ui/filters/customerLevelDependencies.d.ts +6 -0
- package/esm/component/search-ui/filters/customerLevelDependencies.js +21 -0
- package/esm/component/search-ui/filters/customerLevelDependencies.js.map +1 -0
- package/esm/component/search-ui/filters/state/SearchUIFiltersStoreProvider.d.ts +7 -0
- package/esm/component/search-ui/filters/state/SearchUIFiltersStoreProvider.js +25 -0
- package/esm/component/search-ui/filters/state/SearchUIFiltersStoreProvider.js.map +1 -0
- package/esm/component/search-ui/filters/state/actions.js +210 -52
- package/esm/component/search-ui/filters/state/actions.js.map +1 -1
- package/esm/component/search-ui/filters/state/initial.js +6 -0
- package/esm/component/search-ui/filters/state/initial.js.map +1 -1
- package/esm/component/search-ui/filters/state/retention.d.ts +5 -0
- package/esm/component/search-ui/filters/state/retention.js +99 -0
- package/esm/component/search-ui/filters/state/retention.js.map +1 -0
- package/esm/component/search-ui/filters/state/store.d.ts +11 -1068
- package/esm/component/search-ui/filters/state/store.js +18 -2
- package/esm/component/search-ui/filters/state/store.js.map +1 -1
- package/esm/component/search-ui/filters/state/type.d.ts +17 -1
- package/esm/component/search-ui/filters/state/undo.js +1 -0
- package/esm/component/search-ui/filters/state/undo.js.map +1 -1
- package/esm/component/search-ui/filters/types.d.ts +18 -1
- package/esm/component/search-ui/filters/types.js +7 -0
- package/esm/component/search-ui/filters/types.js.map +1 -1
- package/esm/component/search-ui/state/initial.js +1 -0
- package/esm/component/search-ui/state/initial.js.map +1 -1
- package/esm/component/search-ui/state/store.d.ts +2 -0
- package/esm/exports/search.d.ts +1 -1
- package/esm/exports/search.js +1 -1
- package/esm/exports/search.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { exhaustiveCheck, } from '../../../..';
|
|
2
|
-
import { CriterionTypeEnum, ExactCriterionSearchLabelEnum, LinkedEntityTypeEnum, MultichoiceFilterTypeEnum, ThreeDCriterionEnum, } from '../types';
|
|
2
|
+
import { CUSTOMER_LEVEL_DEPENDENCIES, CriterionTypeEnum, ExactCriterionSearchLabelEnum, LinkedEntityTypeEnum, MultichoiceFilterTypeEnum, ThreeDCriterionEnum, } from '../types';
|
|
3
3
|
import { getCriteriaWithAvailabilityRules, isCriterionAvailable, } from '../criterionAvailability';
|
|
4
4
|
import { getSearchUIFiltersInitialState, getSearchUIInitialGrouping, getSearchUIInitialProjectCurrency, getSearchUIInitialSearchCriteria, searchUICountriesInitialAllableCollection, searchUIInitialAllableCollection, searchUIInitialDateFrom, searchUIInitialDateTo, } from './initial';
|
|
5
5
|
// import {raiseUIError} from '../../../../../error';
|
|
@@ -10,6 +10,7 @@ import isoWeek from 'dayjs/plugin/isoWeek';
|
|
|
10
10
|
import cloneDeep from 'lodash/cloneDeep';
|
|
11
11
|
import isEqual from 'lodash/isEqual';
|
|
12
12
|
import { applyDateOnlyTimeZone, createDateOnlySearchDate, createDateOnlySearchEndExclusiveDate, resolveDateOnlyTimeZone, SEARCH_UI_NON_EXACT_DEFAULT_TIME_ZONE, } from '../dateRangeTimeZone';
|
|
13
|
+
import { getConcreteCustomerLevelMerchantId } from '../customerLevelDependencies';
|
|
13
14
|
dayjs.extend(utc);
|
|
14
15
|
dayjs.extend(timezone);
|
|
15
16
|
dayjs.extend(isoWeek);
|
|
@@ -28,6 +29,7 @@ const criterionToLinkedEntityMap = {
|
|
|
28
29
|
const getLinkedEntityTypeByCriterion = (criterion) => {
|
|
29
30
|
return criterionToLinkedEntityMap[criterion] ?? null;
|
|
30
31
|
};
|
|
32
|
+
const isConfiguredCriterion = (draft, criterion) => draft.possibleCriteria.includes(criterion) || draft.predefinedCriteria.includes(criterion);
|
|
31
33
|
const getInitialMultigetCriterion = (entityType) => ({
|
|
32
34
|
entityType: entityType,
|
|
33
35
|
filterType: MultichoiceFilterTypeEnum.NONE,
|
|
@@ -78,58 +80,141 @@ const sanitizeMultigetCriteria = (incoming, activeCriteria) => {
|
|
|
78
80
|
});
|
|
79
81
|
return Array.from(uniqueByEntity.values());
|
|
80
82
|
};
|
|
83
|
+
const isRetainedSnapshotCompatible = (snapshot, state) => {
|
|
84
|
+
return isEqual(snapshot.possibleCriteria, state.possibleCriteria)
|
|
85
|
+
&& isEqual(snapshot.predefinedCriteria, state.predefinedCriteria)
|
|
86
|
+
&& isEqual(snapshot.exactSearchLabels, state.exactSearchLabels)
|
|
87
|
+
&& snapshot.manualSearch === !!state.config?.manualSearch;
|
|
88
|
+
};
|
|
89
|
+
const addCriterionReducer = (draft, criterion, configuredOnly = false) => {
|
|
90
|
+
if (configuredOnly && !isConfiguredCriterion(draft, criterion)) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (draft.criteria.includes(criterion)) {
|
|
94
|
+
const entityType = getLinkedEntityTypeByCriterion(criterion);
|
|
95
|
+
if (entityType !== null
|
|
96
|
+
&& !draft.multigetCriteria.some(multigetCriterion => multigetCriterion.entityType === entityType)) {
|
|
97
|
+
draft.multigetCriteria.push(getInitialMultigetCriterion(entityType));
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
draft.criteria.push(criterion);
|
|
102
|
+
addInitialMultigetCriterionReducer(draft, criterion);
|
|
103
|
+
};
|
|
104
|
+
const ensureCustomerLevelDependenciesReducer = (draft) => {
|
|
105
|
+
if (!draft.criteria.includes(CriterionTypeEnum.CUSTOMER_LEVEL)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
CUSTOMER_LEVEL_DEPENDENCIES.forEach(dependency => addCriterionReducer(draft, dependency, true));
|
|
109
|
+
};
|
|
110
|
+
const applyConditionsReducer = (draft, conditions) => {
|
|
111
|
+
const { criteria: incomingCriteria, multigetCriteria: incomingMultigetCriteria, ...rest } = conditions;
|
|
112
|
+
const prevCriteria = draft.criteria.slice();
|
|
113
|
+
Object.assign(draft, rest);
|
|
114
|
+
if (incomingCriteria !== undefined) {
|
|
115
|
+
const allowedCriteria = new Set([
|
|
116
|
+
...draft.predefinedCriteria,
|
|
117
|
+
...draft.possibleCriteria,
|
|
118
|
+
]);
|
|
119
|
+
const sanitizedIncoming = Array.from(new Set(incomingCriteria.filter(criterion => allowedCriteria.has(criterion))));
|
|
120
|
+
const mergedCriteria = Array.from(new Set([
|
|
121
|
+
...draft.predefinedCriteria,
|
|
122
|
+
...sanitizedIncoming,
|
|
123
|
+
]));
|
|
124
|
+
const removedCriteria = prevCriteria.filter(criterion => !mergedCriteria.includes(criterion));
|
|
125
|
+
removedCriteria.forEach(criterion => {
|
|
126
|
+
clearCriterionReducer(draft, criterion);
|
|
127
|
+
});
|
|
128
|
+
const addedCriteria = mergedCriteria.filter(criterion => !prevCriteria.includes(criterion));
|
|
129
|
+
if (incomingMultigetCriteria === undefined) {
|
|
130
|
+
addedCriteria.forEach(criterion => {
|
|
131
|
+
addInitialMultigetCriterionReducer(draft, criterion);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
draft.criteria = mergedCriteria;
|
|
135
|
+
}
|
|
136
|
+
if (incomingMultigetCriteria !== undefined) {
|
|
137
|
+
const sanitizedMultigetCriteria = sanitizeMultigetCriteria(incomingMultigetCriteria, draft.criteria);
|
|
138
|
+
const missingEntityTypes = draft.criteria
|
|
139
|
+
.map(getLinkedEntityTypeByCriterion)
|
|
140
|
+
.filter((entityType) => entityType !== null)
|
|
141
|
+
.filter(entityType => !sanitizedMultigetCriteria.some(item => item.entityType === entityType));
|
|
142
|
+
missingEntityTypes.forEach(entityType => {
|
|
143
|
+
sanitizedMultigetCriteria.push(getInitialMultigetCriterion(entityType));
|
|
144
|
+
});
|
|
145
|
+
draft.multigetCriteria = sanitizedMultigetCriteria;
|
|
146
|
+
}
|
|
147
|
+
ensureCustomerLevelDependenciesReducer(draft);
|
|
148
|
+
};
|
|
149
|
+
const restoreAppliedSearchCriteria = (snapshot, retainedDraftSearchCriteria, currentSearchCriteria) => {
|
|
150
|
+
if (!snapshot.hasUnappliedFilters || !snapshot.appliedSearchCriteria) {
|
|
151
|
+
return currentSearchCriteria;
|
|
152
|
+
}
|
|
153
|
+
const retainedDraftWithoutDates = {
|
|
154
|
+
...retainedDraftSearchCriteria,
|
|
155
|
+
dateFrom: currentSearchCriteria.dateFrom,
|
|
156
|
+
dateTo: currentSearchCriteria.dateTo,
|
|
157
|
+
};
|
|
158
|
+
if (!isEqual(retainedDraftWithoutDates, currentSearchCriteria)) {
|
|
159
|
+
return currentSearchCriteria;
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
...cloneDeep(snapshot.appliedSearchCriteria),
|
|
163
|
+
dateFrom: isEqual(snapshot.appliedSearchCriteria.dateFrom, retainedDraftSearchCriteria.dateFrom)
|
|
164
|
+
? currentSearchCriteria.dateFrom
|
|
165
|
+
: snapshot.appliedSearchCriteria.dateFrom,
|
|
166
|
+
dateTo: isEqual(snapshot.appliedSearchCriteria.dateTo, retainedDraftSearchCriteria.dateTo)
|
|
167
|
+
? currentSearchCriteria.dateTo
|
|
168
|
+
: snapshot.appliedSearchCriteria.dateTo,
|
|
169
|
+
};
|
|
170
|
+
};
|
|
81
171
|
export const getSearchUIFiltersActions = (set, get) => ({
|
|
82
|
-
setInitialState: (state) => {
|
|
172
|
+
setInitialState: (state, retainedSnapshot) => {
|
|
83
173
|
set((draft) => {
|
|
84
|
-
|
|
174
|
+
const initialState = {
|
|
85
175
|
...draft,
|
|
86
176
|
...getSearchUIFiltersInitialState(),
|
|
87
177
|
...getSearchUIInitialSearchCriteria(state.defaults),
|
|
88
178
|
...state,
|
|
89
179
|
};
|
|
180
|
+
Object.assign(draft, initialState);
|
|
181
|
+
ensureCustomerLevelDependenciesReducer(draft);
|
|
182
|
+
if (retainedSnapshot && isRetainedSnapshotCompatible(retainedSnapshot, initialState)) {
|
|
183
|
+
applyConditionsReducer(draft, retainedSnapshot.searchConditions);
|
|
184
|
+
draft.activeTemplateName = retainedSnapshot.activeTemplateName;
|
|
185
|
+
draft.restoredFromRetention = true;
|
|
186
|
+
}
|
|
187
|
+
draft.initialized = true;
|
|
90
188
|
});
|
|
91
|
-
|
|
189
|
+
const retainedDraftSearchCriteria = get().restoredFromRetention
|
|
190
|
+
? extractSearchCriteriaFromState(get())
|
|
191
|
+
: null;
|
|
192
|
+
syncCriterionAvailability(set, get);
|
|
193
|
+
normalizeRetainedDateRange(set, get);
|
|
194
|
+
ensureTransactionSessionStatusesPrefetched(set, get);
|
|
195
|
+
if (get().restoredFromRetention && retainedSnapshot && retainedDraftSearchCriteria) {
|
|
196
|
+
const currentSearchCriteria = extractSearchCriteriaFromState(get());
|
|
197
|
+
const appliedSearchCriteria = get().config?.manualSearch
|
|
198
|
+
? restoreAppliedSearchCriteria(retainedSnapshot, retainedDraftSearchCriteria, currentSearchCriteria)
|
|
199
|
+
: currentSearchCriteria;
|
|
200
|
+
get().onFiltersUpdate(appliedSearchCriteria);
|
|
201
|
+
set((draft) => {
|
|
202
|
+
draft.prevSearchCriteria = currentSearchCriteria;
|
|
203
|
+
draft.appliedSearchCriteria = appliedSearchCriteria;
|
|
204
|
+
draft.hasUnappliedFilters = !!draft.config?.manualSearch
|
|
205
|
+
&& !isEqual(currentSearchCriteria, appliedSearchCriteria);
|
|
206
|
+
});
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
checkIfFiltersChanged(set, get);
|
|
92
210
|
},
|
|
93
211
|
updateConditions: (conditions, options) => {
|
|
94
212
|
set((draft) => {
|
|
95
|
-
|
|
96
|
-
const prevCriteria = draft.criteria.slice();
|
|
97
|
-
Object.assign(draft, rest);
|
|
98
|
-
if (incomingCriteria !== undefined) {
|
|
99
|
-
const allowedCriteria = new Set([
|
|
100
|
-
...draft.predefinedCriteria,
|
|
101
|
-
...draft.possibleCriteria,
|
|
102
|
-
]);
|
|
103
|
-
const sanitizedIncoming = Array.from(new Set(incomingCriteria.filter(criterion => allowedCriteria.has(criterion))));
|
|
104
|
-
const mergedCriteria = Array.from(new Set([
|
|
105
|
-
...draft.predefinedCriteria,
|
|
106
|
-
...sanitizedIncoming,
|
|
107
|
-
]));
|
|
108
|
-
const removedCriteria = prevCriteria.filter(criterion => !mergedCriteria.includes(criterion));
|
|
109
|
-
removedCriteria.forEach(criterion => {
|
|
110
|
-
clearCriterionReducer(draft, criterion);
|
|
111
|
-
});
|
|
112
|
-
const addedCriteria = mergedCriteria.filter(criterion => !prevCriteria.includes(criterion));
|
|
113
|
-
if (incomingMultigetCriteria === undefined) {
|
|
114
|
-
addedCriteria.forEach(criterion => {
|
|
115
|
-
addInitialMultigetCriterionReducer(draft, criterion);
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
draft.criteria = mergedCriteria;
|
|
119
|
-
}
|
|
120
|
-
if (incomingMultigetCriteria !== undefined) {
|
|
121
|
-
const sanitizedMultigetCriteria = sanitizeMultigetCriteria(incomingMultigetCriteria, draft.criteria);
|
|
122
|
-
const missingEntityTypes = draft.criteria
|
|
123
|
-
.map(getLinkedEntityTypeByCriterion)
|
|
124
|
-
.filter((entityType) => entityType !== null)
|
|
125
|
-
.filter(entityType => !sanitizedMultigetCriteria.some(item => item.entityType === entityType));
|
|
126
|
-
missingEntityTypes.forEach(entityType => {
|
|
127
|
-
sanitizedMultigetCriteria.push(getInitialMultigetCriterion(entityType));
|
|
128
|
-
});
|
|
129
|
-
draft.multigetCriteria = sanitizedMultigetCriteria;
|
|
130
|
-
}
|
|
213
|
+
applyConditionsReducer(draft, conditions);
|
|
131
214
|
if (options?.resetTemplate) {
|
|
132
215
|
draft.template = null;
|
|
216
|
+
draft.activeTemplateName = null;
|
|
217
|
+
draft.skipLastTemplateAutoApply = true;
|
|
133
218
|
}
|
|
134
219
|
});
|
|
135
220
|
postUpdate(set, get, options);
|
|
@@ -146,6 +231,8 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
146
231
|
set(draft => {
|
|
147
232
|
Object.assign(draft, conditions);
|
|
148
233
|
draft.template = template;
|
|
234
|
+
draft.activeTemplateName = template?.name ?? null;
|
|
235
|
+
ensureCustomerLevelDependenciesReducer(draft);
|
|
149
236
|
});
|
|
150
237
|
syncCriterionAvailability(set, get);
|
|
151
238
|
const currentSearchCriteria = extractSearchCriteriaFromState(get());
|
|
@@ -154,19 +241,23 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
154
241
|
}
|
|
155
242
|
set(draft => {
|
|
156
243
|
draft.prevSearchCriteria = currentSearchCriteria;
|
|
244
|
+
if (!hasUnappliedFilters) {
|
|
245
|
+
draft.appliedSearchCriteria = currentSearchCriteria;
|
|
246
|
+
}
|
|
157
247
|
draft.hasUnappliedFilters = hasUnappliedFilters;
|
|
158
248
|
});
|
|
159
249
|
},
|
|
160
250
|
clearCriteria: () => {
|
|
161
251
|
localStorage.removeItem(LAST_TEMPLATE_NAME + get().settingsContextName);
|
|
162
252
|
set((draft) => {
|
|
163
|
-
|
|
164
|
-
...draft,
|
|
253
|
+
Object.assign(draft, {
|
|
165
254
|
...getSearchUIInitialSearchCriteria(draft.defaults),
|
|
166
255
|
exactSearchLabel: draft.exactSearchLabels[0],
|
|
167
256
|
template: null,
|
|
257
|
+
activeTemplateName: null,
|
|
168
258
|
criteria: draft.predefinedCriteria,
|
|
169
|
-
};
|
|
259
|
+
});
|
|
260
|
+
ensureCustomerLevelDependenciesReducer(draft);
|
|
170
261
|
});
|
|
171
262
|
postUpdate(set, get);
|
|
172
263
|
},
|
|
@@ -179,8 +270,10 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
179
270
|
},
|
|
180
271
|
addCriterion: (criterionType) => {
|
|
181
272
|
set((draft) => {
|
|
182
|
-
|
|
183
|
-
|
|
273
|
+
if (criterionType === CriterionTypeEnum.CUSTOMER_LEVEL) {
|
|
274
|
+
CUSTOMER_LEVEL_DEPENDENCIES.forEach(dependency => addCriterionReducer(draft, dependency, true));
|
|
275
|
+
}
|
|
276
|
+
addCriterionReducer(draft, criterionType);
|
|
184
277
|
});
|
|
185
278
|
get().setJustAddedCriterion(criterionType);
|
|
186
279
|
postUpdate(set, get);
|
|
@@ -205,6 +298,7 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
205
298
|
set((draft) => {
|
|
206
299
|
draft.templates.push(template);
|
|
207
300
|
draft.template = template;
|
|
301
|
+
draft.activeTemplateName = template.name;
|
|
208
302
|
});
|
|
209
303
|
})
|
|
210
304
|
// .catch(raiseUIError)
|
|
@@ -222,6 +316,7 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
222
316
|
const index = draft.templates.findIndex(t => t.name === templateName);
|
|
223
317
|
draft.templates[index].searchConditions = template.searchConditions;
|
|
224
318
|
draft.template = template;
|
|
319
|
+
draft.activeTemplateName = template.name;
|
|
225
320
|
});
|
|
226
321
|
})
|
|
227
322
|
// .catch(raiseUIError)
|
|
@@ -243,7 +338,9 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
243
338
|
if (draft.template?.name === template.name) {
|
|
244
339
|
Object.assign(draft, getSearchUIInitialSearchCriteria(draft.defaults));
|
|
245
340
|
draft.template = null;
|
|
341
|
+
draft.activeTemplateName = null;
|
|
246
342
|
draft.criteria = draft.predefinedCriteria;
|
|
343
|
+
ensureCustomerLevelDependenciesReducer(draft);
|
|
247
344
|
}
|
|
248
345
|
});
|
|
249
346
|
postUpdate(set, get);
|
|
@@ -261,22 +358,37 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
261
358
|
}
|
|
262
359
|
localStorage.setItem(LAST_TEMPLATE_NAME + get().settingsContextName, template.name);
|
|
263
360
|
set((draft) => {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
};
|
|
361
|
+
Object.assign(draft, defaults);
|
|
362
|
+
draft.template = template;
|
|
363
|
+
draft.activeTemplateName = template.name;
|
|
364
|
+
applyConditionsReducer(draft, conditions);
|
|
269
365
|
});
|
|
270
366
|
postUpdate(set, get, options);
|
|
271
367
|
},
|
|
272
368
|
loadTemplates: () => {
|
|
273
|
-
get().
|
|
369
|
+
const settingsContextName = get().settingsContextName;
|
|
370
|
+
const defaults = get().defaults;
|
|
371
|
+
defaults.getSearchTemplates(settingsContextName)
|
|
274
372
|
.then(templates => {
|
|
373
|
+
if (get().settingsContextName !== settingsContextName) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
275
376
|
const normalizedTemplates = templates.map(normalizeSearchUITemplate);
|
|
276
377
|
set((draft) => {
|
|
277
378
|
draft.templates = normalizedTemplates;
|
|
278
379
|
});
|
|
279
|
-
|
|
380
|
+
if (get().restoredFromRetention) {
|
|
381
|
+
const activeTemplate = normalizedTemplates.find(t => t.name === get().activeTemplateName) ?? null;
|
|
382
|
+
set((draft) => {
|
|
383
|
+
draft.template = activeTemplate;
|
|
384
|
+
draft.activeTemplateName = activeTemplate?.name ?? null;
|
|
385
|
+
});
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (get().skipLastTemplateAutoApply) {
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
const lastTemplateName = localStorage.getItem(LAST_TEMPLATE_NAME + settingsContextName);
|
|
280
392
|
const lastTemplate = normalizedTemplates.find(t => t.name === lastTemplateName);
|
|
281
393
|
if (lastTemplate) {
|
|
282
394
|
get().setTemplate(lastTemplate, { forceSearch: true });
|
|
@@ -292,8 +404,15 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
292
404
|
},
|
|
293
405
|
setMultigetCriterion: (criterion) => {
|
|
294
406
|
set((draft) => {
|
|
407
|
+
const previousMerchantId = criterion.entityType === LinkedEntityTypeEnum.MERCHANT
|
|
408
|
+
? getConcreteCustomerLevelMerchantId(draft.multigetCriteria)
|
|
409
|
+
: null;
|
|
295
410
|
const index = draft.multigetCriteria.findIndex(c => c.entityType === criterion.entityType);
|
|
296
411
|
draft.multigetCriteria[index] = criterion;
|
|
412
|
+
if (criterion.entityType === LinkedEntityTypeEnum.MERCHANT
|
|
413
|
+
&& previousMerchantId !== getConcreteCustomerLevelMerchantId(draft.multigetCriteria)) {
|
|
414
|
+
draft.customerLevel = null;
|
|
415
|
+
}
|
|
297
416
|
});
|
|
298
417
|
postUpdate(set, get);
|
|
299
418
|
},
|
|
@@ -340,8 +459,19 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
340
459
|
});
|
|
341
460
|
postUpdate(set, get);
|
|
342
461
|
},
|
|
462
|
+
setCustomerLevelCriterion: customerLevel => {
|
|
463
|
+
set((draft) => {
|
|
464
|
+
draft.customerLevel = getConcreteCustomerLevelMerchantId(draft.multigetCriteria) === null
|
|
465
|
+
? null
|
|
466
|
+
: customerLevel;
|
|
467
|
+
});
|
|
468
|
+
postUpdate(set, get);
|
|
469
|
+
},
|
|
343
470
|
setCurrenciesCriterion: (currencies) => {
|
|
344
471
|
set((draft) => {
|
|
472
|
+
if (!isEqual(draft.currencies, currencies)) {
|
|
473
|
+
draft.customerLevel = null;
|
|
474
|
+
}
|
|
345
475
|
draft.currencies = currencies;
|
|
346
476
|
});
|
|
347
477
|
postUpdate(set, get);
|
|
@@ -486,6 +616,7 @@ export const getSearchUIFiltersActions = (set, get) => ({
|
|
|
486
616
|
const currentSearchCriteria = extractSearchCriteriaFromState(get());
|
|
487
617
|
get().onFiltersUpdate(currentSearchCriteria);
|
|
488
618
|
set((draft) => {
|
|
619
|
+
draft.appliedSearchCriteria = currentSearchCriteria;
|
|
489
620
|
draft.hasUnappliedFilters = false;
|
|
490
621
|
});
|
|
491
622
|
},
|
|
@@ -519,6 +650,7 @@ const addInitialMultigetCriterionReducer = (draft, criterionType) => {
|
|
|
519
650
|
case CriterionTypeEnum.RESELLER:
|
|
520
651
|
draft.multigetCriteria.push(getInitialMultigetCriterion(LinkedEntityTypeEnum.RESELLER));
|
|
521
652
|
break;
|
|
653
|
+
case CriterionTypeEnum.CUSTOMER_LEVEL:
|
|
522
654
|
case CriterionTypeEnum.CURRENCY:
|
|
523
655
|
case CriterionTypeEnum.EXACT:
|
|
524
656
|
case CriterionTypeEnum.ORDERS_SEARCH:
|
|
@@ -562,8 +694,12 @@ const clearCriterionReducer = (draft, criterionType) => {
|
|
|
562
694
|
draft.ordersSearchLabel = 'merchant_invoice_id';
|
|
563
695
|
draft.ordersSearchValue = '';
|
|
564
696
|
break;
|
|
697
|
+
case CriterionTypeEnum.CUSTOMER_LEVEL:
|
|
698
|
+
draft.customerLevel = null;
|
|
699
|
+
break;
|
|
565
700
|
case CriterionTypeEnum.CURRENCY:
|
|
566
701
|
draft.currencies = searchUIInitialAllableCollection;
|
|
702
|
+
draft.customerLevel = null;
|
|
567
703
|
break;
|
|
568
704
|
case CriterionTypeEnum.COUNTRIES:
|
|
569
705
|
draft.countries = searchUICountriesInitialAllableCollection;
|
|
@@ -595,6 +731,7 @@ const clearCriterionReducer = (draft, criterionType) => {
|
|
|
595
731
|
break;
|
|
596
732
|
case CriterionTypeEnum.MERCHANT:
|
|
597
733
|
removeMultigetCriterionReducer(draft, LinkedEntityTypeEnum.MERCHANT);
|
|
734
|
+
draft.customerLevel = null;
|
|
598
735
|
break;
|
|
599
736
|
case CriterionTypeEnum.RESELLER:
|
|
600
737
|
removeMultigetCriterionReducer(draft, LinkedEntityTypeEnum.RESELLER);
|
|
@@ -840,6 +977,17 @@ const postUpdate = (set, get, options) => {
|
|
|
840
977
|
ensureTransactionSessionStatusesPrefetched(set, get);
|
|
841
978
|
checkIfFiltersChanged(set, get, options);
|
|
842
979
|
};
|
|
980
|
+
const normalizeRetainedDateRange = (set, get) => {
|
|
981
|
+
const state = get();
|
|
982
|
+
if (!state.restoredFromRetention || state.dateRangeSpec.dateRangeSpecType === 'EXACTLY') {
|
|
983
|
+
return;
|
|
984
|
+
}
|
|
985
|
+
const timeSelectionEnabled = isDateRangeTimeSelectionEnabled(state.criteria, state.config);
|
|
986
|
+
const normalizedDateRange = calculateNonExactDates(state.dateRangeSpec, getNonExactDateRangeTimeZone(state.config, timeSelectionEnabled));
|
|
987
|
+
set(draft => {
|
|
988
|
+
draft.dateRangeSpec = normalizedDateRange;
|
|
989
|
+
});
|
|
990
|
+
};
|
|
843
991
|
const syncCriterionAvailability = (set, get) => {
|
|
844
992
|
const criteriaWithRules = getCriteriaWithAvailabilityRules(get().config);
|
|
845
993
|
if (!criteriaWithRules.length) {
|
|
@@ -895,6 +1043,7 @@ const checkIfFiltersChanged = (set, get, options) => {
|
|
|
895
1043
|
get().onFiltersUpdate(currentSearchCriteria);
|
|
896
1044
|
set((draft) => {
|
|
897
1045
|
draft.prevSearchCriteria = currentSearchCriteria;
|
|
1046
|
+
draft.appliedSearchCriteria = currentSearchCriteria;
|
|
898
1047
|
draft.hasUnappliedFilters = false;
|
|
899
1048
|
});
|
|
900
1049
|
}
|
|
@@ -903,12 +1052,19 @@ const checkIfFiltersChanged = (set, get, options) => {
|
|
|
903
1052
|
const extractSearchCriteriaFromState = (state) => {
|
|
904
1053
|
const timeSelectionEnabled = isDateRangeTimeSelectionEnabled(state.criteria, state.config);
|
|
905
1054
|
const dateOnlyTimeZone = getConfiguredDateOnlyTimeZone(state.config);
|
|
1055
|
+
const customerLevelDependenciesSatisfied = state.criteria.includes(CriterionTypeEnum.CUSTOMER_LEVEL)
|
|
1056
|
+
&& state.criteria.includes(CriterionTypeEnum.MERCHANT)
|
|
1057
|
+
&& state.criteria.includes(CriterionTypeEnum.CURRENCY)
|
|
1058
|
+
&& getConcreteCustomerLevelMerchantId(state.multigetCriteria) !== null;
|
|
906
1059
|
return {
|
|
907
1060
|
initialized: true,
|
|
908
1061
|
exactSearchLabel: extractExactSearchLabel(state.exactSearchLabel),
|
|
909
1062
|
exactSearchValue: state.exactSearchValue,
|
|
910
1063
|
ordersSearchLabel: state.ordersSearchLabel,
|
|
911
1064
|
ordersSearchValue: state.ordersSearchValue,
|
|
1065
|
+
customerLevelId: customerLevelDependenciesSatisfied
|
|
1066
|
+
? state.customerLevel?.id ?? null
|
|
1067
|
+
: null,
|
|
912
1068
|
status: extractStatus(state.status),
|
|
913
1069
|
threeD: extract3D(state.threeD),
|
|
914
1070
|
currencies: extractEntitiesIds(state.currencies),
|
|
@@ -942,6 +1098,7 @@ const getTemplate = (templateName, store) => ({
|
|
|
942
1098
|
exactSearchValue: store.exactSearchValue,
|
|
943
1099
|
ordersSearchLabel: store.ordersSearchLabel,
|
|
944
1100
|
ordersSearchValue: store.ordersSearchValue,
|
|
1101
|
+
customerLevel: store.customerLevel,
|
|
945
1102
|
status: store.status,
|
|
946
1103
|
currencies: store.currencies,
|
|
947
1104
|
countries: store.countries,
|
|
@@ -1040,6 +1197,7 @@ export const OrdersSearchLabelsConfig = {
|
|
|
1040
1197
|
'customer_billing_country': { type: 'country', maxLength: 128 },
|
|
1041
1198
|
'customer_dna_id': { type: 'integer', maxLength: 10 },
|
|
1042
1199
|
'customer_id': { type: 'integer', maxLength: 10 },
|
|
1200
|
+
'merchant_customer_identifier': { type: 'string', maxLength: 128 },
|
|
1043
1201
|
'batch_id': { type: 'integer', maxLength: 10 },
|
|
1044
1202
|
'source_bank_name': { type: 'string', maxLength: 128 },
|
|
1045
1203
|
'source_country': { type: 'country', maxLength: 128 },
|