@gooddata/sdk-ui-ext 11.46.0-alpha.5 → 11.46.0-alpha.6

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 CHANGED
@@ -7,9 +7,9 @@
7
7
 
8
8
  The following 3rd-party software packages may be used by or distributed with gooddata-ui-sdk. Any information relevant to third-party vendors listed below are collected using common, reasonable means.
9
9
 
10
- Date generated: 2026-7-7
10
+ Date generated: 2026-7-8
11
11
 
12
- Revision ID: c60903358f56a496a9d470d006e98568e9a8b664
12
+ Revision ID: 70f53b749a8d57ac2f01f75ea073f810922806d4
13
13
 
14
14
  ================================================================================
15
15
  ================================================================================
@@ -231,10 +231,10 @@ Revision ID: c60903358f56a496a9d470d006e98568e9a8b664
231
231
  - @mapbox/whoots-js (3.1.0) [ISC]
232
232
  - @maplibre/maplibre-gl-style-spec (20.4.0) [MIT, ISC, BSD-3-Clause]
233
233
  - @marijn/find-cluster-break (1.0.2) [MIT]
234
- - @module-federation/error-codes (2.3.1) [MIT]
235
- - @module-federation/runtime (2.3.1) [MIT]
236
- - @module-federation/runtime-core (2.3.1) [MIT]
237
- - @module-federation/sdk (2.3.1) [MIT]
234
+ - @module-federation/error-codes (2.6.0) [MIT]
235
+ - @module-federation/runtime (2.6.0) [MIT]
236
+ - @module-federation/runtime-core (2.6.0) [MIT]
237
+ - @module-federation/sdk (2.6.0) [MIT]
238
238
  - @noble/hashes (1.4.0) [MIT]
239
239
  - @nodelib/fs.scandir (2.1.5) [MIT]
240
240
  - @nodelib/fs.stat (2.0.5) [MIT]
@@ -3560,9 +3560,9 @@ MIT
3560
3560
 
3561
3561
 
3562
3562
  --------------------------------------------------------------------------------
3563
- Package Title: @module-federation/error-codes (2.3.1)
3563
+ Package Title: @module-federation/error-codes (2.6.0)
3564
3564
 
3565
- Package Locator: npm+@module-federation/error-codes$2.3.1
3565
+ Package Locator: npm+@module-federation/error-codes$2.6.0
3566
3566
 
3567
3567
  Package Depth: Transitive
3568
3568
  --------------------------------------------------------------------------------
@@ -3572,9 +3572,9 @@ MIT
3572
3572
 
3573
3573
 
3574
3574
  --------------------------------------------------------------------------------
3575
- Package Title: @module-federation/runtime (2.3.1)
3575
+ Package Title: @module-federation/runtime (2.6.0)
3576
3576
 
3577
- Package Locator: npm+@module-federation/runtime$2.3.1
3577
+ Package Locator: npm+@module-federation/runtime$2.6.0
3578
3578
 
3579
3579
  Package Depth: Direct
3580
3580
  --------------------------------------------------------------------------------
@@ -3584,9 +3584,9 @@ MIT
3584
3584
 
3585
3585
 
3586
3586
  --------------------------------------------------------------------------------
3587
- Package Title: @module-federation/runtime-core (2.3.1)
3587
+ Package Title: @module-federation/runtime-core (2.6.0)
3588
3588
 
3589
- Package Locator: npm+@module-federation/runtime-core$2.3.1
3589
+ Package Locator: npm+@module-federation/runtime-core$2.6.0
3590
3590
 
3591
3591
  Package Depth: Transitive
3592
3592
  --------------------------------------------------------------------------------
@@ -3596,9 +3596,9 @@ MIT
3596
3596
 
3597
3597
 
3598
3598
  --------------------------------------------------------------------------------
3599
- Package Title: @module-federation/sdk (2.3.1)
3599
+ Package Title: @module-federation/sdk (2.6.0)
3600
3600
 
3601
- Package Locator: npm+@module-federation/sdk$2.3.1
3601
+ Package Locator: npm+@module-federation/sdk$2.6.0
3602
3602
 
3603
3603
  Package Depth: Transitive
3604
3604
  --------------------------------------------------------------------------------
@@ -29272,4 +29272,4 @@ POSSIBILITY OF SUCH DAMAGE.
29272
29272
  --------------------------------------------------------------------------------
