@gooddata/sdk-ui-ext 11.52.0-alpha.6 → 11.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/esm/dataLoaders/InsightDataLoader.d.ts +6 -0
  2. package/esm/dataLoaders/InsightDataLoader.d.ts.map +1 -1
  3. package/esm/dataLoaders/InsightDataLoader.js +4 -1
  4. package/esm/dataLoaders/index.d.ts +13 -0
  5. package/esm/dataLoaders/index.d.ts.map +1 -1
  6. package/esm/dataLoaders/index.js +14 -0
  7. package/esm/index.d.ts +1 -1
  8. package/esm/index.d.ts.map +1 -1
  9. package/esm/index.js +1 -1
  10. package/esm/insightView/InsightRenderer.d.ts +2 -5
  11. package/esm/insightView/InsightRenderer.d.ts.map +1 -1
  12. package/esm/insightView/InsightRenderer.js +1 -2
  13. package/esm/internal/components/pluggableVisualizations/mekko/PluggableMekko.d.ts +6 -1
  14. package/esm/internal/components/pluggableVisualizations/mekko/PluggableMekko.d.ts.map +1 -1
  15. package/esm/internal/components/pluggableVisualizations/mekko/PluggableMekko.js +25 -4
  16. package/esm/internal/components/pluggableVisualizations/pivotTable/PluggablePivotTable.d.ts.map +1 -1
  17. package/esm/internal/components/pluggableVisualizations/pivotTable/PluggablePivotTable.js +0 -1
  18. package/esm/internal/translations/de-DE.localization-bundle.d.ts +2 -0
  19. package/esm/internal/translations/de-DE.localization-bundle.d.ts.map +1 -1
  20. package/esm/internal/translations/de-DE.localization-bundle.js +2 -0
  21. package/esm/internal/translations/en-AU.localization-bundle.d.ts +2 -0
  22. package/esm/internal/translations/en-AU.localization-bundle.d.ts.map +1 -1
  23. package/esm/internal/translations/en-AU.localization-bundle.js +2 -0
  24. package/esm/internal/translations/en-GB.localization-bundle.d.ts +2 -0
  25. package/esm/internal/translations/en-GB.localization-bundle.d.ts.map +1 -1
  26. package/esm/internal/translations/en-GB.localization-bundle.js +2 -0
  27. package/esm/internal/translations/en-US.localization-bundle.d.ts +4 -0
  28. package/esm/internal/translations/en-US.localization-bundle.d.ts.map +1 -1
  29. package/esm/internal/translations/en-US.localization-bundle.js +4 -0
  30. package/esm/internal/translations/es-419.localization-bundle.d.ts +2 -0
  31. package/esm/internal/translations/es-419.localization-bundle.d.ts.map +1 -1
  32. package/esm/internal/translations/es-419.localization-bundle.js +2 -0
  33. package/esm/internal/translations/es-ES.localization-bundle.d.ts +2 -0
  34. package/esm/internal/translations/es-ES.localization-bundle.d.ts.map +1 -1
  35. package/esm/internal/translations/es-ES.localization-bundle.js +2 -0
  36. package/esm/internal/translations/fi-FI.localization-bundle.d.ts +2 -0
  37. package/esm/internal/translations/fi-FI.localization-bundle.d.ts.map +1 -1
  38. package/esm/internal/translations/fi-FI.localization-bundle.js +2 -0
  39. package/esm/internal/translations/fr-CA.localization-bundle.d.ts +2 -0
  40. package/esm/internal/translations/fr-CA.localization-bundle.d.ts.map +1 -1
  41. package/esm/internal/translations/fr-CA.localization-bundle.js +2 -0
  42. package/esm/internal/translations/fr-FR.localization-bundle.d.ts +2 -0
  43. package/esm/internal/translations/fr-FR.localization-bundle.d.ts.map +1 -1
  44. package/esm/internal/translations/fr-FR.localization-bundle.js +2 -0
  45. package/esm/internal/translations/id-ID.localization-bundle.d.ts +2 -0
  46. package/esm/internal/translations/id-ID.localization-bundle.d.ts.map +1 -1
  47. package/esm/internal/translations/id-ID.localization-bundle.js +2 -0
  48. package/esm/internal/translations/it-IT.localization-bundle.d.ts +2 -0
  49. package/esm/internal/translations/it-IT.localization-bundle.d.ts.map +1 -1
  50. package/esm/internal/translations/it-IT.localization-bundle.js +2 -0
  51. package/esm/internal/translations/ja-JP.localization-bundle.d.ts +2 -0
  52. package/esm/internal/translations/ja-JP.localization-bundle.d.ts.map +1 -1
  53. package/esm/internal/translations/ja-JP.localization-bundle.js +2 -0
  54. package/esm/internal/translations/ko-KR.localization-bundle.d.ts +2 -0
  55. package/esm/internal/translations/ko-KR.localization-bundle.d.ts.map +1 -1
  56. package/esm/internal/translations/ko-KR.localization-bundle.js +2 -0
  57. package/esm/internal/translations/nl-NL.localization-bundle.d.ts +2 -0
  58. package/esm/internal/translations/nl-NL.localization-bundle.d.ts.map +1 -1
  59. package/esm/internal/translations/nl-NL.localization-bundle.js +2 -0
  60. package/esm/internal/translations/pl-PL.localization-bundle.d.ts +2 -0
  61. package/esm/internal/translations/pl-PL.localization-bundle.d.ts.map +1 -1
  62. package/esm/internal/translations/pl-PL.localization-bundle.js +2 -0
  63. package/esm/internal/translations/pt-BR.localization-bundle.d.ts +2 -0
  64. package/esm/internal/translations/pt-BR.localization-bundle.d.ts.map +1 -1
  65. package/esm/internal/translations/pt-BR.localization-bundle.js +2 -0
  66. package/esm/internal/translations/pt-PT.localization-bundle.d.ts +2 -0
  67. package/esm/internal/translations/pt-PT.localization-bundle.d.ts.map +1 -1
  68. package/esm/internal/translations/pt-PT.localization-bundle.js +2 -0
  69. package/esm/internal/translations/ru-RU.localization-bundle.d.ts +2 -0
  70. package/esm/internal/translations/ru-RU.localization-bundle.d.ts.map +1 -1
  71. package/esm/internal/translations/ru-RU.localization-bundle.js +2 -0
  72. package/esm/internal/translations/sl-SI.localization-bundle.d.ts +2 -0
  73. package/esm/internal/translations/sl-SI.localization-bundle.d.ts.map +1 -1
  74. package/esm/internal/translations/sl-SI.localization-bundle.js +2 -0
  75. package/esm/internal/translations/th-TH.localization-bundle.d.ts +2 -0
  76. package/esm/internal/translations/th-TH.localization-bundle.d.ts.map +1 -1
  77. package/esm/internal/translations/th-TH.localization-bundle.js +2 -0
  78. package/esm/internal/translations/tr-TR.localization-bundle.d.ts +2 -0
  79. package/esm/internal/translations/tr-TR.localization-bundle.d.ts.map +1 -1
  80. package/esm/internal/translations/tr-TR.localization-bundle.js +2 -0
  81. package/esm/internal/translations/uk-UA.localization-bundle.d.ts +2 -0
  82. package/esm/internal/translations/uk-UA.localization-bundle.d.ts.map +1 -1
  83. package/esm/internal/translations/uk-UA.localization-bundle.js +2 -0
  84. package/esm/internal/translations/vi-VN.localization-bundle.d.ts +2 -0
  85. package/esm/internal/translations/vi-VN.localization-bundle.d.ts.map +1 -1
  86. package/esm/internal/translations/vi-VN.localization-bundle.js +2 -0
  87. package/esm/internal/translations/zh-HK.localization-bundle.d.ts +2 -0
  88. package/esm/internal/translations/zh-HK.localization-bundle.d.ts.map +1 -1
  89. package/esm/internal/translations/zh-HK.localization-bundle.js +2 -0
  90. package/esm/internal/translations/zh-Hans.localization-bundle.d.ts +2 -0
  91. package/esm/internal/translations/zh-Hans.localization-bundle.d.ts.map +1 -1
  92. package/esm/internal/translations/zh-Hans.localization-bundle.js +2 -0
  93. package/esm/internal/translations/zh-Hant.localization-bundle.d.ts +2 -0
  94. package/esm/internal/translations/zh-Hant.localization-bundle.d.ts.map +1 -1
  95. package/esm/internal/translations/zh-Hant.localization-bundle.js +2 -0
  96. package/esm/notificationsPanel/Notification/Notification.d.ts.map +1 -1
  97. package/esm/notificationsPanel/Notification/Notification.js +6 -3
  98. package/esm/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetail.d.ts +3 -3
  99. package/esm/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetail.d.ts.map +1 -1
  100. package/esm/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetail.js +4 -4
  101. package/esm/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetailDialog.d.ts +9 -3
  102. package/esm/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetailDialog.d.ts.map +1 -1
  103. package/esm/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetailDialog.js +4 -4
  104. package/esm/sdk-ui-ext.d.ts +13 -0
  105. package/esm/share/ObjectShareDialog.js +22 -6
  106. package/esm/share/messages.d.ts +7 -0
  107. package/esm/share/messages.d.ts.map +1 -1
  108. package/esm/share/messages.js +5 -0
  109. package/esm/share/objectShareController.helpers.d.ts +117 -17
  110. package/esm/share/objectShareController.helpers.d.ts.map +1 -1
  111. package/esm/share/objectShareController.helpers.js +181 -44
  112. package/esm/share/objectShareController.types.d.ts +34 -10
  113. package/esm/share/objectShareController.types.d.ts.map +1 -1
  114. package/esm/share/useAccessList.d.ts +6 -0
  115. package/esm/share/useAccessList.d.ts.map +1 -1
  116. package/esm/share/useAccessList.js +26 -6
  117. package/esm/share/useLabelScope.d.ts +46 -1
  118. package/esm/share/useLabelScope.d.ts.map +1 -1
  119. package/esm/share/useLabelScope.js +98 -6
  120. package/esm/share/useObjectShareController.d.ts.map +1 -1
  121. package/esm/share/useObjectShareController.js +213 -45
  122. package/esm/share/useObjectShareDialog.d.ts +7 -0
  123. package/esm/share/useObjectShareDialog.d.ts.map +1 -1
  124. package/esm/share/useObjectShareDialog.js +22 -2
  125. package/package.json +21 -21
