@widergy/energy-ui 3.160.0 → 3.161.0
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/CHANGELOG.md +14 -2
- package/dist/components/UTPanel/versions/V1/components/AdditionalContentModule/index.js +7 -2
- package/dist/components/UTPanel/versions/V1/components/AdditionalContentModule/styles.module.scss +2 -1
- package/dist/components/UTShortcutPanel/components/GroupingPanel/components/ExpandedPanelContent/components/ExpandedPanelContentCategory/components/ExpandedPanelContentCategoryItem/index.js +8 -3
- package/dist/components/UTShortcutPanel/components/GroupingPanel/components/ExpandedPanelContent/components/ExpandedPanelContentCategory/components/ExpandedPanelContentCategoryItem/layout.js +33 -3
- package/dist/components/UTShortcutPanel/components/GroupingPanel/components/ExpandedPanelContent/components/ExpandedPanelContentHeader/index.js +4 -0
- package/dist/components/UTShortcutPanel/index.js +33 -4
- package/dist/components/UTShortcutPanel/stories/UTShortcutPanel.stories.js +39 -0
- package/dist/components/UTShortcutPanel/stories/constants.json +2 -0
- package/dist/components/UTShortcutPanel/stories/props.schema.json +10 -1
- package/dist/components/UTShortcutPanel/styles.module.scss +11 -3
- package/dist/constants/testIds.js +1 -0
- package/dist/esm/components/UTPanel/versions/V1/components/AdditionalContentModule/index.js +7 -2
- package/dist/esm/components/UTPanel/versions/V1/components/AdditionalContentModule/styles.module.scss +2 -1
- package/dist/esm/components/UTShortcutPanel/components/GroupingPanel/components/ExpandedPanelContent/components/ExpandedPanelContentCategory/components/ExpandedPanelContentCategoryItem/index.js +7 -2
- package/dist/esm/components/UTShortcutPanel/components/GroupingPanel/components/ExpandedPanelContent/components/ExpandedPanelContentCategory/components/ExpandedPanelContentCategoryItem/layout.js +34 -4
- package/dist/esm/components/UTShortcutPanel/components/GroupingPanel/components/ExpandedPanelContent/components/ExpandedPanelContentHeader/index.js +5 -1
- package/dist/esm/components/UTShortcutPanel/index.js +33 -4
- package/dist/esm/components/UTShortcutPanel/stories/UTShortcutPanel.stories.js +39 -0
- package/dist/esm/components/UTShortcutPanel/stories/constants.json +2 -0
- package/dist/esm/components/UTShortcutPanel/stories/props.schema.json +10 -1
- package/dist/esm/components/UTShortcutPanel/styles.module.scss +11 -3
- package/dist/esm/constants/testIds.js +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
# [3.
|
|
1
|
+
# [3.161.0](https://github.com/widergy/energy-ui/compare/v3.160.1...v3.161.0) (2026-06-05)
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
### Features
|
|
5
5
|
|
|
6
|
-
* [AXCH-
|
|
6
|
+
* [AXCH-1712, AXCH-1713, AXCH-1716 y AXCH-1717] quick filters ([#808](https://github.com/widergy/energy-ui/issues/808)) ([080d7b7](https://github.com/widergy/energy-ui/commit/080d7b7310549263783fc15d748fb597b51bf209))
|
|
7
|
+
|
|
8
|
+
## [3.160.1](https://github.com/widergy/energy-ui/compare/v3.160.0...v3.160.1) (2026-06-04)
|
|
9
|
+
|
|
10
|
+
### Correcciones
|
|
11
|
+
|
|
12
|
+
* Se corrigió un problema que impedía desplazarse correctamente por el contenido adicional del panel de unidades de trabajo. [#810](https://github.com/widergy/Energy-UI/pull/810) [AXCH-1748](https://widergy.atlassian.net/browse/AXCH-1748) [AXCH-1742](https://widergy.atlassian.net/browse/AXCH-1742)
|
|
13
|
+
|
|
14
|
+
# [3.160.0](https://github.com/widergy/energy-ui/compare/v3.159.0...v3.160.0) (2026-06-02)
|
|
15
|
+
|
|
16
|
+
### Novedades y Mejoras
|
|
17
|
+
|
|
18
|
+
* Los botones de acción ahora admiten un segundo ícono en el extremo derecho, lo que permite mayor flexibilidad visual sin afectar el comportamiento existente. [#805](https://github.com/widergy/Energy-UI/pull/805) [AXCH-1489](https://widergy.atlassian.net/browse/AXCH-1489)
|
|
7
19
|
|
|
8
20
|
# [3.159.0](https://github.com/widergy/energy-ui/compare/v3.158.1...v3.159.0) (2026-06-01)
|
|
9
21
|
|
|
@@ -34,10 +34,15 @@ const AdditionalContentModule = _ref => {
|
|
|
34
34
|
const defaultTooltipContainer = tooltipContainer || (() => document.body);
|
|
35
35
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
36
36
|
className: _stylesModule.default.additionalContentWrapper
|
|
37
|
-
}, activeContent && /*#__PURE__*/_react.default.createElement(
|
|
37
|
+
}, activeContent && /*#__PURE__*/_react.default.createElement(_reactPerfectScrollbar.default, {
|
|
38
|
+
options: {
|
|
39
|
+
suppressScrollX: true
|
|
40
|
+
},
|
|
41
|
+
className: _stylesModule.default.sidebarScroll
|
|
42
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
38
43
|
className: _stylesModule.default.bodyComponent,
|
|
39
44
|
"data-testid": panel.additionalContent.body
|
|
40
|
-
}, ActiveBodyComponent && /*#__PURE__*/_react.default.createElement(ActiveBodyComponent, null)), /*#__PURE__*/_react.default.createElement("div", {
|
|
45
|
+
}, ActiveBodyComponent && /*#__PURE__*/_react.default.createElement(ActiveBodyComponent, null))), /*#__PURE__*/_react.default.createElement("div", {
|
|
41
46
|
className: "".concat(_stylesModule.default.sidebar, " ").concat(!activeContent ? _stylesModule.default.sidebarCollapsed : ''),
|
|
42
47
|
"data-testid": panel.additionalContent.sidebar
|
|
43
48
|
}, /*#__PURE__*/_react.default.createElement(_reactPerfectScrollbar.default, {
|
package/dist/components/UTPanel/versions/V1/components/AdditionalContentModule/styles.module.scss
CHANGED
|
@@ -23,9 +23,10 @@ $sidebar-width: 56px;
|
|
|
23
23
|
display: flex;
|
|
24
24
|
flex-direction: column;
|
|
25
25
|
flex-shrink: 0;
|
|
26
|
+
height: 100%;
|
|
26
27
|
min-width: $body-component-width;
|
|
27
28
|
opacity: 1;
|
|
28
|
-
overflow:
|
|
29
|
+
overflow-y: auto;
|
|
29
30
|
padding: 24px 24px 16px 24px;
|
|
30
31
|
width: $body-component-width;
|
|
31
32
|
}
|
|
@@ -4,14 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
8
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
8
|
var _propTypes = require("prop-types");
|
|
10
9
|
var _context = _interopRequireDefault(require("../../../../../../../../context"));
|
|
11
10
|
var _utils = require("../../../../../../../../utils");
|
|
12
11
|
var _layout = _interopRequireDefault(require("./layout"));
|
|
13
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
14
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
14
|
const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
16
15
|
var _name$toLowerCase, _name$toLowerCase$spl, _name$toLowerCase$spl2;
|
|
17
16
|
let {
|
|
@@ -22,11 +21,13 @@ const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
|
22
21
|
classes,
|
|
23
22
|
closePopper,
|
|
24
23
|
handleSelectFilter,
|
|
24
|
+
invalidParamsConfig,
|
|
25
25
|
onDeleteFilterGrouping,
|
|
26
26
|
onEditFilterGrouping,
|
|
27
27
|
openPopper,
|
|
28
28
|
position,
|
|
29
29
|
selectedFilter,
|
|
30
|
+
showActionsOnPinned,
|
|
30
31
|
tooltipsContentMap: {
|
|
31
32
|
editButton,
|
|
32
33
|
deleteButton
|
|
@@ -34,10 +35,12 @@ const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
|
34
35
|
} = (0, _react.useContext)(_context.default);
|
|
35
36
|
const {
|
|
36
37
|
description,
|
|
38
|
+
hasInvalidParams,
|
|
37
39
|
name,
|
|
38
40
|
pinned,
|
|
39
41
|
category
|
|
40
42
|
} = filter;
|
|
43
|
+
const resolvedHasInvalidParams = hasInvalidParams ? invalidParamsConfig !== null && invalidParamsConfig !== void 0 ? invalidParamsConfig : true : false;
|
|
41
44
|
const id = "".concat(name === null || name === void 0 || (_name$toLowerCase = name.toLowerCase) === null || _name$toLowerCase === void 0 || (_name$toLowerCase = _name$toLowerCase.call(name)) === null || _name$toLowerCase === void 0 || (_name$toLowerCase$spl = _name$toLowerCase.split) === null || _name$toLowerCase$spl === void 0 || (_name$toLowerCase$spl = _name$toLowerCase$spl.call(_name$toLowerCase, ' ')) === null || _name$toLowerCase$spl === void 0 || (_name$toLowerCase$spl2 = _name$toLowerCase$spl.join) === null || _name$toLowerCase$spl2 === void 0 ? void 0 : _name$toLowerCase$spl2.call(_name$toLowerCase$spl, '_'), "_").concat(category);
|
|
42
45
|
const deleteButtonTippyRef = (0, _react.useRef)(null);
|
|
43
46
|
const editButtonTippyRef = (0, _react.useRef)(null);
|
|
@@ -65,12 +68,14 @@ const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
|
65
68
|
handleDeleteFilterGrouping: onDeleteFilterGrouping ? () => onDeleteFilterGrouping(filter) : undefined,
|
|
66
69
|
handleEditFilterGrouping: onEditFilterGrouping ? () => onEditFilterGrouping(filter) : undefined,
|
|
67
70
|
handleSelectFilter: handleSelectFilters,
|
|
71
|
+
hasInvalidParams: resolvedHasInvalidParams,
|
|
68
72
|
id: id,
|
|
69
73
|
name: name,
|
|
70
74
|
openItemDescription: handleOpenItemDescription,
|
|
71
75
|
pinned: pinned,
|
|
72
76
|
position: position,
|
|
73
|
-
|
|
77
|
+
showActionsOnPinned: showActionsOnPinned,
|
|
78
|
+
selected: (selectedFilter === null || selectedFilter === void 0 ? void 0 : selectedFilter.id) != null && selectedFilter.id === (filter === null || filter === void 0 ? void 0 : filter.id) && selectedFilter.category === (filter === null || filter === void 0 ? void 0 : filter.category)
|
|
74
79
|
});
|
|
75
80
|
};
|
|
76
81
|
ExpandedPanelContentCategoryItemContainer.propTypes = {
|
|
@@ -34,13 +34,19 @@ const ExpandedPanelContentCategoryItem = _ref => {
|
|
|
34
34
|
handleDeleteFilterGrouping,
|
|
35
35
|
handleEditFilterGrouping,
|
|
36
36
|
handleSelectFilter,
|
|
37
|
+
hasInvalidParams,
|
|
37
38
|
id,
|
|
38
39
|
name,
|
|
39
40
|
openItemDescription,
|
|
40
41
|
pinned,
|
|
41
42
|
position,
|
|
42
|
-
selected
|
|
43
|
+
selected,
|
|
44
|
+
showActionsOnPinned
|
|
43
45
|
} = _ref;
|
|
46
|
+
const isInvalidParamsObject = typeof hasInvalidParams === 'object';
|
|
47
|
+
const invalidIconName = (isInvalidParamsObject ? hasInvalidParams === null || hasInvalidParams === void 0 ? void 0 : hasInvalidParams.iconName : null) || 'IconAlertTriangle';
|
|
48
|
+
const invalidIconSize = (isInvalidParamsObject ? hasInvalidParams === null || hasInvalidParams === void 0 ? void 0 : hasInvalidParams.size : null) || '16';
|
|
49
|
+
const invalidTooltipText = isInvalidParamsObject ? hasInvalidParams === null || hasInvalidParams === void 0 ? void 0 : hasInvalidParams.tooltipText : undefined;
|
|
44
50
|
return /*#__PURE__*/_react.default.createElement("article", {
|
|
45
51
|
className: "".concat(classes.expandedPanelContentCategoryItem, " ").concat(selected ? classes.expandedPanelContentCategoryItemSelected : ''),
|
|
46
52
|
id: id
|
|
@@ -63,7 +69,25 @@ const ExpandedPanelContentCategoryItem = _ref => {
|
|
|
63
69
|
className: classes.expandedPanelContentCategoryItemTitleLabel,
|
|
64
70
|
colorTheme: selected ? 'accent' : undefined,
|
|
65
71
|
shade: selected ? '05' : undefined
|
|
66
|
-
}, name))
|
|
72
|
+
}, name)), hasInvalidParams && (invalidTooltipText ? /*#__PURE__*/_react.default.createElement(_UTTooltip.default, {
|
|
73
|
+
content: invalidTooltipText,
|
|
74
|
+
tippyProps: {
|
|
75
|
+
appendTo: () => document.body,
|
|
76
|
+
placement: 'top'
|
|
77
|
+
}
|
|
78
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
79
|
+
className: classes.hasInvalidParamsTooltipContainer
|
|
80
|
+
}, /*#__PURE__*/_react.default.createElement(_UTIcon.default, {
|
|
81
|
+
colorTheme: "warning",
|
|
82
|
+
dataTestId: "".concat(dataTestId, ".").concat(_testIds.ID_CONSTANTS.INVALID_PARAMS),
|
|
83
|
+
name: invalidIconName,
|
|
84
|
+
size: invalidIconSize
|
|
85
|
+
}))) : /*#__PURE__*/_react.default.createElement(_UTIcon.default, {
|
|
86
|
+
colorTheme: "warning",
|
|
87
|
+
dataTestId: "".concat(dataTestId, ".").concat(_testIds.ID_CONSTANTS.INVALID_PARAMS),
|
|
88
|
+
name: invalidIconName,
|
|
89
|
+
size: invalidIconSize
|
|
90
|
+
}))), (!pinned || showActionsOnPinned) && (handleEditFilterGrouping || handleDeleteFilterGrouping) && /*#__PURE__*/_react.default.createElement("section", {
|
|
67
91
|
className: classes.expandedPanelContentCategoryItemActionsContainer,
|
|
68
92
|
onAnimationEnd: animationEnd
|
|
69
93
|
}, handleEditFilterGrouping && /*#__PURE__*/_react.default.createElement(_UTTooltip.default, {
|
|
@@ -118,11 +142,17 @@ ExpandedPanelContentCategoryItem.propTypes = {
|
|
|
118
142
|
handleDeleteFilterGrouping: _propTypes.func,
|
|
119
143
|
handleEditFilterGrouping: _propTypes.func,
|
|
120
144
|
handleSelectFilter: _propTypes.func,
|
|
145
|
+
hasInvalidParams: (0, _propTypes.oneOfType)([_propTypes.bool, (0, _propTypes.shape)({
|
|
146
|
+
iconName: _propTypes.string,
|
|
147
|
+
size: _propTypes.string,
|
|
148
|
+
tooltipText: _propTypes.string
|
|
149
|
+
})]),
|
|
121
150
|
id: _propTypes.string,
|
|
122
151
|
name: _propTypes.string,
|
|
123
152
|
openItemDescription: _propTypes.func,
|
|
124
153
|
pinned: _propTypes.bool,
|
|
125
154
|
position: _propTypes.string,
|
|
126
|
-
selected: _propTypes.bool
|
|
155
|
+
selected: _propTypes.bool,
|
|
156
|
+
showActionsOnPinned: _propTypes.bool
|
|
127
157
|
};
|
|
128
158
|
var _default = exports.default = ExpandedPanelContentCategoryItem;
|
|
@@ -32,6 +32,7 @@ const ExpandedPanelContentHeaderContainer = _ref => {
|
|
|
32
32
|
hideAddFilterButton,
|
|
33
33
|
panelTitle,
|
|
34
34
|
position,
|
|
35
|
+
searchResetTrigger,
|
|
35
36
|
searchValue,
|
|
36
37
|
tooltipsContentMap: {
|
|
37
38
|
collapseButton,
|
|
@@ -39,6 +40,9 @@ const ExpandedPanelContentHeaderContainer = _ref => {
|
|
|
39
40
|
}
|
|
40
41
|
} = (0, _react.useContext)(_context.default);
|
|
41
42
|
const [searchOpen, setSearchOpen] = (0, _react.useState)(false);
|
|
43
|
+
(0, _react.useEffect)(() => {
|
|
44
|
+
if (searchResetTrigger > 0) setSearchOpen(false);
|
|
45
|
+
}, [searchResetTrigger]);
|
|
42
46
|
const handleSearchToggle = () => {
|
|
43
47
|
handleFilterGroupSearch('');
|
|
44
48
|
setSearchOpen(!searchOpen);
|
|
@@ -28,6 +28,7 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
28
28
|
handleSelectFilter,
|
|
29
29
|
hideAddFilterButton = false,
|
|
30
30
|
iconProps,
|
|
31
|
+
invalidParamsConfig,
|
|
31
32
|
noFiltersText,
|
|
32
33
|
noFiltersTitle,
|
|
33
34
|
onDeleteFilterGrouping,
|
|
@@ -36,6 +37,8 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
36
37
|
panelTitle,
|
|
37
38
|
position = _constants.PANEL_POSITIONS.LEFT,
|
|
38
39
|
scrollProps,
|
|
40
|
+
searchResetKey,
|
|
41
|
+
showActionsOnPinned = false,
|
|
39
42
|
selectedFilter,
|
|
40
43
|
startOpen = false,
|
|
41
44
|
tooltipsContentMap = {}
|
|
@@ -44,6 +47,7 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
44
47
|
const containerRef = (0, _react.useRef)(null);
|
|
45
48
|
const [open, setOpen] = (0, _react.useState)(startOpen);
|
|
46
49
|
const [filteredValues, setFilteredValues] = (0, _react.useState)(false);
|
|
50
|
+
const [searchTerm, setSearchTerm] = (0, _react.useState)('');
|
|
47
51
|
const handleTogglePanel = () => {
|
|
48
52
|
setOpen(!open);
|
|
49
53
|
onTogglePanel === null || onTogglePanel === void 0 || onTogglePanel(!open);
|
|
@@ -52,8 +56,8 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
52
56
|
|
|
53
57
|
// TODO: desarrollo en otro PR
|
|
54
58
|
const handleAddFilterGroup = () => {};
|
|
55
|
-
const
|
|
56
|
-
const filteredResults =
|
|
59
|
+
const applySearch = (value, source) => {
|
|
60
|
+
const filteredResults = source.map(category => {
|
|
57
61
|
const filters = category.filters.filter(filter => filter.name.toLowerCase().includes(value.toLowerCase()));
|
|
58
62
|
return {
|
|
59
63
|
...category,
|
|
@@ -63,6 +67,10 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
63
67
|
setFilteredCategories(filteredResults);
|
|
64
68
|
setFilteredValues(Boolean(value));
|
|
65
69
|
};
|
|
70
|
+
const handleFilterGroupSearch = value => {
|
|
71
|
+
setSearchTerm(value);
|
|
72
|
+
applySearch(value, categories);
|
|
73
|
+
};
|
|
66
74
|
const [popperState, setPopperState] = (0, _react.useState)({});
|
|
67
75
|
const openPopper = _ref2 => {
|
|
68
76
|
let {
|
|
@@ -82,8 +90,19 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
82
90
|
setPopperState({});
|
|
83
91
|
};
|
|
84
92
|
(0, _react.useEffect)(() => {
|
|
85
|
-
|
|
93
|
+
if (searchTerm) {
|
|
94
|
+
applySearch(searchTerm, categories);
|
|
95
|
+
} else {
|
|
96
|
+
setFilteredCategories(categories);
|
|
97
|
+
}
|
|
86
98
|
}, [categories]);
|
|
99
|
+
const [searchResetTrigger, setSearchResetTrigger] = (0, _react.useState)(0);
|
|
100
|
+
(0, _react.useEffect)(() => {
|
|
101
|
+
setSearchTerm('');
|
|
102
|
+
setFilteredValues(false);
|
|
103
|
+
setFilteredCategories(categories);
|
|
104
|
+
setSearchResetTrigger(prev => prev + 1);
|
|
105
|
+
}, [searchResetKey]);
|
|
87
106
|
const contextValue = (0, _react.useMemo)(() => ({
|
|
88
107
|
categories: filteredCategories,
|
|
89
108
|
categoriesConfig,
|
|
@@ -98,6 +117,7 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
98
117
|
handleTogglePanel,
|
|
99
118
|
hideAddFilterButton,
|
|
100
119
|
iconProps,
|
|
120
|
+
invalidParamsConfig,
|
|
101
121
|
noFiltersText,
|
|
102
122
|
noFiltersTitle,
|
|
103
123
|
onDeleteFilterGrouping,
|
|
@@ -108,10 +128,12 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
108
128
|
popperState,
|
|
109
129
|
position,
|
|
110
130
|
scrollProps,
|
|
131
|
+
searchResetTrigger,
|
|
111
132
|
selectedFilter,
|
|
133
|
+
showActionsOnPinned,
|
|
112
134
|
theme,
|
|
113
135
|
tooltipsContentMap
|
|
114
|
-
}), [categories, categoriesConfig, classes, disableCollapsibleCategories, filteredCategories, filteredValues, hideAddFilterButton, iconProps, noFiltersText, noFiltersTitle, onDeleteFilterGrouping, onEditFilterGrouping, open, popperState, position, scrollProps, selectedFilter, theme, tooltipsContentMap]);
|
|
136
|
+
}), [categories, categoriesConfig, classes, disableCollapsibleCategories, filteredCategories, filteredValues, hideAddFilterButton, iconProps, invalidParamsConfig, noFiltersText, noFiltersTitle, onDeleteFilterGrouping, onEditFilterGrouping, showActionsOnPinned, open, popperState, position, scrollProps, searchResetTrigger, selectedFilter, theme, tooltipsContentMap]);
|
|
115
137
|
return /*#__PURE__*/_react.default.createElement(_context.default.Provider, {
|
|
116
138
|
value: contextValue
|
|
117
139
|
}, /*#__PURE__*/_react.default.createElement("section", {
|
|
@@ -161,14 +183,21 @@ UTShortcutPanelContainer.propTypes = {
|
|
|
161
183
|
handleSelectFilter: _propTypes.func,
|
|
162
184
|
hideAddFilterButton: _propTypes.bool,
|
|
163
185
|
iconProps: _iconTypes.iconPropTypes,
|
|
186
|
+
invalidParamsConfig: (0, _propTypes.shape)({
|
|
187
|
+
iconName: _propTypes.string,
|
|
188
|
+
size: _propTypes.string,
|
|
189
|
+
tooltipText: _propTypes.string
|
|
190
|
+
}),
|
|
164
191
|
noFiltersText: _propTypes.string,
|
|
165
192
|
noFiltersTitle: _propTypes.string,
|
|
166
193
|
onDeleteFilterGrouping: _propTypes.func,
|
|
167
194
|
onEditFilterGrouping: _propTypes.func,
|
|
168
195
|
onTogglePanel: _propTypes.func,
|
|
196
|
+
showActionsOnPinned: _propTypes.bool,
|
|
169
197
|
panelTitle: _propTypes.string,
|
|
170
198
|
position: _propTypes.string,
|
|
171
199
|
scrollProps: _propTypes.object,
|
|
200
|
+
searchResetKey: _propTypes.string,
|
|
172
201
|
selectedFilter: (0, _propTypes.shape)({
|
|
173
202
|
id: _propTypes.number,
|
|
174
203
|
name: _propTypes.string,
|
|
@@ -32,6 +32,7 @@ var _default = exports.default = {
|
|
|
32
32
|
handleSelectFilter: (0, _test.fn)(),
|
|
33
33
|
hideAddFilterButton: false,
|
|
34
34
|
iconProps: undefined,
|
|
35
|
+
invalidParamsConfig: undefined,
|
|
35
36
|
noFiltersTitle: _constants2.default.NO_FILTERS_TITLE,
|
|
36
37
|
noFiltersText: _constants2.default.NO_FILTERS_TEXT,
|
|
37
38
|
onDeleteFilterGrouping: (0, _test.fn)(),
|
|
@@ -39,8 +40,10 @@ var _default = exports.default = {
|
|
|
39
40
|
onTogglePanel: (0, _test.fn)(),
|
|
40
41
|
panelTitle: _constants2.default.PANEL_TITLE,
|
|
41
42
|
position: _constants2.default.POSITION,
|
|
43
|
+
searchResetKey: undefined,
|
|
42
44
|
selectedFilter: undefined,
|
|
43
45
|
scrollProps: undefined,
|
|
46
|
+
showActionsOnPinned: false,
|
|
44
47
|
startOpen: true,
|
|
45
48
|
tooltipsContentMap: _constants2.default.TOOLTIPS_CONTENT_MAP
|
|
46
49
|
},
|
|
@@ -182,6 +185,18 @@ var _default = exports.default = {
|
|
|
182
185
|
}
|
|
183
186
|
}
|
|
184
187
|
},
|
|
188
|
+
invalidParamsConfig: {
|
|
189
|
+
control: 'object',
|
|
190
|
+
description: 'Configuración del ícono de advertencia que se muestra en ítems con `hasInvalidParams: true`. Si se pasa `tooltipText`, el ícono muestra un tooltip al hacer hover. `iconName` e `size` son opcionales (defaults: `IconAlertTriangle`, `16`).',
|
|
191
|
+
table: {
|
|
192
|
+
defaultValue: {
|
|
193
|
+
summary: 'undefined'
|
|
194
|
+
},
|
|
195
|
+
type: {
|
|
196
|
+
summary: '{ iconName?: string; size?: string; tooltipText?: string }'
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
185
200
|
noFiltersTitle: {
|
|
186
201
|
control: 'text',
|
|
187
202
|
description: 'Título para el componente de filtros vacíos.',
|
|
@@ -279,6 +294,18 @@ var _default = exports.default = {
|
|
|
279
294
|
}
|
|
280
295
|
}
|
|
281
296
|
},
|
|
297
|
+
searchResetKey: {
|
|
298
|
+
control: 'text',
|
|
299
|
+
description: 'Cuando cambia de valor, resetea el estado de búsqueda interna del panel. Útil para limpiar el input al cambiar de tab o categoría.',
|
|
300
|
+
table: {
|
|
301
|
+
defaultValue: {
|
|
302
|
+
summary: 'undefined'
|
|
303
|
+
},
|
|
304
|
+
type: {
|
|
305
|
+
summary: 'string | number'
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
},
|
|
282
309
|
selectedFilter: {
|
|
283
310
|
control: 'none',
|
|
284
311
|
description: 'Filtro seleccionado.',
|
|
@@ -291,6 +318,18 @@ var _default = exports.default = {
|
|
|
291
318
|
}
|
|
292
319
|
}
|
|
293
320
|
},
|
|
321
|
+
showActionsOnPinned: {
|
|
322
|
+
control: 'boolean',
|
|
323
|
+
description: 'Si es `true`, los botones de editar y eliminar se muestran también en ítems con `pinned: true`. Por defecto son ocultados en filtros pinned.',
|
|
324
|
+
table: {
|
|
325
|
+
defaultValue: {
|
|
326
|
+
summary: 'false'
|
|
327
|
+
},
|
|
328
|
+
type: {
|
|
329
|
+
summary: 'boolean'
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
},
|
|
294
333
|
startOpen: {
|
|
295
334
|
control: 'boolean',
|
|
296
335
|
description: 'Indica si el panel se renderiza abierto.',
|
|
@@ -65,7 +65,16 @@
|
|
|
65
65
|
},
|
|
66
66
|
"backoffice_user_id": {
|
|
67
67
|
"type": ["string", "null"],
|
|
68
|
-
"description": "ID
|
|
68
|
+
"description": "ID del agente propietario del filtro."
|
|
69
|
+
},
|
|
70
|
+
"filter_type": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"enum": ["private", "supervisor"],
|
|
73
|
+
"description": "Tipo de filtro: 'private' (solo visible para el creador) o 'supervisor' (visible para todos, implica pinned: true)."
|
|
74
|
+
},
|
|
75
|
+
"hasInvalidParams": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"description": "Cuando es true, el ítem muestra el ícono de advertencia. El ícono, su tamaño y el tooltip se configuran desde la prop invalidParamsConfig del panel (defaults: IconAlertTriangle, size 16, sin tooltip). Se computa en el selector makeSelectFilterCategoriesWithValidation."
|
|
69
78
|
},
|
|
70
79
|
"filter_params": {
|
|
71
80
|
"type": "array",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
%actionsContainer {
|
|
14
|
-
animation-fill-mode: forwards;
|
|
15
14
|
display: none;
|
|
16
15
|
}
|
|
17
16
|
|
|
@@ -190,8 +189,12 @@
|
|
|
190
189
|
overflow: hidden;
|
|
191
190
|
|
|
192
191
|
.hoverableContainer {
|
|
193
|
-
|
|
194
|
-
overflow: hidden;
|
|
192
|
+
flex-grow: 1;
|
|
193
|
+
overflow: hidden;
|
|
194
|
+
|
|
195
|
+
&:first-child {
|
|
196
|
+
padding-left: var(--UT-shortcutPanel-item-no-icon-padding-left, 4px);
|
|
197
|
+
}
|
|
195
198
|
}
|
|
196
199
|
}
|
|
197
200
|
|
|
@@ -203,6 +206,11 @@
|
|
|
203
206
|
@extend %actionsContainer;
|
|
204
207
|
}
|
|
205
208
|
|
|
209
|
+
.hasInvalidParamsTooltipContainer {
|
|
210
|
+
align-items: center;
|
|
211
|
+
display: flex;
|
|
212
|
+
}
|
|
213
|
+
|
|
206
214
|
.expandedPanelContentCategoryItemTitleContainerSelected {
|
|
207
215
|
cursor: default;
|
|
208
216
|
}
|
|
@@ -26,10 +26,15 @@ const AdditionalContentModule = _ref => {
|
|
|
26
26
|
const defaultTooltipContainer = tooltipContainer || (() => document.body);
|
|
27
27
|
return /*#__PURE__*/React.createElement("div", {
|
|
28
28
|
className: styles.additionalContentWrapper
|
|
29
|
-
}, activeContent && /*#__PURE__*/React.createElement(
|
|
29
|
+
}, activeContent && /*#__PURE__*/React.createElement(PerfectScrollbar, {
|
|
30
|
+
options: {
|
|
31
|
+
suppressScrollX: true
|
|
32
|
+
},
|
|
33
|
+
className: styles.sidebarScroll
|
|
34
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
30
35
|
className: styles.bodyComponent,
|
|
31
36
|
"data-testid": panel.additionalContent.body
|
|
32
|
-
}, ActiveBodyComponent && /*#__PURE__*/React.createElement(ActiveBodyComponent, null)), /*#__PURE__*/React.createElement("div", {
|
|
37
|
+
}, ActiveBodyComponent && /*#__PURE__*/React.createElement(ActiveBodyComponent, null))), /*#__PURE__*/React.createElement("div", {
|
|
33
38
|
className: "".concat(styles.sidebar, " ").concat(!activeContent ? styles.sidebarCollapsed : ''),
|
|
34
39
|
"data-testid": panel.additionalContent.sidebar
|
|
35
40
|
}, /*#__PURE__*/React.createElement(PerfectScrollbar, {
|
|
@@ -23,9 +23,10 @@ $sidebar-width: 56px;
|
|
|
23
23
|
display: flex;
|
|
24
24
|
flex-direction: column;
|
|
25
25
|
flex-shrink: 0;
|
|
26
|
+
height: 100%;
|
|
26
27
|
min-width: $body-component-width;
|
|
27
28
|
opacity: 1;
|
|
28
|
-
overflow:
|
|
29
|
+
overflow-y: auto;
|
|
29
30
|
padding: 24px 24px 16px 24px;
|
|
30
31
|
width: $body-component-width;
|
|
31
32
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import isEqual from 'lodash/isEqual';
|
|
2
1
|
import React, { useContext, useRef } from 'react';
|
|
3
2
|
import { object, string } from 'prop-types';
|
|
4
3
|
import UTShortcutPanelContext from '../../../../../../../../context';
|
|
@@ -14,11 +13,13 @@ const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
|
14
13
|
classes,
|
|
15
14
|
closePopper,
|
|
16
15
|
handleSelectFilter,
|
|
16
|
+
invalidParamsConfig,
|
|
17
17
|
onDeleteFilterGrouping,
|
|
18
18
|
onEditFilterGrouping,
|
|
19
19
|
openPopper,
|
|
20
20
|
position,
|
|
21
21
|
selectedFilter,
|
|
22
|
+
showActionsOnPinned,
|
|
22
23
|
tooltipsContentMap: {
|
|
23
24
|
editButton,
|
|
24
25
|
deleteButton
|
|
@@ -26,10 +27,12 @@ const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
|
26
27
|
} = useContext(UTShortcutPanelContext);
|
|
27
28
|
const {
|
|
28
29
|
description,
|
|
30
|
+
hasInvalidParams,
|
|
29
31
|
name,
|
|
30
32
|
pinned,
|
|
31
33
|
category
|
|
32
34
|
} = filter;
|
|
35
|
+
const resolvedHasInvalidParams = hasInvalidParams ? invalidParamsConfig !== null && invalidParamsConfig !== void 0 ? invalidParamsConfig : true : false;
|
|
33
36
|
const id = "".concat(name === null || name === void 0 || (_name$toLowerCase = name.toLowerCase) === null || _name$toLowerCase === void 0 || (_name$toLowerCase = _name$toLowerCase.call(name)) === null || _name$toLowerCase === void 0 || (_name$toLowerCase$spl = _name$toLowerCase.split) === null || _name$toLowerCase$spl === void 0 || (_name$toLowerCase$spl = _name$toLowerCase$spl.call(_name$toLowerCase, ' ')) === null || _name$toLowerCase$spl === void 0 || (_name$toLowerCase$spl2 = _name$toLowerCase$spl.join) === null || _name$toLowerCase$spl2 === void 0 ? void 0 : _name$toLowerCase$spl2.call(_name$toLowerCase$spl, '_'), "_").concat(category);
|
|
34
37
|
const deleteButtonTippyRef = useRef(null);
|
|
35
38
|
const editButtonTippyRef = useRef(null);
|
|
@@ -57,12 +60,14 @@ const ExpandedPanelContentCategoryItemContainer = _ref => {
|
|
|
57
60
|
handleDeleteFilterGrouping: onDeleteFilterGrouping ? () => onDeleteFilterGrouping(filter) : undefined,
|
|
58
61
|
handleEditFilterGrouping: onEditFilterGrouping ? () => onEditFilterGrouping(filter) : undefined,
|
|
59
62
|
handleSelectFilter: handleSelectFilters,
|
|
63
|
+
hasInvalidParams: resolvedHasInvalidParams,
|
|
60
64
|
id: id,
|
|
61
65
|
name: name,
|
|
62
66
|
openItemDescription: handleOpenItemDescription,
|
|
63
67
|
pinned: pinned,
|
|
64
68
|
position: position,
|
|
65
|
-
|
|
69
|
+
showActionsOnPinned: showActionsOnPinned,
|
|
70
|
+
selected: (selectedFilter === null || selectedFilter === void 0 ? void 0 : selectedFilter.id) != null && selectedFilter.id === (filter === null || filter === void 0 ? void 0 : filter.id) && selectedFilter.category === (filter === null || filter === void 0 ? void 0 : filter.category)
|
|
66
71
|
});
|
|
67
72
|
};
|
|
68
73
|
ExpandedPanelContentCategoryItemContainer.propTypes = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { bool, func, object, string } from 'prop-types';
|
|
2
|
+
import { bool, func, object, oneOfType, shape, string } from 'prop-types';
|
|
3
3
|
import UTButton from '../../../../../../../../../UTButton';
|
|
4
4
|
import UTIcon from '../../../../../../../../../UTIcon';
|
|
5
5
|
import UTLabel from '../../../../../../../../../UTLabel';
|
|
@@ -27,13 +27,19 @@ const ExpandedPanelContentCategoryItem = _ref => {
|
|
|
27
27
|
handleDeleteFilterGrouping,
|
|
28
28
|
handleEditFilterGrouping,
|
|
29
29
|
handleSelectFilter,
|
|
30
|
+
hasInvalidParams,
|
|
30
31
|
id,
|
|
31
32
|
name,
|
|
32
33
|
openItemDescription,
|
|
33
34
|
pinned,
|
|
34
35
|
position,
|
|
35
|
-
selected
|
|
36
|
+
selected,
|
|
37
|
+
showActionsOnPinned
|
|
36
38
|
} = _ref;
|
|
39
|
+
const isInvalidParamsObject = typeof hasInvalidParams === 'object';
|
|
40
|
+
const invalidIconName = (isInvalidParamsObject ? hasInvalidParams === null || hasInvalidParams === void 0 ? void 0 : hasInvalidParams.iconName : null) || 'IconAlertTriangle';
|
|
41
|
+
const invalidIconSize = (isInvalidParamsObject ? hasInvalidParams === null || hasInvalidParams === void 0 ? void 0 : hasInvalidParams.size : null) || '16';
|
|
42
|
+
const invalidTooltipText = isInvalidParamsObject ? hasInvalidParams === null || hasInvalidParams === void 0 ? void 0 : hasInvalidParams.tooltipText : undefined;
|
|
37
43
|
return /*#__PURE__*/React.createElement("article", {
|
|
38
44
|
className: "".concat(classes.expandedPanelContentCategoryItem, " ").concat(selected ? classes.expandedPanelContentCategoryItemSelected : ''),
|
|
39
45
|
id: id
|
|
@@ -56,7 +62,25 @@ const ExpandedPanelContentCategoryItem = _ref => {
|
|
|
56
62
|
className: classes.expandedPanelContentCategoryItemTitleLabel,
|
|
57
63
|
colorTheme: selected ? 'accent' : undefined,
|
|
58
64
|
shade: selected ? '05' : undefined
|
|
59
|
-
}, name))
|
|
65
|
+
}, name)), hasInvalidParams && (invalidTooltipText ? /*#__PURE__*/React.createElement(UTTooltip, {
|
|
66
|
+
content: invalidTooltipText,
|
|
67
|
+
tippyProps: {
|
|
68
|
+
appendTo: () => document.body,
|
|
69
|
+
placement: 'top'
|
|
70
|
+
}
|
|
71
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
72
|
+
className: classes.hasInvalidParamsTooltipContainer
|
|
73
|
+
}, /*#__PURE__*/React.createElement(UTIcon, {
|
|
74
|
+
colorTheme: "warning",
|
|
75
|
+
dataTestId: "".concat(dataTestId, ".").concat(ID_CONSTANTS.INVALID_PARAMS),
|
|
76
|
+
name: invalidIconName,
|
|
77
|
+
size: invalidIconSize
|
|
78
|
+
}))) : /*#__PURE__*/React.createElement(UTIcon, {
|
|
79
|
+
colorTheme: "warning",
|
|
80
|
+
dataTestId: "".concat(dataTestId, ".").concat(ID_CONSTANTS.INVALID_PARAMS),
|
|
81
|
+
name: invalidIconName,
|
|
82
|
+
size: invalidIconSize
|
|
83
|
+
}))), (!pinned || showActionsOnPinned) && (handleEditFilterGrouping || handleDeleteFilterGrouping) && /*#__PURE__*/React.createElement("section", {
|
|
60
84
|
className: classes.expandedPanelContentCategoryItemActionsContainer,
|
|
61
85
|
onAnimationEnd: animationEnd
|
|
62
86
|
}, handleEditFilterGrouping && /*#__PURE__*/React.createElement(UTTooltip, {
|
|
@@ -111,11 +135,17 @@ ExpandedPanelContentCategoryItem.propTypes = {
|
|
|
111
135
|
handleDeleteFilterGrouping: func,
|
|
112
136
|
handleEditFilterGrouping: func,
|
|
113
137
|
handleSelectFilter: func,
|
|
138
|
+
hasInvalidParams: oneOfType([bool, shape({
|
|
139
|
+
iconName: string,
|
|
140
|
+
size: string,
|
|
141
|
+
tooltipText: string
|
|
142
|
+
})]),
|
|
114
143
|
id: string,
|
|
115
144
|
name: string,
|
|
116
145
|
openItemDescription: func,
|
|
117
146
|
pinned: bool,
|
|
118
147
|
position: string,
|
|
119
|
-
selected: bool
|
|
148
|
+
selected: bool,
|
|
149
|
+
showActionsOnPinned: bool
|
|
120
150
|
};
|
|
121
151
|
export default ExpandedPanelContentCategoryItem;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext, useRef, useState } from 'react';
|
|
1
|
+
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { string } from 'prop-types';
|
|
3
3
|
import UTShortcutPanelContext from '../../../../../../context';
|
|
4
4
|
import { handleAnimationEnd } from '../../../../../../utils';
|
|
@@ -24,6 +24,7 @@ const ExpandedPanelContentHeaderContainer = _ref => {
|
|
|
24
24
|
hideAddFilterButton,
|
|
25
25
|
panelTitle,
|
|
26
26
|
position,
|
|
27
|
+
searchResetTrigger,
|
|
27
28
|
searchValue,
|
|
28
29
|
tooltipsContentMap: {
|
|
29
30
|
collapseButton,
|
|
@@ -31,6 +32,9 @@ const ExpandedPanelContentHeaderContainer = _ref => {
|
|
|
31
32
|
}
|
|
32
33
|
} = useContext(UTShortcutPanelContext);
|
|
33
34
|
const [searchOpen, setSearchOpen] = useState(false);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (searchResetTrigger > 0) setSearchOpen(false);
|
|
37
|
+
}, [searchResetTrigger]);
|
|
34
38
|
const handleSearchToggle = () => {
|
|
35
39
|
handleFilterGroupSearch('');
|
|
36
40
|
setSearchOpen(!searchOpen);
|
|
@@ -20,6 +20,7 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
20
20
|
handleSelectFilter,
|
|
21
21
|
hideAddFilterButton = false,
|
|
22
22
|
iconProps,
|
|
23
|
+
invalidParamsConfig,
|
|
23
24
|
noFiltersText,
|
|
24
25
|
noFiltersTitle,
|
|
25
26
|
onDeleteFilterGrouping,
|
|
@@ -28,6 +29,8 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
28
29
|
panelTitle,
|
|
29
30
|
position = PANEL_POSITIONS.LEFT,
|
|
30
31
|
scrollProps,
|
|
32
|
+
searchResetKey,
|
|
33
|
+
showActionsOnPinned = false,
|
|
31
34
|
selectedFilter,
|
|
32
35
|
startOpen = false,
|
|
33
36
|
tooltipsContentMap = {}
|
|
@@ -36,6 +39,7 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
36
39
|
const containerRef = useRef(null);
|
|
37
40
|
const [open, setOpen] = useState(startOpen);
|
|
38
41
|
const [filteredValues, setFilteredValues] = useState(false);
|
|
42
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
39
43
|
const handleTogglePanel = () => {
|
|
40
44
|
setOpen(!open);
|
|
41
45
|
onTogglePanel === null || onTogglePanel === void 0 || onTogglePanel(!open);
|
|
@@ -44,8 +48,8 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
44
48
|
|
|
45
49
|
// TODO: desarrollo en otro PR
|
|
46
50
|
const handleAddFilterGroup = () => {};
|
|
47
|
-
const
|
|
48
|
-
const filteredResults =
|
|
51
|
+
const applySearch = (value, source) => {
|
|
52
|
+
const filteredResults = source.map(category => {
|
|
49
53
|
const filters = category.filters.filter(filter => filter.name.toLowerCase().includes(value.toLowerCase()));
|
|
50
54
|
return {
|
|
51
55
|
...category,
|
|
@@ -55,6 +59,10 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
55
59
|
setFilteredCategories(filteredResults);
|
|
56
60
|
setFilteredValues(Boolean(value));
|
|
57
61
|
};
|
|
62
|
+
const handleFilterGroupSearch = value => {
|
|
63
|
+
setSearchTerm(value);
|
|
64
|
+
applySearch(value, categories);
|
|
65
|
+
};
|
|
58
66
|
const [popperState, setPopperState] = useState({});
|
|
59
67
|
const openPopper = _ref2 => {
|
|
60
68
|
let {
|
|
@@ -74,8 +82,19 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
74
82
|
setPopperState({});
|
|
75
83
|
};
|
|
76
84
|
useEffect(() => {
|
|
77
|
-
|
|
85
|
+
if (searchTerm) {
|
|
86
|
+
applySearch(searchTerm, categories);
|
|
87
|
+
} else {
|
|
88
|
+
setFilteredCategories(categories);
|
|
89
|
+
}
|
|
78
90
|
}, [categories]);
|
|
91
|
+
const [searchResetTrigger, setSearchResetTrigger] = useState(0);
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
setSearchTerm('');
|
|
94
|
+
setFilteredValues(false);
|
|
95
|
+
setFilteredCategories(categories);
|
|
96
|
+
setSearchResetTrigger(prev => prev + 1);
|
|
97
|
+
}, [searchResetKey]);
|
|
79
98
|
const contextValue = useMemo(() => ({
|
|
80
99
|
categories: filteredCategories,
|
|
81
100
|
categoriesConfig,
|
|
@@ -90,6 +109,7 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
90
109
|
handleTogglePanel,
|
|
91
110
|
hideAddFilterButton,
|
|
92
111
|
iconProps,
|
|
112
|
+
invalidParamsConfig,
|
|
93
113
|
noFiltersText,
|
|
94
114
|
noFiltersTitle,
|
|
95
115
|
onDeleteFilterGrouping,
|
|
@@ -100,10 +120,12 @@ const UTShortcutPanelContainer = _ref => {
|
|
|
100
120
|
popperState,
|
|
101
121
|
position,
|
|
102
122
|
scrollProps,
|
|
123
|
+
searchResetTrigger,
|
|
103
124
|
selectedFilter,
|
|
125
|
+
showActionsOnPinned,
|
|
104
126
|
theme,
|
|
105
127
|
tooltipsContentMap
|
|
106
|
-
}), [categories, categoriesConfig, classes, disableCollapsibleCategories, filteredCategories, filteredValues, hideAddFilterButton, iconProps, noFiltersText, noFiltersTitle, onDeleteFilterGrouping, onEditFilterGrouping, open, popperState, position, scrollProps, selectedFilter, theme, tooltipsContentMap]);
|
|
128
|
+
}), [categories, categoriesConfig, classes, disableCollapsibleCategories, filteredCategories, filteredValues, hideAddFilterButton, iconProps, invalidParamsConfig, noFiltersText, noFiltersTitle, onDeleteFilterGrouping, onEditFilterGrouping, showActionsOnPinned, open, popperState, position, scrollProps, searchResetTrigger, selectedFilter, theme, tooltipsContentMap]);
|
|
107
129
|
return /*#__PURE__*/React.createElement(UTShortcutPanelContext.Provider, {
|
|
108
130
|
value: contextValue
|
|
109
131
|
}, /*#__PURE__*/React.createElement("section", {
|
|
@@ -153,14 +175,21 @@ UTShortcutPanelContainer.propTypes = {
|
|
|
153
175
|
handleSelectFilter: func,
|
|
154
176
|
hideAddFilterButton: bool,
|
|
155
177
|
iconProps: iconPropTypes,
|
|
178
|
+
invalidParamsConfig: shape({
|
|
179
|
+
iconName: string,
|
|
180
|
+
size: string,
|
|
181
|
+
tooltipText: string
|
|
182
|
+
}),
|
|
156
183
|
noFiltersText: string,
|
|
157
184
|
noFiltersTitle: string,
|
|
158
185
|
onDeleteFilterGrouping: func,
|
|
159
186
|
onEditFilterGrouping: func,
|
|
160
187
|
onTogglePanel: func,
|
|
188
|
+
showActionsOnPinned: bool,
|
|
161
189
|
panelTitle: string,
|
|
162
190
|
position: string,
|
|
163
191
|
scrollProps: object,
|
|
192
|
+
searchResetKey: string,
|
|
164
193
|
selectedFilter: shape({
|
|
165
194
|
id: number,
|
|
166
195
|
name: string,
|
|
@@ -24,6 +24,7 @@ export default {
|
|
|
24
24
|
handleSelectFilter: fn(),
|
|
25
25
|
hideAddFilterButton: false,
|
|
26
26
|
iconProps: undefined,
|
|
27
|
+
invalidParamsConfig: undefined,
|
|
27
28
|
noFiltersTitle: data.NO_FILTERS_TITLE,
|
|
28
29
|
noFiltersText: data.NO_FILTERS_TEXT,
|
|
29
30
|
onDeleteFilterGrouping: fn(),
|
|
@@ -31,8 +32,10 @@ export default {
|
|
|
31
32
|
onTogglePanel: fn(),
|
|
32
33
|
panelTitle: data.PANEL_TITLE,
|
|
33
34
|
position: data.POSITION,
|
|
35
|
+
searchResetKey: undefined,
|
|
34
36
|
selectedFilter: undefined,
|
|
35
37
|
scrollProps: undefined,
|
|
38
|
+
showActionsOnPinned: false,
|
|
36
39
|
startOpen: true,
|
|
37
40
|
tooltipsContentMap: data.TOOLTIPS_CONTENT_MAP
|
|
38
41
|
},
|
|
@@ -174,6 +177,18 @@ export default {
|
|
|
174
177
|
}
|
|
175
178
|
}
|
|
176
179
|
},
|
|
180
|
+
invalidParamsConfig: {
|
|
181
|
+
control: 'object',
|
|
182
|
+
description: 'Configuración del ícono de advertencia que se muestra en ítems con `hasInvalidParams: true`. Si se pasa `tooltipText`, el ícono muestra un tooltip al hacer hover. `iconName` e `size` son opcionales (defaults: `IconAlertTriangle`, `16`).',
|
|
183
|
+
table: {
|
|
184
|
+
defaultValue: {
|
|
185
|
+
summary: 'undefined'
|
|
186
|
+
},
|
|
187
|
+
type: {
|
|
188
|
+
summary: '{ iconName?: string; size?: string; tooltipText?: string }'
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
177
192
|
noFiltersTitle: {
|
|
178
193
|
control: 'text',
|
|
179
194
|
description: 'Título para el componente de filtros vacíos.',
|
|
@@ -271,6 +286,18 @@ export default {
|
|
|
271
286
|
}
|
|
272
287
|
}
|
|
273
288
|
},
|
|
289
|
+
searchResetKey: {
|
|
290
|
+
control: 'text',
|
|
291
|
+
description: 'Cuando cambia de valor, resetea el estado de búsqueda interna del panel. Útil para limpiar el input al cambiar de tab o categoría.',
|
|
292
|
+
table: {
|
|
293
|
+
defaultValue: {
|
|
294
|
+
summary: 'undefined'
|
|
295
|
+
},
|
|
296
|
+
type: {
|
|
297
|
+
summary: 'string | number'
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
},
|
|
274
301
|
selectedFilter: {
|
|
275
302
|
control: 'none',
|
|
276
303
|
description: 'Filtro seleccionado.',
|
|
@@ -283,6 +310,18 @@ export default {
|
|
|
283
310
|
}
|
|
284
311
|
}
|
|
285
312
|
},
|
|
313
|
+
showActionsOnPinned: {
|
|
314
|
+
control: 'boolean',
|
|
315
|
+
description: 'Si es `true`, los botones de editar y eliminar se muestran también en ítems con `pinned: true`. Por defecto son ocultados en filtros pinned.',
|
|
316
|
+
table: {
|
|
317
|
+
defaultValue: {
|
|
318
|
+
summary: 'false'
|
|
319
|
+
},
|
|
320
|
+
type: {
|
|
321
|
+
summary: 'boolean'
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
},
|
|
286
325
|
startOpen: {
|
|
287
326
|
control: 'boolean',
|
|
288
327
|
description: 'Indica si el panel se renderiza abierto.',
|
|
@@ -65,7 +65,16 @@
|
|
|
65
65
|
},
|
|
66
66
|
"backoffice_user_id": {
|
|
67
67
|
"type": ["string", "null"],
|
|
68
|
-
"description": "ID
|
|
68
|
+
"description": "ID del agente propietario del filtro."
|
|
69
|
+
},
|
|
70
|
+
"filter_type": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"enum": ["private", "supervisor"],
|
|
73
|
+
"description": "Tipo de filtro: 'private' (solo visible para el creador) o 'supervisor' (visible para todos, implica pinned: true)."
|
|
74
|
+
},
|
|
75
|
+
"hasInvalidParams": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"description": "Cuando es true, el ítem muestra el ícono de advertencia. El ícono, su tamaño y el tooltip se configuran desde la prop invalidParamsConfig del panel (defaults: IconAlertTriangle, size 16, sin tooltip). Se computa en el selector makeSelectFilterCategoriesWithValidation."
|
|
69
78
|
},
|
|
70
79
|
"filter_params": {
|
|
71
80
|
"type": "array",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
%actionsContainer {
|
|
14
|
-
animation-fill-mode: forwards;
|
|
15
14
|
display: none;
|
|
16
15
|
}
|
|
17
16
|
|
|
@@ -190,8 +189,12 @@
|
|
|
190
189
|
overflow: hidden;
|
|
191
190
|
|
|
192
191
|
.hoverableContainer {
|
|
193
|
-
|
|
194
|
-
overflow: hidden;
|
|
192
|
+
flex-grow: 1;
|
|
193
|
+
overflow: hidden;
|
|
194
|
+
|
|
195
|
+
&:first-child {
|
|
196
|
+
padding-left: var(--UT-shortcutPanel-item-no-icon-padding-left, 4px);
|
|
197
|
+
}
|
|
195
198
|
}
|
|
196
199
|
}
|
|
197
200
|
|
|
@@ -203,6 +206,11 @@
|
|
|
203
206
|
@extend %actionsContainer;
|
|
204
207
|
}
|
|
205
208
|
|
|
209
|
+
.hasInvalidParamsTooltipContainer {
|
|
210
|
+
align-items: center;
|
|
211
|
+
display: flex;
|
|
212
|
+
}
|
|
213
|
+
|
|
206
214
|
.expandedPanelContentCategoryItemTitleContainerSelected {
|
|
207
215
|
cursor: default;
|
|
208
216
|
}
|