29273
29273
  --------------------------------------------------------------------------------
29274
29274
 
29275
- Report Generated by FOSSA on 2026-7-7
29275
+ Report Generated by FOSSA on 2026-7-8
@@ -1587,6 +1587,14 @@ export declare interface IObjectShareControllerState {
1587
1587
  transferTargetIsOwner: boolean;
1588
1588
  /** Whether the transfer write (or self-removal) is in flight. */
1589
1589
  transferSaving: boolean;
1590
+ /**
1591
+ * Whether the signed-in user may transfer ownership (owner-only). Consumers hide
1592
+ * the transfer affordance when false — e.g. for a View&Share (SHARE) user.
1593
+ * Detects a direct EDIT grant only (ownership inherited via a user group is not
1594
+ * recognized) and gates the affordance, not the actions — the transfer write
1595
+ * stays callable and the backend remains the authority.
1596
+ */
1597
+ canTransferOwnership: boolean;
1590
1598
  }
1591
1599
 
1592
1600
  /**
@@ -1813,6 +1821,8 @@ export declare interface IUseObjectShareOptions {
1813
1821
  * controls would reconcile against an empty set and orphan real per-label grants.
1814
1822
  */
1815
1823
  labelsLoading?: boolean;
1824
+ /** Whether the share dialog is open; a summary-only consumer leaves it false. */
1825
+ isOpen?: boolean;
1816
1826
  }
1817
1827
 
1818
1828
  /**
@@ -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;AAW1E,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,2CAkPzB"}
1
+ {"version":3,"file":"ObjectShareDialog.d.ts","sourceRoot":"","sources":["../../src/share/ObjectShareDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAW1E,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,2CAuPzB"}
@@ -37,6 +37,7 @@ export function ObjectShareDialog({ target, objectTitle, isOpen, onClose, onSave
37
37
  labels,
38
38
  labelsError,
39
39
  labelsLoading,
40
+ isOpen,
40
41
  });
41
42
  const { state, actions } = controller ?? ownController;
42
43
  const handleClose = useCallback(() => {
@@ -108,7 +109,10 @@ export function ObjectShareDialog({ target, objectTitle, isOpen, onClose, onSave
108
109
  void actions.changePermissionLevel(g.id, level);
109
110
  }, onRemoveAccess: () => {
110
111
  void actions.removeGrantee(g.id);
111
- }, onTransferOwnership: actions.openTransferOwnership })),
112
+ },
113
+ // Owner-only — omitting the handler hides the menu item for
114
+ // users who can't transfer (e.g. View&Share).
115
+ onTransferOwnership: state.canTransferOwnership ? actions.openTransferOwnership : undefined })),
112
116
  })), onAddClick: actions.openAddGrantee, isAddDisabled: isAddDisabled, generalAccess: state.generalAccess, onGeneralAccessChange: actions.requestGeneralAccessChange,
113
117
  // Permission dropdown on the "All workspace members" row — only while
114
118
  // workspace access is on (the rule must exist to be re-graded). No
@@ -117,6 +117,14 @@ export interface IObjectShareControllerState {
117
117
  transferTargetIsOwner: boolean;
118
118
  /** Whether the transfer write (or self-removal) is in flight. */
119
119
  transferSaving: boolean;
120
+ /**
121
+ * Whether the signed-in user may transfer ownership (owner-only). Consumers hide
122
+ * the transfer affordance when false — e.g. for a View&Share (SHARE) user.
123
+ * Detects a direct EDIT grant only (ownership inherited via a user group is not
124
+ * recognized) and gates the affordance, not the actions — the transfer write
125
+ * stays callable and the backend remains the authority.
126
+ */
127
+ canTransferOwnership: boolean;
120
128
  }
121
129
  /**
122
130
  * @internal
@@ -216,5 +224,7 @@ export interface IUseObjectShareOptions {
216
224
  * controls would reconcile against an empty set and orphan real per-label grants.
217
225
  */
218
226
  labelsLoading?: boolean;
227
+ /** Whether the share dialog is open; a summary-only consumer leaves it false. */
228
+ isOpen?: boolean;
219
229
  }
220
230
  //# sourceMappingURL=objectShareController.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"objectShareController.types.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"objectShareController.types.d.ts","sourceRoot":"","sources":["../../src/share/objectShareController.types.ts"],"names":[],"mappings":"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"}
