pne-ui 3.0.96 → 3.1.2
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 +62 -1
- package/cjs/component/overlay/OverlayHost.js +103 -6
- package/cjs/component/overlay/OverlayHost.js.map +1 -1
- package/cjs/component/overlay/overlayRuntime.d.ts +3 -0
- package/cjs/component/overlay/overlayRuntime.js +45 -0
- package/cjs/component/overlay/overlayRuntime.js.map +1 -0
- package/cjs/component/overlay/overlayStore.d.ts +6 -1
- package/cjs/component/overlay/overlayStore.js +38 -2
- package/cjs/component/overlay/overlayStore.js.map +1 -1
- package/cjs/component/overlay/types.d.ts +12 -0
- package/cjs/component/search-ui/filters/SearchUIFilters.d.ts +7 -1
- package/cjs/component/search-ui/filters/SearchUIFilters.js +59 -1
- package/cjs/component/search-ui/filters/SearchUIFilters.js.map +1 -1
- package/cjs/component/search-ui/filters/criterionAvailability.d.ts +7 -0
- package/cjs/component/search-ui/filters/criterionAvailability.js +13 -0
- package/cjs/component/search-ui/filters/criterionAvailability.js.map +1 -0
- package/cjs/component/search-ui/filters/state/actions.js +80 -19
- package/cjs/component/search-ui/filters/state/actions.js.map +1 -1
- package/cjs/component/search-ui/filters/state/store.d.ts +5 -0
- package/cjs/component/search-ui/filters/state/type.d.ts +5 -0
- package/cjs/component/search-ui/filters/state/undo.d.ts +2 -0
- package/cjs/component/search-ui/filters/state/undo.js +37 -0
- package/cjs/component/search-ui/filters/state/undo.js.map +1 -0
- package/cjs/component/search-ui/filters/types.d.ts +13 -0
- package/cjs/exports/search.d.ts +1 -1
- package/cjs/exports/search.js.map +1 -1
- package/esm/component/overlay/OverlayHost.js +103 -6
- package/esm/component/overlay/OverlayHost.js.map +1 -1
- package/esm/component/overlay/overlayRuntime.d.ts +3 -0
- package/esm/component/overlay/overlayRuntime.js +39 -0
- package/esm/component/overlay/overlayRuntime.js.map +1 -0
- package/esm/component/overlay/overlayStore.d.ts +6 -1
- package/esm/component/overlay/overlayStore.js +37 -2
- package/esm/component/overlay/overlayStore.js.map +1 -1
- package/esm/component/overlay/types.d.ts +12 -0
- package/esm/component/search-ui/filters/SearchUIFilters.d.ts +7 -1
- package/esm/component/search-ui/filters/SearchUIFilters.js +61 -3
- package/esm/component/search-ui/filters/SearchUIFilters.js.map +1 -1
- package/esm/component/search-ui/filters/criterionAvailability.d.ts +7 -0
- package/esm/component/search-ui/filters/criterionAvailability.js +8 -0
- package/esm/component/search-ui/filters/criterionAvailability.js.map +1 -0
- package/esm/component/search-ui/filters/state/actions.js +80 -19
- package/esm/component/search-ui/filters/state/actions.js.map +1 -1
- package/esm/component/search-ui/filters/state/store.d.ts +5 -0
- package/esm/component/search-ui/filters/state/type.d.ts +5 -0
- package/esm/component/search-ui/filters/state/undo.d.ts +2 -0
- package/esm/component/search-ui/filters/state/undo.js +32 -0
- package/esm/component/search-ui/filters/state/undo.js.map +1 -0
- package/esm/component/search-ui/filters/types.d.ts +13 -0
- package/esm/exports/search.d.ts +1 -1
- package/esm/exports/search.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -29,6 +29,29 @@ yarn add pne-ui @emotion/react@^11 @emotion/styled@^11 @mui/material@^7 @mui/sys
|
|
|
29
29
|
- `react-dom@^18 || ^19`
|
|
30
30
|
- `react-i18next@^11`
|
|
31
31
|
|
|
32
|
+
## OverlayHost
|
|
33
|
+
|
|
34
|
+
Компоненты, которые используют `overlayActions` напрямую или косвенно, требуют смонтированный
|
|
35
|
+
`<OverlayHost />` в приложении-хосте. Это касается и `SearchUI`, потому что `Clear all` использует
|
|
36
|
+
undo-snackbar.
|
|
37
|
+
|
|
38
|
+
Подключайте `OverlayHost` ровно один раз, обычно рядом с корнем приложения:
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import { OverlayHost } from 'pne-ui'
|
|
42
|
+
|
|
43
|
+
export const App = () => (
|
|
44
|
+
<OverlayHost>
|
|
45
|
+
<ApplicationRoutes />
|
|
46
|
+
</OverlayHost>
|
|
47
|
+
)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Важные правила интеграции:
|
|
51
|
+
- если `overlayActions.*` вызываются без смонтированного `OverlayHost`, библиотека пишет явный `console.error`, а snackbar не будет виден пользователю;
|
|
52
|
+
- если в DOM смонтировано больше одного `OverlayHost`, библиотека пишет явный `console.error`, потому что такая конфигурация дублирует snackbar-ы и может рассинхронизировать их таймеры;
|
|
53
|
+
- `OverlayHost` должен подключаться в приложении-хосте, а не внутри отдельных виджетов библиотеки.
|
|
54
|
+
|
|
32
55
|
## Интеграция SearchUI
|
|
33
56
|
|
|
34
57
|
### Подключение контекста через `SearchUIProvider`
|
|
@@ -103,6 +126,42 @@ const config = {
|
|
|
103
126
|
/>
|
|
104
127
|
```
|
|
105
128
|
|
|
129
|
+
### Динамическая доступность критериев
|
|
130
|
+
|
|
131
|
+
Если критерий должен быть доступен только при определённом состоянии фильтров,
|
|
132
|
+
передайте правила в `config.criterionAvailabilityRules`. Недоступный критерий
|
|
133
|
+
удаляется из активных `criteria`, его значение очищается тем же способом, что и
|
|
134
|
+
при ручном удалении фильтра, и он не показывается в списке добавления. Если
|
|
135
|
+
такой критерий входит в `predefinedCriteria`, он автоматически вернётся в
|
|
136
|
+
активные фильтры, когда снова станет доступен.
|
|
137
|
+
|
|
138
|
+
Например, `ORDERS_SEARCH` можно оставлять активным только для
|
|
139
|
+
`orderDateType === 'SESSION_STATUS_CHANGED'`:
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
<SearchUI
|
|
143
|
+
settingsContextName="orders"
|
|
144
|
+
predefinedCriteria={[
|
|
145
|
+
CriterionTypeEnum.DATE_RANGE_ORDERS,
|
|
146
|
+
CriterionTypeEnum.ORDERS_SEARCH,
|
|
147
|
+
]}
|
|
148
|
+
possibleCriteria={[
|
|
149
|
+
CriterionTypeEnum.CARD_TYPES,
|
|
150
|
+
CriterionTypeEnum.CURRENCY,
|
|
151
|
+
CriterionTypeEnum.TRANSACTION_TYPES,
|
|
152
|
+
]}
|
|
153
|
+
config={{
|
|
154
|
+
criterionAvailabilityRules: [{
|
|
155
|
+
criterion: CriterionTypeEnum.ORDERS_SEARCH,
|
|
156
|
+
isAvailable: conditions => (
|
|
157
|
+
conditions.orderDateType === 'SESSION_STATUS_CHANGED'
|
|
158
|
+
),
|
|
159
|
+
}],
|
|
160
|
+
}}
|
|
161
|
+
/* остальные пропсы */
|
|
162
|
+
/>
|
|
163
|
+
```
|
|
164
|
+
|
|
106
165
|
### Ручной режим поиска (manual search)
|
|
107
166
|
|
|
108
167
|
По умолчанию любое изменение фильтра немедленно запускает новый запрос.
|
|
@@ -375,7 +434,9 @@ const AppShell = () => (
|
|
|
375
434
|
)
|
|
376
435
|
```
|
|
377
436
|
|
|
378
|
-
- Для уведомлений используйте `overlayActions.showSuccess/showError/showWarning/showInfo` или `
|
|
437
|
+
- Для уведомлений используйте `overlayActions.showSuccess/showError/showWarning/showInfo`, `showSnackbar` или `showUndoSnackbar`.
|
|
438
|
+
- `showUndoSnackbar` возвращает `id` snackbar и добавляет встроенную action-кнопку `Undo` (или ваш `undoLabel`).
|
|
439
|
+
- Любой snackbar с конечным `autoHideMs` показывает progress bar вверху карточки; если `autoHideMs` не задан, progress bar не рендерится.
|
|
379
440
|
- `PermanentOverlay` можно размещать на любом уровне дерева под хостом; последний зарегистрированный в слоте заменяет предыдущий.
|
|
380
441
|
- Слоты фиксированы четырьмя углами; сместить позицию можно через `offset`/`zIndex` пропы на `PermanentOverlay`.
|
|
381
442
|
|
|
@@ -8,9 +8,110 @@ const useBreakpoint_1 = require("../responsive/useBreakpoint");
|
|
|
8
8
|
const overlayStore_1 = require("./overlayStore");
|
|
9
9
|
const material_2 = require("@mui/material");
|
|
10
10
|
const PermanentOverlayContext_1 = require("./PermanentOverlayContext");
|
|
11
|
+
const overlayRuntime_1 = require("./overlayRuntime");
|
|
11
12
|
const STACK_GAP = 12;
|
|
12
13
|
const STACK_OFFSET = 24;
|
|
13
14
|
const PERMANENT_OFFSET = 24;
|
|
15
|
+
const clearTimer = (timer) => {
|
|
16
|
+
if (timer) {
|
|
17
|
+
clearTimeout(timer);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const ManagedSnackbar = ({ anchor, onRemove, snack }) => {
|
|
21
|
+
const autoHideMs = typeof snack.autoHideMs === 'number' && snack.autoHideMs > 0 ? snack.autoHideMs : null;
|
|
22
|
+
const [remainingMs, setRemainingMs] = (0, react_1.useState)(autoHideMs);
|
|
23
|
+
const timeoutRef = react_1.default.useRef(null);
|
|
24
|
+
const intervalRef = react_1.default.useRef(null);
|
|
25
|
+
const startedAtRef = react_1.default.useRef(null);
|
|
26
|
+
const remainingRef = react_1.default.useRef(autoHideMs);
|
|
27
|
+
const remove = (0, react_1.useCallback)(() => {
|
|
28
|
+
if (snack.id) {
|
|
29
|
+
onRemove(snack.id);
|
|
30
|
+
}
|
|
31
|
+
}, [onRemove, snack.id]);
|
|
32
|
+
const stopTimer = (0, react_1.useCallback)(() => {
|
|
33
|
+
clearTimer(timeoutRef.current);
|
|
34
|
+
clearTimer(intervalRef.current);
|
|
35
|
+
timeoutRef.current = null;
|
|
36
|
+
intervalRef.current = null;
|
|
37
|
+
}, []);
|
|
38
|
+
const syncRemaining = (0, react_1.useCallback)(() => {
|
|
39
|
+
if (startedAtRef.current == null || remainingRef.current == null) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const elapsed = Date.now() - startedAtRef.current;
|
|
43
|
+
setRemainingMs(Math.max(remainingRef.current - elapsed, 0));
|
|
44
|
+
}, []);
|
|
45
|
+
const startTimer = (0, react_1.useCallback)((duration) => {
|
|
46
|
+
if (autoHideMs == null) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (duration <= 0) {
|
|
50
|
+
stopTimer();
|
|
51
|
+
remove();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
stopTimer();
|
|
55
|
+
remainingRef.current = duration;
|
|
56
|
+
startedAtRef.current = Date.now();
|
|
57
|
+
setRemainingMs(duration);
|
|
58
|
+
timeoutRef.current = setTimeout(() => {
|
|
59
|
+
stopTimer();
|
|
60
|
+
remove();
|
|
61
|
+
}, duration);
|
|
62
|
+
intervalRef.current = setInterval(syncRemaining, 50);
|
|
63
|
+
}, [autoHideMs, remove, stopTimer, syncRemaining]);
|
|
64
|
+
const pauseTimer = (0, react_1.useCallback)(() => {
|
|
65
|
+
if (autoHideMs == null || startedAtRef.current == null || remainingRef.current == null) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const elapsed = Date.now() - startedAtRef.current;
|
|
69
|
+
const nextRemaining = Math.max(remainingRef.current - elapsed, 0);
|
|
70
|
+
remainingRef.current = nextRemaining;
|
|
71
|
+
startedAtRef.current = null;
|
|
72
|
+
setRemainingMs(nextRemaining);
|
|
73
|
+
stopTimer();
|
|
74
|
+
}, [autoHideMs, stopTimer]);
|
|
75
|
+
const resumeTimer = (0, react_1.useCallback)(() => {
|
|
76
|
+
if (autoHideMs == null || startedAtRef.current != null) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
startTimer(remainingRef.current ?? autoHideMs);
|
|
80
|
+
}, [autoHideMs, startTimer]);
|
|
81
|
+
react_1.default.useEffect(() => {
|
|
82
|
+
if (autoHideMs == null) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
startTimer(autoHideMs);
|
|
86
|
+
return stopTimer;
|
|
87
|
+
}, [autoHideMs, startTimer, stopTimer]);
|
|
88
|
+
const progressScale = autoHideMs != null && remainingMs != null
|
|
89
|
+
? Math.max(Math.min(remainingMs / autoHideMs, 1), 0)
|
|
90
|
+
: null;
|
|
91
|
+
return (react_1.default.createElement(material_1.Snackbar, { open: true, anchorOrigin: anchor, "data-testid": snack.id ? `overlay-snackbar-${snack.id}` : 'overlay-snackbar', onClose: (_event, reason) => {
|
|
92
|
+
if (reason === 'clickaway')
|
|
93
|
+
return;
|
|
94
|
+
remove();
|
|
95
|
+
}, onMouseEnter: pauseTimer, onMouseLeave: resumeTimer, onFocus: pauseTimer, onBlur: resumeTimer, sx: { position: 'static', transform: 'none', pointerEvents: 'auto', minWidth: 288 } },
|
|
96
|
+
react_1.default.createElement(material_1.Alert, { elevation: 1, onClose: remove, severity: snack.variant ?? 'info', action: snack.action, sx: {
|
|
97
|
+
position: 'relative',
|
|
98
|
+
overflow: 'hidden',
|
|
99
|
+
alignItems: 'center',
|
|
100
|
+
} },
|
|
101
|
+
progressScale != null ? (react_1.default.createElement(material_2.Box, { "data-testid": 'overlay-snackbar-progress', sx: {
|
|
102
|
+
position: 'absolute',
|
|
103
|
+
top: 0,
|
|
104
|
+
left: 0,
|
|
105
|
+
right: 0,
|
|
106
|
+
height: '3px',
|
|
107
|
+
backgroundColor: 'currentColor',
|
|
108
|
+
opacity: 0.24,
|
|
109
|
+
transformOrigin: 'left',
|
|
110
|
+
transform: `scaleX(${progressScale})`,
|
|
111
|
+
pointerEvents: 'none',
|
|
112
|
+
} })) : null,
|
|
113
|
+
snack.message)));
|
|
114
|
+
};
|
|
14
115
|
/**
|
|
15
116
|
* Renders overlay elements (currently snackbars) driven by the shared overlay store.
|
|
16
117
|
* Mount this once near the root of the app and trigger notifications via `overlayActions`.
|
|
@@ -86,6 +187,7 @@ function OverlayHost({ anchorOrigin = { vertical: 'bottom', horizontal: 'left' }
|
|
|
86
187
|
})
|
|
87
188
|
.filter(Boolean);
|
|
88
189
|
}, [breakpoint, permanentOverlays]);
|
|
190
|
+
react_1.default.useEffect(() => (0, overlayRuntime_1.registerOverlayHost)(), []);
|
|
89
191
|
return (react_1.default.createElement(PermanentOverlayContext_1.PermanentOverlayContext.Provider, { value: contextValue },
|
|
90
192
|
children,
|
|
91
193
|
groupedSnackbars.map(group => {
|
|
@@ -106,12 +208,7 @@ function OverlayHost({ anchorOrigin = { vertical: 'bottom', horizontal: 'left' }
|
|
|
106
208
|
pointerEvents: 'none',
|
|
107
209
|
...horizontalStyles,
|
|
108
210
|
...verticalStyles,
|
|
109
|
-
} }, items.map(snack => (react_1.default.createElement(
|
|
110
|
-
if (reason === 'clickaway')
|
|
111
|
-
return;
|
|
112
|
-
snack.id && removeSnackbar(snack.id);
|
|
113
|
-
}, sx: { position: 'static', transform: 'none', pointerEvents: 'auto', minWidth: 288 } },
|
|
114
|
-
react_1.default.createElement(material_1.Alert, { elevation: 1, onClose: () => snack.id && removeSnackbar(snack.id), severity: snack.variant ?? 'info', action: snack.action, sx: { alignItems: 'center' } }, snack.message))))));
|
|
211
|
+
} }, items.map(snack => snack.id ? (react_1.default.createElement(ManagedSnackbar, { key: snack.id, anchor: anchor, onRemove: removeSnackbar, snack: snack })) : null)));
|
|
115
212
|
}),
|
|
116
213
|
permanentContent));
|
|
117
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayHost.js","sourceRoot":"","sources":["../../../src/component/overlay/OverlayHost.tsx"],"names":[],"mappings":";;;;AAAA,uDAA6D;AAC7D,4CAAoE;AACpE,+DAA2D;AAC3D,iDAAgD;AAEhD,4CAAmC;AACnC,uEAAmE;
|
|
1
|
+
{"version":3,"file":"OverlayHost.js","sourceRoot":"","sources":["../../../src/component/overlay/OverlayHost.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetOverlayRuntimeForTests = exports.reportMissingOverlayHost = exports.registerOverlayHost = void 0;
|
|
4
|
+
let overlayHostCount = 0;
|
|
5
|
+
let hasWarnedAboutMissingHost = false;
|
|
6
|
+
let hasWarnedAboutMultipleHosts = false;
|
|
7
|
+
const logOverlayConfigurationError = (message) => {
|
|
8
|
+
console.error(message);
|
|
9
|
+
};
|
|
10
|
+
const getMissingHostMessage = (actionName) => `[pne-ui] overlayActions.${actionName}() was called without a mounted <OverlayHost />. ` +
|
|
11
|
+
'The snackbar was added to the overlay store but cannot render. ' +
|
|
12
|
+
'Mount exactly one <OverlayHost /> near the application root.';
|
|
13
|
+
const getMultipleHostsMessage = () => `[pne-ui] Detected ${overlayHostCount} mounted <OverlayHost /> instances. ` +
|
|
14
|
+
'OverlayHost is a singleton and must be mounted exactly once near the application root. ' +
|
|
15
|
+
'Multiple hosts duplicate snackbars and can desynchronize their timers.';
|
|
16
|
+
const registerOverlayHost = () => {
|
|
17
|
+
overlayHostCount += 1;
|
|
18
|
+
hasWarnedAboutMissingHost = false;
|
|
19
|
+
if (overlayHostCount > 1 && !hasWarnedAboutMultipleHosts) {
|
|
20
|
+
hasWarnedAboutMultipleHosts = true;
|
|
21
|
+
logOverlayConfigurationError(getMultipleHostsMessage());
|
|
22
|
+
}
|
|
23
|
+
return () => {
|
|
24
|
+
overlayHostCount = Math.max(overlayHostCount - 1, 0);
|
|
25
|
+
if (overlayHostCount <= 1) {
|
|
26
|
+
hasWarnedAboutMultipleHosts = false;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.registerOverlayHost = registerOverlayHost;
|
|
31
|
+
const reportMissingOverlayHost = (actionName) => {
|
|
32
|
+
if (overlayHostCount > 0 || hasWarnedAboutMissingHost) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
hasWarnedAboutMissingHost = true;
|
|
36
|
+
logOverlayConfigurationError(getMissingHostMessage(actionName));
|
|
37
|
+
};
|
|
38
|
+
exports.reportMissingOverlayHost = reportMissingOverlayHost;
|
|
39
|
+
const resetOverlayRuntimeForTests = () => {
|
|
40
|
+
overlayHostCount = 0;
|
|
41
|
+
hasWarnedAboutMissingHost = false;
|
|
42
|
+
hasWarnedAboutMultipleHosts = false;
|
|
43
|
+
};
|
|
44
|
+
exports.resetOverlayRuntimeForTests = resetOverlayRuntimeForTests;
|
|
45
|
+
//# sourceMappingURL=overlayRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayRuntime.js","sourceRoot":"","sources":["../../../src/component/overlay/overlayRuntime.ts"],"names":[],"mappings":";;;AAAA,IAAI,gBAAgB,GAAG,CAAC,CAAA;AACxB,IAAI,yBAAyB,GAAG,KAAK,CAAA;AACrC,IAAI,2BAA2B,GAAG,KAAK,CAAA;AAEvC,MAAM,4BAA4B,GAAG,CAAC,OAAe,EAAE,EAAE;IACrD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAE,EAAE,CACjD,2BAA2B,UAAU,mDAAmD;IACxF,iEAAiE;IACjE,8DAA8D,CAAA;AAElE,MAAM,uBAAuB,GAAG,GAAG,EAAE,CACjC,qBAAqB,gBAAgB,sCAAsC;IAC3E,yFAAyF;IACzF,wEAAwE,CAAA;AAErE,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACpC,gBAAgB,IAAI,CAAC,CAAA;IACrB,yBAAyB,GAAG,KAAK,CAAA;IAEjC,IAAI,gBAAgB,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACvD,2BAA2B,GAAG,IAAI,CAAA;QAClC,4BAA4B,CAAC,uBAAuB,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,GAAG,EAAE;QACR,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAEpD,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YACxB,2BAA2B,GAAG,KAAK,CAAA;QACvC,CAAC;IACL,CAAC,CAAA;AACL,CAAC,CAAA;AAhBY,QAAA,mBAAmB,uBAgB/B;AAEM,MAAM,wBAAwB,GAAG,CAAC,UAAkB,EAAE,EAAE;IAC3D,IAAI,gBAAgB,GAAG,CAAC,IAAI,yBAAyB,EAAE,CAAC;QACpD,OAAM;IACV,CAAC;IAED,yBAAyB,GAAG,IAAI,CAAA;IAChC,4BAA4B,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAPY,QAAA,wBAAwB,4BAOpC;AAEM,MAAM,2BAA2B,GAAG,GAAG,EAAE;IAC5C,gBAAgB,GAAG,CAAC,CAAA;IACpB,yBAAyB,GAAG,KAAK,CAAA;IACjC,2BAA2B,GAAG,KAAK,CAAA;AACvC,CAAC,CAAA;AAJY,QAAA,2BAA2B,+BAIvC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OverlayState, SnackbarOptions } from './types';
|
|
1
|
+
import type { OverlayState, SnackbarOptions, UndoSnackbarOptions } from './types';
|
|
2
2
|
export declare const useOverlayStore: import("zustand").UseBoundStore<import("zustand").StoreApi<OverlayState>>;
|
|
3
3
|
export declare const overlayActions: {
|
|
4
4
|
showSnackbar: (snackbar: SnackbarOptions) => void;
|
|
@@ -6,6 +6,11 @@ export declare const overlayActions: {
|
|
|
6
6
|
showError: (snackbar: Omit<SnackbarOptions, 'variant'>) => void;
|
|
7
7
|
showWarning: (snackbar: Omit<SnackbarOptions, 'variant'>) => void;
|
|
8
8
|
showInfo: (snackbar: Omit<SnackbarOptions, 'variant'>) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Shows an info snackbar with a built-in undo button and returns the snackbar id.
|
|
11
|
+
* By default it behaves like other non-error snackbars and auto-hides after 5000 ms unless `autoHideMs` is overridden.
|
|
12
|
+
*/
|
|
13
|
+
showUndoSnackbar: ({ undoLabel, onUndo, ...snackbar }: UndoSnackbarOptions) => string;
|
|
9
14
|
removeSnackbar: (id: string) => void;
|
|
10
15
|
clearSnackbars: () => void;
|
|
11
16
|
};
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.overlayActions = exports.useOverlayStore = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
const Undo_1 = tslib_1.__importDefault(require("@mui/icons-material/Undo"));
|
|
7
|
+
const PneButton_1 = tslib_1.__importDefault(require("../PneButton"));
|
|
4
8
|
const zustand_1 = require("zustand");
|
|
9
|
+
const overlayRuntime_1 = require("./overlayRuntime");
|
|
5
10
|
const defaultAutoHideMs = 5000;
|
|
6
11
|
const makeId = () => {
|
|
7
12
|
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
@@ -25,13 +30,44 @@ exports.useOverlayStore = (0, zustand_1.create)(set => ({
|
|
|
25
30
|
removeSnackbar: id => set(state => ({ snackbars: state.snackbars.filter(snack => snack.id !== id) })),
|
|
26
31
|
clearSnackbars: () => set({ snackbars: [] }),
|
|
27
32
|
}));
|
|
28
|
-
const showWithVariant = (variant) => (snackbar) =>
|
|
33
|
+
const showWithVariant = (variant) => (snackbar) => {
|
|
34
|
+
(0, overlayRuntime_1.reportMissingOverlayHost)(`show${variant.charAt(0).toUpperCase()}${variant.slice(1)}`);
|
|
35
|
+
exports.useOverlayStore.getState().enqueueSnackbar({ ...snackbar, variant });
|
|
36
|
+
};
|
|
29
37
|
exports.overlayActions = {
|
|
30
|
-
showSnackbar: (snackbar) =>
|
|
38
|
+
showSnackbar: (snackbar) => {
|
|
39
|
+
(0, overlayRuntime_1.reportMissingOverlayHost)('showSnackbar');
|
|
40
|
+
exports.useOverlayStore.getState().enqueueSnackbar(snackbar);
|
|
41
|
+
},
|
|
31
42
|
showSuccess: showWithVariant('success'),
|
|
32
43
|
showError: showWithVariant('error'),
|
|
33
44
|
showWarning: showWithVariant('warning'),
|
|
34
45
|
showInfo: showWithVariant('info'),
|
|
46
|
+
/**
|
|
47
|
+
* Shows an info snackbar with a built-in undo button and returns the snackbar id.
|
|
48
|
+
* By default it behaves like other non-error snackbars and auto-hides after 5000 ms unless `autoHideMs` is overridden.
|
|
49
|
+
*/
|
|
50
|
+
showUndoSnackbar: ({ undoLabel = 'Undo', onUndo, ...snackbar }) => {
|
|
51
|
+
const id = snackbar.id ?? makeId();
|
|
52
|
+
(0, overlayRuntime_1.reportMissingOverlayHost)('showUndoSnackbar');
|
|
53
|
+
exports.useOverlayStore.getState().enqueueSnackbar({
|
|
54
|
+
...snackbar,
|
|
55
|
+
id,
|
|
56
|
+
action: react_1.default.createElement(PneButton_1.default, {
|
|
57
|
+
variant: 'text',
|
|
58
|
+
size: 'small',
|
|
59
|
+
startIcon: react_1.default.createElement(Undo_1.default, { fontSize: 'inherit' }),
|
|
60
|
+
onClick: () => {
|
|
61
|
+
exports.useOverlayStore.getState().removeSnackbar(id);
|
|
62
|
+
onUndo();
|
|
63
|
+
},
|
|
64
|
+
sx: {
|
|
65
|
+
fontWeight: 600,
|
|
66
|
+
},
|
|
67
|
+
}, undoLabel),
|
|
68
|
+
});
|
|
69
|
+
return id;
|
|
70
|
+
},
|
|
35
71
|
removeSnackbar: (id) => exports.useOverlayStore.getState().removeSnackbar(id),
|
|
36
72
|
clearSnackbars: () => exports.useOverlayStore.getState().clearSnackbars(),
|
|
37
73
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlayStore.js","sourceRoot":"","sources":["../../../src/component/overlay/overlayStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"overlayStore.js","sourceRoot":"","sources":["../../../src/component/overlay/overlayStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,22 @@ export type SnackbarOptions = {
|
|
|
5
5
|
id?: string;
|
|
6
6
|
message: React.ReactNode;
|
|
7
7
|
variant?: SnackbarVariant;
|
|
8
|
+
/**
|
|
9
|
+
* Auto-close timeout in milliseconds. `undefined` keeps the snackbar open until closed explicitly.
|
|
10
|
+
* Timed snackbars render a progress bar in `OverlayHost`.
|
|
11
|
+
*/
|
|
8
12
|
autoHideMs?: number;
|
|
9
13
|
action?: React.ReactNode;
|
|
10
14
|
anchorOrigin?: SnackbarOrigin;
|
|
11
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Options for a snackbar with a built-in undo action.
|
|
18
|
+
* `OverlayHost` renders the same timed-progress indicator as for any other timed snackbar.
|
|
19
|
+
*/
|
|
20
|
+
export type UndoSnackbarOptions = Omit<SnackbarOptions, 'action'> & {
|
|
21
|
+
undoLabel?: React.ReactNode;
|
|
22
|
+
onUndo: () => void;
|
|
23
|
+
};
|
|
12
24
|
export type OverlayState = {
|
|
13
25
|
snackbars: SnackbarOptions[];
|
|
14
26
|
enqueueSnackbar: (snackbar: SnackbarOptions) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { CriterionTypeEnum, DateRangeSpecType, ExactCriterionSearchLabelEnum, SearchCriteria, SearchUIConditions } from './types';
|
|
2
|
+
import { CriterionTypeEnum, DateRangeSpecType, ExactCriterionSearchLabelEnum, SearchCriteria, SearchUICriterionAvailabilityRule, SearchUIConditions } from './types';
|
|
3
3
|
import { SearchUIDefaults } from '../../..';
|
|
4
4
|
/**
|
|
5
5
|
* Дополнительные настройки критерия диапазона дат.
|
|
@@ -22,6 +22,12 @@ export type SearchUIFiltersConfig = {
|
|
|
22
22
|
* Группы критериев, которые не могут быть активны одновременно.
|
|
23
23
|
*/
|
|
24
24
|
conflictingCriteriaGroups?: CriterionTypeEnum[][];
|
|
25
|
+
/**
|
|
26
|
+
* Правила доступности критериев, зависящие от текущего состояния фильтров.
|
|
27
|
+
* Недоступный критерий удаляется из активных критериев и не отображается в списке добавления.
|
|
28
|
+
* Если недоступный критерий снова становится доступным и входит в predefinedCriteria, он возвращается автоматически.
|
|
29
|
+
*/
|
|
30
|
+
criterionAvailabilityRules?: SearchUICriterionAvailabilityRule[];
|
|
25
31
|
/**
|
|
26
32
|
* Список предустановленных критериев, которые пользователь может удалить.
|
|
27
33
|
*/
|
|
@@ -10,10 +10,13 @@ const react_i18next_1 = require("react-i18next");
|
|
|
10
10
|
const store_1 = require("./state/store");
|
|
11
11
|
const material_1 = require("@mui/material");
|
|
12
12
|
const ExpandMore_1 = tslib_1.__importDefault(require("@mui/icons-material/ExpandMore"));
|
|
13
|
+
const isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual"));
|
|
13
14
|
const SearchUIAddFilter_1 = tslib_1.__importDefault(require("./component/select/SearchUIAddFilter"));
|
|
14
15
|
const CriterionContainer_1 = require("./CriterionContainer");
|
|
15
16
|
const __1 = require("../../..");
|
|
16
17
|
const SearchUIProvider_1 = require("../SearchUIProvider");
|
|
18
|
+
const undo_1 = require("./state/undo");
|
|
19
|
+
const criterionAvailability_1 = require("./criterionAvailability");
|
|
17
20
|
/**
|
|
18
21
|
* Панель фильтров поискового интерфейса с поддержкой шаблонов и динамических критериев.
|
|
19
22
|
* @param props Свойства компонента.
|
|
@@ -32,6 +35,7 @@ const SearchUIFilters = (props) => {
|
|
|
32
35
|
const loadTemplates = (0, store_1.useSearchUIFiltersStore)(s => s.loadTemplates);
|
|
33
36
|
const criteria = (0, store_1.useSearchUIFiltersStore)(s => s.criteria);
|
|
34
37
|
const clearCriteria = (0, store_1.useSearchUIFiltersStore)(s => s.clearCriteria);
|
|
38
|
+
const restoreClearCriteriaSnapshot = (0, store_1.useSearchUIFiltersStore)(s => s.restoreClearCriteriaSnapshot);
|
|
35
39
|
const addCriterion = (0, store_1.useSearchUIFiltersStore)(s => s.addCriterion);
|
|
36
40
|
const conflictingCriteriaGroups = (0, store_1.useSearchUIFiltersStore)(s => s.config?.conflictingCriteriaGroups);
|
|
37
41
|
const hideTemplatesSelect = (0, store_1.useSearchUIFiltersStore)(s => s.config?.hideTemplatesSelect);
|
|
@@ -41,7 +45,21 @@ const SearchUIFilters = (props) => {
|
|
|
41
45
|
const triggerSearch = (0, store_1.useSearchUIFiltersStore)(s => s.triggerSearch);
|
|
42
46
|
const exactSearchLabel = (0, store_1.useSearchUIFiltersStore)(s => s.exactSearchLabel);
|
|
43
47
|
const updateConditions = (0, store_1.useSearchUIFiltersStore)(s => s.updateConditions);
|
|
48
|
+
const filtersState = (0, store_1.useSearchUIFiltersStore)(s => s);
|
|
44
49
|
const [showFilters, setShowFilters] = (0, react_1.useState)(true);
|
|
50
|
+
const pendingClearCriteriaUndoRef = (0, react_1.useRef)(null);
|
|
51
|
+
const clearPendingClearCriteriaUndo = (dismissSnackbar = true) => {
|
|
52
|
+
const pending = pendingClearCriteriaUndoRef.current;
|
|
53
|
+
if (!pending)
|
|
54
|
+
return;
|
|
55
|
+
if (pending.timeoutId) {
|
|
56
|
+
clearTimeout(pending.timeoutId);
|
|
57
|
+
}
|
|
58
|
+
if (dismissSnackbar) {
|
|
59
|
+
__1.overlayActions.removeSnackbar(pending.snackbarId);
|
|
60
|
+
}
|
|
61
|
+
pendingClearCriteriaUndoRef.current = null;
|
|
62
|
+
};
|
|
45
63
|
(0, react_1.useEffect)(() => {
|
|
46
64
|
setInitialState({
|
|
47
65
|
defaults: defaults,
|
|
@@ -67,6 +85,22 @@ const SearchUIFilters = (props) => {
|
|
|
67
85
|
});
|
|
68
86
|
}
|
|
69
87
|
}, [searchConditions]);
|
|
88
|
+
(0, react_1.useEffect)(() => {
|
|
89
|
+
const unsubscribe = store_1.useSearchUIFiltersStore.subscribe(state => {
|
|
90
|
+
const pending = pendingClearCriteriaUndoRef.current;
|
|
91
|
+
if (!pending)
|
|
92
|
+
return;
|
|
93
|
+
const currentSnapshot = (0, undo_1.createClearCriteriaUndoSnapshot)(state);
|
|
94
|
+
if ((0, isEqual_1.default)(currentSnapshot, pending.baseline)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
clearPendingClearCriteriaUndo();
|
|
98
|
+
});
|
|
99
|
+
return () => {
|
|
100
|
+
clearPendingClearCriteriaUndo();
|
|
101
|
+
unsubscribe();
|
|
102
|
+
};
|
|
103
|
+
}, []);
|
|
70
104
|
const someCriteriaAdded = criteria.length > 0;
|
|
71
105
|
const showFiltersCountChip = someCriteriaAdded && !showFilters;
|
|
72
106
|
const removablePredefinedCriteria = config?.removablePredefinedCriteria ?? [];
|
|
@@ -74,6 +108,7 @@ const SearchUIFilters = (props) => {
|
|
|
74
108
|
const nothingToClear = criteria.every(criterion => nonRemovablePredefinedCriteria.includes(criterion));
|
|
75
109
|
const criteriaOptions = adjustedPossibleCriteria
|
|
76
110
|
.filter(criterion => !criteria.includes(criterion))
|
|
111
|
+
.filter(criterion => (0, criterionAvailability_1.isCriterionAvailable)(criterion, filtersState, config))
|
|
77
112
|
.filter(possibleC => {
|
|
78
113
|
let show = true;
|
|
79
114
|
conflictingCriteriaGroups?.forEach(group => {
|
|
@@ -88,6 +123,29 @@ const SearchUIFilters = (props) => {
|
|
|
88
123
|
const showTemplatesMenu = !hideTemplatesSelect;
|
|
89
124
|
const showAddFilterButton = !allCriteriaAdded;
|
|
90
125
|
const showMainActionsRow = showClearAllButton || showTemplatesMenu || showAddFilterButton;
|
|
126
|
+
const handleClearCriteria = () => {
|
|
127
|
+
const snapshotBeforeClear = (0, undo_1.createClearCriteriaUndoSnapshot)(store_1.useSearchUIFiltersStore.getState());
|
|
128
|
+
clearPendingClearCriteriaUndo();
|
|
129
|
+
clearCriteria();
|
|
130
|
+
const baseline = (0, undo_1.createClearCriteriaUndoSnapshot)(store_1.useSearchUIFiltersStore.getState());
|
|
131
|
+
const autoHideMs = 5000;
|
|
132
|
+
const snackbarId = __1.overlayActions.showUndoSnackbar({
|
|
133
|
+
message: t('react.searchUI.clearAll.cleared', { defaultValue: 'All filters cleared' }),
|
|
134
|
+
undoLabel: t('react.searchUI.undo', { defaultValue: 'Undo' }),
|
|
135
|
+
autoHideMs,
|
|
136
|
+
onUndo: () => {
|
|
137
|
+
clearPendingClearCriteriaUndo(false);
|
|
138
|
+
restoreClearCriteriaSnapshot(snapshotBeforeClear);
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
pendingClearCriteriaUndoRef.current = {
|
|
142
|
+
snackbarId,
|
|
143
|
+
baseline,
|
|
144
|
+
timeoutId: setTimeout(() => {
|
|
145
|
+
clearPendingClearCriteriaUndo(false);
|
|
146
|
+
}, autoHideMs),
|
|
147
|
+
};
|
|
148
|
+
};
|
|
91
149
|
return react_1.default.createElement(material_1.Box, { sx: { px: '16px' } },
|
|
92
150
|
react_1.default.createElement(material_1.Box, { sx: headerSx },
|
|
93
151
|
react_1.default.createElement(material_1.Box, { sx: headerPrimaryRowSx },
|
|
@@ -97,7 +155,7 @@ const SearchUIFilters = (props) => {
|
|
|
97
155
|
showFiltersCountChip ? react_1.default.createElement(material_1.Chip, { size: 'small', color: 'primary', variant: 'outlined', label: criteria.length, sx: nowrapChipSx }) : null),
|
|
98
156
|
react_1.default.createElement(styled_1.SearchUIFiltersHeaderActions, null,
|
|
99
157
|
showMainActionsRow ? react_1.default.createElement(styled_1.SearchUIFiltersHeaderMainRow, null,
|
|
100
|
-
react_1.default.createElement(styled_1.SearchUIFiltersHeaderLeft, null, showClearAllButton ? react_1.default.createElement(__1.PneButton, { onClick:
|
|
158
|
+
react_1.default.createElement(styled_1.SearchUIFiltersHeaderLeft, null, showClearAllButton ? react_1.default.createElement(__1.PneButton, { onClick: handleClearCriteria, color: 'pneNeutral', size: 'small', sx: nowrapButtonSx }, t('clear.all')) : null),
|
|
101
159
|
react_1.default.createElement(styled_1.SearchUIFiltersHeaderRight, null,
|
|
102
160
|
showTemplatesMenu ? react_1.default.createElement(SearchUITemplatesMenu_1.default, null) : null,
|
|
103
161
|
showAddFilterButton ? react_1.default.createElement(SearchUIAddFilter_1.default, { options: criteriaOptions, onChange: criterion => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchUIFilters.js","sourceRoot":"","sources":["../../../../src/component/search-ui/filters/SearchUIFilters.tsx"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"SearchUIFilters.js","sourceRoot":"","sources":["../../../../src/component/search-ui/filters/SearchUIFilters.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CriterionTypeEnum, SearchUICriterionAvailabilityRule, SearchUIConditions } from './types';
|
|
2
|
+
type CriterionAvailabilityConfig = {
|
|
3
|
+
criterionAvailabilityRules?: SearchUICriterionAvailabilityRule[];
|
|
4
|
+
};
|
|
5
|
+
export declare const getCriteriaWithAvailabilityRules: (config: CriterionAvailabilityConfig | undefined) => CriterionTypeEnum[];
|
|
6
|
+
export declare const isCriterionAvailable: (criterion: CriterionTypeEnum, conditions: Readonly<SearchUIConditions>, config: CriterionAvailabilityConfig | undefined) => boolean;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isCriterionAvailable = exports.getCriteriaWithAvailabilityRules = void 0;
|
|
4
|
+
const getCriteriaWithAvailabilityRules = (config) => (Array.from(new Set((config?.criterionAvailabilityRules ?? []).map(rule => rule.criterion))));
|
|
5
|
+
exports.getCriteriaWithAvailabilityRules = getCriteriaWithAvailabilityRules;
|
|
6
|
+
const isCriterionAvailable = (criterion, conditions, config) => {
|
|
7
|
+
const rules = config?.criterionAvailabilityRules ?? [];
|
|
8
|
+
return rules
|
|
9
|
+
.filter(rule => rule.criterion === criterion)
|
|
10
|
+
.every(rule => rule.isAvailable(conditions));
|
|
11
|
+
};
|
|
12
|
+
exports.isCriterionAvailable = isCriterionAvailable;
|
|
13
|
+
//# sourceMappingURL=criterionAvailability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criterionAvailability.js","sourceRoot":"","sources":["../../../../src/component/search-ui/filters/criterionAvailability.ts"],"names":[],"mappings":";;;AAUO,MAAM,gCAAgC,GAAG,CAC5C,MAA+C,EAC5B,EAAE,CAAC,CACtB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CACd,CAAC,MAAM,EAAE,0BAA0B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CACzE,CAAC,CACL,CAAA;AANY,QAAA,gCAAgC,oCAM5C;AAEM,MAAM,oBAAoB,GAAG,CAChC,SAA4B,EAC5B,UAAwC,EACxC,MAA+C,EACxC,EAAE;IACT,MAAM,KAAK,GAAG,MAAM,EAAE,0BAA0B,IAAI,EAAE,CAAA;IACtD,OAAO,KAAK;SACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;SAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA;AATY,QAAA,oBAAoB,wBAShC"}
|