@gooddata/sdk-ui-catalog 11.55.0-alpha.3 → 11.55.0-alpha.4

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 (32) hide show
  1. package/esm/asCode/descriptor.d.ts +2 -1
  2. package/esm/asCode/descriptor.d.ts.map +1 -1
  3. package/esm/asCode/useMutationPort.d.ts.map +1 -1
  4. package/esm/asCode/useMutationPort.js +3 -1
  5. package/esm/catalogDetail/CatalogDetailContent.d.ts.map +1 -1
  6. package/esm/catalogDetail/CatalogDetailContent.js +6 -4
  7. package/esm/catalogDetail/hooks/useCatalogItemLoad.d.ts.map +1 -1
  8. package/esm/catalogDetail/hooks/useCatalogItemLoad.js +13 -5
  9. package/esm/catalogDetail/hooks/useCatalogItemUpdate.d.ts.map +1 -1
  10. package/esm/catalogDetail/hooks/useCatalogItemUpdate.js +17 -3
  11. package/esm/catalogDetail/share/guards.d.ts +0 -7
  12. package/esm/catalogDetail/share/guards.d.ts.map +1 -1
  13. package/esm/catalogDetail/share/guards.js +0 -14
  14. package/esm/catalogItem/converter.d.ts.map +1 -1
  15. package/esm/catalogItem/converter.js +1 -0
  16. package/esm/catalogItem/permission.d.ts +9 -2
  17. package/esm/catalogItem/permission.d.ts.map +1 -1
  18. package/esm/catalogItem/permission.js +26 -2
  19. package/esm/catalogItem/query.d.ts +2 -2
  20. package/esm/catalogItem/query.d.ts.map +1 -1
  21. package/esm/catalogItem/query.js +7 -4
  22. package/esm/catalogItem/types.d.ts +5 -1
  23. package/esm/catalogItem/types.d.ts.map +1 -1
  24. package/esm/catalogItem/useCatalogEndpoints.d.ts.map +1 -1
  25. package/esm/catalogItem/useCatalogEndpoints.js +5 -1
  26. package/esm/metric/metricMutationPort.d.ts +2 -2
  27. package/esm/metric/metricMutationPort.d.ts.map +1 -1
  28. package/esm/metric/metricMutationPort.js +5 -2
  29. package/esm/sdk-ui-catalog.d.ts +3 -0
  30. package/esm/tabs/useRecommendedItems.d.ts.map +1 -1
  31. package/esm/tabs/useRecommendedItems.js +6 -4
  32. package/package.json +16 -17
@@ -1,5 +1,6 @@
1
1
  import type { MessageDescriptor } from "react-intl";
2
2
  import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
+ import type { ISettings } from "@gooddata/sdk-model";
3
4
  import type { YamlCompletionSource } from "@gooddata/sdk-ui-kit";
4
5
  import type { ICatalogItem, ICatalogItemRef } from "../catalogItem/types.js";
5
6
  import type { ObjectTypes } from "../objectType/constants.js";
@@ -138,7 +139,7 @@ export interface IAsCodeDescriptor<TDef = unknown, TItem extends ICatalogItem =
138
139
  useIsItemEditable?(item: TItem): boolean;
139
140
  /** Extra requirement for creation, ANDed with the feature flag and manage permission. */
140
141
  useCreateGate?(): boolean;
141
- createMutationPort(backend: IAnalyticalBackend, workspace: string): IAsCodeMutationPort<TDef, TItem>;
142
+ createMutationPort(backend: IAnalyticalBackend, workspace: string, settings: ISettings | undefined): IAsCodeMutationPort<TDef, TItem>;
142
143
  emptyDefinition(defaultTitle: string): TDef;
143
144
  seed: AsCodeSeed<TDef, TItem>;