@@ -46,10 +46,21 @@ export interface IAccessList {
46
46
  * The current user's ref, resolved on demand (and cached). Used by the
47
47
  * transfer-ownership flow to write the current user's own grant change. The
48
48
  * add-grantee *picker* excludes the current user, but `getAccessList` does
49
- * not, so a self grant can still appear as a row. Rejects if the profile
50
- * can't be read.
49
+ * not, so a self grant can still appear as a row. Always an idRef in the
50
+ * access list's id space, so it is comparable to grantee refs. Rejects if
51
+ * the profile can't be read.
51
52
  */
52
53
  getCurrentUserRef: () => Promise<ObjRef>;
54
+ /**
55
+ * Whether the signed-in user owns the object (holds a direct EDIT grant) — the
56
+ * gate for the owner-only transfer-ownership action. Resolved eagerly so the
57
+ * affordance is correct at render time; false until the current user resolves.
58
+ * Detects direct grants only: ownership held via a user group is not recognized
59
+ * (the row model drops inherited EDIT, and whether the access list surfaces a
60
+ * self row for group-only members is an open API question). Affordance-only by
61
+ * design — the transfer actions are never blocked on it, the backend decides.
62
+ */
63
+ canTransferOwnership: boolean;
53
64
  /** Resolve a grantee id back to the picker's original ObjRef (preserves Uri vs Id ref). */
54
65
  refForId: (id: string) => ObjRef;
55
66
  /** Write through a local grantee-row change (insert / level / remove); rolled back by the caller. */
@@ -79,5 +90,5 @@ export interface IAccessList {
79
90
  *
80
91
  * @internal
81
92
  */
82
- export declare function useAccessList(target: IObjectPermissionsObject | undefined, onSaved: (() => void) | undefined): IAccessList;
93
+ export declare function useAccessList(target: IObjectPermissionsObject | undefined, onSaved: (() => void) | undefined, dialogOpen: boolean): IAccessList;
83
94
  //# sourceMappingURL=useAccessList.d.ts.map
@@ -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,EAC3B,KAAK,MAAM,EAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAmB,MAAM,sBAAsB,CAAC;AAW7G,OAAO,KAAK,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACzG,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;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,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;IAC1E,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC/E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CACzB,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAClC,WAAW,CAoSb"}
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,EAC3B,KAAK,MAAM,EAGd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAmB,MAAM,sBAAsB,CAAC;AAW7G,OAAO,KAAK,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACzG,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;IAC1E,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC/E;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,CAwTb"}
@@ -1,6 +1,6 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
- import { objRefToString, } from "@gooddata/sdk-model";
3
+ import { idRef, objRefToString, } from "@gooddata/sdk-model";
4
4
  import { useBackendStrict, useCancelablePromise, useWorkspaceStrict } from "@gooddata/sdk-ui";
5
5
  import { useToastMessage } from "@gooddata/sdk-ui-kit";
6
6
  import { isPermissionsNotAvailable } from "./accessErrors.js";
@@ -22,7 +22,7 @@ import { assigneeMatchesQuery, granteeId, granteeNameUnresolved, granteesFromAcc
22
22
  *
23
23
  * @internal
24
24
  */
25
- export function useAccessList(target, onSaved) {
25
+ export function useAccessList(target, onSaved, dialogOpen) {
26
26
  const backend = useBackendStrict();
27
27
  const workspace = useWorkspaceStrict();
28
28
  const toast = useToastMessage();
@@ -243,7 +243,11 @@ export function useAccessList(target, onSaved) {
243
243
  currentUserRefCache.current = backend
244
244
  .currentUser()
245
245
  .getUser()
246
- .then((user) => user.ref)
246
+ // Not `user.ref`: the profile resolves it as a uriRef while access-list
247
+ // grantee refs are idRefs keyed by user id (= profile login), and
248
+ // areObjRefsEqual never matches mixed shapes — self-row matching and
249
+ // the self grant write need the permission API's id space.
250
+ .then((user) => idRef(user.login))
247
251
  .catch((error) => {
248
252
  // Don't cache a rejected promise, or a transient profile-read
249
253
  // failure would make every later transfer fail immediately.
@@ -253,6 +257,17 @@ export function useAccessList(target, onSaved) {
253
257
  }
254
258
  return currentUserRefCache.current;
255
259
  }, [backend]);
260
+ // Resolve the current user only while the dialog is open — keeps the summary-only
261
+ // path free of a profile request (the transfer gate it feeds isn't shown there).
262
+ const { result: currentUserRef } = useCancelablePromise({
263
+ promise: dialogOpen && targetKey ? () => getCurrentUserRef() : undefined,
264
+ onError: () => { },
265
+ },
266
+ // Key on target presence, not identity — the resolved user is
267
+ // target-independent, so a target switch must not reset it.
268
+ [getCurrentUserRef, targetKey !== undefined, dialogOpen]);
269
+ const selfId = currentUserRef ? granteeId("user", currentUserRef) : undefined;
270
+ const canTransferOwnership = selfId !== undefined && namedGrantees.some((g) => g.id === selfId && g.level === "EDIT");
256
271
  return {
257
272
  targetKey,
258
273
  hasList,
@@ -267,6 +282,7 @@ export function useAccessList(target, onSaved) {
267
282
  loadOptions,
268
283
  refForId,
269
284
  getCurrentUserRef,
285
+ canTransferOwnership,
270
286
  setGrantees,
271
287
  setGeneralAccess,
272
288
  setWorkspaceLevel,
@@ -1 +1 @@
1
- {"version":3,"file":"useObjectShareController.d.ts","sourceRoot":"","sources":["../../src/share/useObjectShareController.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAkB1E,OAAO,EACH,KAAK,sBAAsB,EAI3B,KAAK,sBAAsB,EAE9B,MAAM,kCAAkC,CAAC;AAI1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,OAAO,CAAC,EAAE,sBAAsB,GACjC,sBAAsB,CAwyBxB"}
1
+ {"version":3,"file":"useObjectShareController.d.ts","sourceRoot":"","sources":["../../src/share/useObjectShareController.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAkB1E,OAAO,EACH,KAAK,sBAAsB,EAI3B,KAAK,sBAAsB,EAE9B,MAAM,kCAAkC,CAAC;AAI1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,OAAO,CAAC,EAAE,sBAAsB,GACjC,sBAAsB,CAizBxB"}
@@ -30,7 +30,7 @@ import { useLabelScope } from "./useLabelScope.js";
30
30
  * @internal
31
31
  */
32
32
  export function useObjectShareController(target, options) {
33
- const { onSaved, labels = NO_LABELS, labelsError = false, labelsLoading = false } = options ?? {};
33
+ const { onSaved, labels = NO_LABELS, labelsError = false, labelsLoading = false, isOpen = false, } = options ?? {};
34
34
  const toast = useToastMessage();
35
35
  // UI-local buffers — never backend data.
36
36
  const [subview, setSubview] = useState("main");
@@ -47,7 +47,7 @@ export function useObjectShareController(target, options) {
47
47
  const [workspaceLevelSaving, setWorkspaceLevelSaving] = useState(false);
48
48
  // The backend access list, seeded into local state (rows, general access,
49
49
  // summary, the commit/picker primitives) lives in its own hook.
50
- const { targetKey, hasList, grantees, generalAccess, workspaceLevel, summary, status, loadError, accessUnavailable, commit, loadOptions, refForId, getCurrentUserRef, setGrantees, setGeneralAccess, setWorkspaceLevel, setKnownNames, } = useAccessList(target, onSaved);
50
+ const { targetKey, hasList, grantees, generalAccess, workspaceLevel, summary, status, loadError, accessUnavailable, commit, loadOptions, refForId, getCurrentUserRef, canTransferOwnership, setGrantees, setGeneralAccess, setWorkspaceLevel, setKnownNames, } = useAccessList(target, onSaved, isOpen);
51
51
  // Always-current target key, read inside async mutation finalizers that captured
52
52
  // an older one. A write started for object A resolves after the user navigated to
53
53
  // object B; because local state is authoritative (no refetch), applying A's
@@ -665,6 +665,7 @@ export function useObjectShareController(target, options) {
665
665
  transferAlsoRemoveSelf,
666
666
  transferTargetIsOwner,
667
667
  transferSaving,
668
+ canTransferOwnership,
668
669
  }), [
669
670
  subview,
670
671
  status,
@@ -684,6 +685,7 @@ export function useObjectShareController(target, options) {
684
685
  transferAlsoRemoveSelf,
685
686
  transferTargetIsOwner,
686
687
  transferSaving,
688
+ canTransferOwnership,
687
689
  ]);
688
690
  return useMemo(() => ({ state, actions }), [state, actions]);
689
691
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-ext",
3
- "version": "11.46.0-alpha.5",
3
+ "version": "11.46.0-alpha.6",
4
4
  "description": "GoodData.UI SDK - Extensions",
5
5
  "license": "LicenseRef-LICENSE",
6
6
  "author": "GoodData Corporation",
@@ -63,20 +63,20 @@
63
63
  "ts-invariant": "0.10.3",
64
64
  "tslib": "2.8.1",
65
65
  "uuid": "11.1.1",
66
- "@gooddata/sdk-backend-base": "11.46.0-alpha.5",
67
- "@gooddata/sdk-backend-spi": "11.46.0-alpha.5",
68
- "@gooddata/sdk-embedding": "11.46.0-alpha.5",
69
- "@gooddata/sdk-model": "11.46.0-alpha.5",
70
- "@gooddata/sdk-ui": "11.46.0-alpha.5",
71
- "@gooddata/sdk-ui-charts": "11.46.0-alpha.5",
72
- "@gooddata/sdk-ui-filters": "11.46.0-alpha.5",
73
- "@gooddata/sdk-ui-geo": "11.46.0-alpha.5",
74
- "@gooddata/sdk-ui-kit": "11.46.0-alpha.5",
75
- "@gooddata/sdk-ui-pivot": "11.46.0-alpha.5",
76
- "@gooddata/sdk-ui-semantic-search": "11.46.0-alpha.5",
77
- "@gooddata/sdk-ui-theme-provider": "11.46.0-alpha.5",
78
- "@gooddata/util": "11.46.0-alpha.5",
79
- "@gooddata/sdk-ui-vis-commons": "11.46.0-alpha.5"
66
+ "@gooddata/sdk-backend-base": "11.46.0-alpha.6",
67
+ "@gooddata/sdk-backend-spi": "11.46.0-alpha.6",
68
+ "@gooddata/sdk-embedding": "11.46.0-alpha.6",
69
+ "@gooddata/sdk-model": "11.46.0-alpha.6",
70
+ "@gooddata/sdk-ui": "11.46.0-alpha.6",
71
+ "@gooddata/sdk-ui-charts": "11.46.0-alpha.6",
72
+ "@gooddata/sdk-ui-filters": "11.46.0-alpha.6",
73
+ "@gooddata/sdk-ui-kit": "11.46.0-alpha.6",
74
+ "@gooddata/sdk-ui-pivot": "11.46.0-alpha.6",
75
+ "@gooddata/sdk-ui-theme-provider": "11.46.0-alpha.6",
76
+ "@gooddata/sdk-ui-vis-commons": "11.46.0-alpha.6",
77
+ "@gooddata/util": "11.46.0-alpha.6",
78
+ "@gooddata/sdk-ui-geo": "11.46.0-alpha.6",
79
+ "@gooddata/sdk-ui-semantic-search": "11.46.0-alpha.6"
80
80
  },
81
81
  "devDependencies": {
82
82
  "@microsoft/api-documenter": "^7.17.0",
@@ -124,12 +124,12 @@
124
124
  "typescript": "5.9.3",
125
125
  "vitest": "4.1.8",
126
126
  "vitest-dom": "0.1.1",
127
- "@gooddata/eslint-config": "11.46.0-alpha.5",
128
- "@gooddata/i18n-toolkit": "11.46.0-alpha.5",
129
- "@gooddata/oxlint-config": "11.46.0-alpha.5",
130
- "@gooddata/sdk-backend-mockingbird": "11.46.0-alpha.5",
131
- "@gooddata/stylelint-config": "11.46.0-alpha.5",
132
- "@gooddata/reference-workspace": "11.46.0-alpha.5"
127
+ "@gooddata/eslint-config": "11.46.0-alpha.6",
128
+ "@gooddata/i18n-toolkit": "11.46.0-alpha.6",
129
+ "@gooddata/oxlint-config": "11.46.0-alpha.6",
130
+ "@gooddata/reference-workspace": "11.46.0-alpha.6",
131
+ "@gooddata/stylelint-config": "11.46.0-alpha.6",
132
+ "@gooddata/sdk-backend-mockingbird": "11.46.0-alpha.6"
133
133
  },
134
134
  "peerDependencies": {
135
135
  "react": "^18.0.0 || ^19.0.0",