@gooddata/sdk-ui-filters 11.22.0-alpha.4 → 11.22.0-alpha.5
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/esm/FilterGroup/FilterGroup.d.ts.map +1 -1
- package/esm/FilterGroup/FilterGroup.js +14 -54
- package/esm/FilterGroup/FilterGroup.js.map +1 -1
- package/esm/FilterGroup/useFilterGroupStatus.d.ts +6 -16
- package/esm/FilterGroup/useFilterGroupStatus.d.ts.map +1 -1
- package/esm/FilterGroup/useFilterGroupStatus.js +10 -33
- package/esm/FilterGroup/useFilterGroupStatus.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterGroup.d.ts","sourceRoot":"","sources":["../../src/FilterGroup/FilterGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAGlB,KAAK,YAAY,EACjB,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"FilterGroup.d.ts","sourceRoot":"","sources":["../../src/FilterGroup/FilterGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAGlB,KAAK,YAAY,EACjB,KAAK,SAAS,EAKjB,MAAM,OAAO,CAAC;AAqBf,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAWnF;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,mBAAmB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3C,mBAAmB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAC5C,iBAAiB,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAClF,YAAY,EAAE,CACV,MAAM,EAAE,CAAC,EACT,wBAAwB,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,KAC9D,YAAY,CAAC;CACrB;AA0BD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CA0MzD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAQ/D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2007-2026 GoodData Corporation
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useMemo, useRef, useState, } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { isEqual } from "lodash-es";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
@@ -45,11 +45,8 @@ export function FilterGroup(props) {
|
|
|
45
45
|
// we need to stabilize this, otherwise it will cause unnecessary re-renders of dropdown
|
|
46
46
|
// which will cause unexpected closing of dropdown content
|
|
47
47
|
const availableFilterIdentifiers = useDeepEqualRefStablizer(filtersIdentifiersUnstable);
|
|
48
|
-
const {
|
|
48
|
+
const { isAnyFilterError, setFilterError } = useFilterGroupStatus(availableFilterIdentifiers);
|
|
49
49
|
const subtitle = useMemo(() => {
|
|
50
|
-
if (isAnyFilterLoading) {
|
|
51
|
-
return intl.formatMessage({ id: "loading" });
|
|
52
|
-
}
|
|
53
50
|
if (isAnyFilterError) {
|
|
54
51
|
return intl.formatMessage({ id: "gs.list.notAvailableAbbreviation" });
|
|
55
52
|
}
|
|
@@ -59,26 +56,10 @@ export function FilterGroup(props) {
|
|
|
59
56
|
return intl.formatMessage({ id: "gs.list.allAndCount" }, { count: filters.length });
|
|
60
57
|
}
|
|
61
58
|
else {
|
|
62
|
-
|
|
63
|
-
.map((filter) => getFilterStatus(getFilterIdentifier(filter))?.attribute?.title)
|
|
64
|
-
.filter((title) => !!title)
|
|
65
|
-
.join(", ");
|
|
66
|
-
return `${listOfTitles} (${activeFiltersCount}/${availableFilterIdentifiers.length})`;
|
|
59
|
+
return `(${activeFiltersCount}/${availableFilterIdentifiers.length})`;
|
|
67
60
|
}
|
|
68
|
-
}, [
|
|
69
|
-
filters,
|
|
70
|
-
isAnyFilterError,
|
|
71
|
-
isAnyFilterLoading,
|
|
72
|
-
getFilterStatus,
|
|
73
|
-
hasSelectedElements,
|
|
74
|
-
intl,
|
|
75
|
-
availableFilterIdentifiers,
|
|
76
|
-
getFilterIdentifier,
|
|
77
|
-
]);
|
|
61
|
+
}, [filters, isAnyFilterError, hasSelectedElements, intl, availableFilterIdentifiers]);
|
|
78
62
|
const { selectedItemsCount, totalItemsCount } = useMemo(() => {
|
|
79
|
-
if (isAnyFilterLoading) {
|
|
80
|
-
return {};
|
|
81
|
-
}
|
|
82
63
|
if (isAnyFilterError) {
|
|
83
64
|
return {};
|
|
84
65
|
}
|
|
@@ -90,17 +71,13 @@ export function FilterGroup(props) {
|
|
|
90
71
|
else {
|
|
91
72
|
return { selectedItemsCount: activeFiltersCount, totalItemsCount: filters.length };
|
|
92
73
|
}
|
|
93
|
-
}, [filters, isAnyFilterError,
|
|
74
|
+
}, [filters, isAnyFilterError, hasSelectedElements]);
|
|
94
75
|
const errorHandler = useCallback((filterIdentifier) => (error) => {
|
|
95
|
-
|
|
96
|
-
}, [
|
|
97
|
-
const initLoadingChangedHandler = useCallback((filterIdentifier) => (loading
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
error: loading ? null : undefined,
|
|
101
|
-
attribute,
|
|
102
|
-
});
|
|
103
|
-
}, [setFilterStatus]);
|
|
76
|
+
setFilterError(filterIdentifier, error);
|
|
77
|
+
}, [setFilterError]);
|
|
78
|
+
const initLoadingChangedHandler = useCallback((filterIdentifier) => (loading) => {
|
|
79
|
+
setFilterError(filterIdentifier, loading ? null : undefined);
|
|
80
|
+
}, [setFilterError]);
|
|
104
81
|
/**
|
|
105
82
|
* We need to create a stable component type for each filter identifier.
|
|
106
83
|
* Not passing an inline component type created during render. It could cause a loop of re-renders.
|
|
@@ -113,12 +90,9 @@ export function FilterGroup(props) {
|
|
|
113
90
|
}
|
|
114
91
|
function AttributeFilterComponent(attributeFilterProps) {
|
|
115
92
|
const onError = useCallback((error) => errorHandler(filterIdentifier)(error), []);
|
|
116
|
-
const onInitLoadingChanged = useCallback((loading
|
|
117
|
-
initLoadingChangedHandler(filterIdentifier)(loading
|
|
93
|
+
const onInitLoadingChanged = useCallback((loading) => {
|
|
94
|
+
initLoadingChangedHandler(filterIdentifier)(loading);
|
|
118
95
|
}, []);
|
|
119
|
-
useEffect(() => () =>
|
|
120
|
-
// stop loading on unmount
|
|
121
|
-
setFilterStatus(filterIdentifier, { loading: false }), []);
|
|
122
96
|
return (_jsx(AttributeFilterButton, { ...attributeFilterProps, alignPoints: ITEM_ALIGN_POINTS, onError: onError, onInitLoadingChanged: onInitLoadingChanged, DropdownButtonComponent: (props) => {
|
|
123
97
|
const titleExtension = getTitleExtension?.(filterIdentifier, props.title);
|
|
124
98
|
const CustomDropdownButtonComponent = attributeFilterProps.DropdownButtonComponent ?? FilterGroupItem;
|
|
@@ -135,13 +109,7 @@ export function FilterGroup(props) {
|
|
|
135
109
|
result.set(filterIdentifier, AttributeFilterComponent);
|
|
136
110
|
});
|
|
137
111
|
return result;
|
|
138
|
-
}, [
|
|
139
|
-
availableFilterIdentifiers,
|
|
140
|
-
getTitleExtension,
|
|
141
|
-
errorHandler,
|
|
142
|
-
initLoadingChangedHandler,
|
|
143
|
-
setFilterStatus,
|
|
144
|
-
]);
|
|
112
|
+
}, [availableFilterIdentifiers, getTitleExtension, errorHandler, initLoadingChangedHandler]);
|
|
145
113
|
const renderItem = useCallback(({ item }) => {
|
|
146
114
|
const identifier = getFilterIdentifier(item);
|
|
147
115
|
const AttributeFilterComponent = attributeFilterComponentsByIdentifier.get(identifier);
|
|
@@ -155,15 +123,7 @@ export function FilterGroup(props) {
|
|
|
155
123
|
}, []);
|
|
156
124
|
const renderBody = useCallback(({ isMobile }) => (_jsx("div", { onKeyDown: handleKeyDown, children: _jsx(DropdownList, { className: "gd-filter-group-body", items: filters, maxHeight: 450, itemHeight: 53, renderItem: renderItem, isMobile: isMobile }) })), [filters, renderItem, handleKeyDown]);
|
|
157
125
|
const isMobile = useMediaQuery("mobileDevice");
|
|
158
|
-
const renderButton = useCallback(({ toggleDropdown, isOpen, buttonRef, dropdownId }) => (_jsx("div", { className: cx({ "gd-is-mobile": isMobile && isOpen }), children: _jsx(AttributeFilterDropdownButton, { title: title, subtitle: subtitle, isLoaded: !
|
|
159
|
-
title,
|
|
160
|
-
subtitle,
|
|
161
|
-
isAnyFilterLoading,
|
|
162
|
-
isAnyFilterError,
|
|
163
|
-
selectedItemsCount,
|
|
164
|
-
totalItemsCount,
|
|
165
|
-
isMobile,
|
|
166
|
-
]);
|
|
126
|
+
const renderButton = useCallback(({ toggleDropdown, isOpen, buttonRef, dropdownId }) => (_jsx("div", { className: cx({ "gd-is-mobile": isMobile && isOpen }), children: _jsx(AttributeFilterDropdownButton, { title: title, subtitle: subtitle, isLoaded: !isAnyFilterError, isOpen: isOpen, selectedItemsCount: selectedItemsCount, totalItemsCount: totalItemsCount, showSelectionCount: selectedItemsCount !== undefined || totalItemsCount !== undefined, icon: _jsx(UiIcon, { type: "folder", size: 12, color: "currentColor" }), dropdownId: dropdownId, buttonRef: buttonRef, onClick: toggleDropdown, isError: isAnyFilterError }) })), [title, subtitle, isAnyFilterError, selectedItemsCount, totalItemsCount, isMobile]);
|
|
167
127
|
return (_jsx(Dropdown, { isOpen: isOpen, className: "gd-filter-group", closeOnParentScroll: true, closeOnMouseDrag: true, closeOnOutsideClick: true, closeOnEscape: true, ignoreClicksOnByClass: IGNORE_CLICKS_ON_BY_CLASS, enableEventPropagation: true, alignPoints: GROUP_ALIGN_POINTS, fullscreenOnMobile: true, autofocusOnOpen: true, renderButton: renderButton, renderBody: renderBody, onOpenStateChanged: setIsOpen }));
|
|
168
128
|
}
|
|
169
129
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterGroup.js","sourceRoot":"","sources":["../../src/FilterGroup/FilterGroup.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAMH,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"FilterGroup.js","sourceRoot":"","sources":["../../src/FilterGroup/FilterGroup.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAMH,WAAW,EACX,OAAO,EACP,MAAM,EACN,QAAQ,GACX,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,eAAe,EAIf,MAAM,EACN,UAAU,EACV,UAAU,EACV,aAAa,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,+EAA+E,CAAC;AAC9H,OAAO,EAAE,gCAAgC,EAAE,MAAM,kFAAkF,CAAC;AACpI,OAAO,EACH,0CAA0C,EAC1C,oCAAoC,EACpC,sCAAsC,GACzC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AAiBjG,MAAM,kBAAkB,GAAkB;IACtC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1C,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1C,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1C,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;CAC7C,CAAC;AAEF,MAAM,iBAAiB,GAAkB;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC5C,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAC3C,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1C,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;CAC7C,CAAC;AAEF;;;GAGG;AACH,MAAM,yBAAyB,GAAG;IAC9B,oCAAoC;IACpC,0CAA0C;IAC1C,sCAAsC;CACzC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAI,KAA2B,EAAE;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAC/F,KAAK,CAAC;IACV,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,0BAA0B,GAAG,OAAO,CACtC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EACtC,CAAC,OAAO,EAAE,mBAAmB,CAAC,CACjC,CAAC;IACF,wFAAwF;IACxF,0DAA0D;IAC1D,MAAM,0BAA0B,GAAG,wBAAwB,CAAC,0BAA0B,CAAC,CAAC;IAExF,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;IAE9F,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,gBAAgB,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,kCAAkC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC;QAChD,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,kBAAkB,IAAI,0BAA0B,CAAC,MAAM,GAAG,CAAC;QAC1E,CAAC;IAAA,CACJ,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAEvF,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,GAGtD,EAAE,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC;QAChD,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACvF,CAAC;IAAA,CACJ,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,gBAAwB,EAAE,EAAE,CAAC,CAAC,KAAuB,EAAE,EAAE,CAAC;QACvD,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAAA,CAC3C,EACD,CAAC,cAAc,CAAC,CACnB,CAAC;IAEF,MAAM,yBAAyB,GAAG,WAAW,CACzC,CAAC,gBAAwB,EAAE,EAAE,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC;QAChD,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAAA,CAChE,EACD,CAAC,cAAc,CAAC,CACnB,CAAC;IAEF;;;OAGG;IACH,MAAM,qCAAqC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgD,CAAC;QAEvE,0BAA0B,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/B,OAAO;YACX,CAAC;YAED,SAAS,wBAAwB,CAAC,oBAA2C,EAAE;gBAC3E,MAAM,OAAO,GAAG,WAAW,CACvB,CAAC,KAAuB,EAAE,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAClE,EAAE,CACL,CAAC;gBACF,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC;oBAC3D,yBAAyB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;gBAAA,CACxD,EAAE,EAAE,CAAC,CAAC;gBACP,OAAO,CACH,KAAC,qBAAqB,OACd,oBAAoB,EACxB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,oBAAoB,EAC1C,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;wBAChC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC1E,MAAM,6BAA6B,GAC/B,oBAAoB,CAAC,uBAAuB,IAAI,eAAe,CAAC;wBACpE,OAAO,CACH,KAAC,6BAA6B,OACtB,KAAK,EACT,cAAc,EACV,8BACK,KAAK,CAAC,cAAc,EACpB,cAAc,EACf,KAAC,sBAAsB,IACnB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B;oCACH,GAET,CACL,CAAC;oBAAA,CACL,EACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,IAAC,SAAS,SAAG,EACrD,cAAc,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,IAAC,OAAO,SAAG,EACjD,0BAA0B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CACnC,KAAC,gCAAgC,OACzB,KAAK,EACT,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;4BACd,qDAAqD;4BACrD,8DAA8D;4BAC9D,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gCAChB,CAAC,CAAC,eAAe,EAAE,CAAC;4BACxB,CAAC;wBAAA,CACJ,GACH,CACL,GACH,CACL,CAAC;YAAA,CACL;YAED,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;QAAA,CAC1D,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAAA,CACjB,EAAE,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,YAAY,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAE7F,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,EAAE,IAAI,EAAe,EAAE,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,wBAAwB,GAAG,qCAAqC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvF,OAAO,YAAY,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IAAA,CACvD,EACD,CAAC,qCAAqC,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAC7E,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAAuC,CAAC,CAAgB,EAAE,EAAE,CAAC;QAC1F,4CAA4C;QAC5C,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,CAAC,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC;IAAA,CACJ,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,EAAE,QAAQ,EAA4B,EAAE,EAAE,CAAC,CACxC,cAAK,SAAS,EAAE,aAAa,YACzB,KAAC,YAAY,IACT,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,GAAG,EACd,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,GACpB,GACA,CACT,EACD,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CACvC,CAAC;IAEF,MAAM,QAAQ,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAA8B,EAAE,EAAE,CAAC,CAC/E,cAAK,SAAS,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,QAAQ,IAAI,MAAM,EAAE,CAAC,YACtD,KAAC,6BAA6B,IAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,gBAAgB,EAC3B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,EACrF,IAAI,EAAE,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,cAAc,GAAG,EAC7D,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,gBAAgB,GAC3B,GACA,CACT,EACD,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,CAAC,CACrF,CAAC;IAEF,OAAO,CACH,KAAC,QAAQ,IACL,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,iBAAiB,EAC3B,mBAAmB,QACnB,gBAAgB,QAChB,mBAAmB,QACnB,aAAa,QACb,qBAAqB,EAAE,yBAAyB,EAChD,sBAAsB,QACtB,WAAW,EAAE,kBAAkB,EAC/B,kBAAkB,QAClB,eAAe,QACf,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,SAAS,GAC/B,CACL,CAAC;AAAA,CACL;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAI,aAAgB,EAAK;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAI,aAAa,CAAC,CAAC;IAC3C,wEAAwE;IACxE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;QACrC,SAAS,CAAC,OAAO,GAAG,aAAa,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,CAAC;AAAA,CAC5B"}
|
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
import { type IAttributeMetadataObject } from "@gooddata/sdk-model";
|
|
2
1
|
import { type GoodDataSdkError } from "@gooddata/sdk-ui";
|
|
3
|
-
export
|
|
4
|
-
loading?: boolean;
|
|
5
|
-
error?: GoodDataSdkError | null;
|
|
6
|
-
attribute?: IAttributeMetadataObject;
|
|
7
|
-
}
|
|
8
|
-
export type FiltersStatus = Record<string, IFilterStatus>;
|
|
2
|
+
export type FilterErrors = Record<string, GoodDataSdkError | null>;
|
|
9
3
|
/**
|
|
10
|
-
* Type for the
|
|
11
|
-
* It updates the status for given filter. If
|
|
12
|
-
*
|
|
13
|
-
* Only defined properties of status are updated in state.
|
|
14
|
-
* If some of the status properties are not provided, they kept their previous values in state.
|
|
4
|
+
* Type for the setFilterError function.
|
|
5
|
+
* It updates the error status for given filter. If status is not provided, it keeps the previous value in state.
|
|
6
|
+
* providing null will clear the error status for the filter.
|
|
15
7
|
*/
|
|
16
|
-
export type
|
|
8
|
+
export type SetFilterError = (filterIdentifier: string | undefined, status?: GoodDataSdkError | null) => void;
|
|
17
9
|
export interface IUseFilterGroupStatus {
|
|
18
|
-
|
|
19
|
-
getFilterStatus: (filterIdentifier: string) => IFilterStatus | undefined;
|
|
20
|
-
isAnyFilterLoading: boolean;
|
|
10
|
+
setFilterError: SetFilterError;
|
|
21
11
|
isAnyFilterError: boolean;
|
|
22
12
|
}
|
|
23
13
|
export declare const useFilterGroupStatus: (availableFilterIdentifiers: string[]) => IUseFilterGroupStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterGroupStatus.d.ts","sourceRoot":"","sources":["../../src/FilterGroup/useFilterGroupStatus.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"useFilterGroupStatus.d.ts","sourceRoot":"","sources":["../../src/FilterGroup/useFilterGroupStatus.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;AAE9G,MAAM,WAAW,qBAAqB;IAClC,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,oBAAoB,iEAqChC,CAAC"}
|
|
@@ -1,50 +1,27 @@
|
|
|
1
1
|
// (C) 2007-2026 GoodData Corporation
|
|
2
2
|
import { useCallback, useMemo, useState } from "react";
|
|
3
3
|
export const useFilterGroupStatus = (availableFilterIdentifiers) => {
|
|
4
|
-
const [
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
loading: false,
|
|
9
|
-
error: null,
|
|
10
|
-
attribute: undefined,
|
|
11
|
-
},
|
|
12
|
-
]), [availableFilterIdentifiers, filtersStatus]);
|
|
13
|
-
const availableStatuses = useMemo(() => Object.fromEntries(availableStatusesEntries), [availableStatusesEntries]);
|
|
14
|
-
const setFilterStatus = useCallback((filterIdentifier, status) => {
|
|
15
|
-
setFiltersStatus((prev) => {
|
|
4
|
+
const [filterErrors, setFiltersError] = useState({});
|
|
5
|
+
const availableErrorsEntries = useMemo(() => availableFilterIdentifiers.map((localIdentifier) => [localIdentifier, filterErrors[localIdentifier] ?? null]), [availableFilterIdentifiers, filterErrors]);
|
|
6
|
+
const setFilterError = useCallback((filterIdentifier, error) => {
|
|
7
|
+
setFiltersError((prev) => {
|
|
16
8
|
if (!filterIdentifier) {
|
|
17
9
|
return prev;
|
|
18
10
|
}
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
error: status.error === undefined ? prevStatus?.error : status.error,
|
|
23
|
-
attribute: status.attribute === undefined ? prevStatus?.attribute : status.attribute,
|
|
24
|
-
};
|
|
25
|
-
if (prevStatus?.loading === newStatus.loading &&
|
|
26
|
-
prevStatus?.error === newStatus.error &&
|
|
27
|
-
prevStatus?.attribute === newStatus.attribute) {
|
|
11
|
+
const prevError = prev[filterIdentifier];
|
|
12
|
+
const newError = error === undefined ? prevError : error;
|
|
13
|
+
if (prevError === newError) {
|
|
28
14
|
return prev; // breaks potential infinite loop
|
|
29
15
|
}
|
|
30
16
|
return {
|
|
31
17
|
...prev,
|
|
32
|
-
[filterIdentifier]:
|
|
18
|
+
[filterIdentifier]: newError,
|
|
33
19
|
};
|
|
34
20
|
});
|
|
35
21
|
}, []);
|
|
36
|
-
const
|
|
37
|
-
const isAnyFilterError = availableStatusesEntries.some(([_, status]) => !!status.error);
|
|
38
|
-
const getFilterStatus = useCallback((filterIdentifier) => {
|
|
39
|
-
if (!filterIdentifier) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
return availableStatuses[filterIdentifier] ?? undefined;
|
|
43
|
-
}, [availableStatuses]);
|
|
22
|
+
const isAnyFilterError = availableErrorsEntries.some(([_, error]) => !!error);
|
|
44
23
|
return {
|
|
45
|
-
|
|
46
|
-
getFilterStatus,
|
|
47
|
-
isAnyFilterLoading,
|
|
24
|
+
setFilterError,
|
|
48
25
|
isAnyFilterError,
|
|
49
26
|
};
|
|
50
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterGroupStatus.js","sourceRoot":"","sources":["../../src/FilterGroup/useFilterGroupStatus.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useFilterGroupStatus.js","sourceRoot":"","sources":["../../src/FilterGroup/useFilterGroupStatus.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAkBvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,0BAAoC,EAAyB,EAAE,CAAC;IACjG,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAC;IAEnE,MAAM,sBAAsB,GAAG,OAAO,CAClC,GAAG,EAAE,CACD,0BAA0B,CAAC,GAAG,CAC1B,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,eAAe,CAAC,IAAI,IAAI,CAAU,CACzF,EACL,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAC9B,CAAC,gBAAoC,EAAE,KAA+B,EAAE,EAAE,CAAC;QACvE,eAAe,CAAC,CAAC,IAAkB,EAAgB,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YACzD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,CAAC,iCAAiC;YAClD,CAAC;YACD,OAAO;gBACH,GAAG,IAAI;gBACP,CAAC,gBAAgB,CAAC,EAAE,QAAQ;aAC/B,CAAC;QAAA,CACL,CAAC,CAAC;IAAA,CACN,EACD,EAAE,CACL,CAAC;IAEF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE9E,OAAO;QACH,cAAc;QACd,gBAAgB;KACnB,CAAC;AAAA,CACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-filters",
|
|
3
|
-
"version": "11.22.0-alpha.
|
|
3
|
+
"version": "11.22.0-alpha.5",
|
|
4
4
|
"description": "GoodData.UI SDK - Filter Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"ts-invariant": "^0.7.5",
|
|
48
48
|
"tslib": "2.8.1",
|
|
49
49
|
"uuid": "^11.1.0",
|
|
50
|
-
"@gooddata/sdk-backend-spi": "11.22.0-alpha.
|
|
51
|
-
"@gooddata/sdk-model": "11.22.0-alpha.
|
|
52
|
-
"@gooddata/sdk-ui": "11.22.0-alpha.
|
|
53
|
-
"@gooddata/sdk-ui-kit": "11.22.0-alpha.
|
|
54
|
-
"@gooddata/util": "11.22.0-alpha.
|
|
50
|
+
"@gooddata/sdk-backend-spi": "11.22.0-alpha.5",
|
|
51
|
+
"@gooddata/sdk-model": "11.22.0-alpha.5",
|
|
52
|
+
"@gooddata/sdk-ui": "11.22.0-alpha.5",
|
|
53
|
+
"@gooddata/sdk-ui-kit": "11.22.0-alpha.5",
|
|
54
|
+
"@gooddata/util": "11.22.0-alpha.5"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@microsoft/api-documenter": "^7.17.0",
|
|
@@ -93,12 +93,12 @@
|
|
|
93
93
|
"typescript": "5.9.3",
|
|
94
94
|
"vitest": "4.0.8",
|
|
95
95
|
"vitest-dom": "0.1.1",
|
|
96
|
-
"@gooddata/eslint-config": "11.22.0-alpha.
|
|
97
|
-
"@gooddata/oxlint-config": "11.22.0-alpha.
|
|
98
|
-
"@gooddata/
|
|
99
|
-
"@gooddata/
|
|
100
|
-
"@gooddata/
|
|
101
|
-
"@gooddata/
|
|
96
|
+
"@gooddata/eslint-config": "11.22.0-alpha.5",
|
|
97
|
+
"@gooddata/oxlint-config": "11.22.0-alpha.5",
|
|
98
|
+
"@gooddata/sdk-backend-mockingbird": "11.22.0-alpha.5",
|
|
99
|
+
"@gooddata/reference-workspace": "11.22.0-alpha.5",
|
|
100
|
+
"@gooddata/sdk-ui-theme-provider": "11.22.0-alpha.5",
|
|
101
|
+
"@gooddata/stylelint-config": "11.22.0-alpha.5"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"react": "^18.0.0 || ^19.0.0",
|