@gooddata/sdk-ui-ext 11.43.0-alpha.2 → 11.43.0-alpha.3
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 +4826 -13873
- package/esm/internal/components/configurationControls/ConfigSection.d.ts +2 -1
- package/esm/internal/components/configurationControls/ConfigSection.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/ConfigSection.js +7 -3
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.d.ts +4 -0
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.js +13 -2
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.d.ts +5 -0
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.js +5 -3
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.d.ts +13 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.js +158 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.d.ts +12 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.js +54 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.d.ts +14 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.js +32 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.d.ts +28 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.js +149 -0
- package/esm/internal/components/configurationPanels/ConfigurationPanelContent.d.ts +1 -0
- package/esm/internal/components/configurationPanels/ConfigurationPanelContent.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.d.ts +1 -0
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.js +9 -1
- package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.js +3 -3
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.js +2 -2
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.js +3 -3
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.d.ts +1 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.js +2 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.d.ts +1 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.js +3 -3
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.js +3 -5
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.d.ts +1 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.js +2 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.d.ts +3 -0
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.js +33 -5
- package/esm/internal/constants/supportedProperties.d.ts.map +1 -1
- package/esm/internal/constants/supportedProperties.js +1 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/de-DE.localization-bundle.js +12 -1
- package/esm/internal/translations/en-AU.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-AU.localization-bundle.js +12 -1
- package/esm/internal/translations/en-GB.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-GB.localization-bundle.js +12 -1
- package/esm/internal/translations/en-US.localization-bundle.d.ts +168 -0
- package/esm/internal/translations/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-US.localization-bundle.js +168 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-419.localization-bundle.js +12 -1
- package/esm/internal/translations/es-ES.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-ES.localization-bundle.js +12 -1
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fi-FI.localization-bundle.js +12 -1
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-CA.localization-bundle.js +12 -1
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-FR.localization-bundle.js +12 -1
- package/esm/internal/translations/id-ID.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/id-ID.localization-bundle.js +12 -1
- package/esm/internal/translations/it-IT.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/it-IT.localization-bundle.js +12 -1
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ja-JP.localization-bundle.js +12 -1
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ko-KR.localization-bundle.js +12 -1
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/nl-NL.localization-bundle.js +12 -1
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pl-PL.localization-bundle.js +12 -1
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-BR.localization-bundle.js +12 -1
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-PT.localization-bundle.js +12 -1
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ru-RU.localization-bundle.js +12 -1
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/sl-SI.localization-bundle.js +12 -1
- package/esm/internal/translations/th-TH.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/th-TH.localization-bundle.js +12 -1
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/tr-TR.localization-bundle.js +12 -1
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/uk-UA.localization-bundle.js +12 -1
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/vi-VN.localization-bundle.js +12 -1
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-HK.localization-bundle.js +12 -1
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hans.localization-bundle.js +12 -1
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hant.localization-bundle.js +12 -1
- package/esm/internal/utils/propertiesHelper.d.ts +2 -1
- package/esm/internal/utils/propertiesHelper.d.ts.map +1 -1
- package/esm/internal/utils/propertiesHelper.js +3 -0
- package/esm/locales.d.ts +79 -0
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +46 -0
- package/esm/sdk-ui-ext.d.ts +0 -3
- package/package.json +21 -21
- package/styles/css/main.css +238 -0
- package/styles/css/main.css.map +1 -1
- package/styles/internal/css/conditional_formatting.css +239 -0
- package/styles/internal/css/conditional_formatting.css.map +1 -0
- package/styles/internal/css/config_panel.css +5 -0
- package/styles/internal/css/config_panel.css.map +1 -1
- package/styles/internal/scss/conditional_formatting.scss +269 -0
- package/styles/internal/scss/config_panel.scss +11 -0
- package/styles/scss/main.scss +1 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { v4 as uuid } from "uuid";
|
|
3
|
+
import { attributeAlias, attributeLocalId, bucketAttributes, insightBucket, insightMeasures, measureAlias, measureLocalId, measureTitle, } from "@gooddata/sdk-model";
|
|
4
|
+
import { BucketNames } from "@gooddata/sdk-ui";
|
|
5
|
+
import { CF_DEFAULT_COLOR } from "./conditionalFormattingColors.js";
|
|
6
|
+
const targetToValue = (target) => target.kind === "measure"
|
|
7
|
+
? `measure:${target.measureIdentifier}`
|
|
8
|
+
: `attribute:${target.attributeIdentifier}`;
|
|
9
|
+
/**
|
|
10
|
+
* Builds a `localIdentifier -> display title` map from the executed data view. Attribute titles live
|
|
11
|
+
* only on the result headers (not on the insight/buckets), so this is the only reliable source for
|
|
12
|
+
* human attribute names; measures also resolve to their final header name here.
|
|
13
|
+
*/
|
|
14
|
+
export function buildTitlesByLocalId(dataView) {
|
|
15
|
+
const titles = {};
|
|
16
|
+
for (const measure of dataView.meta().measureDescriptors()) {
|
|
17
|
+
titles[measure.measureHeaderItem.localIdentifier] = measure.measureHeaderItem.name;
|
|
18
|
+
}
|
|
19
|
+
for (const attribute of dataView.meta().attributeDescriptors()) {
|
|
20
|
+
titles[attribute.attributeHeader.localIdentifier] = attribute.attributeHeader.formOf.name;
|
|
21
|
+
}
|
|
22
|
+
return titles;
|
|
23
|
+
}
|
|
24
|
+
export function buildTargetOptions(insight,
|
|
25
|
+
// Resolved data-view titles keyed by localIdentifier; preferred over the insight's own (often
|
|
26
|
+
// absent) titles/aliases. Empty until the first data view arrives.
|
|
27
|
+
titles = {}) {
|
|
28
|
+
const measures = insightMeasures(insight).map((measure) => {
|
|
29
|
+
const localId = measureLocalId(measure);
|
|
30
|
+
const target = { kind: "measure", measureIdentifier: localId };
|
|
31
|
+
return {
|
|
32
|
+
value: targetToValue(target),
|
|
33
|
+
title: titles[localId] ?? measureTitle(measure) ?? measureAlias(measure) ?? localId,
|
|
34
|
+
target,
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
// Only ROW attributes are offerable: a rule formats a row/cell by the row's value, and a row
|
|
38
|
+
// attribute has a per-row element. Column attributes define columns (no per-row value), so they
|
|
39
|
+
// can't be honored here — we don't list what we can't apply. (Column highlighting would be its
|
|
40
|
+
// own feature.) Falls back to none when the rows bucket is absent.
|
|
41
|
+
const rowsBucket = insightBucket(insight, BucketNames.ATTRIBUTE);
|
|
42
|
+
const rowAttributes = rowsBucket ? bucketAttributes(rowsBucket) : [];
|
|
43
|
+
const attributes = rowAttributes.map((attribute) => {
|
|
44
|
+
const localId = attributeLocalId(attribute);
|
|
45
|
+
const target = { kind: "attribute", attributeIdentifier: localId };
|
|
46
|
+
return {
|
|
47
|
+
value: targetToValue(target),
|
|
48
|
+
title: titles[localId] ?? attributeAlias(attribute) ?? localId,
|
|
49
|
+
target,
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
return [...measures, ...attributes];
|
|
53
|
+
}
|
|
54
|
+
export const findTargetOption = (options, target) => options.find((option) => option.value === targetToValue(target));
|
|
55
|
+
export const targetLocalId = (target) => target.kind === "measure" ? target.measureIdentifier : target.attributeIdentifier;
|
|
56
|
+
// --- Operators -------------------------------------------------------------------------------
|
|
57
|
+
const NO_VALUE_OPERATORS = new Set([
|
|
58
|
+
"ALL",
|
|
59
|
+
"IS_EMPTY",
|
|
60
|
+
"IS_NOT_EMPTY",
|
|
61
|
+
]);
|
|
62
|
+
const RANGE_OPERATORS = new Set(["BETWEEN", "NOT_BETWEEN"]);
|
|
63
|
+
const MEASURE_OPERATORS = [
|
|
64
|
+
"ALL",
|
|
65
|
+
"EQUAL_TO",
|
|
66
|
+
"NOT_EQUAL_TO",
|
|
67
|
+
"GREATER_THAN",
|
|
68
|
+
"GREATER_THAN_OR_EQUAL_TO",
|
|
69
|
+
"LESS_THAN",
|
|
70
|
+
"LESS_THAN_OR_EQUAL_TO",
|
|
71
|
+
"BETWEEN",
|
|
72
|
+
"NOT_BETWEEN",
|
|
73
|
+
"IS_EMPTY",
|
|
74
|
+
"IS_NOT_EMPTY",
|
|
75
|
+
];
|
|
76
|
+
const ATTRIBUTE_OPERATORS = [
|
|
77
|
+
"ALL",
|
|
78
|
+
"EQUAL_TO",
|
|
79
|
+
"NOT_EQUAL_TO",
|
|
80
|
+
"CONTAINS",
|
|
81
|
+
"NOT_CONTAINS",
|
|
82
|
+
"STARTS_WITH",
|
|
83
|
+
"NOT_STARTS_WITH",
|
|
84
|
+
"ENDS_WITH",
|
|
85
|
+
"NOT_ENDS_WITH",
|
|
86
|
+
"IS_EMPTY",
|
|
87
|
+
"IS_NOT_EMPTY",
|
|
88
|
+
];
|
|
89
|
+
export const operatorsForKind = (kind) => (kind === "measure" ? MEASURE_OPERATORS : ATTRIBUTE_OPERATORS);
|
|
90
|
+
// Shared operator glyphs from sdk-ui-kit (same icons the measure-value-filter uses). Numeric/common
|
|
91
|
+
// operators have icons; text and empty operators render label-only (matching the attribute filter).
|
|
92
|
+
const OPERATOR_ICON_NAMES = {
|
|
93
|
+
ALL: "all",
|
|
94
|
+
GREATER_THAN: "greater-than",
|
|
95
|
+
GREATER_THAN_OR_EQUAL_TO: "greater-than-equal-to",
|
|
96
|
+
LESS_THAN: "less-than",
|
|
97
|
+
LESS_THAN_OR_EQUAL_TO: "less-than-equal-to",
|
|
98
|
+
EQUAL_TO: "equal-to",
|
|
99
|
+
NOT_EQUAL_TO: "not-equal-to",
|
|
100
|
+
BETWEEN: "between",
|
|
101
|
+
NOT_BETWEEN: "not-between",
|
|
102
|
+
};
|
|
103
|
+
export const operatorIcon = (operator) => {
|
|
104
|
+
const name = OPERATOR_ICON_NAMES[operator];
|
|
105
|
+
return name ? `gd-icon-${name}` : undefined;
|
|
106
|
+
};
|
|
107
|
+
// Type icon distinguishing attribute (ABC) from measure (metric) targets — same icons AD uses
|
|
108
|
+
// elsewhere for catalog/bucket items.
|
|
109
|
+
export const targetIcon = (kind) => kind === "attribute" ? "gd-icon-attribute" : "gd-icon-metric";
|
|
110
|
+
export const operatorArity = (operator) => {
|
|
111
|
+
if (NO_VALUE_OPERATORS.has(operator)) {
|
|
112
|
+
return "none";
|
|
113
|
+
}
|
|
114
|
+
return RANGE_OPERATORS.has(operator) ? "range" : "single";
|
|
115
|
+
};
|
|
116
|
+
// --- Factories -------------------------------------------------------------------------------
|
|
117
|
+
export const newCondition = () => ({
|
|
118
|
+
id: uuid(),
|
|
119
|
+
operator: "ALL",
|
|
120
|
+
value: { kind: "none" },
|
|
121
|
+
// Default: colored text on a transparent background (no fill).
|
|
122
|
+
format: { color: CF_DEFAULT_COLOR, scope: "cell" },
|
|
123
|
+
});
|
|
124
|
+
export const newRule = (target) => ({
|
|
125
|
+
id: uuid(),
|
|
126
|
+
target,
|
|
127
|
+
conditions: [newCondition()],
|
|
128
|
+
});
|
|
129
|
+
// --- Validation ------------------------------------------------------------------------------
|
|
130
|
+
const isConditionComplete = (condition, kind) => {
|
|
131
|
+
const { value } = condition;
|
|
132
|
+
switch (operatorArity(condition.operator)) {
|
|
133
|
+
case "none":
|
|
134
|
+
return true;
|
|
135
|
+
case "range":
|
|
136
|
+
return value.kind === "literalRange" && Number.isFinite(value.from) && Number.isFinite(value.to);
|
|
137
|
+
case "single":
|
|
138
|
+
if (value.kind !== "literal") {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
// Guard the empty string first: `Number("") === 0` (not NaN), which would otherwise let an
|
|
142
|
+
// empty measure threshold pass as a valid 0.
|
|
143
|
+
return (String(value.value).trim() !== "" &&
|
|
144
|
+
(kind === "attribute" || !Number.isNaN(Number(value.value))));
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
/** A rule is saveable when every condition has the operand its operator requires. */
|
|
148
|
+
export const isRuleComplete = (rule) => rule.conditions.length > 0 &&
|
|
149
|
+
rule.conditions.every((condition) => isConditionComplete(condition, rule.target.kind));
|
|
@@ -15,6 +15,7 @@ export interface IConfigurationPanelContentProps<PanelConfig = any> {
|
|
|
15
15
|
isError?: boolean;
|
|
16
16
|
isLoading?: boolean;
|
|
17
17
|
insight?: IInsightDefinition;
|
|
18
|
+
titlesByLocalId?: Record<string, string>;
|
|
18
19
|
featureFlags?: ISettings;
|
|
19
20
|
permissions?: IWorkspacePermissions;
|
|
20
21
|
axis?: string;
|
|
@@ -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,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,CA0C/C;IAED,SAAS,CAAC,qBAAqB,IAAI,SAAS,CAsB3C;IAED,SAAS,CAAC,sBAAsB,IAAI,SAAS,CAqC5C;IAED,SAAS,CAAC,0BAA0B,IAAI,SAAS,CAehD;IAED,SAAS,CAAC,qBAAqB,IAAI,SAAS,CAU3C;CACJ"}
|
|
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,CA0C/C;IAED,SAAS,CAAC,qBAAqB,IAAI,SAAS,CAsB3C;IAED,SAAS,CAAC,sBAAsB,IAAI,SAAS,CAqC5C;IAED,SAAS,CAAC,0BAA0B,IAAI,SAAS,CAehD;IAED,SAAS,CAAC,qBAAqB,IAAI,SAAS,CAU3C;CACJ"}
|
|
@@ -8,6 +8,7 @@ export declare class PivotTableConfigurationPanel extends ConfigurationPanelCont
|
|
|
8
8
|
private isPositionControlDisabled;
|
|
9
9
|
private isColumnHeadersPositionControlDisabled;
|
|
10
10
|
private renderCanvasSection;
|
|
11
|
+
private renderConditionalFormattingSection;
|
|
11
12
|
private renderPagingSection;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=PivotTableConfigurationPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotTableConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/internal/components/configurationPanels/PivotTableConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PivotTableConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/internal/components/configurationPanels/PivotTableConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAyBvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,4BAA6B,SAAQ,yBAAyB;IACvE,UAAmB,iBAAiB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAgBvE;IAED,SAAS,CAAC,wBAAwB,IAAI,SAAS,CAyB9C;IAED,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,sCAAsC;IAU9C,OAAO,CAAC,mBAAmB;IAqD3B,OAAO,CAAC,kCAAkC;IAe1C,OAAO,CAAC,mBAAmB;CAY9B"}
|
|
@@ -8,6 +8,7 @@ import { BUBBLE_ARROW_OFFSET_X, BUBBLE_ARROW_OFFSET_Y, HIDE_DELAY_DEFAULT, SHOW_
|
|
|
8
8
|
import { isSetColumnHeadersPositionToLeftAllowed } from "../../utils/controlsHelper.js";
|
|
9
9
|
import { CellsControl } from "../configurationControls/CellsControl.js";
|
|
10
10
|
import { ColumnHeadersPositionControl } from "../configurationControls/ColumnHeadersPositionControl.js";
|
|
11
|
+
import { ConditionalFormattingSection } from "../configurationControls/conditionalFormatting/ConditionalFormattingSection.js";
|
|
11
12
|
import { ConfigDummySection } from "../configurationControls/ConfigDummySection.js";
|
|
12
13
|
import { ConfigSection } from "../configurationControls/ConfigSection.js";
|
|
13
14
|
import { GrandTotalsControl } from "../configurationControls/GrandTotalsControl.js";
|
|
@@ -32,8 +33,11 @@ export class PivotTableConfigurationPanel extends ConfigurationPanelContent {
|
|
|
32
33
|
const { featureFlags } = this.props;
|
|
33
34
|
const enableNewPivotTable = featureFlags?.enableNewPivotTable ?? true;
|
|
34
35
|
const enablePivotTablePagination = featureFlags?.enablePivotTablePagination ?? true;
|
|
36
|
+
const enableConditionalFormatting = featureFlags?.enableConditionalFormatting ?? false;
|
|
35
37
|
return (_jsxs(BubbleHoverTrigger, { showDelay: SHOW_DELAY_DEFAULT, hideDelay: HIDE_DELAY_DEFAULT, children: [
|
|
36
|
-
_jsxs("div", { children: [this.renderInteractionsSection(), enableNewPivotTable && enablePivotTablePagination ? this.renderPagingSection() : null, this.renderCanvasSection()
|
|
38
|
+
_jsxs("div", { children: [this.renderInteractionsSection(), enableNewPivotTable && enablePivotTablePagination ? this.renderPagingSection() : null, this.renderCanvasSection(), enableNewPivotTable && enableConditionalFormatting
|
|
39
|
+
? this.renderConditionalFormattingSection()
|
|
40
|
+
: null] }), _jsx(Bubble, { className: this.getBubbleClassNames(), arrowOffsets: { "tc bc": [BUBBLE_ARROW_OFFSET_X, BUBBLE_ARROW_OFFSET_Y] }, alignPoints: [{ align: "tc bc" }], children: _jsx(FormattedMessage, { id: "properties.config.not_applicable" }) })
|
|
37
41
|
] }));
|
|
38
42
|
}
|
|
39
43
|
getBubbleClassNames() {
|
|
@@ -69,6 +73,10 @@ export class PivotTableConfigurationPanel extends ConfigurationPanelContent {
|
|
|
69
73
|
] })) : null] }));
|
|
70
74
|
return panelConfig.supportsAttributeHierarchies ? (_jsx(ConfigSection, { id: "canvas_section", className: "gd-table-canvas-section", title: messages["canvasTitle"].id, propertiesMeta: propertiesMeta, pushData: pushData, children: canvasSection })) : (canvasSection);
|
|
71
75
|
}
|
|
76
|
+
renderConditionalFormattingSection() {
|
|
77
|
+
const { properties, propertiesMeta, insight, titlesByLocalId, pushData, isLoading } = this.props;
|
|
78
|
+
return (_jsx(ConditionalFormattingSection, { properties: properties, propertiesMeta: propertiesMeta, insight: insight, titlesByLocalId: titlesByLocalId, pushData: pushData, isLoading: isLoading }));
|
|
79
|
+
}
|
|
72
80
|
renderPagingSection() {
|
|
73
81
|
const { properties, pushData, isLoading, propertiesMeta } = this.props;
|
|
74
82
|
return (_jsx(PagingSection, { properties: properties, propertiesMeta: propertiesMeta, pushData: pushData, isDisabled: isLoading }));
|
package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWorkspaceToSubjects.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAA0B,KAAK,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAMrF;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACrE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,EAAE,0BAA0B,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AddWorkspaceToSubjects.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAA0B,KAAK,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAMrF;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACrE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,EAAE,0BAA0B,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAgCD;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;CAAiD,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2023-
|
|
2
|
+
// (C) 2023-2026 GoodData Corporation
|
|
3
3
|
import { Overlay } from "@gooddata/sdk-ui-kit";
|
|
4
4
|
import { OrganizationIdProvider } from "./OrganizationIdContext.js";
|
|
5
5
|
import { withTelemetry } from "./TelemetryContext.js";
|
|
6
6
|
import { AddWorkspace } from "./Workspace/AddWorkspace.js";
|
|
7
7
|
const alignPoints = [{ align: "cc cc" }];
|
|
8
8
|
const noGrantedWorkspaces = [];
|
|
9
|
-
function AddWorkspaceToSubjectsComponent({ ids, subjectType, organizationId, onSuccess, onClose,
|
|
10
|
-
return (_jsx(OrganizationIdProvider, { organizationId: organizationId, children: _jsx(Overlay, { alignPoints: alignPoints, isModal: true, positionType: "fixed", className: "gd-user-management-dialog", resizeObserverThreshold: 0.2, children: _jsx(AddWorkspace, { ids: ids, subjectType: subjectType, grantedWorkspaces: noGrantedWorkspaces, enableBackButton: false, onSubmit: onSuccess, onCancel: onClose, onClose: onClose
|
|
9
|
+
function AddWorkspaceToSubjectsComponent({ ids, subjectType, organizationId, onSuccess, onClose, }) {
|
|
10
|
+
return (_jsx(OrganizationIdProvider, { organizationId: organizationId, children: _jsx(Overlay, { alignPoints: alignPoints, isModal: true, positionType: "fixed", className: "gd-user-management-dialog", resizeObserverThreshold: 0.2, children: _jsx(AddWorkspace, { ids: ids, subjectType: subjectType, grantedWorkspaces: noGrantedWorkspaces, enableBackButton: false, onSubmit: onSuccess, onCancel: onClose, onClose: onClose }) }) }));
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* @internal
|
|
@@ -13,7 +13,6 @@ export interface IUserEditDialogProps extends IWithTelemetryProps {
|
|
|
13
13
|
onSuccess: () => void;
|
|
14
14
|
onClose: () => void;
|
|
15
15
|
renderDataSourceIcon?: (dataSource: IGrantedDataSource) => ReactElement;
|
|
16
|
-
areFilterViewsEnabled?: boolean;
|
|
17
16
|
isSystemAccountFilteringEnabled?: boolean;
|
|
18
17
|
selectedTab?: UserTabId;
|
|
19
18
|
}
|
|
@@ -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
|
|
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;AA2QD;;GAEG;AACH,eAAO,MAAM,cAAc;;;CAAyC,CAAC"}
|
|
@@ -23,7 +23,7 @@ import { ViewDialog } from "./ViewDialog.js";
|
|
|
23
23
|
import { AddWorkspace } from "./Workspace/AddWorkspace.js";
|
|
24
24
|
import { WorkspaceList } from "./Workspace/WorkspaceList.js";
|
|
25
25
|
const alignPoints = [{ align: "cc cc" }];
|
|
26
|
-
function UserEditDialogComponent({ userId, organizationId, isAdmin, onSuccess, onClose, initialView = "VIEW", changeUserMembership = false, renderDataSourceIcon,
|
|
26
|
+
function UserEditDialogComponent({ userId, organizationId, isAdmin, onSuccess, onClose, initialView = "VIEW", changeUserMembership = false, renderDataSourceIcon, isSystemAccountFilteringEnabled = false, selectedTab = undefined, }) {
|
|
27
27
|
const intl = useIntl();
|
|
28
28
|
const { dialogMode, setDialogMode } = useUserDialogMode(initialView);
|
|
29
29
|
const { user, isCurrentlyAdmin, onUserDetailsChanged, setIsAdmin, error, isLoading: userIsLoading, } = useUser(userId, organizationId, isAdmin, onSuccess);
|
|
@@ -82,7 +82,7 @@ function UserEditDialogComponent({ userId, organizationId, isAdmin, onSuccess, o
|
|
|
82
82
|
_jsx(LoadingComponent, { className: "gd-user-management-dialog-loading" }), _jsx(ErrorDialog, { dialogTitle: "", onClose: onClose })
|
|
83
83
|
] })) : error ? (_jsx(ErrorDialog, { onClose: onClose, dialogTitle: intl.formatMessage(messages.userLoadingErrorTitle), children: _jsx(Message, { type: "error", className: "gd-user-management-dialog-error", children: intl.formatMessage(isUnexpectedResponseError(error) && error.httpStatus === 404
|
|
84
84
|
? messages.userLoadingErrorNotExist
|
|
85
|
-
: messages.userLoadingErrorUnknown) }) })) : (_jsxs(_Fragment, { children: [dialogMode === "VIEW" && (_jsxs(ViewDialog, { dialogTitle: extractUserName(user), isAdmin: isCurrentlyAdmin, isDeleteLinkEnabled: !isBootstrapUser(user), deleteLinkDisabledTooltipTextId: messages.deleteUserDisabledTooltip.id, deleteLinkText: intl.formatMessage(messages.deleteUserLink), onOpenDeleteDialog: onOpenDeleteDialog, onClose: onClose, onEdit: () => setDialogMode(editButtonMode), editButtonText: editButtonText, editButtonIconClassName: editButtonIconClassName, children: [isCurrentlyAdmin ? (_jsx("div", { className: "gd-message information gd-user-management-admin-alert s-admin-message", children: _jsx("div", { className: "gd-message-text", children: intl.formatMessage(messages.adminAlert) }) })) : null, _jsx(Tabs, { selectedTabId: selectedTabId.id, onTabSelect: setSelectedTabId, tabs: tabs, className: "gd-user-management-dialog-tabs s-user-management-tabs" }), selectedTabId.id === userDialogTabsMessages.workspaces.id && (_jsx(WorkspaceList, { workspaces: grantedWorkspaces, subjectType: "user", mode: "VIEW", onDelete: removeGrantedWorkspace, onChange: updateGrantedWorkspace,
|
|
85
|
+
: messages.userLoadingErrorUnknown) }) })) : (_jsxs(_Fragment, { children: [dialogMode === "VIEW" && (_jsxs(ViewDialog, { dialogTitle: extractUserName(user), isAdmin: isCurrentlyAdmin, isDeleteLinkEnabled: !isBootstrapUser(user), deleteLinkDisabledTooltipTextId: messages.deleteUserDisabledTooltip.id, deleteLinkText: intl.formatMessage(messages.deleteUserLink), onOpenDeleteDialog: onOpenDeleteDialog, onClose: onClose, onEdit: () => setDialogMode(editButtonMode), editButtonText: editButtonText, editButtonIconClassName: editButtonIconClassName, children: [isCurrentlyAdmin ? (_jsx("div", { className: "gd-message information gd-user-management-admin-alert s-admin-message", children: _jsx("div", { className: "gd-message-text", children: intl.formatMessage(messages.adminAlert) }) })) : null, _jsx(Tabs, { selectedTabId: selectedTabId.id, onTabSelect: setSelectedTabId, tabs: tabs, className: "gd-user-management-dialog-tabs s-user-management-tabs" }), selectedTabId.id === userDialogTabsMessages.workspaces.id && (_jsx(WorkspaceList, { workspaces: grantedWorkspaces, subjectType: "user", mode: "VIEW", onDelete: removeGrantedWorkspace, onChange: updateGrantedWorkspace, onClick: handleWorkspaceEdit })), selectedTabId.id === userDialogTabsMessages.userGroups.id && (_jsx(UserGroupsList, { userGroups: grantedUserGroups, mode: "VIEW", onDelete: removeGrantedUserGroup, isBootstrapUser: isBootstrapUser(user), bootstrapUserGroupId: bootstrapUserGroupId })), selectedTabId.id === userDialogTabsMessages.details.id && (_jsx(UserDetailsView, { user: user, isAdmin: isCurrentlyAdmin, isBootstrapUser: isBootstrapUser(user), mode: "VIEW", isSystemAccountFilteringEnabled: isSystemAccountFilteringEnabled })), selectedTabId.id === userDialogTabsMessages.dataSources.id && (_jsx(DataSourceList, { dataSources: grantedDataSources, subjectType: "user", mode: "VIEW", onDelete: removeGrantedDataSource, onChange: updateGrantedDataSource, renderDataSourceIcon: renderDataSourceIcon }))] })), dialogMode === "WORKSPACE" && (_jsx(AddWorkspace, { ids: [userId], subjectType: "user", grantedWorkspaces: grantedWorkspaces, enableBackButton: !isOpenedInEditMode, onSubmit: handleWorkspaceChanged, onCancel: isOpenedInEditMode ? onClose : handleWorkspaceCancel, onClose: onClose, editWorkspace: workspaceToEdit })), dialogMode === "USER_GROUPS" && (_jsx(AddUserGroup, { userIds: [userId], grantedUserGroups: grantedUserGroups, enableBackButton: !isOpenedInEditMode, onSubmit: onUserGroupsChanged, onCancel: isOpenedInEditMode ? onClose : () => setDialogMode("VIEW"), onClose: onClose })), dialogMode === "DATA_SOURCES" && (_jsx(AddDataSource, { ids: [userId], subjectType: "user", grantedDataSources: grantedDataSources, enableBackButton: !isOpenedInEditMode, onSubmit: onDataSourcesChanged, onCancel: isOpenedInEditMode ? onClose : () => setDialogMode("VIEW"), onClose: onClose, renderDataSourceIcon: renderDataSourceIcon })), dialogMode === "DETAIL" && (_jsx(EditUserDetails, { user: user, isAdmin: isCurrentlyAdmin, isBootstrapUser: isBootstrapUser(user), enableBackButton: !isOpenedInEditMode, changeUserMembership: changeUserMembership, isSystemAccountFilteringEnabled: isSystemAccountFilteringEnabled, onSubmit: onUserDetailsChanged, onCancel: isOpenedInEditMode ? onClose : () => setDialogMode("VIEW"), onClose: onClose, removeAdminGroup: removeAdminGroup }))] })) }) })
|
|
86
86
|
] }));
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
@@ -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;
|
|
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;AAwQD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;CAA8C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2023-
|
|
2
|
+
// (C) 2023-2026 GoodData Corporation
|
|
3
3
|
import { useMemo, useState } from "react";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { isUnexpectedResponseError } from "@gooddata/sdk-backend-spi";
|
|
@@ -23,7 +23,7 @@ import { ViewDialog } from "./ViewDialog.js";
|
|
|
23
23
|
import { AddWorkspace } from "./Workspace/AddWorkspace.js";
|
|
24
24
|
import { WorkspaceList } from "./Workspace/WorkspaceList.js";
|
|
25
25
|
const alignPoints = [{ align: "cc cc" }];
|
|
26
|
-
function UserGroupEditDialogComponent({ userGroupId, organizationId, isAdmin, onSuccess, onClose, initialView = "VIEW", renderDataSourceIcon,
|
|
26
|
+
function UserGroupEditDialogComponent({ userGroupId, organizationId, isAdmin, onSuccess, onClose, initialView = "VIEW", renderDataSourceIcon, }) {
|
|
27
27
|
const intl = useIntl();
|
|
28
28
|
const { dialogMode, setDialogMode } = useUserGroupDialogMode(initialView);
|
|
29
29
|
const { userGroup, onUserGroupDetailsChanged, error, isLoading: userGroupIsLoading, } = useUserGroup(userGroupId, organizationId, onSuccess);
|
|
@@ -84,7 +84,7 @@ function UserGroupEditDialogComponent({ userGroupId, organizationId, isAdmin, on
|
|
|
84
84
|
? messages.userGroupLoadingErrorNotExist
|
|
85
85
|
: messages.userGroupLoadingErrorUnknown) }) })) : (_jsxs(_Fragment, { children: [dialogMode === "VIEW" && (_jsxs(ViewDialog, { dialogTitle: extractUserGroupName(userGroup), isAdmin: isAdmin, isDeleteLinkEnabled: !isBootstrapUserGroup(userGroup) && grantedUsers?.length === 0, deleteLinkDisabledTooltipTextId: isBootstrapUserGroup(userGroup)
|
|
86
86
|
? messages.deleteAdminUserGroupTooltip.id
|
|
87
|
-
: messages.deleteNonEmptyUserGroupTooltip.id, deleteLinkText: intl.formatMessage(messages.deleteUserGroupLink), onOpenDeleteDialog: onOpenDeleteDialog, onClose: onClose, onEdit: () => setDialogMode(editButtonMode), editButtonText: editButtonText, editButtonIconClassName: editButtonIconClassName, children: [isAdmin ? (_jsx("div", { className: "gd-message information gd-user-management-admin-alert s-admin-message", children: _jsx("div", { className: "gd-message-text", children: intl.formatMessage(messages.adminGroupAlert) }) })) : null, _jsx(Tabs, { selectedTabId: selectedTabId.id, onTabSelect: setSelectedTabId, tabs: tabs, className: "gd-user-management-dialog-tabs s-user-management-tabs" }), selectedTabId.id === userGroupDialogTabsMessages.workspaces.id && (_jsx(WorkspaceList, { workspaces: grantedWorkspaces, subjectType: "userGroup", mode: "VIEW", onDelete: removeGrantedWorkspace, onChange: updateGrantedWorkspace,
|
|
87
|
+
: messages.deleteNonEmptyUserGroupTooltip.id, deleteLinkText: intl.formatMessage(messages.deleteUserGroupLink), onOpenDeleteDialog: onOpenDeleteDialog, onClose: onClose, onEdit: () => setDialogMode(editButtonMode), editButtonText: editButtonText, editButtonIconClassName: editButtonIconClassName, children: [isAdmin ? (_jsx("div", { className: "gd-message information gd-user-management-admin-alert s-admin-message", children: _jsx("div", { className: "gd-message-text", children: intl.formatMessage(messages.adminGroupAlert) }) })) : null, _jsx(Tabs, { selectedTabId: selectedTabId.id, onTabSelect: setSelectedTabId, tabs: tabs, className: "gd-user-management-dialog-tabs s-user-management-tabs" }), selectedTabId.id === userGroupDialogTabsMessages.workspaces.id && (_jsx(WorkspaceList, { workspaces: grantedWorkspaces, subjectType: "userGroup", mode: "VIEW", onDelete: removeGrantedWorkspace, onChange: updateGrantedWorkspace, onClick: handleWorkspaceEdit })), selectedTabId.id === userGroupDialogTabsMessages.dataSources.id && (_jsx(DataSourceList, { dataSources: grantedDataSources, subjectType: "userGroup", mode: "VIEW", onDelete: removeGrantedDataSource, onChange: updateGrantedDataSource, renderDataSourceIcon: renderDataSourceIcon })), selectedTabId.id === userGroupDialogTabsMessages.users.id && (_jsx(UsersList, { users: grantedUsers, mode: "VIEW", onDelete: removeGrantedUsers, isBootstrapUserGroup: isBootstrapUserGroup(userGroup), bootstrapUserId: bootstrapUserId })), selectedTabId.id === userGroupDialogTabsMessages.details.id && (_jsx(UserGroupDetailsView, { userGroup: userGroup, mode: "VIEW" }))] })), dialogMode === "WORKSPACE" && (_jsx(AddWorkspace, { ids: [userGroupId], subjectType: "userGroup", grantedWorkspaces: grantedWorkspaces, enableBackButton: !isOpenedInEditMode, onSubmit: handleWorkspaceChanged, onCancel: isOpenedInEditMode ? onClose : handleWorkspaceCancel, onClose: onClose, editWorkspace: workspaceToEdit })), dialogMode === "USERS" && (_jsx(AddUser, { userGroupIds: [userGroupId], grantedUsers: grantedUsers, enableBackButton: !isOpenedInEditMode, onSubmit: onUsersChanged, onCancel: isOpenedInEditMode ? onClose : () => setDialogMode("VIEW"), onClose: onClose })), dialogMode === "DATA_SOURCES" && (_jsx(AddDataSource, { ids: [userGroupId], subjectType: "userGroup", grantedDataSources: grantedDataSources, enableBackButton: !isOpenedInEditMode, onSubmit: onDataSourcesChanged, onCancel: isOpenedInEditMode ? onClose : () => setDialogMode("VIEW"), onClose: onClose, renderDataSourceIcon: renderDataSourceIcon })), dialogMode === "DETAIL" && (_jsx(EditUserGroupDetails, { userGroup: userGroup, enableBackButton: !isOpenedInEditMode, onSubmit: onUserGroupDetailsChanged, onCancel: isOpenedInEditMode ? onClose : () => setDialogMode("VIEW"), onClose: onClose }))] })) }) })
|
|
88
88
|
] }));
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
@@ -7,8 +7,7 @@ export interface IAddWorkspaceProps {
|
|
|
7
7
|
onSubmit: (workspaces: IGrantedWorkspace[]) => void;
|
|
8
8
|
onCancel: () => void;
|
|
9
9
|
onClose: () => void;
|
|
10
|
-
areFilterViewsEnabled: boolean;
|
|
11
10
|
editWorkspace?: IGrantedWorkspace;
|
|
12
11
|
}
|
|
13
|
-
export declare function AddWorkspace({ ids, subjectType, grantedWorkspaces, enableBackButton, onSubmit, onCancel, onClose,
|
|
12
|
+
export declare function AddWorkspace({ ids, subjectType, grantedWorkspaces, enableBackButton, onSubmit, onCancel, onClose, editWorkspace }: IAddWorkspaceProps): import("react/jsx-runtime").JSX.Element;
|
|
14
13
|
//# sourceMappingURL=AddWorkspace.d.ts.map
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWorkspace.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAUtF,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,EAAE,0BAA0B,CAAC;IACxC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IACnD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"AddWorkspace.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAUtF,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,EAAE,0BAA0B,CAAC;IACxC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IACnD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAED,wBAAgB,YAAY,CAAC,EACzB,GAAG,EACH,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,aAAa,EAChB,EAAE,kBAAkB,2CAmEpB"}
|
|
@@ -8,7 +8,7 @@ import { AddSingleWorkspaceSelect } from "./AddSingleWorkspaceSelect.js";
|
|
|
8
8
|
import { useAddWorkspace } from "./useAddWorkspace.js";
|
|
9
9
|
import { GranularPermissions } from "./WorkspaceItem/GranularPermissions.js";
|
|
10
10
|
import { areRedundantPermissionsPresent, areWorkspacePermissionsEqual, } from "./WorkspaceItem/granularPermissionUtils.js";
|
|
11
|
-
export function AddWorkspace({ ids, subjectType, grantedWorkspaces, enableBackButton, onSubmit, onCancel, onClose,
|
|
11
|
+
export function AddWorkspace({ ids, subjectType, grantedWorkspaces, enableBackButton, onSubmit, onCancel, onClose, editWorkspace, }) {
|
|
12
12
|
const intl = useIntl();
|
|
13
13
|
const { addedWorkspaces, isProcessing, onAdd, onChange, onOverwriteSelect } = useAddWorkspace(ids, subjectType, onSubmit, onCancel, editWorkspace);
|
|
14
14
|
const isGranularPermissionsChanged = useMemo(() => {
|
|
@@ -26,6 +26,6 @@ export function AddWorkspace({ ids, subjectType, grantedWorkspaces, enableBackBu
|
|
|
26
26
|
}), href: "https://www.gooddata.com/docs/cloud/manage-organization/manage-permissions/set-permissions-for-workspace/", iconClass: "gd-icon-circle-question" }) }));
|
|
27
27
|
}, [intl]);
|
|
28
28
|
return (_jsxs(ConfirmDialogBase, { className: "gd-share-dialog gd-share-dialog-add-workspace s-user-management-add-workspace", displayCloseButton: true, isPositive: true, isSubmitDisabled: addedWorkspaces.length === 0 || isProcessing || !isGranularPermissionsChanged, showProgressIndicator: isProcessing, headline: intl.formatMessage(editWorkspace ? messages.editWorkspaceDialogTitle : messages.addWorkspaceDialogTitle), cancelButtonText: intl.formatMessage(messages.addWorkspaceDialogCloseButton), submitButtonText: intl.formatMessage(messages.addWorkspaceDialogSaveButton), onCancel: onCancel, onSubmit: onAdd, onClose: onClose, headerLeftButtonRenderer: enableBackButton ? backButtonRenderer : undefined, footerLeftRenderer: leftFooterRenderer, children: [
|
|
29
|
-
_jsx(AddSingleWorkspaceSelect, { addedWorkspace: addedWorkspaces[0], grantedWorkspaces: grantedWorkspaces, onSelectWorkspace: onOverwriteSelect, mode: editWorkspace ? "VIEW" : "EDIT" }), _jsx(GranularPermissions, { workspace: addedWorkspaces[0], onChange: onChange,
|
|
29
|
+
_jsx(AddSingleWorkspaceSelect, { addedWorkspace: addedWorkspaces[0], grantedWorkspaces: grantedWorkspaces, onSelectWorkspace: onOverwriteSelect, mode: editWorkspace ? "VIEW" : "EDIT" }), _jsx(GranularPermissions, { workspace: addedWorkspaces[0], onChange: onChange, showRedundancyWarningMessage: showRedundancyWarningMessage })
|
|
30
30
|
] }));
|
|
31
31
|
}
|
|
@@ -2,9 +2,8 @@ import { type IGrantedWorkspace } from "../../types.js";
|
|
|
2
2
|
interface IGranularPermissionsProps {
|
|
3
3
|
workspace: IGrantedWorkspace | undefined;
|
|
4
4
|
onChange: (workspace: IGrantedWorkspace) => void;
|
|
5
|
-
areFilterViewsEnabled: boolean;
|
|
6
5
|
showRedundancyWarningMessage: boolean;
|
|
7
6
|
}
|
|
8
|
-
export declare function GranularPermissions({ workspace,
|
|
7
|
+
export declare function GranularPermissions({ workspace, onChange, showRedundancyWarningMessage }: IGranularPermissionsProps): import("react/jsx-runtime").JSX.Element;
|
|
9
8
|
export {};
|
|
10
9
|
//# sourceMappingURL=GranularPermissions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GranularPermissions.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.tsx"],"names":[],"mappings":"AAQA,OAAO,EACH,KAAK,iBAAiB,EAIzB,MAAM,gBAAgB,CAAC;AAyBxB,UAAU,yBAAyB;IAC/B,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,
|
|
1
|
+
{"version":3,"file":"GranularPermissions.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.tsx"],"names":[],"mappings":"AAQA,OAAO,EACH,KAAK,iBAAiB,EAIzB,MAAM,gBAAgB,CAAC;AAyBxB,UAAU,yBAAyB;IAC/B,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,4BAA4B,EAAE,OAAO,CAAC;CACzC;AAED,wBAAgB,mBAAmB,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,4BAA4B,EAC/B,EAAE,yBAAyB,2CAyI3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2024-2026 GoodData Corporation
|
|
3
|
-
import { useCallback
|
|
3
|
+
import { useCallback } from "react";
|
|
4
4
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
5
5
|
import { DialogListHeader, Message } from "@gooddata/sdk-ui-kit";
|
|
6
6
|
import { AdditionalAccessPermissionItem, WorkspaceAccessPermissionItem } from "./GranularPermissionsItems.js";
|
|
@@ -15,12 +15,12 @@ const granularPermissions = [
|
|
|
15
15
|
{ id: "EXPORT_TABULAR", enabled: true, group: true },
|
|
16
16
|
{ id: "CREATE_FILTER_VIEW", enabled: true },
|
|
17
17
|
];
|
|
18
|
-
export function GranularPermissions({ workspace,
|
|
18
|
+
export function GranularPermissions({ workspace, onChange, showRedundancyWarningMessage, }) {
|
|
19
19
|
const intl = useIntl();
|
|
20
20
|
const { permissions: selectedPermissions = [], isHierarchical = false } = workspace ?? {};
|
|
21
21
|
const selectedWorkspacePermission = getWorkspacePermission(selectedPermissions);
|
|
22
22
|
const selectedGranularPermissions = getGranularPermissions(selectedPermissions);
|
|
23
|
-
const granularItems =
|
|
23
|
+
const granularItems = granularPermissions;
|
|
24
24
|
const handleChange = useCallback((permissions, isHierarchical) => {
|
|
25
25
|
const sanitizedPermissions = removeRedundantPermissions(permissions);
|
|
26
26
|
onChange({ ...workspace, permissions: sanitizedPermissions, isHierarchical });
|
|
@@ -8,7 +8,6 @@ interface IGranularPermissionsDropdownProps {
|
|
|
8
8
|
onChange: (workspace: IGrantedWorkspace) => void;
|
|
9
9
|
onDelete: (workspace: IGrantedWorkspace) => void;
|
|
10
10
|
className: string;
|
|
11
|
-
areFilterViewsEnabled: boolean;
|
|
12
11
|
}
|
|
13
12
|
export declare const PermissionsDropdown: import("react").ForwardRefExoticComponent<IGranularPermissionsDropdownProps & import("@gooddata/sdk-ui-kit").IWithBubbleProps & import("react").RefAttributes<any>>;
|
|
14
13
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionsDropdown.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.tsx"],"names":[],"mappings":"AAWA,OAAO,EACH,KAAK,iBAAiB,EAGtB,KAAK,0BAA0B,EAClC,MAAM,gBAAgB,CAAC;AAoCxB,UAAU,iCAAiC;IACvC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,EAAE,0BAA0B,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PermissionsDropdown.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.tsx"],"names":[],"mappings":"AAWA,OAAO,EACH,KAAK,iBAAiB,EAGtB,KAAK,0BAA0B,EAClC,MAAM,gBAAgB,CAAC;AAoCxB,UAAU,iCAAiC;IACvC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,EAAE,0BAA0B,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;CACrB;AAmID,eAAO,MAAM,mBAAmB,qKAAuB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2023-2026 GoodData Corporation
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
6
|
import { withBubble } from "@gooddata/sdk-ui-kit";
|
|
@@ -77,7 +77,7 @@ const trackPermissionChange = (trackEvent, subjectType, permission) => {
|
|
|
77
77
|
break;
|
|
78
78
|
}
|
|
79
79
|
};
|
|
80
|
-
function Dropdown({ workspace, subjectType, isDropdownDisabled, isDropdownOpen, toggleDropdown, onChange, onDelete, className,
|
|
80
|
+
function Dropdown({ workspace, subjectType, isDropdownDisabled, isDropdownOpen, toggleDropdown, onChange, onDelete, className, }) {
|
|
81
81
|
const intl = useIntl();
|
|
82
82
|
const [selectedPermission, setSelectedPermission] = useState(workspace.permissions[0]);
|
|
83
83
|
const trackEvent = useTelemetry();
|
|
@@ -95,8 +95,6 @@ function Dropdown({ workspace, subjectType, isDropdownDisabled, isDropdownOpen,
|
|
|
95
95
|
}
|
|
96
96
|
}, [isDropdownDisabled, toggleDropdown]);
|
|
97
97
|
const buttonValue = intl.formatMessage(getPermissionTitle(selectedPermission));
|
|
98
|
-
const enabledItems = useMemo(() => items.filter((item) => areFilterViewsEnabled ||
|
|
99
|
-
(item.id !== "VIEW_AND_SAVE_VIEWS" && item.id !== "VIEW_AND_EXPORT_AND_SAVE_VIEWS")), [areFilterViewsEnabled]);
|
|
100
98
|
return (_jsxs("div", { className: className, children: [
|
|
101
99
|
_jsx("div", { className: cx("s-user-management-permission-button", "gd-granular-permission-button", "dropdown-button", `gd-granular-permission-button-${simplifyText(workspace.id)}`, {
|
|
102
100
|
"is-active": isDropdownOpen,
|
|
@@ -104,7 +102,7 @@ function Dropdown({ workspace, subjectType, isDropdownDisabled, isDropdownOpen,
|
|
|
104
102
|
"gd-icon-navigatedown": !isDropdownDisabled && !isDropdownOpen,
|
|
105
103
|
disabled: isDropdownDisabled,
|
|
106
104
|
"gd-icon-right": !isDropdownDisabled,
|
|
107
|
-
}), onClick: handleClick, "aria-label": "Share dialog granular permissions button", children: _jsx("div", { className: "s-user-management-button-title gd-granular-permission-button-title", children: buttonValue }) }), _jsx(PermissionsDropdownList, { selectedPermission: selectedPermission, items:
|
|
105
|
+
}), onClick: handleClick, "aria-label": "Share dialog granular permissions button", children: _jsx("div", { className: "s-user-management-button-title gd-granular-permission-button-title", children: buttonValue }) }), _jsx(PermissionsDropdownList, { selectedPermission: selectedPermission, items: items, subjectType: subjectType, onSelect: handleOnSelect, onDelete: handleOnDelete, toggleDropdown: toggleDropdown, isShowDropdown: isDropdownOpen, alignTo: `.gd-granular-permission-button-${simplifyText(workspace.id)}` })
|
|
108
106
|
] }));
|
|
109
107
|
}
|
|
110
108
|
export const PermissionsDropdown = withBubble(Dropdown);
|
|
@@ -4,8 +4,7 @@ interface IGranularGranteeUserGroupItemProps {
|
|
|
4
4
|
subjectType: WorkspacePermissionSubject;
|
|
5
5
|
onChange: (grantee: IGrantedWorkspace) => void;
|
|
6
6
|
onDelete: (grantee: IGrantedWorkspace) => void;
|
|
7
|
-
areFilterViewsEnabled: boolean;
|
|
8
7
|
}
|
|
9
|
-
export declare function WorkspaceItem({ workspace, subjectType, onChange, onDelete
|
|
8
|
+
export declare function WorkspaceItem({ workspace, subjectType, onChange, onDelete }: IGranularGranteeUserGroupItemProps): import("react/jsx-runtime").JSX.Element;
|
|
10
9
|
export {};
|
|
11
10
|
//# sourceMappingURL=WorkspaceItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAOzF,UAAU,kCAAkC;IACxC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,EAAE,0BAA0B,CAAC;IACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkspaceItem.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAOzF,UAAU,kCAAkC;IACxC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,EAAE,0BAA0B,CAAC;IACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,aAAa,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACX,EAAE,kCAAkC,2CAkCpC"}
|
|
@@ -5,13 +5,13 @@ import { HierarchicalPermissionsDropdown } from "./HierarchicalPermissionsDropdo
|
|
|
5
5
|
import { PermissionsDropdown } from "./PermissionsDropdown.js";
|
|
6
6
|
import { usePermissionsDropdownState } from "./usePermissionsDropdownState.js";
|
|
7
7
|
import { WorkspaceIcon } from "./WorkspaceIcon.js";
|
|
8
|
-
export function WorkspaceItem({ workspace, subjectType, onChange, onDelete,
|
|
8
|
+
export function WorkspaceItem({ workspace, subjectType, onChange, onDelete, }) {
|
|
9
9
|
const { isDropdownOpen, toggleDropdown } = usePermissionsDropdownState();
|
|
10
10
|
const { isDropdownOpen: isHierarchicalDropdownOpen, toggleDropdown: toggleHierarchicalDropdown } = usePermissionsDropdownState();
|
|
11
11
|
const itemClassName = cx("s-user-management-workspace-item", "gd-share-dialog-grantee-item", {
|
|
12
12
|
"is-active": isDropdownOpen,
|
|
13
13
|
});
|
|
14
14
|
return (_jsxs("div", { className: itemClassName, children: [
|
|
15
|
-
_jsx(HierarchicalPermissionsDropdown, { workspace: workspace, subjectType: subjectType, isDropdownOpen: isHierarchicalDropdownOpen, toggleDropdown: toggleHierarchicalDropdown, onChange: onChange, className: "gd-grantee-granular-permission" }), _jsx(PermissionsDropdown, { workspace: workspace, subjectType: subjectType, isDropdownOpen: isDropdownOpen, toggleDropdown: toggleDropdown, onChange: onChange, onDelete: onDelete, className: "gd-grantee-granular-permission"
|
|
15
|
+
_jsx(HierarchicalPermissionsDropdown, { workspace: workspace, subjectType: subjectType, isDropdownOpen: isHierarchicalDropdownOpen, toggleDropdown: toggleHierarchicalDropdown, onChange: onChange, className: "gd-grantee-granular-permission" }), _jsx(PermissionsDropdown, { workspace: workspace, subjectType: subjectType, isDropdownOpen: isDropdownOpen, toggleDropdown: toggleDropdown, onChange: onChange, onDelete: onDelete, className: "gd-grantee-granular-permission" }), _jsx("div", { className: "gd-grantee-content", children: _jsx("div", { className: "gd-grantee-content-label", children: workspace.title }) }), _jsx(WorkspaceIcon, {})
|
|
16
16
|
] }));
|
|
17
17
|
}
|
|
@@ -6,7 +6,6 @@ export interface IWorkspaceListProps {
|
|
|
6
6
|
onDelete: (workspace: IGrantedWorkspace) => void;
|
|
7
7
|
onChange?: (workspace: IGrantedWorkspace) => void;
|
|
8
8
|
onClick?: (workspace: IGrantedWorkspace) => void;
|
|
9
|
-
areFilterViewsEnabled: boolean;
|
|
10
9
|
}
|
|
11
10
|
export declare function WorkspaceList({ workspaces, subjectType, mode, onDelete, onClick }: IWorkspaceListProps): import("react/jsx-runtime").JSX.Element;
|
|
12
11
|
//# sourceMappingURL=WorkspaceList.d.ts.map
|
package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceList.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAMrG,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC5C,WAAW,EAAE,0BAA0B,CAAC;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkspaceList.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAMrG,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC5C,WAAW,EAAE,0BAA0B,CAAC;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACpD;AAED,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CAuBtG"}
|
package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class PluggablePivotTableNext extends AbstractPluggableVisualizat
|
|
|
17
17
|
private readonly settings;
|
|
18
18
|
private backendCapabilities;
|
|
19
19
|
private environment;
|
|
20
|
+
private titlesByLocalId;
|
|
20
21
|
constructor(props: IVisConstruct);
|
|
21
22
|
unmount(): void;
|
|
22
23
|
getExtendedReferencePoint(referencePoint: IReferencePoint, previousReferencePoint?: IReferencePoint): Promise<IExtendedReferencePoint>;
|
|
@@ -24,6 +25,8 @@ export declare class PluggablePivotTableNext extends AbstractPluggableVisualizat
|
|
|
24
25
|
private getSanitizedConfig;
|
|
25
26
|
getExecution(options: IVisProps, insight: IInsightDefinition, executionFactory: IExecutionFactory): import("@gooddata/sdk-backend-spi").IPreparedExecution;
|
|
26
27
|
protected initializeProperties(visualizationProperties: IVisualizationProperties): void;
|
|
28
|
+
private handleDataView;
|
|
29
|
+
private handleLoadingChanged;
|
|
27
30
|
private createCorePivotTableProps;
|
|
28
31
|
protected updateInstanceProperties(options: IVisProps, insight: IInsightDefinition, insightPropertiesMeta: any): void;
|
|
29
32
|
protected checkBeforeRender(insight: IInsightDefinition): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluggablePivotTableNext.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EACH,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,SAAS,EAWjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"PluggablePivotTableNext.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA6B,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EACH,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,SAAS,EAWjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIH,KAAK,wBAAwB,EAEhC,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAIH,KAAK,oBAAoB,EAC5B,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,wBAAwB,EAGhC,MAAM,sCAAsC,CAAC;AA+B9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAiBtF,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,wBAAwB,EACrC,QAAQ,EAAE,SAAS,GACpB,oBAAoB,CAqBtB;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,8BAA8B;IACvE,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,WAAW,CAAuC;IAG1D,OAAO,CAAC,eAAe,CAA8B;IAErD,YAAY,KAAK,EAAE,aAAa,EAa/B;IAEM,OAAO,IAAI,IAAI,CAErB;IAEM,yBAAyB,CAC5B,cAAc,EAAE,eAAe,EAC/B,sBAAsB,CAAC,EAAE,eAAe,GACzC,OAAO,CAAC,uBAAuB,CAAC,CA8GlC;IAEe,8BAA8B,CAC1C,mBAAmB,EAAE,QAAQ,EAC7B,gBAAgB,EAAE,iBAAiB,EACnC,0BAA0B,EAAE,OAAO,GACpC,QAAQ,CAWV;IAED,OAAO,CAAC,kBAAkB;IAInB,YAAY,CACf,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,kBAAkB,EAC3B,gBAAgB,EAAE,iBAAiB,0DActC;IAED,SAAS,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,wBAAwB,GAAG,IAAI,CActF;IAKD,OAAO,CAAC,cAAc,CAIpB;IAIF,OAAO,CAAC,oBAAoB,CAK1B;IAEF,OAAO,CAAC,yBAAyB,CAe/B;IAEF,UAAmB,wBAAwB,CACvC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,kBAAkB,EAC3B,qBAAqB,EAAE,GAAG,GAC3B,IAAI,CASN;IAED,UAAmB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAOzE;IAED,SAAS,CAAC,mBAAmB,CACzB,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,kBAAkB,EAC3B,gBAAgB,EAAE,iBAAiB,GACpC,IAAI,CAmFN;IAED,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAyBxF;IAED,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,CAAC,EAAE,GAAG,GAAG,UAAU,EAAE,CAElG;IAED,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,cAAc;CAmCzB"}
|