144
145
  referenceCounted?: AsCodeReferenceCount<TItem>;
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/asCode/descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/asCode/descriptor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMutationPort.d.ts","sourceRoot":"","sources":["../../src/asCode/useMutationPort.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,mBAAmB,CAIlF"}
1
+ {"version":3,"file":"useMutationPort.d.ts","sourceRoot":"","sources":["../../src/asCode/useMutationPort.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,mBAAmB,CAQlF"}
@@ -1,9 +1,11 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { useMemo } from "react";
3
3
  import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
4
+ import { useFeatureFlags } from "../permission/PermissionsContext.js";
4
5
  /** @internal */
5
6
  export function useMutationPort(descriptor) {
6
7
  const backend = useBackendStrict();
7
8
  const workspace = useWorkspaceStrict();
8
- return useMemo(() => descriptor.createMutationPort(backend, workspace), [backend, descriptor, workspace]);
9
+ const settings = useFeatureFlags();
10
+ return useMemo(() => descriptor.createMutationPort(backend, workspace, settings), [backend, descriptor, workspace, settings]);
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogDetailContent.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,OAAO,CAAC;AAUtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EAC1B,EAAE,0BAA0B,2CAkN5B"}
1
+ {"version":3,"file":"CatalogDetailContent.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,OAAO,CAAC;AAUtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EAC1B,EAAE,0BAA0B,2CAoN5B"}
@@ -6,7 +6,7 @@ import { useIntl } from "react-intl";
6
6
  import {} from "@gooddata/sdk-model";
7
7
  import { useLocalStorage } from "@gooddata/sdk-ui";
8
8
  import { UiSkeleton, UiTabs } from "@gooddata/sdk-ui-kit";
9
- import { canEditCatalogItem } from "../catalogItem/permission.js";
9
+ import { canEditCatalogItem, canShareCatalogItem } from "../catalogItem/permission.js";
10
10
  import {} from "../catalogItem/types.js";
11
11
  import { useIsCertificationAllowed } from "../certification/gate.js";
12
12
  import { useIsLineageEnabled } from "../lineage/gate.js";
@@ -25,7 +25,7 @@ import { useCatalogItemUpdate } from "./hooks/useCatalogItemUpdate.js";
25
25
  import { CatalogItemAccessRow } from "./share/CatalogItemAccessRow.js";
26
26
  import { CatalogItemShareDialog } from "./share/CatalogItemShareDialog.js";
27
27
  import { CatalogItemShareProvider } from "./share/CatalogItemShareProvider.js";
28
- import { isShareableCatalogItem, isSharingEnabledForItem, toShareTarget } from "./share/guards.js";
28
+ import { isShareableCatalogItem, toShareTarget } from "./share/guards.js";
29
29
  import { useShareableLabels } from "./share/useShareableLabels.js";
30
30
  const Tabs = {
31
31
  METADATA: "metadata",
@@ -48,9 +48,11 @@ export function CatalogDetailContent({ objectId, objectType, objectDefinition, o
48
48
  onDelete: onCatalogItemDelete,
49
49
  onError: onCatalogItemUpdateError,
50
50
  });
51
- const canEdit = canEditCatalogItem(permissions, item);
51
+ const canEdit = canEditCatalogItem(permissions, item, settings);
52
52
  const enableColumnLevelPermissions = Boolean(settings?.enableColumnLevelPermissions);
53
- const shareableItem = item && isShareableCatalogItem(item) && isSharingEnabledForItem(item, settings) ? item : undefined;
53
+ const shareableItem = item && isShareableCatalogItem(item) && canShareCatalogItem(permissions, item, settings)
54
+ ? item
55
+ : undefined;
54
56
  const shareTarget = useMemo(() => (shareableItem ? toShareTarget(shareableItem) : undefined), [shareableItem]);
55
57
  // Labels of the shared attribute drive both the header info row and the per-grantee
56
58
  // label-scope picker; fetched once here and passed to the share provider.
@@ -1 +1 @@
1
- {"version":3,"file":"useCatalogItemLoad.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/hooks/useCatalogItemLoad.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;CAC5D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,mBAAmB,GAAG;IACjG,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;CACjB,CAmDA"}
1
+ {"version":3,"file":"useCatalogItemLoad.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/hooks/useCatalogItemLoad.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;CAC5D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,mBAAmB,GAAG;IACjG,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;CACjB,CAuDA"}
@@ -1,15 +1,17 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { convertError, isNotFound, useBackendStrict, useCancelablePromise, useWorkspaceStrict, } from "@gooddata/sdk-ui";
3
3
  import { convertAttributeToCatalogItem, convertComputedAttributeToCatalogItem, convertDashboardToCatalogItem, convertDataSetToCatalogItem, convertFactToCatalogItem, convertInsightToCatalogItem, convertMeasureToCatalogItem, convertParameterToCatalogItem, } from "../../catalogItem/converter.js";
4
- import { isCatalogItemLoaded } from "../../catalogItem/guards.js";
4
+ import { isCatalogItemLoaded, isCatalogItemMeasure } from "../../catalogItem/guards.js";
5
5
  import {} from "../../catalogItem/types.js";
6
6
  import {} from "../../objectType/types.js";
7
+ import { useFeatureFlag } from "../../permission/PermissionsContext.js";
7
8
  export function useCatalogItemLoad({ objectDefinition, objectId, objectType }) {
8
9
  const id = objectId ?? objectDefinition?.identifier;
9
10
  const type = objectType ?? objectDefinition?.type;
10
- const filled = isCatalogItemLoaded(objectDefinition);
11
11
  const backend = useBackendStrict();
12
12
  const workspace = useWorkspaceStrict();
13
+ const loadPermissions = useFeatureFlag("enableMetricPermissions");
14
+ const filled = isCatalogItemLoaded(objectDefinition) && !awaitsPermissions(objectDefinition, loadPermissions);
13
15
  const { status, error, result } = useCancelablePromise({
14
16
  promise: () => {
15
17
  // Object id and type are required
@@ -23,12 +25,12 @@ export function useCatalogItemLoad({ objectDefinition, objectId, objectType }) {
23
25
  // A 404 must reach CatalogDetailStatus as a NotFoundSdkError so isNotFound() shows
24
26
  // the not-found page; convertError maps it. Other errors are rethrown untouched so
25
27
  // their original status/message survives in the generic error description.
26
- return loadObjectDefinition(backend.workspace(workspace), id, type).catch((e) => {
28
+ return loadObjectDefinition(backend.workspace(workspace), id, type, loadPermissions).catch((e) => {
27
29
  const converted = convertError(e);
28
30
  throw isNotFound(converted) ? converted : e;
29
31
  });
30
32
  },
31
- }, [backend, workspace, id, type, filled]);
33
+ }, [backend, workspace, id, type, filled, loadPermissions]);
32
34
  // Object id is required
33
35
  if (!id) {
34
36
  return {
@@ -49,7 +51,12 @@ export function useCatalogItemLoad({ objectDefinition, objectId, objectType }) {
49
51
  item: result,
50
52
  };
51
53
  }
52
- async function loadObjectDefinition(workspace, id, type) {
54
+ // A metric handed over by a producer that cannot return permissions (a semantic-search hit) has to
55
+ // be fetched for them, or its own EDIT and SHARE would read as absent.
56
+ function awaitsPermissions(item, loadPermissions) {
57
+ return loadPermissions && isCatalogItemMeasure(item) && item.permissions === undefined;
58
+ }
59
+ async function loadObjectDefinition(workspace, id, type, loadPermissions) {
53
60
  switch (type) {
54
61
  case "attribute":
55
62
  return workspace
@@ -97,6 +104,7 @@ async function loadObjectDefinition(workspace, id, type) {
97
104
  identifier: id,
98
105
  }, {
99
106
  loadUserData: true,
107
+ ...(loadPermissions ? { loadPermissions: true } : {}),
100
108
  })
101
109
  .then(convertMeasureToCatalogItem);
102
110
  case "parameter":
@@ -1 +1 @@
1
- {"version":3,"file":"useCatalogItemUpdate.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/hooks/useCatalogItemUpdate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EACH,KAAK,YAAY,EAEjB,KAAK,eAAe,EACvB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC;AAID,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,OAAO,EACV,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;EAwSvB"}
1
+ {"version":3,"file":"useCatalogItemUpdate.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/hooks/useCatalogItemUpdate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EACH,KAAK,YAAY,EAEjB,KAAK,eAAe,EACvB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC;AAID,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,OAAO,EACV,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;EAySvB"}
@@ -38,9 +38,10 @@ export function useCatalogItemUpdate({ currentUser, objectId, objectType, object
38
38
  }, [mounted, onError, onUpdate]);
39
39
  /** Sync local state with an item mutation persisted outside this hook; does not re-persist. */
40
40
  const applyItemUpdate = useCallback((updated) => {
41
- setItem(updated);
42
- onUpdate?.(updated);
43
- }, [onUpdate]);
41
+ const next = keepMeasurePermissions(item, updated);
42
+ setItem(next);
43
+ onUpdate?.(next);
44
+ }, [item, onUpdate]);
44
45
  /** Sync local state with an item deletion persisted outside this hook; does not re-persist. */
45
46
  const applyItemDelete = useCallback((ref) => {
46
47
  setItem(null);
@@ -188,6 +189,19 @@ function updateItem(backend, workspace, user, item, disabled, updater, onUpdate,
188
189
  const persistFn = persist ?? ((nextItem) => updateCatalogItem(backend, workspace, nextItem));
189
190
  Promise.resolve(persistFn(newItem)).catch(onError);
190
191
  }
192
+ // The update endpoint cannot return permissions, and a save does not change them.
193
+ function keepMeasurePermissions(previous, updated) {
194
+ if (!previous || !isCatalogItemMeasure(previous) || !isCatalogItemMeasure(updated)) {
195
+ return updated;
196
+ }
197
+ if (previous.identifier !== updated.identifier) {
198
+ return updated;
199
+ }
200
+ if (updated.permissions || !previous.permissions) {
201
+ return updated;
202
+ }
203
+ return { ...updated, permissions: previous.permissions };
204
+ }
191
205
  function makeUpdatedItem(user, item, changes) {
192
206
  return {
193
207
  ...item,
@@ -1,5 +1,4 @@
1
1
  import type { IObjectPermissionsObject } from "@gooddata/sdk-backend-spi";
2
- import { type ISettings } from "@gooddata/sdk-model";
3
2
  import type { ICatalogItem } from "../../catalogItem/types.js";
4
3
  import type { ShareableCatalogItem } from "./types.js";
5
4
  /**
@@ -8,12 +7,6 @@ import type { ShareableCatalogItem } from "./types.js";
8
7
  * sharing an attribute.
9
8
  */
10
9
  export declare function isShareableCatalogItem(item: ICatalogItem): item is ShareableCatalogItem;
11
- /**
12
- * Tests whether sharing is enabled for the item: attributes and facts are gated by
13
- * the column-level-permissions flag, measures by the metric-permissions flag. The
14
- * two flags are independent — a workspace may enable either on its own.
15
- */
16
- export declare function isSharingEnabledForItem(item: ICatalogItem, settings: ISettings | undefined): boolean;
17
10
  /**
18
11
  * Build the backend target descriptor from a shareable catalog item. The kind
19
12
  * enum matches the catalog item's discriminator, so the mapping is direct.
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,qBAAqB,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,IAAI,oBAAoB,CAEvF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAQpG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,wBAAwB,CAKlF"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAI1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,IAAI,oBAAoB,CAEvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,wBAAwB,CAKlF"}
@@ -9,20 +9,6 @@ import { isCatalogItemAttribute, isCatalogItemFact, isCatalogItemMeasure } from
9
9
  export function isShareableCatalogItem(item) {
10
10
  return isCatalogItemAttribute(item) || isCatalogItemFact(item) || isCatalogItemMeasure(item);
11
11
  }
12
- /**
13
- * Tests whether sharing is enabled for the item: attributes and facts are gated by
14
- * the column-level-permissions flag, measures by the metric-permissions flag. The
15
- * two flags are independent — a workspace may enable either on its own.
16
- */
17
- export function isSharingEnabledForItem(item, settings) {
18
- if (isCatalogItemMeasure(item)) {
19
- return Boolean(settings?.enableMetricPermissions);
20
- }
21
- if (isCatalogItemAttribute(item) || isCatalogItemFact(item)) {
22
- return Boolean(settings?.enableColumnLevelPermissions);
23
- }
24
- return false;
25
- }
26
12
  /**
27
13
  * Build the backend target descriptor from a shareable catalog item. The kind
28
14
  * enum matches the catalog item's discriminator, so the mapping is direct.
@@ -1 +1 @@
1
- {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/catalogItem/converter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAEH,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE3B,KAAK,wBAAwB,EAC7B,KAAK,KAAK,EAUb,MAAM,qBAAqB,CAAC;AAK7B,OAAO,KAAK,EACR,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EAExB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,0BAA0B,CACtC,MAAM,EACA,QAAQ,GACR,gBAAgB,GAChB,sBAAsB,GACtB,wBAAwB,GACxB,gCAAgC,GAChC,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,SAAS,GAChB,YAAY,CA0Bd;AAED,wBAAgB,6BAA6B,CACzC,SAAS,EAAE,UAAU,GAAG,gBAAgB,GACzC,qBAAqB,CAiBvB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,mBAAmB,CAkBtF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,GAAG,mBAAmB,CAsBhG;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CAgBpF;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,wBAAwB,GAAG,qBAAqB,CAiBxG;AAED,wBAAgB,qCAAqC,CACjD,iBAAiB,EAAE,gCAAgC,GACpD,6BAA6B,CAgB/B;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,wBAAwB,GAAG,qBAAqB,CAgBxG;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,GAAG,mBAAmB,CAehG;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAW1D;AAcD,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,+BAA+B,GAAG,YAAY,CAuBrG"}
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/catalogItem/converter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAEH,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE3B,KAAK,wBAAwB,EAC7B,KAAK,KAAK,EAUb,MAAM,qBAAqB,CAAC;AAK7B,OAAO,KAAK,EACR,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EAExB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,0BAA0B,CACtC,MAAM,EACA,QAAQ,GACR,gBAAgB,GAChB,sBAAsB,GACtB,wBAAwB,GACxB,gCAAgC,GAChC,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,SAAS,GAChB,YAAY,CA0Bd;AAED,wBAAgB,6BAA6B,CACzC,SAAS,EAAE,UAAU,GAAG,gBAAgB,GACzC,qBAAqB,CAiBvB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,mBAAmB,CAkBtF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,GAAG,mBAAmB,CAuBhG;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CAgBpF;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,wBAAwB,GAAG,qBAAqB,CAiBxG;AAED,wBAAgB,qCAAqC,CACjD,iBAAiB,EAAE,gCAAgC,GACpD,6BAA6B,CAgB/B;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,wBAAwB,GAAG,qBAAqB,CAgBxG;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,sBAAsB,GAAG,mBAAmB,CAehG;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAW1D;AAcD,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,+BAA+B,GAAG,YAAY,CAuBrG"}
@@ -81,6 +81,7 @@ export function convertMeasureToCatalogItem(measure) {
81
81
  updatedAt: updatedAt ? parseBackendDate(updatedAt) : null,
82
82
  isLocked: measure.isLocked ?? false,
83
83
  isEditable: true,
84
+ permissions: measure.permissions,
84
85
  isHidden: measure.isHidden,
85
86
  isHiddenFromKda: measure.isHiddenFromKda,
86
87
  format,
@@ -1,4 +1,11 @@
1
- import type { IWorkspacePermissions } from "@gooddata/sdk-model";
1
+ import { type ISettings, type IWorkspacePermissions } from "@gooddata/sdk-model";
2
2
  import type { ICatalogItem } from "./types.js";
3
- export declare function canEditCatalogItem(workspacePermissions?: IWorkspacePermissions, item?: ICatalogItem | null): boolean;
3
+ export declare function canEditCatalogItem(workspacePermissions?: IWorkspacePermissions, item?: ICatalogItem | null, settings?: ISettings): boolean;
4
+ /**
5
+ * Whether the user may share the item. Metrics are gated by the metric-permissions flag and then by
6
+ * their own SHARE, deliberately not derived from EDIT. Attributes and facts have no object-level
7
+ * permissions, so their column-level-permissions flag decides and the backend refuses the access
8
+ * list to anyone who may not manage them. The two flags are independent.
9
+ */
10
+ export declare function canShareCatalogItem(workspacePermissions?: IWorkspacePermissions, item?: ICatalogItem | null, settings?: ISettings): boolean;
4
11
  //# sourceMappingURL=permission.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/catalogItem/permission.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAc,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAgB,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,WA8B1G"}
1
+ {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/catalogItem/permission.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,SAAS,EACd,KAAK,qBAAqB,EAI7B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAgB,kBAAkB,CAC9B,oBAAoB,CAAC,EAAE,qBAAqB,EAC5C,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,EAC1B,QAAQ,CAAC,EAAE,SAAS,WAwCvB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,oBAAoB,CAAC,EAAE,qBAAqB,EAC5C,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,EAC1B,QAAQ,CAAC,EAAE,SAAS,WAmBvB"}
@@ -1,5 +1,7 @@
1
- // (C) 2025 GoodData Corporation
2
- export function canEditCatalogItem(workspacePermissions, item) {
1
+ // (C) 2025-2026 GoodData Corporation
2
+ import { canEditMetric, canShareMetric, } from "@gooddata/sdk-model";
3
+ import { isCatalogItemAttribute, isCatalogItemFact, isCatalogItemMeasure } from "./guards.js";
4
+ export function canEditCatalogItem(workspacePermissions, item, settings) {
3
5
  // If the workspace permissions or the item is not provided, the user cannot update it.
4
6
  if (!workspacePermissions || !item) {
5
7
  return false;
@@ -17,6 +19,10 @@ export function canEditCatalogItem(workspacePermissions, item) {
17
19
  if (!item.isEditable) {
18
20
  return false;
19
21
  }
22
+ // A metric is edited through its own EDIT permission.
23
+ if (isCatalogItemMeasure(item)) {
24
+ return canEditMetric(item.permissions, workspacePermissions, Boolean(settings?.enableMetricPermissions));
25
+ }
20
26
  // If the user has WS.Analyze permission to create visualizations, they can update the item if it is a visualization
21
27
  // or a dashboard to which they have access.
22
28
  if (workspacePermissions.canCreateVisualization) {
@@ -25,3 +31,21 @@ export function canEditCatalogItem(workspacePermissions, item) {
25
31
  }
26
32
  return false;
27
33
  }
34
+ /**
35
+ * Whether the user may share the item. Metrics are gated by the metric-permissions flag and then by
36
+ * their own SHARE, deliberately not derived from EDIT. Attributes and facts have no object-level
37
+ * permissions, so their column-level-permissions flag decides and the backend refuses the access
38
+ * list to anyone who may not manage them. The two flags are independent.
39
+ */
40
+ export function canShareCatalogItem(workspacePermissions, item, settings) {
41
+ if (!workspacePermissions || !item) {
42
+ return false;
43
+ }
44
+ if (isCatalogItemMeasure(item)) {
45
+ return canShareMetric(item.permissions, workspacePermissions, Boolean(settings?.enableMetricPermissions));
46
+ }
47
+ if (isCatalogItemAttribute(item) || isCatalogItemFact(item)) {
48
+ return Boolean(settings?.enableColumnLevelPermissions);
49
+ }
50
+ return false;
51
+ }
@@ -3,7 +3,7 @@ import { type IMeasureMetadataObject, type IMeasureMetadataObjectDefinition, typ
3
3
  import type { ICatalogItem, ICatalogItemQueryOptions } from "./types.js";
4
4
  export declare function getDashboardsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IDashboardsQuery;
5
5
  export declare function getInsightsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IInsightsQuery;
6
- export declare function getMetricsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IMeasuresQuery;
6
+ export declare function getMetricsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize, loadPermissions }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IMeasuresQuery;
7
7
  export declare function getParametersQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IParametersQuery;
8
8
  export declare function getComputedAttributesQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IComputedAttributesQuery;
9
9
  export declare function getAttributesQuery({ backend, workspace, search, origin, id, excludeId, tags, excludeTags, isHidden, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IAttributesQuery;
@@ -15,7 +15,7 @@ export declare function updateParameterCatalogItem(backend: IAnalyticalBackend,
15
15
  id: string;
16
16
  }): Promise<import("@gooddata/sdk-model").IParameterMetadataObject>;
17
17
  export declare function deleteParameterCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<void>;
18
- export declare function createMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, measure: IMeasureMetadataObjectDefinition): Promise<IMeasureMetadataObject>;
18
+ export declare function createMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, measure: IMeasureMetadataObjectDefinition, loadPermissions?: boolean): Promise<IMeasureMetadataObject>;
19
19
  export declare function updateMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, measure: IMeasureMetadataObject): Promise<IMeasureMetadataObject>;
20
20
  export declare function deleteMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<void>;
21
21
  export declare function getMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<IMeasureMetadataObject>;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"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"}
@@ -48,8 +48,8 @@ export function getInsightsQuery({ backend, workspace, search, origin, id, exclu
48
48
  })
49
49
  .withMethod("POST");
50
50
  }
51
- export function getMetricsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize = PAGE_SIZE, }) {
52
- return backend
51
+ export function getMetricsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize = PAGE_SIZE, loadPermissions = false, }) {
52
+ const query = backend
53
53
  .workspace(workspace)
54
54
  .measures()
55
55
  .getMeasuresQuery()
@@ -70,6 +70,9 @@ export function getMetricsQuery({ backend, workspace, search, origin, id, exclud
70
70
  certification,
71
71
  })
72
72
  .withMethod("POST");
73
+ // asked for only when needed, so a backend written against the previous SPI keeps working
74
+ // for as long as the feature is off
75
+ return loadPermissions ? query.withMetaInclude(["permissions"]) : query;
73
76
  }
74
77
  export function getParametersQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, pageSize = PAGE_SIZE, }) {
75
78
  return backend
@@ -312,8 +315,8 @@ function updateComputedAttributeCatalogItemMeta(backend, workspace, item) {
312
315
  tags: item.tags,
313
316
  });
314
317
  }
315
- export function createMeasureCatalogItem(backend, workspace, measure) {
316
- return backend.workspace(workspace).measures().createMeasure(measure);
318
+ export function createMeasureCatalogItem(backend, workspace, measure, loadPermissions = false) {
319
+ return backend.workspace(workspace).measures().createMeasure(measure, { loadPermissions });
317
320
  }
318
321
  export function updateMeasureCatalogItem(backend, workspace, measure) {
319
322
  return backend.workspace(workspace).measures().updateMeasure(measure);
@@ -1,5 +1,5 @@
1
1
  import type { AnalyticsCatalogGenerateDescriptionObjectType, IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
2
- import type { CertificationStatus, IDataSetMetadataObject, IParameterDefinition, IdentifierRef, MetricType, ObjectOrigin } from "@gooddata/sdk-model";
2
+ import type { AccessGranularPermission, CertificationStatus, IDataSetMetadataObject, IParameterDefinition, IdentifierRef, MetricType, ObjectOrigin } from "@gooddata/sdk-model";
3
3
  import { type AsyncStatus } from "../async/types.js";
4
4
  import type { ObjectType } from "../objectType/types.js";
5
5
  /**
@@ -68,6 +68,8 @@ export interface ICatalogItemMeasure extends ICatalogItemBase {
68
68
  isHiddenFromKda?: boolean;
69
69
  format?: string | null;
70
70
  metricType?: MetricType;
71
+ /** Object-level permissions, only when the query asked for them. Undefined otherwise. */
72
+ permissions?: AccessGranularPermission[];
71
73
  }
72
74
  /**
73
75
  * Catalog item for parameters.
@@ -142,6 +144,8 @@ export interface ICatalogItemQueryOptions {
142
144
  isHidden?: boolean;
143
145
  certification?: boolean;
144
146
  pageSize?: number;
147
+ /** Ask for each metric's object-level permissions, kept on ICatalogItemMeasure.permissions. */
148
+ loadPermissions?: boolean;
145
149
  }
146
150
  export interface ICatalogItemSemanticSearchOptions {
147
151
  queryOptions: ICatalogItemQueryOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,6CAA6C,EAC7C,kBAAkB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACR,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,YAAY,EACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,aAAa;IAClD,IAAI,EAAE,UAAU,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE;QACZ,MAAM,EAAE,mBAAmB,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAClB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,6BAA6B,GAC7B,qBAAqB,GACrB,gBAAgB,GAChB,mBAAmB,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,IAAI,EAAE,qBAAqB,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,iBAAiB,EAAE,iBAAiB,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACvB,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,KAAK,GACL,KAAK,GACL,OAAO,GACP,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,QAAQ,GACR,SAAS,GACT,UAAU,CAAC;AAEjB;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,oBAAoB,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,6BAA8B,SAAQ,gBAAgB;IACnE,IAAI,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,sBAAsB,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACrC,YAAY,EACZ;IAAE,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAA;CAAE,CACzD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC3C,YAAY,EACZ;IAAE,IAAI,EAAE,6CAA6C,CAAA;CAAE,CAC1D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;AAExF,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iCAAiC;IAC9C,YAAY,EAAE,wBAAwB,CAAC;IACvC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCatalogEndpoints.d.ts","sourceRoot":"","sources":["../../src/catalogItem/useCatalogEndpoints.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAazD,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,MAAM,cAAc,GACpB,oBAAoB,GACpB,sBAAsB,GACtB,iBAAiB,GACjB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,GACtB,8BAA8B,CAAC;AAErC,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC,CAAC;AAEF,UAAU,YAAY,CAAC,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC;IACV,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7B,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,sBAAsB,CAClC,WAAW,EAAE,uBAAuB,EACpC,YAAY,EAAE,yBAAyB,GACxC,wBAAwB,CA4C1B;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnE,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CAC1C;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,eAAe,CAAC;AA2CrE,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,UAAU,EAAE,EACnB,YAAY,EAAE,wBAAwB,EACtC,KAAK,EAAE,aAAa,GAAG,SAAS,GACjC,YAAY,EAAE,CAEhB;AAED,wBAAgB,qBAAqB,IAAI,UAAU,EAAE,CAMpD;AAED,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,SAAS,GAAE,SAAS,gBAAgB,EAAc,GACnD,YAAY,EAAE,CAqBhB"}
1
+ {"version":3,"file":"useCatalogEndpoints.d.ts","sourceRoot":"","sources":["../../src/catalogItem/useCatalogEndpoints.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACR,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAazD,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,MAAM,cAAc,GACpB,oBAAoB,GACpB,sBAAsB,GACtB,iBAAiB,GACjB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,GACtB,8BAA8B,CAAC;AAErC,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC,CAAC;AAEF,UAAU,YAAY,CAAC,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC;IACV,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7B,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,sBAAsB,CAClC,WAAW,EAAE,uBAAuB,EACpC,YAAY,EAAE,yBAAyB,GACxC,wBAAwB,CAgD1B;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnE,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CAC1C;AAED,KAAK,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,eAAe,CAAC;AA2CrE,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,UAAU,EAAE,EACnB,YAAY,EAAE,wBAAwB,EACtC,KAAK,EAAE,aAAa,GAAG,SAAS,GACjC,YAAY,EAAE,CAEhB;AAED,wBAAgB,qBAAqB,IAAI,UAAU,EAAE,CAMpD;AAED,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,SAAS,GAAE,SAAS,gBAAgB,EAAc,GACnD,YAAY,EAAE,CAqBhB"}
@@ -3,11 +3,13 @@ import { useMemo } from "react";
3
3
  import { COMPUTED_ATTRIBUTE_FEATURE_FLAG } from "../computedAttribute/gate.js";
4
4
  import { ObjectTypes } from "../objectType/constants.js";
5
5
  import {} from "../objectType/types.js";
6
- import { useFeatureFlags } from "../permission/PermissionsContext.js";
6
+ import { useFeatureFlag, useFeatureFlags } from "../permission/PermissionsContext.js";
7
7
  import { getAttributesQuery, getComputedAttributesQuery, getDashboardsQuery, getDateDatasetsQuery, getFactsQuery, getInsightsQuery, getMetricsQuery, getParametersQuery, } from "./query.js";
8
8
  export function useCatalogQueryOptions(feedOptions, filterInputs) {
9
9
  const { backend, workspace, id, pageSize } = feedOptions;
10
10
  const { search, origin, createdBy, tags, qualityIds, isHidden, certification } = filterInputs;
11
+ // the detail panel reuses the listed item, so its permissions have to come with the list
12
+ const loadPermissions = useFeatureFlag("enableMetricPermissions");
11
13
  return useMemo(() => {
12
14
  let includeIds = id;
13
15
  let excludeIds = undefined;
@@ -33,6 +35,7 @@ export function useCatalogQueryOptions(feedOptions, filterInputs) {
33
35
  isHidden,
34
36
  certification,
35
37
  pageSize,
38
+ loadPermissions,
36
39
  };
37
40
  }, [
38
41
  backend,
@@ -46,6 +49,7 @@ export function useCatalogQueryOptions(feedOptions, filterInputs) {
46
49
  qualityIds,
47
50
  isHidden,
48
51
  certification,
52
+ loadPermissions,
49
53
  ]);
50
54
  }
51
55
  const ENDPOINTS = [
@@ -1,5 +1,5 @@
1
1
  import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
2
- import { type IMeasureMetadataObjectDefinition } from "@gooddata/sdk-model";
2
+ import { type IMeasureMetadataObjectDefinition, type ISettings } from "@gooddata/sdk-model";
3
3
  import type { IAsCodeMutationPort } from "../asCode/descriptor.js";
4
4
  import type { ICatalogItemMeasure } from "../catalogItem/types.js";
5
5
  /**
@@ -13,5 +13,5 @@ export declare function listMetricReferences(backend: IAnalyticalBackend, worksp
13
13
  /**
14
14
  * @internal
15
15
  */
16
- export declare function createMetricMutationAdapter(backend: IAnalyticalBackend, workspace: string): IMetricMutationPort;
16
+ export declare function createMetricMutationAdapter(backend: IAnalyticalBackend, workspace: string, settings?: ISettings): IMetricMutationPort;
17
17
  //# sourceMappingURL=metricMutationPort.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metricMutationPort.d.ts","sourceRoot":"","sources":["../../src/metric/metricMutationPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAEH,KAAK,gCAAgC,EAIxC,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAUnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAC;AAW7G,yFAAyF;AACzF,wBAAgB,UAAU,CACtB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GAC1B,OAAO,CAAC,gCAAgC,CAAC,CAE3C;AAED,2EAA2E;AAC3E,wBAAsB,oBAAoB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GAClB,mBAAmB,CAsBrB"}
1
+ {"version":3,"file":"metricMutationPort.d.ts","sourceRoot":"","sources":["../../src/metric/metricMutationPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAEH,KAAK,gCAAgC,EACrC,KAAK,SAAS,EAIjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAUnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAC;AAW7G,yFAAyF;AACzF,wBAAgB,UAAU,CACtB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GAC1B,OAAO,CAAC,gCAAgC,CAAC,CAE3C;AAED,2EAA2E;AAC3E,wBAAsB,oBAAoB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,SAAS,GACrB,mBAAmB,CA+BrB"}
@@ -22,10 +22,13 @@ export async function listMetricReferences(backend, workspace, item) {
22
22
  /**
23
23
  * @internal
24
24
  */
25
- export function createMetricMutationAdapter(backend, workspace) {
25
+ export function createMetricMutationAdapter(backend, workspace, settings) {
26
+ const loadPermissions = Boolean(settings?.enableMetricPermissions);
26
27
  return {
27
28
  async create(definition) {
28
- const savedMeasure = await createMeasureCatalogItem(backend, workspace, definition);
29
+ // create is the only write that can return permissions, and the new metric is opened
30
+ // straight from its result
31
+ const savedMeasure = await createMeasureCatalogItem(backend, workspace, definition, loadPermissions);
29
32
  return convertMeasureToCatalogItem(savedMeasure);
30
33
  },
31
34
  async update(base, definition) {
@@ -1,3 +1,4 @@
1
+ import type { AccessGranularPermission } from '@gooddata/sdk-model';
1
2
  import type { CertificationStatus } from '@gooddata/sdk-model';
2
3
  import type { IAnalyticalBackend } from '@gooddata/sdk-backend-spi';
3
4
  import type { IDataSetMetadataObject } from '@gooddata/sdk-model';
@@ -410,6 +411,8 @@ export declare interface ICatalogItemMeasure extends ICatalogItemBase {
410
411
  isHiddenFromKda?: boolean;
411
412
  format?: string | null;
412
413
  metricType?: MetricType;
414
+ /** Object-level permissions, only when the query asked for them. Undefined otherwise. */
415
+ permissions?: AccessGranularPermission[];
413
416
  }
414
417
 
415
418
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useRecommendedItems.d.ts","sourceRoot":"","sources":["../../src/tabs/useRecommendedItems.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,yBAAyB,EAIjC,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA4C5D,wBAAgB,mBAAmB,IAAI,yBAAyB,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,CAgBtF"}
1
+ {"version":3,"file":"useRecommendedItems.d.ts","sourceRoot":"","sources":["../../src/tabs/useRecommendedItems.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,yBAAyB,EAIjC,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA8C5D,wBAAgB,mBAAmB,IAAI,yBAAyB,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,CAwBtF"}
@@ -2,9 +2,9 @@
2
2
  import { useBackendStrict, useCancelablePromise, useWorkspaceStrict, } from "@gooddata/sdk-ui";
3
3
  import { convertEntityToCatalogItem } from "../catalogItem/converter.js";
4
4
  import { getDashboardsQuery, getInsightsQuery, getMetricsQuery } from "../catalogItem/query.js";
5
- import { usePermissionsState } from "../permission/PermissionsContext.js";
5
+ import { useFeatureFlag, usePermissionsState } from "../permission/PermissionsContext.js";
6
6
  const RECOMMENDED_PAGE_SIZE = 5;
7
- async function fetchRecommendedItems(backend, workspace, userId, organizationId) {
7
+ async function fetchRecommendedItems(backend, workspace, userId, organizationId, loadPermissions) {
8
8
  // User group names are used as tags to find recommended catalog items --
9
9
  // items tagged with a group name are surfaced to members of that group.
10
10
  const groups = await backend.organization(organizationId).users().getUserGroupsOfUser(userId);
@@ -18,6 +18,7 @@ async function fetchRecommendedItems(backend, workspace, userId, organizationId)
18
18
  origin: "ALL",
19
19
  tags,
20
20
  pageSize: RECOMMENDED_PAGE_SIZE,
21
+ loadPermissions,
21
22
  };
22
23
  const [dashboards, insights, metrics] = await Promise.all([
23
24
  getDashboardsQuery(queryOptions).query(),
@@ -36,10 +37,11 @@ export function useRecommendedItems() {
36
37
  const workspace = useWorkspaceStrict();
37
38
  const { result } = usePermissionsState();
38
39
  const user = result?.user;
40
+ const loadPermissions = useFeatureFlag("enableMetricPermissions");
39
41
  return useCancelablePromise({
40
42
  promise: user?.login && user?.organizationId
41
- ? () => fetchRecommendedItems(backend, workspace, user.login, user.organizationId)
43
+ ? () => fetchRecommendedItems(backend, workspace, user.login, user.organizationId, loadPermissions)
42
44
  : null,
43
45
  onError: (error) => console.error(error),
44
- }, [backend, workspace, user?.login, user?.organizationId]);
46
+ }, [backend, workspace, user?.login, user?.organizationId, loadPermissions]);
45
47
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-catalog",
3
- "version": "11.55.0-alpha.3",
3
+ "version": "11.55.0-alpha.4",
4
4
  "description": "GoodData SDK - Analytics Catalog",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -40,15 +40,15 @@
40
40
  "tslib": "2.8.1",
41
41
  "yaml": "2.8.3",
42
42
  "zod": "4.3.6",
43
- "@gooddata/sdk-backend-spi": "11.55.0-alpha.3",
44
- "@gooddata/sdk-code-schemas": "11.55.0-alpha.3",
45
- "@gooddata/sdk-model": "11.55.0-alpha.3",
46
- "@gooddata/sdk-ui": "11.55.0-alpha.3",
47
- "@gooddata/sdk-ui-ext": "11.55.0-alpha.3",
48
- "@gooddata/sdk-ui-kit": "11.55.0-alpha.3",
49
- "@gooddata/sdk-ui-semantic-search": "11.55.0-alpha.3",
50
- "@gooddata/sdk-ui-theme-provider": "11.55.0-alpha.3",
51
- "@gooddata/util": "11.55.0-alpha.3"
43
+ "@gooddata/sdk-backend-spi": "11.55.0-alpha.4",
44
+ "@gooddata/sdk-code-schemas": "11.55.0-alpha.4",
45
+ "@gooddata/sdk-model": "11.55.0-alpha.4",
46
+ "@gooddata/sdk-ui": "11.55.0-alpha.4",
47
+ "@gooddata/sdk-ui-ext": "11.55.0-alpha.4",
48
+ "@gooddata/sdk-ui-semantic-search": "11.55.0-alpha.4",
49
+ "@gooddata/sdk-ui-theme-provider": "11.55.0-alpha.4",
50
+ "@gooddata/sdk-ui-kit": "11.55.0-alpha.4",
51
+ "@gooddata/util": "11.55.0-alpha.4"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@microsoft/api-documenter": "7.30.10",
@@ -62,7 +62,6 @@
62
62
  "@typescript-eslint/eslint-plugin": "8.58.0",
63
63
  "@typescript-eslint/parser": "8.58.0",
64
64
  "@typescript/native-preview": "7.0.0-dev.20260202.1",
65
- "@vitest/eslint-plugin": "1.6.19",
66
65
  "dependency-cruiser": "17.3.10",
67
66
  "eslint": "^9.39.2",
68
67
  "eslint-plugin-headers": "1.3.3",
@@ -75,7 +74,7 @@
75
74
  "eslint-plugin-sonarjs": "3.0.6",
76
75
  "happy-dom": "20.9.0",
77
76
  "npm-run-all": "4.1.5",
78
- "oxfmt": "0.52.0",
77
+ "oxfmt": "0.58.0",
79
78
  "oxlint": "1.57.0",
80
79
  "oxlint-tsgolint": "0.15.0",
81
80
  "raf": "3.4.1",
@@ -86,11 +85,11 @@
86
85
  "typescript": "5.9.3",
87
86
  "vitest": "4.1.8",
88
87
  "vitest-dom": "0.1.1",
89
- "@gooddata/eslint-config": "11.55.0-alpha.3",
90
- "@gooddata/i18n-toolkit": "11.55.0-alpha.3",
91
- "@gooddata/sdk-backend-mockingbird": "11.55.0-alpha.3",
92
- "@gooddata/stylelint-config": "11.55.0-alpha.3",
93
- "@gooddata/oxlint-config": "11.55.0-alpha.3"
88
+ "@gooddata/i18n-toolkit": "11.55.0-alpha.4",
89
+ "@gooddata/eslint-config": "11.55.0-alpha.4",
90
+ "@gooddata/oxlint-config": "11.55.0-alpha.4",
91
+ "@gooddata/stylelint-config": "11.55.0-alpha.4",
92
+ "@gooddata/sdk-backend-mockingbird": "11.55.0-alpha.4"
94
93
  },
95
94
  "peerDependencies": {
96
95
  "react": "^18.0.0 || ^19.0.0",