@@ -1,5 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2024-2025 GoodData Corporation
2
+ // (C) 2024-2026 GoodData Corporation
3
3
  import { useRef, useState } from "react";
4
4
  import { defineMessages, useIntl } from "react-intl";
5
5
  import { Overlay, UiButton, alignConfigToAlignPoint } from "@gooddata/sdk-ui-kit";
@@ -19,16 +19,16 @@ const messages = defineMessages({
19
19
  /**
20
20
  * @internal
21
21
  */
22
- export function NotificationFiltersDetail({ filters }) {
22
+ export function NotificationFiltersDetail({ items }) {
23
23
  const [isFiltersDialogOpen, setIsFiltersDialogOpen] = useState(false);
24
24
  const intl = useIntl();
25
25
  const ref = useRef(null);
26
26
  const closeFiltersDialog = () => setIsFiltersDialogOpen(false);
27
27
  const toggleFiltersDialog = () => setIsFiltersDialogOpen((x) => !x);
28
- return (_jsxs(_Fragment, { children: [filters.length ? (_jsx(UiButton, { ref: ref, onClick: (e) => {
28
+ return (_jsxs(_Fragment, { children: [items.length > 0 ? (_jsx(UiButton, { ref: ref, onClick: (e) => {
29
29
  e.stopPropagation();
30
30
  toggleFiltersDialog();
31
31
  }, onKeyDown: (e) => {
32
32
  e.stopPropagation();
33
- }, variant: "tertiary", size: "small", label: intl.formatMessage(messages.buttonLabel, { count: filters.length }) })) : null, isFiltersDialogOpen ? (_jsx(Overlay, { isModal: false, alignTo: ref.current, alignPoints: ALIGN_POINTS, closeOnEscape: true, closeOnOutsideClick: true, closeOnParentScroll: true, closeOnMouseDrag: false, onClose: closeFiltersDialog, children: _jsx(NotificationFiltersDetailDialog, { filters: filters, onClose: closeFiltersDialog }) })) : null] }));
33
+ }, variant: "tertiary", size: "small", label: intl.formatMessage(messages.buttonLabel, { count: items.length }) })) : null, isFiltersDialogOpen ? (_jsx(Overlay, { isModal: false, alignTo: ref.current, alignPoints: ALIGN_POINTS, closeOnEscape: true, closeOnOutsideClick: true, closeOnParentScroll: true, closeOnMouseDrag: false, onClose: closeFiltersDialog, children: _jsx(NotificationFiltersDetailDialog, { items: items, onClose: closeFiltersDialog }) })) : null] }));
34
34
  }
@@ -1,13 +1,19 @@
1
- import { type AlertFilters } from "@gooddata/sdk-model";
1
+ /**
2
+ * @internal
3
+ */
4
+ export type AlertItem = {
5
+ title?: string;
6
+ value: string;
7
+ };
2
8
  /**
3
9
  * @internal
4
10
  */
5
11
  export interface INotificationFiltersDetailDialogProps {
6
- filters: AlertFilters[];
12
+ items: AlertItem[];
7
13
  onClose: () => void;
8
14
  }
9
15
  /**
10
16
  * @internal
11
17
  */
12
- export declare function NotificationFiltersDetailDialog({ filters, onClose }: INotificationFiltersDetailDialogProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function NotificationFiltersDetailDialog({ items, onClose }: INotificationFiltersDetailDialogProps): import("react/jsx-runtime").JSX.Element;
13
19
  //# sourceMappingURL=NotificationFiltersDetailDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationFiltersDetailDialog.d.ts","sourceRoot":"","sources":["../../../src/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetailDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAaxD;;GAEG;AACH,MAAM,WAAW,qCAAqC;IAClD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,qCAAqC,2CAmB1G"}
1
+ {"version":3,"file":"NotificationFiltersDetailDialog.d.ts","sourceRoot":"","sources":["../../../src/notificationsPanel/NotificationFiltersDetail/NotificationFiltersDetailDialog.tsx"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,qCAAqC;IAClD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,qCAAqC,2CAmBxG"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2024-2025 GoodData Corporation
2
+ // (C) 2024-2026 GoodData Corporation
3
3
  import { defineMessages, useIntl } from "react-intl";
4
4
  import { bem } from "../bem.js";
5
5
  import { DetailsDialog } from "../components/DetailsDialog.js";
@@ -12,9 +12,9 @@ const messages = defineMessages({
12
12
  /**
13
13
  * @internal
14
14
  */
15
- export function NotificationFiltersDetailDialog({ filters, onClose }) {
15
+ export function NotificationFiltersDetailDialog({ items, onClose }) {
16
16
  const intl = useIntl();
17
- return (_jsx(DetailsDialog, { title: `${intl.formatMessage(messages.title)} (${filters.length})`, content: _jsx("div", { className: b(), children: filters.map(({ title, filter }, idx) => (_jsxs("div", { className: e("item"), children: [
18
- _jsx("div", { className: e("label"), children: title }), _jsx("div", { className: e("values"), children: filter })
17
+ return (_jsx(DetailsDialog, { title: `${intl.formatMessage(messages.title)} (${items.length})`, content: _jsx("div", { className: b(), children: items.map(({ title, value }, idx) => (_jsxs("div", { className: e("item"), children: [
18
+ _jsx("div", { className: e("label"), children: title }), _jsx("div", { className: e("values"), children: value })
19
19
  ] }, idx))) }), onClose: onClose }));
20
20
  }
@@ -231,6 +231,19 @@ export declare type AutomationsType = Extract<AutomationType, "alert" | "schedul
231
231
 
232
232
  export { ChartInlineVisualizationType }
233
233
 
234
+ /**
235
+ * Clears the cached definition of a single insight used by the InsightView components.
236
+ *
237
+ * @remarks
238
+ * Use this after an insight has been edited, so that the next render fetches the new
239
+ * definition. To clear every cache at once, use {@link clearInsightViewCaches}.
240
+ *
241
+ * @param workspace - the workspace the insight belongs to
242
+ * @param ref - the ref of the insight whose cached definition should be dropped
243
+ * @public
244
+ */
245
+ export declare function clearInsightViewCacheForInsight(workspace: string, ref: ObjRef): void;
246
+
234
247
  /**
235
248
  * Clears all the caches used by the InsightView components.
236
249
  *
@@ -40,7 +40,7 @@ export function ObjectShareDialog(props) {
40
40
  /** The dialog session — mounted only while open, so its state cannot outlive a close. */
41
41
  function ObjectShareDialogSession({ target, objectTitle, onClose, onSummaryChange, labels, labelsLoading, labelsError, }) {
42
42
  const intl = useIntl();
43
- const { state, actions, isShareViewOpen, isAddGranteeOpen, isGeneralAccessConfirmOpen, isSelfRestrictConfirmOpen, isMutable, isLoading, workspaceDisabledLevels, rowDisabledLevels, onClose: closeDialog, onRowPermissionChange, onRowRemove, onSelfRestrictCancel, onSelfRestrictConfirm, } = useObjectShareDialog({
43
+ const { state, actions, isShareViewOpen, isAddGranteeOpen, isGeneralAccessConfirmOpen, isSelfRestrictConfirmOpen, isMutable, isLoading, workspaceDisabledLevels, rowDisabledLevels, isRowRemoveDisabled, rowRemoveDisabledTooltip, onClose: closeDialog, onRowPermissionChange, onRowRemove, onSelfRestrictCancel, onSelfRestrictConfirm, } = useObjectShareDialog({
44
44
  target,
45
45
  onClose,
46
46
  onSummaryChange,
@@ -55,10 +55,23 @@ function ObjectShareDialogSession({ target, objectTitle, onClose, onSummaryChang
55
55
  kind: l.isPrimary ? "primary" : undefined,
56
56
  locked: l.isPrimary,
57
57
  }));
58
+ // Per row: a label the grantee only inherits is locked too. It is in their scope
59
+ // (so it shows checked, as the granting workspace shows it) but this workspace
60
+ // holds no grant on it to revoke — the same rule that disables Remove access for a
61
+ // grantee whose object access is inherited-only.
62
+ const rowLabelItems = (granteeId) => {
63
+ const inherited = state.inheritedLabelIdsByGrantee[granteeId];
64
+ if (!inherited?.length) {
65
+ return labelItems;
66
+ }
67
+ return labelItems.map((item) => item.locked || !inherited.includes(item.id) ? item : { ...item, locked: true });
68
+ };
58
69
  const toGranteeRow = (g) => {
59
70
  const display = granteeDisplayPair(g);
60
- // Levels come back only for the signed-in user's own sole grant (you can't
61
- // raise yourself); the confirm-vs-direct routing lives in the hook too.
71
+ // Row policy levels the caller may not pick (their own sole grant, or a
72
+ // level an inherited grant already exceeds) and whether there is a grant in
73
+ // this workspace to remove — is decided in the hook, with the matching
74
+ // tooltips; this only renders it.
62
75
  const disabledLevels = rowDisabledLevels(g);
63
76
  return {
64
77
  id: g.id,
@@ -68,9 +81,9 @@ function ObjectShareDialogSession({ target, objectTitle, onClose, onSummaryChang
68
81
  : display.name,
69
82
  email: display.email,
70
83
  isPending: g.pending !== undefined,
71
- controls: (_jsx(UiGranteeRowControls, { labels: labelItems, selectedLabelIds: state.selectedLabelIdsByGrantee[g.id] ?? state.labels.map((l) => l.id), permissionLevel: g.level, effectivePermission: g.effectivePermission, disabledLevels: disabledLevels, disabledTooltip: disabledLevels
84
+ controls: (_jsx(UiGranteeRowControls, { labels: rowLabelItems(g.id), selectedLabelIds: state.selectedLabelIdsByGrantee[g.id] ?? state.labels.map((l) => l.id), permissionLevel: g.level, effectivePermission: g.effectivePermission, disabledLevels: disabledLevels, disabledTooltip: disabledLevels
72
85
  ? intl.formatMessage(objectShareMessages.selfRestrictWarning)
73
- : undefined,
86
+ : undefined, isRemoveDisabled: isRowRemoveDisabled(g), removeDisabledTooltip: rowRemoveDisabledTooltip,
74
87
  // Disabled while the row's own write is saving, while mutations are
75
88
  // gated (unresolved label scope would orphan real per-label grants),
76
89
  // and while a sole row's self identity is unknown.
@@ -125,7 +138,10 @@ function ObjectShareDialogSession({ target, objectTitle, onClose, onSummaryChang
125
138
  // On a failed load the empty grantee list + RESTRICTED radio are a
126
139
  // placeholder, not the real policy — show why instead of letting it
127
140
  // read as "no one has access".
128
- error: state.status === "error" ? intl.formatMessage(objectShareMessages.loadError) : undefined }), _jsx(UiAddGranteeDialog, { isOpen: isAddGranteeOpen, objectTitle: objectTitle, loadOptions: actions.loadOptions, selectedGrantees: state.pendingGrantees, onSelectedGranteesChange: actions.setPendingGrantees, onBack: actions.closeAddGrantee, onClose: closeDialog, onCancel: actions.closeAddGrantee, onShare: () => {
141
+ error: state.status === "error" ? intl.formatMessage(objectShareMessages.loadError) : undefined }), _jsx(UiAddGranteeDialog, { isOpen: isAddGranteeOpen, objectTitle: objectTitle, loadOptions: actions.loadOptions, selectedGrantees: state.pendingGrantees, onSelectedGranteesChange: actions.setPendingGrantees,
142
+ // Same checklist the grantee rows use, so a label scope can be narrowed
143
+ // while adding instead of only after the grant landed.
144
+ labels: labelItems, onBack: actions.closeAddGrantee, onClose: closeDialog, onCancel: actions.closeAddGrantee, onShare: () => {
129
145
  void actions.confirmAddGrantees();
130
146
  } }), _jsx(UiConfirmDialog, { isOpen: isGeneralAccessConfirmOpen, title: intl.formatMessage(state.pendingGeneralAccess === "RESTRICTED"
131
147
  ? objectShareMessages.confirmRestrictTitle
@@ -40,6 +40,13 @@ export declare const objectShareMessages: {
40
40
  workspaceLevelInherited: {
41
41
  id: string;
42
42
  };
43
+ /**
44
+ * Disabled-action tooltip on a grantee row's Remove access, for a grantee whose
45
+ * access is inherited only — there is no grant in this workspace to revoke.
46
+ */
47
+ granteeRemoveInherited: {
48
+ id: string;
49
+ };
43
50
  granteeYou: {
44
51
  id: string;
45
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/share/messages.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;IAO5B;;;;OAIG;;;;IAEH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWL,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/share/messages.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;IAO5B;;;;OAIG;;;;IAEH;;;OAGG;;;;IAEH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWL,CAAC"}
@@ -26,6 +26,11 @@ export const objectShareMessages = defineMessages({
26
26
  * below an inherited workspace-wide grant, which they could never lower.
27
27
  */
28
28
  workspaceLevelInherited: { id: "objectShare.workspaceLevel.inherited" },
29
+ /**
30
+ * Disabled-action tooltip on a grantee row's Remove access, for a grantee whose
31
+ * access is inherited only — there is no grant in this workspace to revoke.
32
+ */
33
+ granteeRemoveInherited: { id: "objectShare.granteeRemove.inherited" },
29
34
  granteeYou: { id: "objectShare.grantee.you" },
30
35
  adminTagLabel: { id: "objectShare.adminTag.label" },
31
36
  adminTagTooltip: { id: "objectShare.adminTag.tooltip" },
@@ -58,13 +58,57 @@ export declare function directLevel(permissions: readonly string[]): ObjectShare
58
58
  export declare function levelsAbove(level: ObjectSharePermissionLevel | undefined): ObjectSharePermissionLevel[];
59
59
  /** Levels strictly below the given one, e.g. for disabling levels an inherited grant already exceeds. */
60
60
  export declare function levelsBelow(level: ObjectSharePermissionLevel): ObjectSharePermissionLevel[];
61
+ /** The stronger of two levels; undefined only when both are. */
62
+ export declare function maxLevel(a: ObjectSharePermissionLevel | undefined, b: ObjectSharePermissionLevel | undefined): ObjectSharePermissionLevel | undefined;
61
63
  /**
62
- * The effective permission to surface as a warning, or undefined when the direct
63
- * grant already covers it. Set only when the grantee *inherits* a level (e.g. via
64
- * a group) above the directly-granted one i.e. the effective access is higher
65
- * than what the row's permission control shows.
64
+ * The inherited permission to surface as a warning, or undefined when the direct
65
+ * grant already covers it. Set when the grantee *inherits* a level (via a group or
66
+ * a parent workspace) that the direct grant does not reach including the
67
+ * inherited-only case (`direct` undefined), where the whole displayed level comes
68
+ * from inheritance.
66
69
  */
67
- export declare function effectivePermissionAbove(direct: ObjectSharePermissionLevel, inheritedLevel: ObjectSharePermissionLevel | undefined): ObjectSharePermissionLevel | undefined;
70
+ export declare function effectivePermissionAbove(direct: ObjectSharePermissionLevel | undefined, inheritedLevel: ObjectSharePermissionLevel | undefined): ObjectSharePermissionLevel | undefined;
71
+ /**
72
+ * Whether picking `level` for this grantee would change the level they EFFECTIVELY hold.
73
+ *
74
+ * The permission menu shows the effective level, so a pick is only meaningful if it moves
75
+ * that: under an inherited EDIT, picking SHARE or VIEW cannot lower anything, it would just
76
+ * rewrite the grant made here where nobody can see it. Conversely a direct EDIT under an
77
+ * inherited SHARE CAN be lowered to VIEW, because the effective level then drops to SHARE.
78
+ *
79
+ * The single source of this rule. Everything that reacts to a pick must agree: the
80
+ * controller refuses a pick that changes nothing, so any confirm staged for one would ask
81
+ * the user to approve a change that then silently does not happen.
82
+ *
83
+ * @internal
84
+ */
85
+ export declare function changesEffectiveLevel(grantee: Pick<IObjectShareGrantee, "level" | "inheritedLevel">, level: ObjectSharePermissionLevel): boolean;
86
+ /**
87
+ * Whether revoking this grantee's direct grant would change the level they EFFECTIVELY
88
+ * hold. False when inheritance alone already covers the displayed level: the revoke still
89
+ * removes the local grant, but restricts nothing the grantee can do — so no
90
+ * "Restrict your access?" confirm may be staged for it ({@link changesEffectiveLevel}'s
91
+ * rule, applied to removal).
92
+ *
93
+ * @internal
94
+ */
95
+ export declare function removalChangesEffectiveLevel(grantee: Pick<IObjectShareGrantee, "level" | "inheritedLevel">): boolean;
96
+ /**
97
+ * The row fields to apply when THIS workspace's direct grant moves to `direct`:
98
+ * the displayed level recomposes against whatever is inherited, so a re-grade below
99
+ * an inherited level cannot make the row understate the grantee's real access.
100
+ *
101
+ * @internal
102
+ */
103
+ export declare function withDirectLevel(grantee: IObjectShareGrantee, direct: ObjectSharePermissionLevel): IObjectShareGrantee;
104
+ /**
105
+ * The row a grantee falls back to once their direct grant is revoked but inherited
106
+ * access remains — the row survives the removal as inherited-only rather than
107
+ * disappearing and reappearing on the next load.
108
+ *
109
+ * @internal
110
+ */
111
+ export declare function withoutDirectGrant(grantee: IObjectShareGrantee, inheritedLevel: ObjectSharePermissionLevel): IObjectShareGrantee;
68
112
  export declare function granteesFromAccessList(list: IObjectAccessList | undefined): IObjectShareGrantee[];
69
113
  /**
70
114
  * A transient edit overlaid on a fetched grantee row (keyed by grantee id in
@@ -90,6 +134,17 @@ export type GranteeEdit = {
90
134
  kind: "removed";
91
135
  pending: boolean;
92
136
  settled?: GranteeEdit;
137
+ }
138
+ /**
139
+ * Pending marker only — the row renders exactly as it stands. For a write that
140
+ * locks the row without changing its access (a label-scope edit), so nothing has
141
+ * to invent a level: reusing the `level` overlay would record the DISPLAYED level
142
+ * as the direct grant, and that level is the effective one.
143
+ */
144
+ | {
145
+ kind: "locked";
146
+ pending: boolean;
147
+ settled?: GranteeEdit;
93
148
  };
94
149
  /**
95
150
  * Transient edit of the all-workspace-users rule (general access + its level),
@@ -118,12 +173,18 @@ export declare function toGranularGrantee(kind: "user" | "group", granteeRef: Ob
118
173
  /**
119
174
  * The principal a label-scope reconcile applies to: a named user/group, or the
120
175
  * implicit all-workspace-users rule (general access).
176
+ *
177
+ * `level` is the permission a label GRANT carries, so a label mirrors the level
178
+ * held on the object rather than always landing on VIEW. Defaults to VIEW when
179
+ * omitted; irrelevant for revokes, which write an empty permission set.
121
180
  */
122
- export type LabelScopePrincipal = {
181
+ export type LabelScopePrincipal = ({
123
182
  kind: "user" | "group";
124
183
  granteeRef: ObjRef;
125
184
  } | {
126
185
  allWorkspaceUsers: true;
186
+ }) & {
187
+ level?: ObjectSharePermissionLevel;
127
188
  };
128
189
  export declare function granularGranteeFor(principal: LabelScopePrincipal, level: ObjectSharePermissionLevel | "none"): IGranularAccessGrantee;
129
190
  /**
@@ -139,12 +200,42 @@ export declare function buildLabelMutations(principal: LabelScopePrincipal, desi
139
200
  grantee: IGranularAccessGrantee;
140
201
  }>;
141
202
  /**
142
- * Multi-principal variant of {@link buildLabelMutations}: groups the per-label
143
- * writes so each label is one write carrying every principal that changes on it.
144
- * Keys on `label.id`, not the raw `ObjRef` a Map keyed on ObjRef would key on
145
- * object identity and fail to merge equal-but-distinct refs.
203
+ * Pure: the per-label writes that re-grade `principal`'s EXISTING label scope to
204
+ * `principal.level`. Unlike {@link buildLabelMutations} this is not a set diff
205
+ * the scope is unchanged and every in-scope label is rewritten so it is what a
206
+ * permission-level change on the object needs to keep its labels in step. `labels` is
207
+ * the permissionable set, so every write targets a label that can take a grant.
208
+ *
209
+ * The primary label is deliberately EXCLUDED. Its access is implicit — {@link
210
+ * buildLabelMutations} never grants or revokes it — so a grant written here would be
211
+ * one nothing can take away: a later removal diffs the primary as unchanged and leaves
212
+ * the grantee holding the primary label after their object access is gone.
213
+ */
214
+ export declare function buildLabelRegrades(principals: LabelScopePrincipal[], scopeLabelIds: ReadonlySet<string>, labels: IObjectShareLabel[]): Array<{
215
+ id: string;
216
+ ref: ObjRef;
217
+ grantees: IGranularAccessGrantee[];
218
+ }>;
219
+ /**
220
+ * One principal's label-scope move. Held per principal because grantees added in
221
+ * a single step each pick their own scope, so one desired set can't stand for the
222
+ * whole batch.
223
+ *
224
+ * @internal
146
225
  */
147
- export declare function buildLabelMutationsForPrincipals(principals: LabelScopePrincipal[], desiredLabelIds: ReadonlySet<string>, currentLabelIds: ReadonlySet<string>, labels: IObjectShareLabel[]): Array<{
226
+ export interface ILabelScopeChange {
227
+ principal: LabelScopePrincipal;
228
+ desiredLabelIds: ReadonlySet<string>;
229
+ currentLabelIds: ReadonlySet<string>;
230
+ }
231
+ /**
232
+ * Multi-principal variant of {@link buildLabelMutations}, each principal moving its
233
+ * own scope: groups the per-label writes so each label is one write carrying every
234
+ * principal that changes on it. Keys on `label.id`, not the raw `ObjRef` — a Map
235
+ * keyed on ObjRef would key on object identity and fail to merge
236
+ * equal-but-distinct refs.
237
+ */
238
+ export declare function buildLabelMutationsForScopes(changes: readonly ILabelScopeChange[], labels: IObjectShareLabel[]): Array<{
148
239
  id: string;
149
240
  ref: ObjRef;
150
241
  grantees: IGranularAccessGrantee[];
@@ -154,11 +245,20 @@ export declare const NO_LABELS: IObjectShareLabel[];
154
245
  /** Shared empty id-set for "no labels in scope" diffs. */
155
246
  export declare const EMPTY_IDS: ReadonlySet<string>;
156
247
  /**
157
- * Whether a fetched grant for `granteeId` exists with a non-empty permission set.
158
- * Inspects the raw grants rather than `granteesFromAccessList`, which normalizes
159
- * every listed user/group to a VIEW level even when its `permissions` are empty —
160
- * so a revoked-but-still-listed entry would otherwise read as granted, mis-scoping
161
- * a per-label checkbox to a label the grantee can't actually access.
248
+ * Where `granteeId`'s access to this object comes from, or `undefined` when they hold it
249
+ * at all. The two flags are INDEPENDENT: a grantee can hold a grant made here *and*
250
+ * inherit one from a group or a parent workspace, and both facts matter — `direct` says
251
+ * there is something here to revoke, `inherited` says access survives revoking it.
252
+ * Collapsing them to a single winner is what made a dual-granted label read as
253
+ * inaccessible once its local grant was revoked.
254
+ *
255
+ * Inspects the raw grants rather than `granteesFromAccessList`, which normalizes every
256
+ * listed user/group to a VIEW level even when it carries no permissions — so a
257
+ * revoked-but-still-listed entry would otherwise read as granted, mis-scoping a per-label
258
+ * checkbox to a label the grantee can't actually access.
162
259
  */
163
- export declare function isGranteeGrantedIn(list: IObjectAccessList, id: string): boolean;
260
+ export declare function granteeGrantIn(list: IObjectAccessList, id: string): {
261
+ direct: boolean;
262
+ inherited: boolean;
263
+ } | undefined;
164
264
  //# sourceMappingURL=objectShareController.helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"objectShareController.helpers.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"objectShareController.helpers.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.helpers.ts"],"names":[],"mappings":"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"}