@gooddata/sdk-ui-ext 11.47.0-alpha.1 → 11.47.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 +5 -5
- package/esm/index.d.ts +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/ColorsSection.d.ts +2 -1
- package/esm/internal/components/configurationControls/colors/ColorsSection.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/ColorsSection.js +37 -17
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItem.d.ts +2 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItem.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItem.js +2 -2
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItemsList.d.ts +4 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItemsList.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/ColoredItemsList.js +5 -1
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleColoredItem.d.ts +16 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleColoredItem.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleColoredItem.js +22 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleDialog.d.ts +21 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleDialog.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/colors/coloredItemsList/LineStyleDialog.js +64 -0
- package/esm/internal/components/configurationPanels/LineChartBasedConfigurationPanel.d.ts +1 -0
- package/esm/internal/components/configurationPanels/LineChartBasedConfigurationPanel.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/LineChartBasedConfigurationPanel.js +10 -0
- package/esm/internal/constants/featureFlags.d.ts +2 -0
- package/esm/internal/constants/featureFlags.d.ts.map +1 -1
- package/esm/internal/constants/featureFlags.js +5 -0
- package/esm/internal/constants/supportedProperties.d.ts.map +1 -1
- package/esm/internal/constants/supportedProperties.js +3 -0
- package/esm/internal/interfaces/Colors.d.ts +3 -0
- package/esm/internal/interfaces/Colors.d.ts.map +1 -1
- package/esm/internal/interfaces/Colors.js +1 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/de-DE.localization-bundle.js +18 -0
- package/esm/internal/translations/en-AU.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-AU.localization-bundle.js +18 -0
- package/esm/internal/translations/en-GB.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-GB.localization-bundle.js +18 -0
- package/esm/internal/translations/en-US.localization-bundle.d.ts +48 -0
- package/esm/internal/translations/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-US.localization-bundle.js +48 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-419.localization-bundle.js +18 -0
- package/esm/internal/translations/es-ES.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-ES.localization-bundle.js +18 -0
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fi-FI.localization-bundle.js +18 -0
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-CA.localization-bundle.js +18 -0
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-FR.localization-bundle.js +18 -0
- package/esm/internal/translations/id-ID.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/id-ID.localization-bundle.js +18 -0
- package/esm/internal/translations/it-IT.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/it-IT.localization-bundle.js +18 -0
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ja-JP.localization-bundle.js +18 -0
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ko-KR.localization-bundle.js +18 -0
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/nl-NL.localization-bundle.js +18 -0
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pl-PL.localization-bundle.js +18 -0
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-BR.localization-bundle.js +18 -0
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-PT.localization-bundle.js +18 -0
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ru-RU.localization-bundle.js +18 -0
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/sl-SI.localization-bundle.js +18 -0
- package/esm/internal/translations/th-TH.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/th-TH.localization-bundle.js +18 -0
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/tr-TR.localization-bundle.js +18 -0
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/uk-UA.localization-bundle.js +18 -0
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/vi-VN.localization-bundle.js +18 -0
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-HK.localization-bundle.js +18 -0
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hans.localization-bundle.js +18 -0
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts +18 -0
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hant.localization-bundle.js +18 -0
- package/esm/internal/utils/colors.d.ts +3 -1
- package/esm/internal/utils/colors.d.ts.map +1 -1
- package/esm/internal/utils/colors.js +68 -32
- package/esm/locales.d.ts +36 -0
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +12 -0
- package/esm/sdk-ui-ext.d.ts +19 -5
- package/esm/share/ObjectShareDialog.d.ts.map +1 -1
- package/esm/share/ObjectShareDialog.js +2 -2
- package/esm/share/objectShareController.helpers.d.ts +20 -6
- package/esm/share/objectShareController.helpers.d.ts.map +1 -1
- package/esm/share/objectShareController.helpers.js +40 -9
- package/esm/share/objectShareController.types.d.ts +15 -4
- package/esm/share/objectShareController.types.d.ts.map +1 -1
- package/esm/share/useAccessList.d.ts +0 -1
- package/esm/share/useAccessList.d.ts.map +1 -1
- package/esm/share/useAccessList.js +74 -83
- package/esm/share/useObjectShareController.d.ts +3 -1
- package/esm/share/useObjectShareController.d.ts.map +1 -1
- package/esm/share/useObjectShareController.js +12 -19
- package/package.json +21 -21
- package/styles/internal/css/config_panel.css +82 -0
- package/styles/internal/css/config_panel.css.map +1 -1
- package/styles/internal/scss/config_panel.scss +94 -0
|
@@ -16,6 +16,12 @@ export declare const zh_Hant: {
|
|
|
16
16
|
"dashboard.bucket.secondary_measures_subtitle.headline": string;
|
|
17
17
|
"dashboard.bucket.measures_title.scatter": string;
|
|
18
18
|
"dashboard.bucket.secondary_measures_title.scatter": string;
|
|
19
|
+
"dashboard.bucket.measures_title.mekko": string;
|
|
20
|
+
"dashboard.bucket.secondary_measures_title.mekko": string;
|
|
21
|
+
"dashboard.bucket.measures_subtitle.mekko": string;
|
|
22
|
+
"dashboard.bucket.secondary_measures_subtitle.mekko": string;
|
|
23
|
+
"dashboard.bucket.view_title.mekko": string;
|
|
24
|
+
"dashboard.bucket.stack_title.mekko": string;
|
|
19
25
|
"dashboard.bucket.measures_subtitle.scatter": string;
|
|
20
26
|
"dashboard.bucket.secondary_measures_subtitle.scatter": string;
|
|
21
27
|
"dashboard.bucket.attribute_title.scatter": string;
|
|
@@ -274,6 +280,18 @@ export declare const zh_Hant: {
|
|
|
274
280
|
"properties.colors.reset-colors": string;
|
|
275
281
|
"properties.colors": string;
|
|
276
282
|
"properties.colorsAndFills": string;
|
|
283
|
+
"properties.colorsAndStyles": string;
|
|
284
|
+
"properties.colors.reset-colors-and-styles": string;
|
|
285
|
+
"properties.lineStyle.label": string;
|
|
286
|
+
"properties.lineStyle.triggerAriaLabel": string;
|
|
287
|
+
"properties.lineStyle.solid": string;
|
|
288
|
+
"properties.lineStyle.dashed": string;
|
|
289
|
+
"properties.lineStyle.dotted": string;
|
|
290
|
+
"properties.lineWidth.label": string;
|
|
291
|
+
"properties.lineWidth.1px": string;
|
|
292
|
+
"properties.lineWidth.2px": string;
|
|
293
|
+
"properties.lineWidth.3px": string;
|
|
294
|
+
"properties.lineWidth.4px": string;
|
|
277
295
|
"properties.fill": string;
|
|
278
296
|
"properties.fill.solid": string;
|
|
279
297
|
"properties.fill.pattern": string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh-Hant.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/internal/translations/zh-Hant.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"zh-Hant.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/internal/translations/zh-Hant.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgqBnB,CAAC"}
|
|
@@ -18,6 +18,12 @@ export const zh_Hant = {
|
|
|
18
18
|
"dashboard.bucket.secondary_measures_subtitle.headline": "中學",
|
|
19
19
|
"dashboard.bucket.measures_title.scatter": "指標",
|
|
20
20
|
"dashboard.bucket.secondary_measures_title.scatter": "指標",
|
|
21
|
+
"dashboard.bucket.measures_title.mekko": "指標",
|
|
22
|
+
"dashboard.bucket.secondary_measures_title.mekko": "指標",
|
|
23
|
+
"dashboard.bucket.measures_subtitle.mekko": "寬度",
|
|
24
|
+
"dashboard.bucket.secondary_measures_subtitle.mekko": "高度",
|
|
25
|
+
"dashboard.bucket.view_title.mekko": "查看方式",
|
|
26
|
+
"dashboard.bucket.stack_title.mekko": "堆疊依據",
|
|
21
27
|
"dashboard.bucket.measures_subtitle.scatter": "X軸",
|
|
22
28
|
"dashboard.bucket.secondary_measures_subtitle.scatter": "Y軸",
|
|
23
29
|
"dashboard.bucket.attribute_title.scatter": "查看方式",
|
|
@@ -276,6 +282,18 @@ export const zh_Hant = {
|
|
|
276
282
|
"properties.colors.reset-colors": "重置顏色",
|
|
277
283
|
"properties.colors": "顏色",
|
|
278
284
|
"properties.colorsAndFills": "顏色和填充",
|
|
285
|
+
"properties.colorsAndStyles": "顏色和樣式",
|
|
286
|
+
"properties.colors.reset-colors-and-styles": "重設顏色和樣式",
|
|
287
|
+
"properties.lineStyle.label": "線條樣式",
|
|
288
|
+
"properties.lineStyle.triggerAriaLabel": "編輯 {name} 的顏色和樣式",
|
|
289
|
+
"properties.lineStyle.solid": "實線",
|
|
290
|
+
"properties.lineStyle.dashed": "虛線",
|
|
291
|
+
"properties.lineStyle.dotted": "點線",
|
|
292
|
+
"properties.lineWidth.label": "線條粗細",
|
|
293
|
+
"properties.lineWidth.1px": "1 px",
|
|
294
|
+
"properties.lineWidth.2px": "2 px",
|
|
295
|
+
"properties.lineWidth.3px": "3 px",
|
|
296
|
+
"properties.lineWidth.4px": "4 px",
|
|
279
297
|
"properties.fill": "填滿",
|
|
280
298
|
"properties.fill.solid": "實心(預設)",
|
|
281
299
|
"properties.fill.pattern": "圖案",
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type IColor } from "@gooddata/sdk-model";
|
|
2
2
|
import { type IColorAssignment, type IMappingHeader } from "@gooddata/sdk-ui";
|
|
3
|
+
import { type ILineStyleMappingItem } from "@gooddata/sdk-ui-charts";
|
|
3
4
|
import { type IColorConfiguration, type IColoredItem } from "../interfaces/Colors.js";
|
|
4
5
|
import { type IVisualizationProperties } from "../interfaces/Visualization.js";
|
|
5
6
|
export declare function getSearchedItems(inputItems: IColoredItem[], searchString: string): IColoredItem[];
|
|
6
|
-
export declare function getColoredInputItems(colors: IColorConfiguration | undefined): IColoredItem[];
|
|
7
|
+
export declare function getColoredInputItems(colors: IColorConfiguration | undefined, lineStyleMapping?: ILineStyleMappingItem[]): IColoredItem[];
|
|
7
8
|
export declare function getProperties(properties: IVisualizationProperties, item: IMappingHeader, color: IColor): IVisualizationProperties;
|
|
9
|
+
export declare function getLineStyleProperties(properties: IVisualizationProperties, id: string, lineStyle: ILineStyleMappingItem["lineStyle"], lineWidth: ILineStyleMappingItem["lineWidth"]): IVisualizationProperties;
|
|
8
10
|
export declare function getValidProperties(properties: IVisualizationProperties, colorAssignments: IColorAssignment[] | undefined): IVisualizationProperties;
|
|
9
11
|
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/internal/utils/colors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/internal/utils/colors.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,MAAM,EAUd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAwB,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAc,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAM/E,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE,CAQjG;AAED,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,GAC3C,YAAY,EAAE,CAsChB;AAuBD,wBAAgB,aAAa,CACzB,UAAU,EAAE,wBAAwB,EACpC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,MAAM,GACd,wBAAwB,CAgB1B;AAED,wBAAgB,sBAAsB,CAClC,UAAU,EAAE,wBAAwB,EACpC,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,qBAAqB,CAAC,WAAW,CAAC,EAC7C,SAAS,EAAE,qBAAqB,CAAC,WAAW,CAAC,GAC9C,wBAAwB,CAO1B;AAED,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,wBAAwB,EACpC,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,SAAS,GACjD,wBAAwB,CAgE1B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// (C) 2019-
|
|
1
|
+
// (C) 2019-2026 GoodData Corporation
|
|
2
2
|
import { cloneDeep, compact, isEmpty, isEqual, set, uniqBy } from "lodash-es";
|
|
3
3
|
import { isAttributeDescriptor, isColorDescriptor, isColorFromPalette, isMeasureDescriptor, isResultAttributeHeader, isRgbColor, isUriRef, } from "@gooddata/sdk-model";
|
|
4
4
|
import { getMappingHeaderName } from "@gooddata/sdk-ui";
|
|
@@ -15,25 +15,37 @@ export function getSearchedItems(inputItems, searchString) {
|
|
|
15
15
|
return name.toLowerCase().includes(searchString.toLowerCase());
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
export function getColoredInputItems(colors) {
|
|
18
|
+
export function getColoredInputItems(colors, lineStyleMapping) {
|
|
19
19
|
let inputItems = [];
|
|
20
20
|
if (colors?.colorAssignments) {
|
|
21
21
|
inputItems = colors.colorAssignments.map((assignmentItem, index) => {
|
|
22
|
+
let base;
|
|
22
23
|
if (isColorFromPalette(assignmentItem.color)) {
|
|
23
|
-
|
|
24
|
+
base = {
|
|
24
25
|
colorItem: assignmentItem.color,
|
|
25
26
|
mappingHeader: assignmentItem.headerItem,
|
|
26
27
|
color: ColorUtils.getColorByGuid(colors.colorPalette, assignmentItem.color.value, index),
|
|
27
28
|
};
|
|
28
29
|
}
|
|
29
30
|
else if (isRgbColor(assignmentItem.color)) {
|
|
30
|
-
|
|
31
|
+
base = {
|
|
31
32
|
colorItem: assignmentItem.color,
|
|
32
33
|
mappingHeader: assignmentItem.headerItem,
|
|
33
34
|
color: assignmentItem.color.value,
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
if (base && lineStyleMapping && isMeasureDescriptor(assignmentItem.headerItem)) {
|
|
38
|
+
const localId = assignmentItem.headerItem.measureHeaderItem.localIdentifier;
|
|
39
|
+
const styleEntry = lineStyleMapping.find((m) => m.id === localId);
|
|
40
|
+
if (styleEntry) {
|
|
41
|
+
base = {
|
|
42
|
+
...base,
|
|
43
|
+
lineStyle: styleEntry.lineStyle,
|
|
44
|
+
lineWidth: styleEntry.lineWidth,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return base;
|
|
37
49
|
});
|
|
38
50
|
}
|
|
39
51
|
return inputItems.filter((item) => item !== undefined);
|
|
@@ -73,38 +85,62 @@ export function getProperties(properties, item, color) {
|
|
|
73
85
|
}
|
|
74
86
|
return {};
|
|
75
87
|
}
|
|
88
|
+
export function getLineStyleProperties(properties, id, lineStyle, lineWidth) {
|
|
89
|
+
const newEntry = { id, lineStyle, lineWidth };
|
|
90
|
+
const previousMapping = properties?.controls?.["lineStyleMapping"] ?? [];
|
|
91
|
+
const merged = compact(uniqBy([newEntry, ...previousMapping], "id"));
|
|
92
|
+
const newProperties = cloneDeep(properties);
|
|
93
|
+
set(newProperties, "controls.lineStyleMapping", merged);
|
|
94
|
+
return newProperties;
|
|
95
|
+
}
|
|
76
96
|
export function getValidProperties(properties, colorAssignments) {
|
|
77
|
-
|
|
97
|
+
const hasColorMapping = Boolean(properties?.controls?.["colorMapping"]);
|
|
98
|
+
const hasLineStyleMapping = Boolean(properties?.controls?.["lineStyleMapping"]);
|
|
99
|
+
if (!hasColorMapping && !hasLineStyleMapping) {
|
|
78
100
|
return properties;
|
|
79
101
|
}
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
102
|
+
const validMeasureLocalIds = new Set(colorAssignments
|
|
103
|
+
?.filter((a) => isMeasureDescriptor(a.headerItem))
|
|
104
|
+
.map((a) => a.headerItem.measureHeaderItem.localIdentifier));
|
|
105
|
+
let updatedControls = { ...properties.controls };
|
|
106
|
+
if (hasColorMapping) {
|
|
107
|
+
const reducedColorMapping = (properties.controls?.["colorMapping"] ?? []).filter((mappingItem) => {
|
|
108
|
+
const { id } = mappingItem;
|
|
109
|
+
const colorValue = mappingItem.color.value;
|
|
110
|
+
const assignmentValid = colorAssignments?.find((colorAssignment) => {
|
|
111
|
+
if (isMeasureDescriptor(colorAssignment.headerItem)) {
|
|
112
|
+
return (colorAssignment.headerItem.measureHeaderItem.localIdentifier === id &&
|
|
113
|
+
isEqual(colorAssignment.color?.value, colorValue));
|
|
114
|
+
}
|
|
115
|
+
else if (isResultAttributeHeader(colorAssignment.headerItem)) {
|
|
116
|
+
return colorAssignment.headerItem.attributeHeaderItem.uri === id;
|
|
117
|
+
}
|
|
118
|
+
else if (isAttributeDescriptor(colorAssignment.headerItem)) {
|
|
119
|
+
return isUriRef(colorAssignment.headerItem.attributeHeader.ref)
|
|
120
|
+
? colorAssignment.headerItem.attributeHeader.uri === id
|
|
121
|
+
: colorAssignment.headerItem.attributeHeader.identifier === id;
|
|
122
|
+
}
|
|
123
|
+
else if (isColorDescriptor(colorAssignment.headerItem)) {
|
|
124
|
+
return colorAssignment.headerItem.colorHeaderItem.id === id;
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
});
|
|
128
|
+
return assignmentValid !== undefined;
|
|
100
129
|
});
|
|
101
|
-
|
|
102
|
-
|
|
130
|
+
updatedControls = {
|
|
131
|
+
...updatedControls,
|
|
132
|
+
colorMapping: reducedColorMapping.length ? reducedColorMapping : null,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (hasLineStyleMapping) {
|
|
136
|
+
const reducedLineStyleMapping = (properties.controls?.["lineStyleMapping"] ?? []).filter((mappingItem) => validMeasureLocalIds.has(mappingItem.id));
|
|
137
|
+
updatedControls = {
|
|
138
|
+
...updatedControls,
|
|
139
|
+
lineStyleMapping: reducedLineStyleMapping.length ? reducedLineStyleMapping : null,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
103
142
|
return {
|
|
104
143
|
...properties,
|
|
105
|
-
controls:
|
|
106
|
-
...properties.controls,
|
|
107
|
-
colorMapping: reducedColorMapping.length ? reducedColorMapping : null,
|
|
108
|
-
},
|
|
144
|
+
controls: updatedControls,
|
|
109
145
|
};
|
|
110
146
|
}
|
package/esm/locales.d.ts
CHANGED
|
@@ -393,6 +393,9 @@ export declare const messages: {
|
|
|
393
393
|
resetColors: {
|
|
394
394
|
id: string;
|
|
395
395
|
};
|
|
396
|
+
resetColorsAndStyles: {
|
|
397
|
+
id: string;
|
|
398
|
+
};
|
|
396
399
|
unsupportedColors: {
|
|
397
400
|
id: string;
|
|
398
401
|
};
|
|
@@ -402,6 +405,39 @@ export declare const messages: {
|
|
|
402
405
|
colorsAndFills: {
|
|
403
406
|
id: string;
|
|
404
407
|
};
|
|
408
|
+
colorsAndStyles: {
|
|
409
|
+
id: string;
|
|
410
|
+
};
|
|
411
|
+
lineStyleSolid: {
|
|
412
|
+
id: string;
|
|
413
|
+
};
|
|
414
|
+
lineStyleDashed: {
|
|
415
|
+
id: string;
|
|
416
|
+
};
|
|
417
|
+
lineStyleDotted: {
|
|
418
|
+
id: string;
|
|
419
|
+
};
|
|
420
|
+
lineStyleLabel: {
|
|
421
|
+
id: string;
|
|
422
|
+
};
|
|
423
|
+
lineStyleTriggerAriaLabel: {
|
|
424
|
+
id: string;
|
|
425
|
+
};
|
|
426
|
+
lineWidthLabel: {
|
|
427
|
+
id: string;
|
|
428
|
+
};
|
|
429
|
+
lineWidth1: {
|
|
430
|
+
id: string;
|
|
431
|
+
};
|
|
432
|
+
lineWidth2: {
|
|
433
|
+
id: string;
|
|
434
|
+
};
|
|
435
|
+
lineWidth3: {
|
|
436
|
+
id: string;
|
|
437
|
+
};
|
|
438
|
+
lineWidth4: {
|
|
439
|
+
id: string;
|
|
440
|
+
};
|
|
405
441
|
fill: {
|
|
406
442
|
id: string;
|
|
407
443
|
};
|
package/esm/locales.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../src/locales.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAGjF,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA2EnD,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAsBtD,CAAC;AAEH,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../src/locales.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAGjF,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA2EnD,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAsBtD,CAAC;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8PnB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmH7B,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BxC,CAAC;AAEH,eAAO,MAAM,qCAAqC,EAAE,MAAM,CAAC,6BAA6B,EAAE,iBAAiB,CAmBrG,CAAC"}
|
package/esm/locales.js
CHANGED
|
@@ -231,9 +231,21 @@ export const messages = defineMessages({
|
|
|
231
231
|
pointsSizeMaxTitle: { id: "properties.points.size.max.title" },
|
|
232
232
|
customColor: { id: "gs.color-dropdown.custom-color" },
|
|
233
233
|
resetColors: { id: "properties.colors.reset-colors" },
|
|
234
|
+
resetColorsAndStyles: { id: "properties.colors.reset-colors-and-styles" },
|
|
234
235
|
unsupportedColors: { id: "properties.colors.unsupported" },
|
|
235
236
|
colors: { id: "properties.colors" },
|
|
236
237
|
colorsAndFills: { id: "properties.colorsAndFills" },
|
|
238
|
+
colorsAndStyles: { id: "properties.colorsAndStyles" },
|
|
239
|
+
lineStyleSolid: { id: "properties.lineStyle.solid" },
|
|
240
|
+
lineStyleDashed: { id: "properties.lineStyle.dashed" },
|
|
241
|
+
lineStyleDotted: { id: "properties.lineStyle.dotted" },
|
|
242
|
+
lineStyleLabel: { id: "properties.lineStyle.label" },
|
|
243
|
+
lineStyleTriggerAriaLabel: { id: "properties.lineStyle.triggerAriaLabel" },
|
|
244
|
+
lineWidthLabel: { id: "properties.lineWidth.label" },
|
|
245
|
+
lineWidth1: { id: "properties.lineWidth.1px" },
|
|
246
|
+
lineWidth2: { id: "properties.lineWidth.2px" },
|
|
247
|
+
lineWidth3: { id: "properties.lineWidth.3px" },
|
|
248
|
+
lineWidth4: { id: "properties.lineWidth.4px" },
|
|
237
249
|
fill: { id: "properties.fill" },
|
|
238
250
|
fillSolid: { id: "properties.fill.solid" },
|
|
239
251
|
fillPattern: { id: "properties.fill.pattern" },
|
package/esm/sdk-ui-ext.d.ts
CHANGED
|
@@ -669,6 +669,19 @@ export declare interface IGrantedDataSource {
|
|
|
669
669
|
accessSource?: DataSourceAccessSource;
|
|
670
670
|
}
|
|
671
671
|
|
|
672
|
+
/**
|
|
673
|
+
* Known identity facts of a grantee: real name/email only, never an id fallback.
|
|
674
|
+
* Undefined fields are unknown and may be backfilled.
|
|
675
|
+
*
|
|
676
|
+
* @internal
|
|
677
|
+
*/
|
|
678
|
+
export declare interface IGranteeIdentityFacts {
|
|
679
|
+
/** Real full name (users) / group name, when known. */
|
|
680
|
+
name?: string;
|
|
681
|
+
/** Real email, when known (users only). */
|
|
682
|
+
email?: string;
|
|
683
|
+
}
|
|
684
|
+
|
|
672
685
|
/**
|
|
673
686
|
* @internal
|
|
674
687
|
*/
|
|
@@ -1644,17 +1657,16 @@ export declare interface IObjectShareDialogProps {
|
|
|
1644
1657
|
}
|
|
1645
1658
|
|
|
1646
1659
|
/**
|
|
1647
|
-
* Dialog row derived from a backend grant.
|
|
1660
|
+
* Dialog row derived from a backend grant. `name`/`email` are real facts only;
|
|
1661
|
+
* display fallbacks are `granteeDisplayPair`'s concern.
|
|
1648
1662
|
*
|
|
1649
1663
|
* @internal
|
|
1650
1664
|
*/
|
|
1651
|
-
export declare interface IObjectShareGrantee {
|
|
1665
|
+
export declare interface IObjectShareGrantee extends IGranteeIdentityFacts {
|
|
1652
1666
|
/** Stable id used as the dialog row's React key. `user:<ref>` / `group:<ref>`. */
|
|
1653
1667
|
id: string;
|
|
1654
1668
|
kind: "user" | "group";
|
|
1655
1669
|
granteeRef: ObjRef;
|
|
1656
|
-
name: string;
|
|
1657
|
-
email?: string;
|
|
1658
1670
|
level: ObjectSharePermissionLevel;
|
|
1659
1671
|
/**
|
|
1660
1672
|
* Effective permission when it is *higher* than the directly-granted `level`
|
|
@@ -2141,7 +2153,9 @@ export declare function useInsightPickerState(author?: string): {
|
|
|
2141
2153
|
* plain props and it owns its controller. Call this (exported as `useObjectShare`)
|
|
2142
2154
|
* only to share a single access-list fetch between the dialog and an inline summary
|
|
2143
2155
|
* row: call it once, read `state.summary` for the row, and pass the controller into
|
|
2144
|
-
* the dialog.
|
|
2156
|
+
* the dialog. Grantee rows carry identity facts only (`name`/`email` are undefined
|
|
2157
|
+
* when unknown); the display fallback order is not exposed, so {@link ObjectShareDialog}
|
|
2158
|
+
* is the only sanctioned row renderer.
|
|
2145
2159
|
*
|
|
2146
2160
|
* @internal
|
|
2147
2161
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectShareDialog.d.ts","sourceRoot":"","sources":["../../src/share/ObjectShareDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"ObjectShareDialog.d.ts","sourceRoot":"","sources":["../../src/share/ObjectShareDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAY1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQpD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,gDAAgD;IAChD,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC7C,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;IAChB,sFAAsF;IACtF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,MAAM,EACN,WAAW,EACX,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACb,EAAE,uBAAuB,2CAsPzB"}
|
|
@@ -4,6 +4,7 @@ import { useCallback } from "react";
|
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { UiAddGranteeDialog, UiConfirmDialog, UiGranteeRowControls, UiObjectShareDialog, UiRadioRow, UiTransferOwnershipDialog, } from "@gooddata/sdk-ui-kit";
|
|
6
6
|
import { objectShareMessages } from "./messages.js";
|
|
7
|
+
import { granteeDisplayPair } from "./objectShareController.helpers.js";
|
|
7
8
|
import { useObjectShareController } from "./useObjectShareController.js";
|
|
8
9
|
// The workspace row has no labels menu (see workspaceControls below), so its
|
|
9
10
|
// required onLabelsChange never fires; a stable no-op satisfies the prop type
|
|
@@ -94,8 +95,7 @@ export function ObjectShareDialog({ target, objectTitle, isOpen, onClose, onSave
|
|
|
94
95
|
return (_jsxs(_Fragment, { children: [_jsx(UiObjectShareDialog, { isOpen: isShareOpen, objectTitle: objectTitle, onClose: handleClose, grantees: state.grantees.map((g) => ({
|
|
95
96
|
id: g.id,
|
|
96
97
|
kind: g.kind,
|
|
97
|
-
|
|
98
|
-
email: g.email,
|
|
98
|
+
...granteeDisplayPair(g),
|
|
99
99
|
isPending: g.pending !== undefined,
|
|
100
100
|
controls: (_jsx(UiGranteeRowControls, { labels: labelItems, selectedLabelIds: state.selectedLabelIdsByGrantee[g.id] ?? state.labels.map((l) => l.id), permissionLevel: g.level, effectivePermission: g.effectivePermission,
|
|
101
101
|
// Disable row controls while saving, and until per-label
|
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
import { type IAvailableAccessGrantee, type IGranularAccessGrantee, type IObjectAccessList, type ObjRef } from "@gooddata/sdk-model";
|
|
2
|
-
import type { IObjectShareGrantee, ObjectSharePermissionLevel } from "./objectShareController.types.js";
|
|
2
|
+
import type { IGranteeIdentityFacts, IObjectShareGrantee, ObjectSharePermissionLevel } from "./objectShareController.types.js";
|
|
3
3
|
import type { IObjectShareLabel } from "./types.js";
|
|
4
4
|
/** Stable row id shared by grantee rows and picker options: `user:<ref>` / `group:<ref>`. */
|
|
5
5
|
export declare function granteeId(kind: "user" | "group", ref: ObjRef): string;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Real identity facts recovered from converter output that collapses missing
|
|
8
|
+
* fields (`name ?? email ?? id`; grant emails also `email ?? id` — assignee
|
|
9
|
+
* emails stay raw): a field equal to the raw id is absent, a "name" equal to
|
|
10
|
+
* the email is the email fallback.
|
|
11
11
|
*/
|
|
12
|
-
export declare function
|
|
12
|
+
export declare function userIdentityFacts(ref: ObjRef, name: string | undefined, email: string | undefined): IGranteeIdentityFacts;
|
|
13
|
+
/** Real group name recovered from the converter's `name ?? id` collapse: a name equal to the raw id is absent. */
|
|
14
|
+
export declare function groupNameFact(ref: ObjRef, name: string | undefined): string | undefined;
|
|
15
|
+
/** Identity facts for a listing/picker assignee — {@link userIdentityFacts} for users, a name fact for groups. */
|
|
16
|
+
export declare function assigneeIdentityFacts(assignee: IAvailableAccessGrantee): IGranteeIdentityFacts;
|
|
17
|
+
/** Display pair per the spec's fallback order: name + email → name + userID → email + userID → userID. */
|
|
18
|
+
export declare function userDisplayPair(facts: IGranteeIdentityFacts, userId: string): {
|
|
19
|
+
name: string;
|
|
20
|
+
email?: string;
|
|
21
|
+
};
|
|
22
|
+
/** Row display pair — {@link userDisplayPair} for users; groups show name (or raw id), no subline. */
|
|
23
|
+
export declare function granteeDisplayPair(grantee: IObjectShareGrantee): {
|
|
24
|
+
name: string;
|
|
25
|
+
email?: string;
|
|
26
|
+
};
|
|
13
27
|
/** Case-insensitive match of an assignee against the picker query (name, or email for users). */
|
|
14
28
|
export declare function assigneeMatchesQuery(assignee: IAvailableAccessGrantee, query: string): boolean;
|
|
15
29
|
/** The row's directly-granted level — the strongest permission present, defaulting to VIEW. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectShareController.helpers.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,MAAM,EAId,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"objectShareController.helpers.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,45 @@ export function granteeId(kind, ref) {
|
|
|
5
5
|
return `${kind}:${objRefToString(ref)}`;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Real identity facts recovered from converter output that collapses missing
|
|
9
|
+
* fields (`name ?? email ?? id`; grant emails also `email ?? id` — assignee
|
|
10
|
+
* emails stay raw): a field equal to the raw id is absent, a "name" equal to
|
|
11
|
+
* the email is the email fallback.
|
|
12
12
|
*/
|
|
13
|
-
export function
|
|
14
|
-
|
|
13
|
+
export function userIdentityFacts(ref, name, email) {
|
|
14
|
+
const id = objRefToString(ref);
|
|
15
|
+
const realEmail = email && email !== id ? email : undefined;
|
|
16
|
+
const realName = name && name !== id && name !== realEmail ? name : undefined;
|
|
17
|
+
return { name: realName, email: realEmail };
|
|
18
|
+
}
|
|
19
|
+
/** Real group name recovered from the converter's `name ?? id` collapse: a name equal to the raw id is absent. */
|
|
20
|
+
export function groupNameFact(ref, name) {
|
|
21
|
+
const id = objRefToString(ref);
|
|
22
|
+
return name && name !== id ? name : undefined;
|
|
23
|
+
}
|
|
24
|
+
/** Identity facts for a listing/picker assignee — {@link userIdentityFacts} for users, a name fact for groups. */
|
|
25
|
+
export function assigneeIdentityFacts(assignee) {
|
|
26
|
+
return assignee.type === "user"
|
|
27
|
+
? userIdentityFacts(assignee.ref, assignee.name, assignee.email)
|
|
28
|
+
: { name: groupNameFact(assignee.ref, assignee.name) };
|
|
29
|
+
}
|
|
30
|
+
/** Display pair per the spec's fallback order: name + email → name + userID → email + userID → userID. */
|
|
31
|
+
export function userDisplayPair(facts, userId) {
|
|
32
|
+
if (facts.name) {
|
|
33
|
+
return { name: facts.name, email: facts.email ?? userId };
|
|
34
|
+
}
|
|
35
|
+
if (facts.email) {
|
|
36
|
+
return { name: facts.email, email: userId };
|
|
37
|
+
}
|
|
38
|
+
return { name: userId };
|
|
39
|
+
}
|
|
40
|
+
/** Row display pair — {@link userDisplayPair} for users; groups show name (or raw id), no subline. */
|
|
41
|
+
export function granteeDisplayPair(grantee) {
|
|
42
|
+
const id = objRefToString(grantee.granteeRef);
|
|
43
|
+
if (grantee.kind !== "user") {
|
|
44
|
+
return { name: grantee.name ?? id };
|
|
45
|
+
}
|
|
46
|
+
return userDisplayPair(grantee, id);
|
|
15
47
|
}
|
|
16
48
|
/** Case-insensitive match of an assignee against the picker query (name, or email for users). */
|
|
17
49
|
export function assigneeMatchesQuery(assignee, query) {
|
|
@@ -57,8 +89,7 @@ export function granteesFromAccessList(list) {
|
|
|
57
89
|
id: granteeId("user", g.user.ref),
|
|
58
90
|
kind: "user",
|
|
59
91
|
granteeRef: g.user.ref,
|
|
60
|
-
|
|
61
|
-
email: g.user.email,
|
|
92
|
+
...userIdentityFacts(g.user.ref, g.user.fullName, g.user.email),
|
|
62
93
|
...granteeAccess(g.permissions, g.inheritedPermissions),
|
|
63
94
|
});
|
|
64
95
|
}
|
|
@@ -67,7 +98,7 @@ export function granteesFromAccessList(list) {
|
|
|
67
98
|
id: granteeId("group", g.userGroup.ref),
|
|
68
99
|
kind: "group",
|
|
69
100
|
granteeRef: g.userGroup.ref,
|
|
70
|
-
name: g.userGroup.
|
|
101
|
+
name: groupNameFact(g.userGroup.ref, g.userGroup.name),
|
|
71
102
|
...granteeAccess(g.permissions, g.inheritedPermissions),
|
|
72
103
|
});
|
|
73
104
|
}
|
|
@@ -12,17 +12,28 @@ import type { IObjectAccessSummary, IObjectShareLabel } from "./types.js";
|
|
|
12
12
|
*/
|
|
13
13
|
export type ObjectSharePermissionLevel = AccessGranularPermission;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Known identity facts of a grantee: real name/email only, never an id fallback.
|
|
16
|
+
* Undefined fields are unknown and may be backfilled.
|
|
16
17
|
*
|
|
17
18
|
* @internal
|
|
18
19
|
*/
|
|
19
|
-
export interface
|
|
20
|
+
export interface IGranteeIdentityFacts {
|
|
21
|
+
/** Real full name (users) / group name, when known. */
|
|
22
|
+
name?: string;
|
|
23
|
+
/** Real email, when known (users only). */
|
|
24
|
+
email?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Dialog row derived from a backend grant. `name`/`email` are real facts only;
|
|
28
|
+
* display fallbacks are `granteeDisplayPair`'s concern.
|
|
29
|
+
*
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export interface IObjectShareGrantee extends IGranteeIdentityFacts {
|
|
20
33
|
/** Stable id used as the dialog row's React key. `user:<ref>` / `group:<ref>`. */
|
|
21
34
|
id: string;
|
|
22
35
|
kind: "user" | "group";
|
|
23
36
|
granteeRef: ObjRef;
|
|
24
|
-
name: string;
|
|
25
|
-
email?: string;
|
|
26
37
|
level: ObjectSharePermissionLevel;
|
|
27
38
|
/**
|
|
28
39
|
* Effective permission when it is *higher* than the directly-granted `level`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectShareController.types.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,KAAK,EACR,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;GAQG;AACH,MAAM,MAAM,0BAA0B,GAAG,wBAAwB,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"objectShareController.types.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,7 +73,6 @@ export interface IAccessList {
|
|
|
73
73
|
* showing a stale SHARE inherited from the initial fetch.
|
|
74
74
|
*/
|
|
75
75
|
setWorkspaceLevel: React.Dispatch<React.SetStateAction<"VIEW" | "SHARE">>;
|
|
76
|
-
setKnownNames: React.Dispatch<React.SetStateAction<Record<string, string>>>;
|
|
77
76
|
}
|
|
78
77
|
/**
|
|
79
78
|
* Owns the backend access list. It is fetched once (per target) then seeded into
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAccessList.d.ts","sourceRoot":"","sources":["../../src/share/useAccessList.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAEH,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"useAccessList.d.ts","sourceRoot":"","sources":["../../src/share/useAccessList.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAEH,KAAK,sBAAsB,EAE3B,KAAK,MAAM,EAGd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAmB,MAAM,sBAAsB,CAAC;AAa7G,OAAO,KAAK,EAER,2BAA2B,EAC3B,mBAAmB,EACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,iFAAiF;IACjF,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,wFAAwF;IACxF,OAAO,EAAE,OAAO,CAAC;IACjB,iGAA+F;IAC/F,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,uFAAqF;IACrF,aAAa,EAAE,kBAAkB,CAAC;IAClC,6FAA2F;IAC3F,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,iEAAiE;IACjE,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC1C,+DAA+D;IAC/D,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC9C,iDAAiD;IACjD,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B;;;;;OAKG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B,mFAAmF;IACnF,MAAM,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/F;;;;OAIG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC3F;;;;;;;OAOG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC;;;;;;;;OAQG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B,2FAA2F;IAC3F,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IAEjC,qGAAqG;IACrG,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACzE,8EAA8E;IAC9E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC3E;;;;OAIG;IACH,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAC7E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CACzB,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EACjC,UAAU,EAAE,OAAO,GACpB,WAAW,CAkTb"}
|