@gooddata/sdk-ui-ext 11.45.0-alpha.1 → 11.45.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/NOTICE +3 -3
- package/esm/insightPicker/InsightPickerCore.d.ts +1 -1
- package/esm/insightPicker/InsightPickerCore.d.ts.map +1 -1
- package/esm/insightPicker/InsightPickerCore.js +2 -2
- package/esm/insightPicker/InsightPickerRow.d.ts +1 -2
- package/esm/insightPicker/InsightPickerRow.d.ts.map +1 -1
- package/esm/insightPicker/InsightPickerRow.js +2 -2
- package/esm/insightPicker/types.d.ts +0 -1
- package/esm/insightPicker/types.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/ConfigurationPanelContent.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/ConfigurationPanelContent.js +4 -8
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/AddDataSourceSelect.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/AddDataSourceSelect.js +6 -1
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/DataSourceItem.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/DataSourceItem.js +10 -2
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/locales.d.ts +3 -0
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/locales.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/DataSources/locales.js +2 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Details/EditUserDetails.d.ts +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Details/EditUserDetails.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Details/detailsHooks.d.ts +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.js +11 -4
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.js +8 -3
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddSingleWorkspaceSelect.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddSingleWorkspaceSelect.js +7 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspaceSelect.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspaceSelect.js +5 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissionsWorkspaceItem.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissionsWorkspaceItem.js +9 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/InheritedIcon.d.ts +12 -0
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/InheritedIcon.d.ts.map +1 -0
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/InheritedIcon.js +12 -0
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.d.ts +6 -0
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.js +3 -1
- package/esm/internal/components/dialogs/userManagementDialogs/dialogHooks.d.ts +10 -2
- package/esm/internal/components/dialogs/userManagementDialogs/dialogHooks.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/dialogHooks.js +15 -11
- package/esm/internal/components/dialogs/userManagementDialogs/hooks/usePermissions.d.ts +10 -3
- package/esm/internal/components/dialogs/userManagementDialogs/hooks/usePermissions.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/hooks/usePermissions.js +59 -34
- package/esm/internal/components/dialogs/userManagementDialogs/locales.d.ts +3 -0
- package/esm/internal/components/dialogs/userManagementDialogs/locales.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/locales.js +1 -0
- package/esm/internal/components/dialogs/userManagementDialogs/types.d.ts +20 -1
- package/esm/internal/components/dialogs/userManagementDialogs/types.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/types.js +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/utils.d.ts +2 -0
- package/esm/internal/components/dialogs/userManagementDialogs/utils.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/utils.js +40 -1
- package/esm/internal/components/pluggableVisualizations/baseChart/PluggableBaseChart.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/baseChart/PluggableBaseChart.js +1 -1
- package/esm/internal/interfaces/Visualization.d.ts +1 -1
- package/esm/internal/interfaces/Visualization.d.ts.map +1 -1
- package/esm/internal/utils/bucketHelper.d.ts.map +1 -1
- package/esm/internal/utils/bucketHelper.js +10 -3
- package/esm/sdk-ui-ext.d.ts +10 -1
- package/package.json +21 -21
- package/styles/css/main.css +15 -0
- package/styles/css/main.css.map +1 -1
- package/styles/internal/css/user_management_dialogs.css +15 -0
- package/styles/internal/css/user_management_dialogs.css.map +1 -1
- package/styles/internal/scss/user_management_dialogs.scss +22 -0
package/NOTICE
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
|
|
9
9
|
|
|
10
|
-
Date generated: 2026-
|
|
10
|
+
Date generated: 2026-7-1
|
|
11
11
|
|
|
12
|
-
Revision ID:
|
|
12
|
+
Revision ID: 9473b8ff1342704ff1498f54591ef2ab4c6943f4
|
|
13
13
|
|
|
14
14
|
================================================================================
|
|
15
15
|
================================================================================
|
|
@@ -29272,4 +29272,4 @@ POSSIBILITY OF SUCH DAMAGE.
|
|
|
29272
29272
|
--------------------------------------------------------------------------------
|
|
29273
29273
|
--------------------------------------------------------------------------------
|
|
29274
29274
|
|
|
29275
|
-
Report Generated by FOSSA on 2026-
|
|
29275
|
+
Report Generated by FOSSA on 2026-7-1
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type IInsightPickerProps } from "./types.js";
|
|
2
|
-
export declare function InsightPickerCore({ backend: backendProp, workspace: workspaceProp, includeTags, excludeTags, author, enabledVisualizationClassesUrls, selectedInsightId,
|
|
2
|
+
export declare function InsightPickerCore({ backend: backendProp, workspace: workspaceProp, includeTags, excludeTags, author, enabledVisualizationClassesUrls, selectedInsightId, metadataTimeZone, searchQuery, onSearchChange, sortBy, sortDirection, onSortChange, authorFilter, onAuthorFilterChange, tagFilter, onTagFilterChange, enableSemanticSearch, maxHeight, width, onSelect, onDescriptionPanelOpen, onItemActivate, menuActions, renderMenu, renderItem: renderItemProp }: IInsightPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=InsightPickerCore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightPickerCore.d.ts","sourceRoot":"","sources":["../../src/insightPicker/InsightPickerCore.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAO/E,wBAAgB,iBAAiB,CAAC,EAC9B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,WAAW,EACX,MAAM,EACN,+BAAoC,EACpC,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"InsightPickerCore.d.ts","sourceRoot":"","sources":["../../src/insightPicker/InsightPickerCore.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAO/E,wBAAgB,iBAAiB,CAAC,EAC9B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,WAAW,EACX,MAAM,EACN,+BAAoC,EACpC,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,oBAA2B,EAC3B,SAAe,EACf,KAAW,EACX,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EAAE,cAAc,EAC7B,EAAE,mBAAmB,2CA+NrB"}
|
|
@@ -13,7 +13,7 @@ import { useInsightPickerFilters } from "./useInsightPickerFilters.js";
|
|
|
13
13
|
import { useInsightPickerHybridSearch } from "./useInsightPickerHybridSearch.js";
|
|
14
14
|
// These tab identifiers are internal keys for useInsightPagedList state — not i18n IDs.
|
|
15
15
|
const tabsIds = { my: "my", all: "all" };
|
|
16
|
-
export function InsightPickerCore({ backend: backendProp, workspace: workspaceProp, includeTags, excludeTags, author, enabledVisualizationClassesUrls = [], selectedInsightId,
|
|
16
|
+
export function InsightPickerCore({ backend: backendProp, workspace: workspaceProp, includeTags, excludeTags, author, enabledVisualizationClassesUrls = [], selectedInsightId, metadataTimeZone, searchQuery, onSearchChange, sortBy, sortDirection, onSortChange, authorFilter, onAuthorFilterChange, tagFilter, onTagFilterChange, enableSemanticSearch = true, maxHeight = 350, width = 700, onSelect, onDescriptionPanelOpen, onItemActivate, menuActions, renderMenu, renderItem: renderItemProp, }) {
|
|
17
17
|
const intl = useIntl();
|
|
18
18
|
const backend = useBackendStrict(backendProp);
|
|
19
19
|
const workspace = useWorkspaceStrict(workspaceProp);
|
|
@@ -111,6 +111,6 @@ export function InsightPickerCore({ backend: backendProp, workspace: workspacePr
|
|
|
111
111
|
sourceInsight,
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
|
-
return (_jsx(InsightPickerRow, { entry: entry, type: type, width: itemWidth, isSelected: isSelected, hasMenu: hasMenu,
|
|
114
|
+
return (_jsx(InsightPickerRow, { entry: entry, type: type, width: itemWidth, isSelected: isSelected, hasMenu: hasMenu, metadataTimeZone: metadataTimeZone, menuActions: menuActions, renderMenu: renderMenu, onItemClick: handleItemClick, onDescriptionPanelOpen: onDescriptionPanelOpen }));
|
|
115
115
|
}, renderNoData: ({ hasNoMatchingData }) => (_jsx(NoData, { notFoundLabel: intl.formatMessage(messages.noInsightsFound), noDataLabel: intl.formatMessage(messages.noInsights), hasNoMatchingData: hasNoMatchingData })) })] }));
|
|
116
116
|
}
|
|
@@ -5,13 +5,12 @@ interface IInsightPickerRowProps {
|
|
|
5
5
|
width: number;
|
|
6
6
|
isSelected: boolean;
|
|
7
7
|
hasMenu: boolean;
|
|
8
|
-
enableDescriptions?: boolean;
|
|
9
8
|
metadataTimeZone?: string;
|
|
10
9
|
menuActions?: IInsightPickerProps["menuActions"];
|
|
11
10
|
renderMenu?: IInsightPickerProps["renderMenu"];
|
|
12
11
|
onItemClick: (entry: IInsightPickerItem) => void;
|
|
13
12
|
onDescriptionPanelOpen?: (description: string) => void;
|
|
14
13
|
}
|
|
15
|
-
export declare function InsightPickerRow({ entry, type, width, isSelected, hasMenu,
|
|
14
|
+
export declare function InsightPickerRow({ entry, type, width, isSelected, hasMenu, metadataTimeZone, menuActions, renderMenu, onItemClick, onDescriptionPanelOpen }: IInsightPickerRowProps): import("react/jsx-runtime").JSX.Element;
|
|
16
15
|
export {};
|
|
17
16
|
//# sourceMappingURL=InsightPickerRow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightPickerRow.d.ts","sourceRoot":"","sources":["../../src/insightPicker/InsightPickerRow.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/E,UAAU,sBAAsB;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"InsightPickerRow.d.ts","sourceRoot":"","sources":["../../src/insightPicker/InsightPickerRow.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/E,UAAU,sBAAsB;IAC5B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC/C,WAAW,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,sBAAsB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,WAAW,EACX,sBAAsB,EACzB,EAAE,sBAAsB,2CAwCxB"}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useCallback } from "react";
|
|
4
4
|
import { InsightListItem } from "@gooddata/sdk-ui-kit";
|
|
5
5
|
import { InsightPickerMenu } from "./InsightPickerMenu.js";
|
|
6
|
-
export function InsightPickerRow({ entry, type, width, isSelected, hasMenu,
|
|
6
|
+
export function InsightPickerRow({ entry, type, width, isSelected, hasMenu, metadataTimeZone, menuActions, renderMenu, onItemClick, onDescriptionPanelOpen, }) {
|
|
7
7
|
const handleRowClick = useCallback((e) => {
|
|
8
8
|
const target = e.target;
|
|
9
9
|
if (target.closest('[data-id="menu-button"]')) {
|
|
@@ -14,5 +14,5 @@ export function InsightPickerRow({ entry, type, width, isSelected, hasMenu, enab
|
|
|
14
14
|
return (_jsxs("div", { className: hasMenu
|
|
15
15
|
? "gd-ui-ext-insight-picker-row gd-ui-ext-insight-picker-row--with-menu"
|
|
16
16
|
: "gd-ui-ext-insight-picker-row", onClick: handleRowClick, children: [
|
|
17
|
-
_jsx(InsightListItem, { title: entry.title, description: entry.description?.trim(), showDescriptionPanel:
|
|
17
|
+
_jsx(InsightListItem, { title: entry.title, description: entry.description?.trim(), showDescriptionPanel: true, type: type, width: hasMenu ? width - 36 : width, updated: entry.updated ?? entry.created, isLocked: entry.isLocked, isSelected: isSelected, onDescriptionPanelOpen: onDescriptionPanelOpen ? () => onDescriptionPanelOpen(entry.description ?? "") : undefined, metadataTimeZone: metadataTimeZone }), hasMenu ? (_jsx(InsightPickerMenu, { item: entry, menuActions: menuActions, renderMenu: renderMenu })) : null] }));
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/insightPicker/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAChC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+BAA+B,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/insightPicker/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigurationPanelContent.d.ts","sourceRoot":"","sources":["../../../../src/internal/components/configurationPanels/ConfigurationPanelContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAG7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAChC,MAAM,mCAAmC,CAAC;AAoB3C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,+BAA+B,CAAC,WAAW,GAAG,GAAG;IAC9D,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2BAA2B,CAAC,EAAE,4BAA4B,CAAC;IAC3D;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,8BAAsB,yBAAyB,CAC3C,CAAC,SAAS,+BAA+B,GAAG,+BAA+B,CAC7E,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtB,OAAc,YAAY,EAAE,+BAA+B,CAgBzD;IAEF,SAAS,CAAC,uBAAuB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAExD,YAAY,KAAK,EAAE,CAAC,EAGnB;IAEe,MAAM,4CAQrB;IAED,SAAS,CAAC,QAAQ,CAAC,wBAAwB,IAAI,SAAS,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAG/D;IAED,SAAS,CAAC,kBAAkB,IAAI,SAAS,CAsBxC;IAED,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAYzC;IAED,SAAS,CAAC,yBAAyB,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"ConfigurationPanelContent.d.ts","sourceRoot":"","sources":["../../../../src/internal/components/configurationPanels/ConfigurationPanelContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAG7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAChC,MAAM,mCAAmC,CAAC;AAoB3C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,+BAA+B,CAAC,WAAW,GAAG,GAAG;IAC9D,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2BAA2B,CAAC,EAAE,4BAA4B,CAAC;IAC3D;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,8BAAsB,yBAAyB,CAC3C,CAAC,SAAS,+BAA+B,GAAG,+BAA+B,CAC7E,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtB,OAAc,YAAY,EAAE,+BAA+B,CAgBzD;IAEF,SAAS,CAAC,uBAAuB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAExD,YAAY,KAAK,EAAE,CAAC,EAGnB;IAEe,MAAM,4CAQrB;IAED,SAAS,CAAC,QAAQ,CAAC,wBAAwB,IAAI,SAAS,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAG/D;IAED,SAAS,CAAC,kBAAkB,IAAI,SAAS,CAsBxC;IAED,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAYzC;IAED,SAAS,CAAC,yBAAyB,IAAI,SAAS,CAwC/C;IAED,SAAS,CAAC,qBAAqB,IAAI,SAAS,CAiB3C;IAED,SAAS,CAAC,sBAAsB,IAAI,SAAS,CAqC5C;IAED,SAAS,CAAC,0BAA0B,IAAI,SAAS,CAehD;IAED,SAAS,CAAC,qBAAqB,IAAI,SAAS,CAU3C;CACJ"}
|
|
@@ -63,16 +63,15 @@ export class ConfigurationPanelContent extends PureComponent {
|
|
|
63
63
|
}
|
|
64
64
|
renderInteractionsSection() {
|
|
65
65
|
const { pushData, properties, propertiesMeta, panelConfig, configurationPanelRenderers, featureFlags, insight, } = this.props;
|
|
66
|
-
const isAlertingEnabled = featureFlags?.enableAlerting;
|
|
67
|
-
const isScheduledExportsEnabled = featureFlags?.enableScheduling;
|
|
68
66
|
const showImplicitDrillToUrl = isInsightSupportedForImplicitDrillToUrl(insight);
|
|
69
67
|
const supportsKeyDriveAnalysis = featureFlags?.enableChangeAnalysis;
|
|
70
68
|
const insightSupportsScheduledExports = isInsightSupportedForScheduledExports(insight);
|
|
71
69
|
const insightSupportsAlerts = isInsightSupportedForAlerts(insight);
|
|
72
|
-
const supportsAlertsConfiguration = insightSupportsAlerts
|
|
73
|
-
const supportsScheduledExportsConfiguration = insightSupportsScheduledExports
|
|
70
|
+
const supportsAlertsConfiguration = insightSupportsAlerts;
|
|
71
|
+
const supportsScheduledExportsConfiguration = insightSupportsScheduledExports;
|
|
74
72
|
const metrics = insight ? insightMeasures(insight) : [];
|
|
75
73
|
return supportsAlertsConfiguration ||
|
|
74
|
+
supportsScheduledExportsConfiguration ||
|
|
76
75
|
panelConfig?.supportsAttributeHierarchies ||
|
|
77
76
|
showImplicitDrillToUrl ? (_jsx(InteractionsSection, { metrics: metrics, areControlsDisabledGetter: this.isControlDisabled, properties: properties, propertiesMeta: propertiesMeta, pushData: pushData, supportsAlertConfiguration: !!supportsAlertsConfiguration, supportsDrillDownConfiguration: panelConfig?.supportsAttributeHierarchies, supportsScheduledExportsConfiguration: !!supportsScheduledExportsConfiguration, InteractionsDetailRenderer: configurationPanelRenderers?.InteractionsDetailRenderer, showImplicitDrillToUrl: showImplicitDrillToUrl, supportsKeyDriveAnalysis: supportsKeyDriveAnalysis,
|
|
78
77
|
// enableDrillToUrlByDefault is actually not a feature flag, but setting
|
|
@@ -80,10 +79,7 @@ export class ConfigurationPanelContent extends PureComponent {
|
|
|
80
79
|
enableDrillToUrlByDefault: featureFlags?.enableDrillToUrlByDefault })) : null;
|
|
81
80
|
}
|
|
82
81
|
renderForecastSection() {
|
|
83
|
-
const { pushData, properties, propertiesMeta, type,
|
|
84
|
-
if (!featureFlags?.["enableSmartFunctions"]) {
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
82
|
+
const { pushData, properties, propertiesMeta, type, referencePoint, insight } = this.props;
|
|
87
83
|
const { enabled, visible } = isForecastEnabled(referencePoint, insight, type);
|
|
88
84
|
if (!visible) {
|
|
89
85
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddDataSourceSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/DataSources/AddDataSourceSelect.tsx"],"names":[],"mappings":"AAaA,OAAO,EACH,KAAK,yBAAyB,EAKjC,MAAM,aAAa,CAAC;AAerB,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACrB,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"AddDataSourceSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/DataSources/AddDataSourceSelect.tsx"],"names":[],"mappings":"AAaA,OAAO,EACH,KAAK,yBAAyB,EAKjC,MAAM,aAAa,CAAC;AAerB,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACrB,EAAE,yBAAyB,2CA6F3B"}
|
package/esm/internal/components/dialogs/userManagementDialogs/DataSources/AddDataSourceSelect.js
CHANGED
|
@@ -40,7 +40,12 @@ export function AddDataSourceSelect({ addedDataSources, grantedDataSources, onSe
|
|
|
40
40
|
e.preventDefault();
|
|
41
41
|
}
|
|
42
42
|
}, []);
|
|
43
|
-
|
|
43
|
+
// Inherited data sources stay selectable so a direct grant can be added on top of inherited access;
|
|
44
|
+
// only data sources already granted directly are excluded from the picker.
|
|
45
|
+
const usedDataSources = useMemo(() => [
|
|
46
|
+
...addedDataSources,
|
|
47
|
+
...(grantedDataSources?.filter((dataSource) => !dataSource.isInherited) ?? []),
|
|
48
|
+
], [addedDataSources, grantedDataSources]);
|
|
44
49
|
const filterOption = (option) => {
|
|
45
50
|
const dataSource = option.value;
|
|
46
51
|
return !usedDataSources.some((usedDataSource) => {
|
package/esm/internal/components/dialogs/userManagementDialogs/DataSources/DataSourceItem.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSourceItem.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/DataSources/DataSourceItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DataSourceItem.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/DataSources/DataSourceItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAO1C,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAiBxF,UAAU,kCAAkC;IACxC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,2BAA2B,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,YAAY,CAAC;CAC3E;AAED,wBAAgB,cAAc,CAAC,EAC3B,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACvB,EAAE,kCAAkC,2CAqCpC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import cx from "classnames";
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
3
4
|
import { IconDataSource } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { InheritedIcon } from "../Workspace/WorkspaceItem/InheritedIcon.js";
|
|
6
|
+
import { dataSourcePermissionMessages } from "./locales.js";
|
|
4
7
|
import { PermissionsDropdown } from "./PermissionsDropdown.js";
|
|
5
8
|
import { usePermissionsDropdownState } from "./usePermissionsDropdownState.js";
|
|
6
9
|
function DataSourceIcon() {
|
|
@@ -8,9 +11,14 @@ function DataSourceIcon() {
|
|
|
8
11
|
}
|
|
9
12
|
export function DataSourceItem({ dataSource, subjectType, onChange, onDelete, renderDataSourceIcon, }) {
|
|
10
13
|
const { isDropdownOpen, toggleDropdown } = usePermissionsDropdownState();
|
|
14
|
+
const intl = useIntl();
|
|
15
|
+
// Data sources inherited via a user group cannot be revoked or edited at the subject level, so
|
|
16
|
+
// they are rendered read-only: no permission dropdown, just the level and a lock marker.
|
|
17
|
+
const isInherited = !!dataSource.isInherited;
|
|
11
18
|
const itemClassName = cx("s-user-management-data-source-item", "gd-share-dialog-grantee-item", {
|
|
12
19
|
"is-active": isDropdownOpen,
|
|
20
|
+
"is-inherited": isInherited,
|
|
13
21
|
});
|
|
14
|
-
return (_jsxs("div", { className: itemClassName, children: [
|
|
15
|
-
|
|
22
|
+
return (_jsxs("div", { className: itemClassName, children: [isInherited ? (_jsx(InheritedIcon, { tooltipMessage: intl.formatMessage(dataSourcePermissionMessages.inherited) })) : (_jsx(PermissionsDropdown, { dataSource: dataSource, subjectType: subjectType, isDropdownOpen: isDropdownOpen, toggleDropdown: toggleDropdown, onChange: onChange, onDelete: onDelete, className: "gd-grantee-granular-permission" })), _jsxs("div", { className: "gd-grantee-content", children: [
|
|
23
|
+
_jsx("div", { className: "gd-grantee-content-label", children: dataSource.title }), isInherited ? (_jsx("div", { className: "gd-grantee-content-label gd-grantee-content-email", children: intl.formatMessage(dataSourcePermissionMessages[dataSource.permission]) })) : null] }), renderDataSourceIcon ? renderDataSourceIcon(dataSource) : _jsx(DataSourceIcon, {})] }));
|
|
16
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/DataSources/locales.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/DataSources/locales.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;CAKvC,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// (C) 2023-
|
|
1
|
+
// (C) 2023-2026 GoodData Corporation
|
|
2
2
|
import { defineMessages } from "react-intl";
|
|
3
3
|
export const dataSourcePermissionMessages = defineMessages({
|
|
4
4
|
MANAGE: { id: "userManagement.dataSources.permission.manage" },
|
|
5
5
|
USE: { id: "userManagement.dataSources.permission.use" },
|
|
6
6
|
remove: { id: "userManagement.dataSources.permission.remove" },
|
|
7
|
+
inherited: { id: "userManagement.dataSource.inherited" },
|
|
7
8
|
});
|
|
@@ -9,7 +9,7 @@ export interface IEditUserDetailsProps {
|
|
|
9
9
|
onSubmit: (user: IUser, isAdmin: boolean) => void;
|
|
10
10
|
onCancel: () => void;
|
|
11
11
|
onClose: () => void;
|
|
12
|
-
removeAdminGroup: () => void
|
|
12
|
+
removeAdminGroup: () => Promise<void>;
|
|
13
13
|
}
|
|
14
14
|
export declare function EditUserDetails({ user, isBootstrapUser, isAdmin, enableBackButton, changeUserMembership, isSystemAccountFilteringEnabled, onSubmit, onCancel, onClose, removeAdminGroup }: IEditUserDetailsProps): import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
//# sourceMappingURL=EditUserDetails.d.ts.map
|
package/esm/internal/components/dialogs/userManagementDialogs/Details/EditUserDetails.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditUserDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Details/EditUserDetails.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AASjD,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"EditUserDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Details/EditUserDetails.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AASjD,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,wBAAgB,eAAe,CAAC,EAC5B,IAAI,EACJ,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,oBAAoB,EACpB,+BAA+B,EAC/B,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,gBAAgB,EACnB,EAAE,qBAAqB,2CAgDvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IUser, type IUserGroup } from "@gooddata/sdk-model";
|
|
2
|
-
export declare const useUserDetails: (user: IUser | undefined, isAdmin: boolean, onSubmit: (user: IUser, isAdmin: boolean) => void, onCancel: () => void, removeAdminGroup: () => void
|
|
2
|
+
export declare const useUserDetails: (user: IUser | undefined, isAdmin: boolean, onSubmit: (user: IUser, isAdmin: boolean) => void, onCancel: () => void, removeAdminGroup: () => Promise<void>, isSystemAccountFilteringEnabled?: boolean) => {
|
|
3
3
|
updatedUser: IUser | undefined;
|
|
4
4
|
isUpdatedAdmin: boolean;
|
|
5
5
|
onChange: (user: IUser, isAdmin: boolean) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserEditDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/UserEditDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,OAAO,CAAC;AA0B7D,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACH,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACjB,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,YAAY,CAAC;IACxE,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,WAAW,CAAC,EAAE,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"UserEditDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/UserEditDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,OAAO,CAAC;AA0B7D,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACH,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACjB,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,YAAY,CAAC;IACxE,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,WAAW,CAAC,EAAE,SAAS,CAAC;CAC3B;AAmRD;;GAEG;AACH,eAAO,MAAM,cAAc;;;CAAyC,CAAC"}
|
|
@@ -28,8 +28,15 @@ function UserEditDialogComponent({ userId, organizationId, isAdmin, onSuccess, o
|
|
|
28
28
|
const { dialogMode, setDialogMode } = useUserDialogMode(initialView);
|
|
29
29
|
const { user, isCurrentlyAdmin, onUserDetailsChanged, setIsAdmin, error, isLoading: userIsLoading, } = useUser(userId, organizationId, isAdmin, onSuccess);
|
|
30
30
|
const { isBootstrapUser, bootstrapUserGroupId } = useOrganizationDetails(organizationId);
|
|
31
|
-
const { grantedWorkspaces, onWorkspacesChanged, removeGrantedWorkspace, updateGrantedWorkspace, grantedDataSources, onDataSourcesChanged, removeGrantedDataSource, updateGrantedDataSource, } = usePermissions(userId, "user", organizationId, onSuccess);
|
|
32
|
-
const { grantedUserGroups, onUserGroupsChanged, removeGrantedUserGroup, removeAdminGroup } = useUserGroups(
|
|
31
|
+
const { grantedWorkspaces, onWorkspacesChanged, removeGrantedWorkspace, updateGrantedWorkspace, grantedDataSources, onDataSourcesChanged, removeGrantedDataSource, updateGrantedDataSource, reloadPermissions, } = usePermissions({ id: userId, subjectType: "user", organizationId, onSuccess });
|
|
32
|
+
const { grantedUserGroups, onUserGroupsChanged, removeGrantedUserGroup, removeAdminGroup } = useUserGroups({
|
|
33
|
+
userId,
|
|
34
|
+
organizationId,
|
|
35
|
+
bootstrapUserGroupId: bootstrapUserGroupId,
|
|
36
|
+
onSuccess,
|
|
37
|
+
setIsAdmin,
|
|
38
|
+
onMembershipChanged: reloadPermissions,
|
|
39
|
+
});
|
|
33
40
|
const { tabs, selectedTabId, setSelectedTabId } = useUserDialogTabs(grantedWorkspaces, grantedUserGroups, grantedDataSources, isCurrentlyAdmin, selectedTab);
|
|
34
41
|
const { isConfirmDeleteOpened, onOpenDeleteDialog, onCloseDeleteDialog, dialogOverlayClassNames, dialogWrapperClassNames, } = useDeleteDialog();
|
|
35
42
|
const { deleteUser, isDeleteUserProcessing } = useDeleteUser(userId, organizationId, onSuccess, onClose);
|
|
@@ -70,9 +77,9 @@ function UserEditDialogComponent({ userId, organizationId, isAdmin, onSuccess, o
|
|
|
70
77
|
setWorkspaceToEdit(workspace);
|
|
71
78
|
setDialogMode("WORKSPACE");
|
|
72
79
|
};
|
|
73
|
-
const handleWorkspaceChanged = (
|
|
80
|
+
const handleWorkspaceChanged = () => {
|
|
74
81
|
setWorkspaceToEdit(undefined);
|
|
75
|
-
onWorkspacesChanged(
|
|
82
|
+
onWorkspacesChanged();
|
|
76
83
|
};
|
|
77
84
|
const handleWorkspaceCancel = () => {
|
|
78
85
|
setWorkspaceToEdit(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserGroupEditDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,OAAO,CAAC;AA0B7D,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,KAAK,kBAAkB,EAA0B,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAU3G;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,YAAY,CAAC;CAC3E;
|
|
1
|
+
{"version":3,"file":"UserGroupEditDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,OAAO,CAAC;AA0B7D,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,KAAK,kBAAkB,EAA0B,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAU3G;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,YAAY,CAAC;CAC3E;AA6QD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;CAA8C,CAAC"}
|
|
@@ -27,7 +27,12 @@ function UserGroupEditDialogComponent({ userGroupId, organizationId, isAdmin, on
|
|
|
27
27
|
const intl = useIntl();
|
|
28
28
|
const { dialogMode, setDialogMode } = useUserGroupDialogMode(initialView);
|
|
29
29
|
const { userGroup, onUserGroupDetailsChanged, error, isLoading: userGroupIsLoading, } = useUserGroup(userGroupId, organizationId, onSuccess);
|
|
30
|
-
const { grantedWorkspaces, onWorkspacesChanged, removeGrantedWorkspace, updateGrantedWorkspace, grantedDataSources, onDataSourcesChanged, removeGrantedDataSource, updateGrantedDataSource, } = usePermissions(
|
|
30
|
+
const { grantedWorkspaces, onWorkspacesChanged, removeGrantedWorkspace, updateGrantedWorkspace, grantedDataSources, onDataSourcesChanged, removeGrantedDataSource, updateGrantedDataSource, } = usePermissions({
|
|
31
|
+
id: userGroupId,
|
|
32
|
+
subjectType: "userGroup",
|
|
33
|
+
organizationId,
|
|
34
|
+
onSuccess,
|
|
35
|
+
});
|
|
31
36
|
const { grantedUsers, onUsersChanged, removeGrantedUsers } = useUsers(userGroupId, organizationId, onSuccess);
|
|
32
37
|
const { tabs, selectedTabId, setSelectedTabId } = useUserGroupDialogTabs(grantedWorkspaces, grantedUsers, grantedDataSources, isAdmin);
|
|
33
38
|
const { isConfirmDeleteOpened, onOpenDeleteDialog, onCloseDeleteDialog, dialogOverlayClassNames, dialogWrapperClassNames, } = useDeleteDialog();
|
|
@@ -67,9 +72,9 @@ function UserGroupEditDialogComponent({ userGroupId, organizationId, isAdmin, on
|
|
|
67
72
|
setWorkspaceToEdit(workspace);
|
|
68
73
|
setDialogMode("WORKSPACE");
|
|
69
74
|
};
|
|
70
|
-
const handleWorkspaceChanged = (
|
|
75
|
+
const handleWorkspaceChanged = () => {
|
|
71
76
|
setWorkspaceToEdit(undefined);
|
|
72
|
-
onWorkspacesChanged(
|
|
77
|
+
onWorkspacesChanged();
|
|
73
78
|
};
|
|
74
79
|
const handleWorkspaceCancel = () => {
|
|
75
80
|
setWorkspaceToEdit(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddSingleWorkspaceSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/AddSingleWorkspaceSelect.tsx"],"names":[],"mappings":"AAYA,OAAO,EACH,KAAK,8BAA8B,EAKtC,MAAM,aAAa,CAAC;AAgBrB,wBAAgB,wBAAwB,CAAC,EACrC,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,IAAa,EAChB,EAAE,8BAA8B,
|
|
1
|
+
{"version":3,"file":"AddSingleWorkspaceSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/AddSingleWorkspaceSelect.tsx"],"names":[],"mappings":"AAYA,OAAO,EACH,KAAK,8BAA8B,EAKtC,MAAM,aAAa,CAAC;AAgBrB,wBAAgB,wBAAwB,CAAC,EACrC,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,IAAa,EAChB,EAAE,8BAA8B,2CA4GhC"}
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddSingleWorkspaceSelect.js
CHANGED
|
@@ -38,10 +38,15 @@ export function AddSingleWorkspaceSelect({ addedWorkspace, grantedWorkspaces, on
|
|
|
38
38
|
e.preventDefault();
|
|
39
39
|
}
|
|
40
40
|
}, []);
|
|
41
|
-
|
|
41
|
+
// Inherited workspaces stay selectable so a direct grant can be added on top of inherited access;
|
|
42
|
+
// only workspaces already granted directly are excluded from the picker.
|
|
43
|
+
const usedWorkspace = useMemo(() => {
|
|
44
|
+
const directlyGranted = grantedWorkspaces?.filter((workspace) => !workspace.isInherited) ?? [];
|
|
45
|
+
return addedWorkspace ? [addedWorkspace, ...directlyGranted] : directlyGranted;
|
|
46
|
+
}, [addedWorkspace, grantedWorkspaces]);
|
|
42
47
|
const filterOption = (option) => {
|
|
43
48
|
const workspace = option.value;
|
|
44
|
-
return !usedWorkspace
|
|
49
|
+
return !usedWorkspace.some((usedWorkspace) => {
|
|
45
50
|
return usedWorkspace.id === workspace.id;
|
|
46
51
|
});
|
|
47
52
|
};
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspaceSelect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWorkspaceSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspaceSelect.tsx"],"names":[],"mappings":"AAaA,OAAO,EACH,KAAK,wBAAwB,EAKhC,MAAM,aAAa,CAAC;AAerB,wBAAgB,kBAAkB,CAAC,EAC/B,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACpB,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"AddWorkspaceSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspaceSelect.tsx"],"names":[],"mappings":"AAaA,OAAO,EACH,KAAK,wBAAwB,EAKhC,MAAM,aAAa,CAAC;AAerB,wBAAgB,kBAAkB,CAAC,EAC/B,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACpB,EAAE,wBAAwB,2CA2F1B"}
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspaceSelect.js
CHANGED
|
@@ -40,7 +40,11 @@ export function AddWorkspaceSelect({ addedWorkspaces, grantedWorkspaces, onSelec
|
|
|
40
40
|
e.preventDefault();
|
|
41
41
|
}
|
|
42
42
|
}, []);
|
|
43
|
-
|
|
43
|
+
// Inherited workspaces stay selectable so a direct grant can be added on top of inherited access;
|
|
44
|
+
// only workspaces already granted directly are excluded from the picker.
|
|
45
|
+
const usedWorkspace = useMemo(() => grantedWorkspaces
|
|
46
|
+
? [...addedWorkspaces, ...grantedWorkspaces.filter((workspace) => !workspace.isInherited)]
|
|
47
|
+
: [], [addedWorkspaces, grantedWorkspaces]);
|
|
44
48
|
const filterOption = (option) => {
|
|
45
49
|
const workspace = option.value;
|
|
46
50
|
return !usedWorkspace.some((usedWorkspace) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GranularPermissionsWorkspaceItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissionsWorkspaceItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GranularPermissionsWorkspaceItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissionsWorkspaceItem.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQxD,UAAU,sCAAsC;IAC5C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACpD;AAED,wBAAgB,gCAAgC,CAAC,EAC7C,SAAS,EACT,QAAQ,EACR,OAAO,EACV,EAAE,sCAAsC,2CAwCxC"}
|
|
@@ -2,20 +2,27 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
// (C) 2024-2026 GoodData Corporation
|
|
3
3
|
import cx from "classnames";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
|
+
import { WorkspaceAccessSourceValue } from "@gooddata/sdk-model";
|
|
5
6
|
import { RemoveIcon } from "../../RemoveIcon.js";
|
|
6
7
|
import { getHumanReadablePermissionsTitle } from "./granularPermissionUtils.js";
|
|
8
|
+
import { InheritedIcon } from "./InheritedIcon.js";
|
|
7
9
|
import { workspaceGranularPermissionMessages } from "./locales.js";
|
|
8
10
|
import { usePermissionsDropdownState } from "./usePermissionsDropdownState.js";
|
|
9
11
|
import { WorkspaceIcon } from "./WorkspaceIcon.js";
|
|
10
12
|
export function GranularPermissionsWorkspaceItem({ workspace, onDelete, onClick, }) {
|
|
11
13
|
const { isDropdownOpen } = usePermissionsDropdownState();
|
|
12
14
|
const intl = useIntl();
|
|
15
|
+
// Inherited workspaces (via a user group or a parent workspace) cannot be revoked or edited at
|
|
16
|
+
// the subject level, so they are rendered read-only: no remove icon, no click-to-edit, just a marker.
|
|
17
|
+
const isInherited = !!workspace.isInherited;
|
|
13
18
|
const itemClassName = cx("s-user-management-workspace-item", "gd-share-dialog-grantee-item", {
|
|
14
19
|
"is-active": isDropdownOpen,
|
|
20
|
+
"is-inherited": isInherited,
|
|
15
21
|
});
|
|
16
22
|
const subtitle = getHumanReadablePermissionsTitle(workspace.permissions, intl);
|
|
17
|
-
return (_jsxs("div", { className: itemClassName, children: [
|
|
18
|
-
|
|
23
|
+
return (_jsxs("div", { className: itemClassName, children: [isInherited ? (_jsx(InheritedIcon, { tooltipMessage: intl.formatMessage(workspace.accessSource === WorkspaceAccessSourceValue.HIERARCHY
|
|
24
|
+
? workspaceGranularPermissionMessages.inheritedFromHierarchy
|
|
25
|
+
: workspaceGranularPermissionMessages.inheritedFromGroup) })) : (_jsx(RemoveIcon, { tooltipMessage: intl.formatMessage(workspaceGranularPermissionMessages.remove), onClick: () => onDelete(workspace) })), _jsxs("div", { className: "gd-grantee-content", onClick: isInherited ? undefined : () => onClick?.(workspace), children: [
|
|
19
26
|
_jsx("div", { className: "gd-grantee-content-label", children: workspace.title }), _jsx("div", { className: "gd-grantee-content-label gd-grantee-content-email", title: subtitle, children: subtitle })
|
|
20
27
|
] }), _jsx(WorkspaceIcon, {})
|
|
21
28
|
] }));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface IInheritedIconProps {
|
|
2
|
+
tooltipMessage: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Marks a workspace row whose access is inherited - through a user group or a parent workspace's
|
|
6
|
+
* hierarchy permission - rather than assigned directly. It replaces the remove action (which does not
|
|
7
|
+
* apply to inherited access) with a non-interactive lock icon plus a tooltip explaining that the
|
|
8
|
+
* access is read-only and managed where it is granted.
|
|
9
|
+
*/
|
|
10
|
+
export declare function InheritedIcon({ tooltipMessage }: IInheritedIconProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=InheritedIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InheritedIcon.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/InheritedIcon.tsx"],"names":[],"mappings":"AAIA,UAAU,mBAAmB;IACzB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,cAAc,EAAE,EAAE,mBAAmB,2CAkBpE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { UiIcon, UiTooltip } from "@gooddata/sdk-ui-kit";
|
|
4
|
+
/**
|
|
5
|
+
* Marks a workspace row whose access is inherited - through a user group or a parent workspace's
|
|
6
|
+
* hierarchy permission - rather than assigned directly. It replaces the remove action (which does not
|
|
7
|
+
* apply to inherited access) with a non-interactive lock icon plus a tooltip explaining that the
|
|
8
|
+
* access is read-only and managed where it is granted.
|
|
9
|
+
*/
|
|
10
|
+
export function InheritedIcon({ tooltipMessage }) {
|
|
11
|
+
return (_jsx("div", { className: "gd-grantee-item-inherited s-user-management-workspace-inherited", children: _jsx(UiTooltip, { triggerBy: ["hover", "focus"], hoverOpenDelay: 0, hoverCloseDelay: 0, arrowPlacement: "left", optimalPlacement: true, anchor: _jsx("div", { "aria-label": tooltipMessage, children: _jsx(UiIcon, { type: "lock", size: 14, color: "currentColor", layout: "block" }) }), content: tooltipMessage }) }));
|
|
12
|
+
}
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.d.ts
CHANGED
|
@@ -82,6 +82,12 @@ export declare const workspaceGranularPermissionMessages: {
|
|
|
82
82
|
and: {
|
|
83
83
|
id: string;
|
|
84
84
|
};
|
|
85
|
+
inheritedFromGroup: {
|
|
86
|
+
id: string;
|
|
87
|
+
};
|
|
88
|
+
inheritedFromHierarchy: {
|
|
89
|
+
id: string;
|
|
90
|
+
};
|
|
85
91
|
};
|
|
86
92
|
export declare const granularTooltipMessages: {
|
|
87
93
|
EXPORT: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAErF,eAAO,MAAM,8BAA8B;;;;;;;CAGzC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;CAStC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;CAmB9B,CAAC;AAEF,eAAO,MAAM,mCAAmC
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAErF,eAAO,MAAM,8BAA8B;;;;;;;CAGzC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;CAStC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;CAmB9B,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkB9C,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;CAOlC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;CAuBtC,CAAC;AAEF,eAAO,MAAM,gCAAgC;;CAQ5C,CAAC;AAEF,eAAO,MAAM,uCAAuC;;CAWnD,CAAC"}
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/locales.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// (C) 2023-
|
|
1
|
+
// (C) 2023-2026 GoodData Corporation
|
|
2
2
|
import { defineMessages } from "react-intl";
|
|
3
3
|
export const hierarchicalPermissionMessages = defineMessages({
|
|
4
4
|
enabled: { id: "userManagement.workspace.hierarchicalPermission.yes" },
|
|
@@ -50,6 +50,8 @@ export const workspaceGranularPermissionMessages = defineMessages({
|
|
|
50
50
|
hierarchyTooltip: { id: "userManagement.workspace.granularPermission.hierarchy.tooltip" },
|
|
51
51
|
remove: { id: "userManagement.workspace.permission.remove" },
|
|
52
52
|
and: { id: "userManagement.workspace.permission.and" },
|
|
53
|
+
inheritedFromGroup: { id: "userManagement.workspace.inherited.group" },
|
|
54
|
+
inheritedFromHierarchy: { id: "userManagement.workspace.inherited.hierarchy" },
|
|
53
55
|
});
|
|
54
56
|
export const granularTooltipMessages = defineMessages({
|
|
55
57
|
EXPORT: { id: "userManagement.workspace.permission.export.tooltip" },
|
|
@@ -30,11 +30,19 @@ export declare const useDeleteDialog: () => {
|
|
|
30
30
|
dialogOverlayClassNames: string;
|
|
31
31
|
dialogWrapperClassNames: string;
|
|
32
32
|
};
|
|
33
|
-
export
|
|
33
|
+
export interface IUseUserGroupsParams {
|
|
34
|
+
userId: string;
|
|
35
|
+
organizationId: string;
|
|
36
|
+
bootstrapUserGroupId: string;
|
|
37
|
+
onSuccess: () => void;
|
|
38
|
+
setIsAdmin: (isAdmin: boolean) => void;
|
|
39
|
+
onMembershipChanged: () => void;
|
|
40
|
+
}
|
|
41
|
+
export declare const useUserGroups: ({ userId, organizationId, bootstrapUserGroupId, onSuccess, setIsAdmin, onMembershipChanged, }: IUseUserGroupsParams) => {
|
|
34
42
|
grantedUserGroups: IGrantedUserGroup[] | undefined;
|
|
35
43
|
onUserGroupsChanged: (userGroups: IGrantedUserGroup[]) => void;
|
|
36
44
|
removeGrantedUserGroup: (grantedUserGroup: IGrantedUserGroup) => void;
|
|
37
|
-
removeAdminGroup: () => void
|
|
45
|
+
removeAdminGroup: () => Promise<void>;
|
|
38
46
|
};
|
|
39
47
|
export declare const useUsers: (userGroupId: string, organizationId: string, onSuccess: () => void) => {
|
|
40
48
|
grantedUsers: IUserMember[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialogHooks.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/dialogHooks.ts"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,KAAK,EACV,KAAK,UAAU,EAGlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAIlE,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACjB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,OAAO;;;;;;;CA4BnB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;CAuBxB,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAkCzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAkC9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;CAiB3B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;
|
|
1
|
+
{"version":3,"file":"dialogHooks.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/dialogHooks.ts"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,KAAK,EACV,KAAK,UAAU,EAGlB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAIlE,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACjB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,OAAO;;;;;;;CA4BnB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;CAuBxB,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAkCzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAkC9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;CAiB3B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAGvC,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,aAAa;;;;;CAoFzB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;CAkDpB,CAAC;AAeF,eAAO,MAAM,iBAAiB;;;;;;;;CAwC7B,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;CAmClC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;CAM7B,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;CAMlC,CAAC;AAsBF,eAAO,MAAM,sBAAsB;;;;;CASlC,CAAC"}
|
|
@@ -119,7 +119,7 @@ export const useDeleteDialog = () => {
|
|
|
119
119
|
dialogWrapperClassNames,
|
|
120
120
|
};
|
|
121
121
|
};
|
|
122
|
-
export const useUserGroups = (userId, organizationId, bootstrapUserGroupId, onSuccess, setIsAdmin) => {
|
|
122
|
+
export const useUserGroups = ({ userId, organizationId, bootstrapUserGroupId, onSuccess, setIsAdmin, onMembershipChanged, }) => {
|
|
123
123
|
const { addSuccess, addError } = useToastMessage();
|
|
124
124
|
const backend = useBackendStrict();
|
|
125
125
|
const [grantedUserGroups, setGrantedUserGroups] = useState(undefined);
|
|
@@ -145,6 +145,7 @@ export const useUserGroups = (userId, organizationId, bootstrapUserGroupId, onSu
|
|
|
145
145
|
addSuccess(messages.userGroupRemovedSuccess);
|
|
146
146
|
setGrantedUserGroups(grantedUserGroups?.filter((item) => item.id !== grantedUserGroup.id));
|
|
147
147
|
onSuccess();
|
|
148
|
+
onMembershipChanged();
|
|
148
149
|
})
|
|
149
150
|
.catch((error) => {
|
|
150
151
|
console.error("Removal of user group failed", error);
|
|
@@ -152,18 +153,20 @@ export const useUserGroups = (userId, organizationId, bootstrapUserGroupId, onSu
|
|
|
152
153
|
});
|
|
153
154
|
};
|
|
154
155
|
const hasBootstrapUserGroup = (userGroups) => userGroups?.some((group) => group.id === bootstrapUserGroupId);
|
|
155
|
-
// removes admin group from the user if he is its member, update internal array of groups
|
|
156
|
+
// removes admin group from the user if he is its member, update internal array of groups.
|
|
157
|
+
// Returns the mutation promise so callers can await it and surface a failure instead of swallowing it.
|
|
156
158
|
const removeAdminGroup = () => {
|
|
157
|
-
if (hasBootstrapUserGroup(grantedUserGroups)) {
|
|
158
|
-
|
|
159
|
-
.organization(organizationId)
|
|
160
|
-
.users()
|
|
161
|
-
.removeUsersFromUserGroups([userId], [bootstrapUserGroupId])
|
|
162
|
-
.then(() => setGrantedUserGroups(grantedUserGroups?.filter((item) => item.id !== bootstrapUserGroupId)));
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
void Promise.resolve();
|
|
159
|
+
if (!hasBootstrapUserGroup(grantedUserGroups)) {
|
|
160
|
+
return Promise.resolve();
|
|
166
161
|
}
|
|
162
|
+
return backend
|
|
163
|
+
.organization(organizationId)
|
|
164
|
+
.users()
|
|
165
|
+
.removeUsersFromUserGroups([userId], [bootstrapUserGroupId])
|
|
166
|
+
.then(() => {
|
|
167
|
+
setGrantedUserGroups(grantedUserGroups?.filter((item) => item.id !== bootstrapUserGroupId));
|
|
168
|
+
onMembershipChanged();
|
|
169
|
+
});
|
|
167
170
|
};
|
|
168
171
|
// update internal array with user groups after applied changed in groups edit mode
|
|
169
172
|
const onUserGroupsChanged = (userGroups) => {
|
|
@@ -174,6 +177,7 @@ export const useUserGroups = (userId, organizationId, bootstrapUserGroupId, onSu
|
|
|
174
177
|
setIsAdmin(true);
|
|
175
178
|
}
|
|
176
179
|
onSuccess();
|
|
180
|
+
onMembershipChanged();
|
|
177
181
|
};
|
|
178
182
|
return {
|
|
179
183
|
grantedUserGroups,
|