@gooddata/sdk-ui-catalog 11.56.0-alpha.6 → 11.56.0-alpha.8

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 (130) hide show
  1. package/esm/asCode/aacParity.d.ts +40 -0
  2. package/esm/asCode/aacParity.d.ts.map +1 -0
  3. package/esm/asCode/aacParity.js +2 -0
  4. package/esm/catalogDetail/share/guards.d.ts +3 -3
  5. package/esm/catalogDetail/share/guards.d.ts.map +1 -1
  6. package/esm/catalogDetail/share/guards.js +8 -5
  7. package/esm/catalogDetail/share/types.d.ts +5 -4
  8. package/esm/catalogDetail/share/types.d.ts.map +1 -1
  9. package/esm/catalogDetail/share/useShareableLabels.d.ts +5 -5
  10. package/esm/catalogDetail/share/useShareableLabels.d.ts.map +1 -1
  11. package/esm/catalogDetail/share/useShareableLabels.js +4 -4
  12. package/esm/catalogItem/converter.d.ts.map +1 -1
  13. package/esm/catalogItem/converter.js +1 -0
  14. package/esm/catalogItem/permission.d.ts +3 -1
  15. package/esm/catalogItem/permission.d.ts.map +1 -1
  16. package/esm/catalogItem/permission.js +9 -2
  17. package/esm/catalogItem/query.d.ts +1 -1
  18. package/esm/catalogItem/query.d.ts.map +1 -1
  19. package/esm/catalogItem/query.js +8 -2
  20. package/esm/certification/gate.d.ts.map +1 -1
  21. package/esm/certification/gate.js +6 -1
  22. package/esm/computedAttribute/computedAttributeConverter.d.ts +7 -6
  23. package/esm/computedAttribute/computedAttributeConverter.d.ts.map +1 -1
  24. package/esm/computedAttribute/computedAttributeConverter.js +38 -12
  25. package/esm/computedAttribute/computedAttributeCopy.d.ts.map +1 -1
  26. package/esm/computedAttribute/computedAttributeCopy.js +2 -0
  27. package/esm/computedAttribute/computedAttributeDescriptor.d.ts.map +1 -1
  28. package/esm/computedAttribute/computedAttributeDescriptor.js +7 -3
  29. package/esm/computedAttribute/computedAttributeMutationPort.d.ts +1 -1
  30. package/esm/computedAttribute/computedAttributeMutationPort.d.ts.map +1 -1
  31. package/esm/computedAttribute/computedAttributeMutationPort.js +2 -1
  32. package/esm/computedAttribute/computedAttributeSchema.d.ts +54 -0
  33. package/esm/computedAttribute/computedAttributeSchema.d.ts.map +1 -1
  34. package/esm/computedAttribute/computedAttributeSchema.js +41 -1
  35. package/esm/computedAttribute/computedAttributeSerialization.d.ts +2 -2
  36. package/esm/computedAttribute/computedAttributeSerialization.d.ts.map +1 -1
  37. package/esm/computedAttribute/computedAttributeSerialization.js +24 -2
  38. package/esm/computedAttribute/computedAttributeValidation.d.ts +1 -1
  39. package/esm/computedAttribute/computedAttributeValidation.d.ts.map +1 -1
  40. package/esm/computedAttribute/computedAttributeValidation.js +14 -0
  41. package/esm/lineage/const.d.ts.map +1 -1
  42. package/esm/lineage/const.js +0 -1
  43. package/esm/lineage/gate.d.ts.map +1 -1
  44. package/esm/lineage/gate.js +1 -0
  45. package/esm/lineage/graph/createIcon.d.ts.map +1 -1
  46. package/esm/lineage/graph/createIcon.js +1 -0
  47. package/esm/localization/bundles/de-DE.localization-bundle.d.ts +4 -0
  48. package/esm/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  49. package/esm/localization/bundles/de-DE.localization-bundle.js +4 -0
  50. package/esm/localization/bundles/en-AU.localization-bundle.d.ts +4 -0
  51. package/esm/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  52. package/esm/localization/bundles/en-AU.localization-bundle.js +4 -0
  53. package/esm/localization/bundles/en-GB.localization-bundle.d.ts +4 -0
  54. package/esm/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  55. package/esm/localization/bundles/en-GB.localization-bundle.js +4 -0
  56. package/esm/localization/bundles/en-US.localization-bundle.d.ts +16 -0
  57. package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  58. package/esm/localization/bundles/en-US.localization-bundle.js +16 -0
  59. package/esm/localization/bundles/es-419.localization-bundle.d.ts +4 -0
  60. package/esm/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  61. package/esm/localization/bundles/es-419.localization-bundle.js +4 -0
  62. package/esm/localization/bundles/es-ES.localization-bundle.d.ts +4 -0
  63. package/esm/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  64. package/esm/localization/bundles/es-ES.localization-bundle.js +4 -0
  65. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts +4 -0
  66. package/esm/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  67. package/esm/localization/bundles/fi-FI.localization-bundle.js +4 -0
  68. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts +4 -0
  69. package/esm/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  70. package/esm/localization/bundles/fr-CA.localization-bundle.js +4 -0
  71. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts +4 -0
  72. package/esm/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  73. package/esm/localization/bundles/fr-FR.localization-bundle.js +4 -0
  74. package/esm/localization/bundles/id-ID.localization-bundle.d.ts +4 -0
  75. package/esm/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  76. package/esm/localization/bundles/id-ID.localization-bundle.js +4 -0
  77. package/esm/localization/bundles/it-IT.localization-bundle.d.ts +4 -0
  78. package/esm/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  79. package/esm/localization/bundles/it-IT.localization-bundle.js +4 -0
  80. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts +4 -0
  81. package/esm/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  82. package/esm/localization/bundles/ja-JP.localization-bundle.js +19 -15
  83. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts +4 -0
  84. package/esm/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  85. package/esm/localization/bundles/ko-KR.localization-bundle.js +4 -0
  86. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts +4 -0
  87. package/esm/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  88. package/esm/localization/bundles/nl-NL.localization-bundle.js +4 -0
  89. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts +4 -0
  90. package/esm/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  91. package/esm/localization/bundles/pl-PL.localization-bundle.js +4 -0
  92. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts +4 -0
  93. package/esm/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  94. package/esm/localization/bundles/pt-BR.localization-bundle.js +4 -0
  95. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts +4 -0
  96. package/esm/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  97. package/esm/localization/bundles/pt-PT.localization-bundle.js +4 -0
  98. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts +4 -0
  99. package/esm/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  100. package/esm/localization/bundles/ru-RU.localization-bundle.js +4 -0
  101. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts +4 -0
  102. package/esm/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  103. package/esm/localization/bundles/sl-SI.localization-bundle.js +4 -0
  104. package/esm/localization/bundles/th-TH.localization-bundle.d.ts +4 -0
  105. package/esm/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  106. package/esm/localization/bundles/th-TH.localization-bundle.js +4 -0
  107. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts +4 -0
  108. package/esm/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  109. package/esm/localization/bundles/tr-TR.localization-bundle.js +4 -0
  110. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts +4 -0
  111. package/esm/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  112. package/esm/localization/bundles/uk-UA.localization-bundle.js +4 -0
  113. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts +4 -0
  114. package/esm/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  115. package/esm/localization/bundles/vi-VN.localization-bundle.js +4 -0
  116. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts +4 -0
  117. package/esm/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  118. package/esm/localization/bundles/zh-HK.localization-bundle.js +4 -0
  119. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts +4 -0
  120. package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  121. package/esm/localization/bundles/zh-Hans.localization-bundle.js +4 -0
  122. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts +4 -0
  123. package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  124. package/esm/localization/bundles/zh-Hant.localization-bundle.js +4 -0
  125. package/esm/metric/metricSchema.d.ts +4 -0
  126. package/esm/metric/metricSchema.d.ts.map +1 -1
  127. package/esm/parameter/parameterSchema.d.ts +22 -6
  128. package/esm/parameter/parameterSchema.d.ts.map +1 -1
  129. package/esm/parameter/parameterSchema.js +3 -1
  130. package/package.json +16 -16
@@ -0,0 +1,40 @@
1
+ import type { v1 } from "@gooddata/sdk-code-schemas";
2
+ import type { ObjectTypes } from "../objectType/constants.js";
3
+ /**
4
+ * The analytics-as-code (AAC) document type each as-code editor mirrors, keyed by catalog object type.
5
+ * Register a type here when its editor gets a YAML schema; `AacSchemaParity` then knows what to
6
+ * compare that schema against.
7
+ */
8
+ export type AacShapeByObjectType = {
9
+ [ObjectTypes.METRIC]: v1.Metric;
10
+ [ObjectTypes.PARAMETER]: v1.Parameter;
11
+ [ObjectTypes.COMPUTED_ATTRIBUTE]: v1.ComputedAttribute;
12
+ };
13
+ /**
14
+ * Compile-time parity between an as-code editor's zod shape and the AAC document type it mirrors.
15
+ *
16
+ * Resolves to `true` when the two agree, otherwise to an object naming what drifted: a key the AAC
17
+ * schema has but the editor does not (`aacKeysMissingInEditor`), a key the editor accepts that AAC
18
+ * does not know (`editorKeysUnknownToAac`), or, in the default `"shape"` mode, editor values that do
19
+ * not fit the AAC type. Pass `"keys"` for an editor that deliberately accepts values AAC cannot express
20
+ * yet, so only the key set is compared. Declare it once next to the schema through
21
+ * {@link AssertAacParity}, which turns a drift into a build error, for example
22
+ * `Type '{ aacKeysMissingInEditor: "sort_direction"; }' does not satisfy the constraint 'true'`.
23
+ *
24
+ * The AAC type comes from `@gooddata/sdk-code-schemas`, generated from the JSON Schema and gated by
25
+ * its `schema-check`, so a field added to `schemas/v1/src/*.json` reaches this guard through the
26
+ * regenerated type once the schemas package is rebuilt.
27
+ */
28
+ export type AacSchemaParity<TObjectType extends keyof AacShapeByObjectType, TEditorShape, TMode extends "shape" | "keys" = "shape"> = [Exclude<keyof AacShapeByObjectType[TObjectType], keyof TEditorShape>] extends [never] ? [Exclude<keyof TEditorShape, keyof AacShapeByObjectType[TObjectType]>] extends [never] ? TMode extends "keys" ? true : TEditorShape extends Omit<AacShapeByObjectType[TObjectType], "id"> ? true : {
29
+ editorValuesDoNotFitAac: true;
30
+ } : {
31
+ editorKeysUnknownToAac: Exclude<keyof TEditorShape, keyof AacShapeByObjectType[TObjectType]>;
32
+ } : {
33
+ aacKeysMissingInEditor: Exclude<keyof AacShapeByObjectType[TObjectType], keyof TEditorShape>;
34
+ };
35
+ /**
36
+ * Fails the build unless the parity resolved to `true`:
37
+ * `export type MetricAacParity = AssertAacParity<AacSchemaParity<typeof ObjectTypes.METRIC, MetricSchema>>;`
38
+ */
39
+ export type AssertAacParity<TParity extends true> = TParity;
40
+ //# sourceMappingURL=aacParity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aacParity.d.ts","sourceRoot":"","sources":["../../src/asCode/aacParity.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC;IAChC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;IACtC,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;CAC1D,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,eAAe,CACvB,WAAW,SAAS,MAAM,oBAAoB,EAC9C,YAAY,EACZ,KAAK,SAAS,OAAO,GAAG,MAAM,GAAG,OAAO,IACxC,CAAC,OAAO,CAAC,MAAM,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACpF,CAAC,OAAO,CAAC,MAAM,YAAY,EAAE,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClF,KAAK,SAAS,MAAM,GAChB,IAAI,GACJ,YAAY,SAAS,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,GAChE,IAAI,GACJ;IAAE,uBAAuB,EAAE,IAAI,CAAA;CAAE,GACvC;IAAE,sBAAsB,EAAE,OAAO,CAAC,MAAM,YAAY,EAAE,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAA;CAAE,GACpG;IAAE,sBAAsB,EAAE,OAAO,CAAC,MAAM,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,YAAY,CAAC,CAAA;CAAE,CAAC;AAEvG;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,IAAI,IAAI,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ // (C) 2026 GoodData Corporation
2
+ export {};
@@ -2,9 +2,9 @@ import type { IObjectPermissionsObject } from "@gooddata/sdk-backend-spi";
2
2
  import type { ICatalogItem } from "../../catalogItem/types.js";
3
3
  import type { ShareableCatalogItem } from "./types.js";
4
4
  /**
5
- * Catalog items the share dialog can target: attributes, facts and measures. Labels
6
- * are not first-class catalog items; they appear inside the labels picker when
7
- * sharing an attribute.
5
+ * Catalog items the share dialog can target: attributes, facts, measures and computed
6
+ * attributes. Labels are not first-class catalog items; they appear inside the labels
7
+ * picker when sharing an attribute.
8
8
  */
9
9
  export declare function isShareableCatalogItem(item: ICatalogItem): item is ShareableCatalogItem;
10
10
  /**
@@ -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;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"}
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;AAS1E,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,CAOvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,wBAAwB,CAKlF"}
@@ -1,13 +1,16 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { idRef } from "@gooddata/sdk-model";
3
- import { isCatalogItemAttribute, isCatalogItemFact, isCatalogItemMeasure } from "../../catalogItem/guards.js";
3
+ import { isCatalogItemAttribute, isCatalogItemComputedAttribute, isCatalogItemFact, isCatalogItemMeasure, } from "../../catalogItem/guards.js";
4
4
  /**
5
- * Catalog items the share dialog can target: attributes, facts and measures. Labels
6
- * are not first-class catalog items; they appear inside the labels picker when
7
- * sharing an attribute.
5
+ * Catalog items the share dialog can target: attributes, facts, measures and computed
6
+ * attributes. Labels are not first-class catalog items; they appear inside the labels
7
+ * picker when sharing an attribute.
8
8
  */
9
9
  export function isShareableCatalogItem(item) {
10
- return isCatalogItemAttribute(item) || isCatalogItemFact(item) || isCatalogItemMeasure(item);
10
+ return (isCatalogItemAttribute(item) ||
11
+ isCatalogItemFact(item) ||
12
+ isCatalogItemMeasure(item) ||
13
+ isCatalogItemComputedAttribute(item));
11
14
  }
12
15
  /**
13
16
  * Build the backend target descriptor from a shareable catalog item. The kind
@@ -1,7 +1,8 @@
1
- import type { ICatalogItemAttribute, ICatalogItemFact, ICatalogItemMeasure } from "../../catalogItem/types.js";
1
+ import type { ICatalogItemAttribute, ICatalogItemComputedAttribute, ICatalogItemFact, ICatalogItemMeasure } from "../../catalogItem/types.js";
2
2
  /**
3
- * Catalog items that can be shared: attributes, facts and measures. Labels are
4
- * sub-selected from inside an attribute share, not shared as standalone targets.
3
+ * Catalog items that can be shared: attributes, facts, measures and computed attributes.
4
+ * Labels are sub-selected from inside an attribute share, not shared as standalone
5
+ * targets; a computed attribute has no labels at all.
5
6
  */
6
- export type ShareableCatalogItem = ICatalogItemAttribute | ICatalogItemFact | ICatalogItemMeasure;
7
+ export type ShareableCatalogItem = ICatalogItemAttribute | ICatalogItemFact | ICatalogItemMeasure | ICatalogItemComputedAttribute;
7
8
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC1B,qBAAqB,GACrB,gBAAgB,GAChB,mBAAmB,GACnB,6BAA6B,CAAC"}
@@ -4,11 +4,11 @@ import type { ShareableCatalogItem } from "./types.js";
4
4
  * @internal
5
5
  */
6
6
  export interface IShareableLabels {
7
- /** Display forms of the shareable attribute; empty for facts and measures. */
7
+ /** Display forms of the shareable attribute; empty for facts, measures and computed attributes. */
8
8
  labels: IObjectShareLabel[];
9
9
  /**
10
- * True while an attribute's labels are still being fetched. Facts and measures
11
- * skip the fetch and report `false`. Gates the dialog's Add action so a grantee
10
+ * True while an attribute's labels are still being fetched. Facts, measures and
11
+ * computed attributes skip the fetch and report `false`. Gates the dialog's Add action so a grantee
12
12
  * can't be added before its labels are known.
13
13
  */
14
14
  loading: boolean;
@@ -22,8 +22,8 @@ export interface IShareableLabels {
22
22
  }
23
23
  /**
24
24
  * Loads the labels (display forms) of a shareable attribute so the share dialog
25
- * can scope a grantee's access per label. Facts and measures have no labels —
26
- * returns an empty list and skips the fetch. The result feeds
25
+ * can scope a grantee's access per label. Facts, measures and computed attributes
26
+ * have no labels — returns an empty list and skips the fetch. The result feeds
27
27
  * {@link ObjectShareDialog}'s `labels`.
28
28
  *
29
29
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"useShareableLabels.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/useShareableLabels.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,sBAAsB,CAAC;AAEnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,8EAA8E;IAC9E,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,gBAAgB,CA2C3F"}
1
+ {"version":3,"file":"useShareableLabels.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/useShareableLabels.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,sBAAsB,CAAC;AAEnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mGAAmG;IACnG,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,gBAAgB,CA2C3F"}
@@ -5,8 +5,8 @@ import { useBackendStrict, useCancelablePromise, useWorkspaceStrict } from "@goo
5
5
  import { sortShareableLabels } from "@gooddata/sdk-ui-ext";
6
6
  /**
7
7
  * Loads the labels (display forms) of a shareable attribute so the share dialog
8
- * can scope a grantee's access per label. Facts and measures have no labels —
9
- * returns an empty list and skips the fetch. The result feeds
8
+ * can scope a grantee's access per label. Facts, measures and computed attributes
9
+ * have no labels — returns an empty list and skips the fetch. The result feeds
10
10
  * {@link ObjectShareDialog}'s `labels`.
11
11
  *
12
12
  * @internal
@@ -14,7 +14,7 @@ import { sortShareableLabels } from "@gooddata/sdk-ui-ext";
14
14
  export function useShareableLabels(item) {
15
15
  const backend = useBackendStrict();
16
16
  const workspace = useWorkspaceStrict();
17
- // Only attributes carry labels; facts and measures do not.
17
+ // Only attributes carry labels; facts, measures and computed attributes do not.
18
18
  const attributeRef = item?.type === "attribute" ? item.identifier : undefined;
19
19
  const { result, status } = useCancelablePromise({
20
20
  promise: attributeRef
@@ -35,7 +35,7 @@ export function useShareableLabels(item) {
35
35
  isPrimary: df.isPrimary === true,
36
36
  isDefault: df.isDefault === true,
37
37
  }))), [result]);
38
- // Facts and measures have no fetch, so they never "load". An attribute loads
38
+ // Facts, measures and computed attributes have no fetch, so they never "load". An attribute loads
39
39
  // until its fetch settles (success or error).
40
40
  const loading = attributeRef !== undefined && status !== "success" && status !== "error";
41
41
  const error = attributeRef !== undefined && status === "error";
@@ -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,CAwBhG;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,CAwBhG;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,CAiB/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"}
@@ -130,6 +130,7 @@ export function convertComputedAttributeToCatalogItem(computedAttribute) {
130
130
  type: "computedAttribute",
131
131
  title: computedAttribute.title,
132
132
  description: computedAttribute.description,
133
+ certification: convertCertification(computedAttribute.certification),
133
134
  tags: computedAttribute.tags ?? [],
134
135
  createdBy: getDisplayName(computedAttribute.createdBy),
135
136
  createdAt: computedAttribute.created ? parseBackendDate(computedAttribute.created) : null,
@@ -5,7 +5,9 @@ export declare function canEditCatalogItem(workspacePermissions?: IWorkspacePerm
5
5
  * Whether the user may share the item. Metrics are gated by the metric-permissions flag and then by
6
6
  * their own SHARE, deliberately not derived from EDIT. Attributes and facts have no object-level
7
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.
8
+ * list to anyone who may not manage them. The two flags are independent. A computed
9
+ * attribute follows the attribute rule and additionally needs the computed-attributes
10
+ * flag, which gates the whole entity in the catalog.
9
11
  */
10
12
  export declare function canShareCatalogItem(workspacePermissions?: IWorkspacePermissions, item?: ICatalogItem | null, settings?: ISettings): boolean;
11
13
  //# sourceMappingURL=permission.d.ts.map
@@ -1 +1 @@
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
+ {"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;AAU7B,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;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAC/B,oBAAoB,CAAC,EAAE,qBAAqB,EAC5C,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,EAC1B,QAAQ,CAAC,EAAE,SAAS,WA0BvB"}
@@ -1,6 +1,7 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { canEditMetric, canShareMetric, } from "@gooddata/sdk-model";
3
- import { isCatalogItemAttribute, isCatalogItemFact, isCatalogItemMeasure } from "./guards.js";
3
+ import { COMPUTED_ATTRIBUTE_FEATURE_FLAG } from "../computedAttribute/gate.js";
4
+ import { isCatalogItemAttribute, isCatalogItemComputedAttribute, isCatalogItemFact, isCatalogItemMeasure, } from "./guards.js";
4
5
  export function canEditCatalogItem(workspacePermissions, item, settings) {
5
6
  // If the workspace permissions or the item is not provided, the user cannot update it.
6
7
  if (!workspacePermissions || !item) {
@@ -35,7 +36,9 @@ export function canEditCatalogItem(workspacePermissions, item, settings) {
35
36
  * Whether the user may share the item. Metrics are gated by the metric-permissions flag and then by
36
37
  * their own SHARE, deliberately not derived from EDIT. Attributes and facts have no object-level
37
38
  * 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
+ * list to anyone who may not manage them. The two flags are independent. A computed
40
+ * attribute follows the attribute rule and additionally needs the computed-attributes
41
+ * flag, which gates the whole entity in the catalog.
39
42
  */
40
43
  export function canShareCatalogItem(workspacePermissions, item, settings) {
41
44
  if (!workspacePermissions || !item) {
@@ -47,5 +50,9 @@ export function canShareCatalogItem(workspacePermissions, item, settings) {
47
50
  if (isCatalogItemAttribute(item) || isCatalogItemFact(item)) {
48
51
  return Boolean(settings?.enableColumnLevelPermissions);
49
52
  }
53
+ if (isCatalogItemComputedAttribute(item)) {
54
+ return (Boolean(settings?.enableColumnLevelPermissions) &&
55
+ Boolean(settings?.[COMPUTED_ATTRIBUTE_FEATURE_FLAG]));
56
+ }
50
57
  return false;
51
58
  }
@@ -5,7 +5,7 @@ export declare function getDashboardsQuery({ backend, workspace, search, origin,
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
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
- export declare function getComputedAttributesQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, pageSize, }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IComputedAttributesQuery;
8
+ export declare function getComputedAttributesQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, certification, 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;
10
10
  export declare function getFactsQuery({ backend, workspace, search, origin, id, excludeId, tags, excludeTags, isHidden, pageSize, }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IFactsQuery;
11
11
  export declare function getDateDatasetsQuery({ backend, workspace, search, origin, id, excludeId, tags, excludeTags, isHidden, pageSize, }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IDatasetsQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,MAAM,EAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACR,YAAY,EAOZ,mBAAmB,EAEnB,wBAAwB,EAE3B,MAAM,YAAY,CAAC;AAIpB,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAoB,GACvB,EAAE,wBAAwB,wDAuB1B;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAoB,GACvB,EAAE,wBAAwB,sDAsB1B;AAED,wBAAgB,eAAe,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,QAAoB,EACpB,eAAuB,GAC1B,EAAE,wBAAwB,sDA0B1B;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAoB,GACvB,EAAE,wBAAwB,wDAoB1B;AAED,wBAAgB,0BAA0B,CAAC,EACvC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,QAAoB,GACvB,EAAE,wBAAwB,gEAoB1B;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAoB,GACvB,EAAE,wBAAwB,wDAwB1B;AAED,wBAAgB,aAAa,CAAC,EAC1B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAoB,GACvB,EAAE,wBAAwB,mDAsB1B;AAED,wBAAgB,oBAAoB,CAAC,EACjC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAoB,GACvB,EAAE,wBAAwB,sDAuB1B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,ogBAqBnG;AAuCD,wBAAgB,mCAAmC,CAC/C,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,sBAU5B;AAiED,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kCAAkC,mEAGhD;AAkBD,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,kCAAkC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,mEAYlE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAErG;AAkBD,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,EACzC,eAAe,UAAQ,mCAG1B;AAED,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,mCAGlC;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAEnG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,mCAEhG;AAED,wBAAgB,uCAAuC,CACnD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,oEAGd;AAED,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe,CAAC,iBAcpE"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"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"}
@@ -95,14 +95,14 @@ export function getParametersQuery({ backend, workspace, search, origin, id, exc
95
95
  })
96
96
  .withMethod("POST");
97
97
  }
98
- export function getComputedAttributesQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, pageSize = PAGE_SIZE, }) {
98
+ export function getComputedAttributesQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, certification, pageSize = PAGE_SIZE, }) {
99
99
  return backend
100
100
  .workspace(workspace)
101
101
  .computedAttributes()
102
102
  .getComputedAttributesQuery()
103
103
  .withPage(0)
104
104
  .withSize(pageSize)
105
- .withInclude(["createdBy", "modifiedBy"])
105
+ .withInclude(["createdBy", "modifiedBy", "certifiedBy"])
106
106
  .withSorting(["title,asc"])
107
107
  .withOrigin(origin)
108
108
  .withFilter({
@@ -113,6 +113,7 @@ export function getComputedAttributesQuery({ backend, workspace, search, origin,
113
113
  excludeTags,
114
114
  createdBy,
115
115
  excludeCreatedBy,
116
+ certification,
116
117
  })
117
118
  .withMethod("POST");
118
119
  }
@@ -352,6 +353,11 @@ export function updateCatalogItemCertification(backend, workspace, item) {
352
353
  return backend.workspace(workspace).insights().setCertification(ref, item.certification);
353
354
  case "measure":
354
355
  return backend.workspace(workspace).measures().setCertification(ref, item.certification);
356
+ case "computedAttribute":
357
+ return backend
358
+ .workspace(workspace)
359
+ .computedAttributes()
360
+ .setCertification(ref, item.certification);
355
361
  default:
356
362
  throw new Error("Unsupported catalog item type for certification update.");
357
363
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/certification/gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAM1E"}
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/certification/gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUzD;;GAEG;AACH,wBAAgB,gCAAgC,IAAI,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAM1E"}
@@ -1,6 +1,11 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { useFeatureFlag } from "../permission/PermissionsContext.js";
3
- const SUPPORTED_CERTIFICATION_TYPES = ["analyticalDashboard", "insight", "measure"];
3
+ const SUPPORTED_CERTIFICATION_TYPES = [
4
+ "analyticalDashboard",
5
+ "insight",
6
+ "measure",
7
+ "computedAttribute",
8
+ ];
4
9
  /**
5
10
  * Catalog certification feature gate.
6
11
  */
@@ -15,9 +15,10 @@ export type ComputedAttributeYaml = Omit<v1.ComputedAttribute, "id"> & {
15
15
  * Maps a computed attribute definition (or a loaded computed attribute, which is a superset) to the
16
16
  * canonical AAC object for YAML serialization.
17
17
  *
18
- * Optional meta fields are omitted when empty so the rendered YAML stays terse, matching the
19
- * analytics-as-code tooling output. The `id` is omitted when the definition has none (e.g. seeding
20
- * the create dialog from a duplicate) so the server derives a fresh one.
18
+ * Optional fields are omitted when unset so the rendered YAML stays terse, matching the
19
+ * analytics-as-code tooling output; a hidden computed attribute is expressed as
20
+ * `show_in_ai_results: false`. The `id` is omitted when the definition has none (e.g. seeding the
21
+ * create dialog from a duplicate) so the server derives a fresh one.
21
22
  */
22
23
  export declare function definitionToComputedAttributeYaml(definition: IComputedAttributeMetadataObjectDefinition): ComputedAttributeYaml;
23
24
  /**
@@ -28,9 +29,9 @@ export declare function computedAttributeYamlToDefinition(computedAttribute: Com
28
29
  * The computed attribute's `reconcile`: layers the author's parsed YAML edits over the base
29
30
  * definition — the loaded object on an edit, the copy source on a duplicate.
30
31
  *
31
- * The base carries fields the YAML cannot express (`format`, `metricType`, `dataType`, ...), which
32
- * survive because only the YAML-owned fields are overlaid on top. Identity stays YAML-authoritative:
33
- * the parsed `id` wins, and its absence lets the server derive a fresh one, so the base's id is
32
+ * The base carries what the YAML cannot express (identity and server-managed state), which survives
33
+ * because only the YAML-owned fields are overlaid on top. Identity stays YAML-authoritative: the
34
+ * parsed `id` wins, and its absence lets the server derive a fresh one, so the base's id is
34
35
  * intentionally dropped first. (On an edit this is moot — validation pins the parsed id to the loaded
35
36
  * object's — but on a duplicate it is what frees the copy from the source's identity.)
36
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeConverter.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeConverter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAEtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC7C,UAAU,EAAE,0CAA0C,GACvD,qBAAqB,CAUvB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC7C,iBAAiB,EAAE,uBAAuB,GAC3C,0CAA0C,CAU5C;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,oCAAoC,CAChD,IAAI,EAAE,0CAA0C,EAChD,MAAM,EAAE,0CAA0C,GACnD,0CAA0C,CAO5C"}
1
+ {"version":3,"file":"computedAttributeConverter.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeConverter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAEtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC7C,UAAU,EAAE,0CAA0C,GACvD,qBAAqB,CAiBvB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC7C,iBAAiB,EAAE,uBAAuB,GAC3C,0CAA0C,CAqB5C;AA6CD;;;;;;;;;GASG;AACH,wBAAgB,oCAAoC,CAChD,IAAI,EAAE,0CAA0C,EAChD,MAAM,EAAE,0CAA0C,GACnD,0CAA0C,CAO5C"}
@@ -3,9 +3,10 @@
3
3
  * Maps a computed attribute definition (or a loaded computed attribute, which is a superset) to the
4
4
  * canonical AAC object for YAML serialization.
5
5
  *
6
- * Optional meta fields are omitted when empty so the rendered YAML stays terse, matching the
7
- * analytics-as-code tooling output. The `id` is omitted when the definition has none (e.g. seeding
8
- * the create dialog from a duplicate) so the server derives a fresh one.
6
+ * Optional fields are omitted when unset so the rendered YAML stays terse, matching the
7
+ * analytics-as-code tooling output; a hidden computed attribute is expressed as
8
+ * `show_in_ai_results: false`. The `id` is omitted when the definition has none (e.g. seeding the
9
+ * create dialog from a duplicate) so the server derives a fresh one.
9
10
  */
10
11
  export function definitionToComputedAttributeYaml(definition) {
11
12
  return {
@@ -15,6 +16,13 @@ export function definitionToComputedAttributeYaml(definition) {
15
16
  ...(definition.description ? { description: definition.description } : {}),
16
17
  ...(definition.tags && definition.tags.length > 0 ? { tags: definition.tags } : {}),
17
18
  maql: definition.expression,
19
+ ...(definition.format ? { format: definition.format } : {}),
20
+ ...(definition.metricType === undefined ? {} : { metric_type: definition.metricType }),
21
+ ...(definition.dataType === undefined ? {} : { data_type: definition.dataType }),
22
+ ...(definition.valueType === undefined ? {} : { value_type: definition.valueType }),
23
+ ...(definition.isNullable === undefined ? {} : { is_nullable: definition.isNullable }),
24
+ ...(definition.nullValue === undefined ? {} : { null_value_join_replacement: definition.nullValue }),
25
+ ...(definition.isHidden === true ? { show_in_ai_results: false } : {}),
18
26
  ...(definition.locale ? { locale: definition.locale } : {}),
19
27
  };
20
28
  }
@@ -29,18 +37,29 @@ export function computedAttributeYamlToDefinition(computedAttribute) {
29
37
  description: computedAttribute.description ?? "",
30
38
  tags: computedAttribute.tags ?? [],
31
39
  expression: computedAttribute.maql,
40
+ ...(computedAttribute.format === undefined ? {} : { format: computedAttribute.format }),
41
+ ...(computedAttribute.metric_type === undefined ? {} : { metricType: computedAttribute.metric_type }),
42
+ ...(computedAttribute.data_type === undefined ? {} : { dataType: computedAttribute.data_type }),
43
+ ...(computedAttribute.value_type === undefined ? {} : { valueType: computedAttribute.value_type }),
44
+ ...(computedAttribute.is_nullable === undefined ? {} : { isNullable: computedAttribute.is_nullable }),
45
+ ...(computedAttribute.null_value_join_replacement === undefined
46
+ ? {}
47
+ : { nullValue: computedAttribute.null_value_join_replacement }),
48
+ ...(computedAttribute.show_in_ai_results === undefined
49
+ ? {}
50
+ : { isHidden: computedAttribute.show_in_ai_results === false }),
32
51
  ...(computedAttribute.locale === undefined ? {} : { locale: computedAttribute.locale }),
33
52
  };
34
53
  }
35
54
  /**
36
55
  * The fields the as-code computed attribute YAML owns, extracted from a parsed definition and
37
- * normalized for persistence. Every other field — `format`, `metricType`, `dataType`, `isNullable`,
38
- * `nullValue`, and a loaded object's identity (`ref`, `uri`) — lies outside the YAML projection and
39
- * is preserved by layering these fields over a base object rather than replacing it.
56
+ * normalized for persistence. Only a loaded object's identity and server-managed state (`ref`, `uri`,
57
+ * `isLocked`, `dataSet`, `certification`, `displayForms`, audit fields) lie outside the YAML
58
+ * projection and are preserved by layering these fields over a base object rather than replacing it.
40
59
  *
41
- * `locale` is always returned (normalized to `undefined` when absent), never omitted: it must
42
- * overwrite the base so that clearing the `locale` line drops a previously set collation. Were it
43
- * omitted when undefined, the base's stale `locale` would leak through the overlay.
60
+ * Every optional field is always returned (normalized to `undefined` when absent, `isHidden` to
61
+ * `false`), never omitted: it must overwrite the base so that removing a line drops the previously
62
+ * set value. Were a field omitted when undefined, the base's stale value would leak through the overlay.
44
63
  */
45
64
  function pickComputedAttributeYamlFields(definition) {
46
65
  return {
@@ -48,6 +67,13 @@ function pickComputedAttributeYamlFields(definition) {
48
67
  description: definition.description ?? "",
49
68
  tags: definition.tags ?? [],
50
69
  expression: definition.expression,
70
+ format: definition.format,
71
+ metricType: definition.metricType,
72
+ dataType: definition.dataType,
73
+ valueType: definition.valueType,
74
+ isNullable: definition.isNullable,
75
+ nullValue: definition.nullValue,
76
+ isHidden: definition.isHidden ?? false,
51
77
  locale: definition.locale,
52
78
  };
53
79
  }
@@ -55,9 +81,9 @@ function pickComputedAttributeYamlFields(definition) {
55
81
  * The computed attribute's `reconcile`: layers the author's parsed YAML edits over the base
56
82
  * definition — the loaded object on an edit, the copy source on a duplicate.
57
83
  *
58
- * The base carries fields the YAML cannot express (`format`, `metricType`, `dataType`, ...), which
59
- * survive because only the YAML-owned fields are overlaid on top. Identity stays YAML-authoritative:
60
- * the parsed `id` wins, and its absence lets the server derive a fresh one, so the base's id is
84
+ * The base carries what the YAML cannot express (identity and server-managed state), which survives
85
+ * because only the YAML-owned fields are overlaid on top. Identity stays YAML-authoritative: the
86
+ * parsed `id` wins, and its absence lets the server derive a fresh one, so the base's id is
61
87
  * intentionally dropped first. (On an edit this is moot — validation pins the parsed id to the loaded
62
88
  * object's — but on a duplicate it is what frees the copy from the source's identity.)
63
89
  */
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeCopy.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeCopy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAItF,wBAAgB,6BAA6B,CACzC,iBAAiB,EAAE,0CAA0C,GAC9D,0CAA0C,CAiB5C"}
1
+ {"version":3,"file":"computedAttributeCopy.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeCopy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAItF,wBAAgB,6BAA6B,CACzC,iBAAiB,EAAE,0CAA0C,GAC9D,0CAA0C,CAmB5C"}
@@ -13,8 +13,10 @@ export function createCopiedComputedAttribute(computedAttribute) {
13
13
  ...(computedAttribute.format === undefined ? {} : { format: computedAttribute.format }),
14
14
  ...(computedAttribute.metricType === undefined ? {} : { metricType: computedAttribute.metricType }),
15
15
  ...(computedAttribute.dataType === undefined ? {} : { dataType: computedAttribute.dataType }),
16
+ ...(computedAttribute.valueType === undefined ? {} : { valueType: computedAttribute.valueType }),
16
17
  ...(computedAttribute.isNullable === undefined ? {} : { isNullable: computedAttribute.isNullable }),
17
18
  ...(computedAttribute.nullValue === undefined ? {} : { nullValue: computedAttribute.nullValue }),
18
19
  ...(computedAttribute.locale === undefined ? {} : { locale: computedAttribute.locale }),
20
+ ...(computedAttribute.isHidden === undefined ? {} : { isHidden: computedAttribute.isHidden }),
19
21
  };
20
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeDescriptor.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeDescriptor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAQtF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAmF7E;;GAEG;AACH,eAAO,MAAM,2BAA2B,gIAmCtC,CAAC"}
1
+ {"version":3,"file":"computedAttributeDescriptor.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeDescriptor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAQtF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAuF7E;;GAEG;AACH,eAAO,MAAM,2BAA2B,gIAmCtC,CAAC"}
@@ -41,6 +41,10 @@ const errorMessages = defineMessages({
41
41
  missingMaql: { id: "analyticsCatalog.computedAttribute.validation.missingMaql" },
42
42
  invalidType: { id: "analyticsCatalog.computedAttribute.validation.invalidType" },
43
43
  invalidTags: { id: "analyticsCatalog.computedAttribute.validation.invalidTags" },
44
+ invalidLocale: { id: "analyticsCatalog.computedAttribute.validation.invalidLocale" },
45
+ invalidDataType: { id: "analyticsCatalog.computedAttribute.validation.invalidDataType" },
46
+ invalidValueType: { id: "analyticsCatalog.computedAttribute.validation.invalidValueType" },
47
+ invalidMetricType: { id: "analyticsCatalog.computedAttribute.validation.invalidMetricType" },
44
48
  });
45
49
  function useComputedAttributeEditing() {
46
50
  const intl = useIntl();
@@ -84,9 +88,9 @@ export const computedAttributeDescriptor = defineAsCodeDescriptor({
84
88
  }),
85
89
  // The catalog item carries no MAQL, so the full object is fetched for editing.
86
90
  seed: { load: loadComputedAttribute, loadError: capabilityMessages.loadError },
87
- // Refuses the deletion while a visualization, metric, or dashboard still references it,
88
- // and names those objects. The backend currently allows the delete (it would break the
89
- // dependents silently), so the catalog is the guard.
91
+ // Refuses the deletion while a visualization, metric, dashboard, or another computed
92
+ // attribute still references it, and names those objects. The backend currently allows the
93
+ // delete (it would break the dependents silently), so the catalog is the guard.
90
94
  referenceCounted: {
91
95
  load: listComputedAttributeReferences,
92
96
  usageWarning: capabilityMessages.deleteUsageWarning,
@@ -8,7 +8,7 @@ import type { ICatalogItemComputedAttribute } from "../catalogItem/types.js";
8
8
  export type IComputedAttributeMutationPort = IAsCodeMutationPort<IComputedAttributeMetadataObjectDefinition, ICatalogItemComputedAttribute>;
9
9
  /** Fetches the full computed attribute for editing (the catalog item carries no MAQL). @internal */
10
10
  export declare function loadComputedAttribute(backend: IAnalyticalBackend, workspace: string, item: ICatalogItemComputedAttribute): Promise<IComputedAttributeMetadataObjectDefinition>;
11
- /** Titles of the insights, metrics, and dashboards referencing a computed attribute. @internal */
11
+ /** Titles of the insights, metrics, dashboards, and computed attributes referencing a computed attribute. @internal */
12
12
  export declare function listComputedAttributeReferences(backend: IAnalyticalBackend, workspace: string, item: ICatalogItemComputedAttribute): Promise<string[]>;
13
13
  /**
14
14
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"computedAttributeMutationPort.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeMutationPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAEH,KAAK,0CAA0C,EAIlD,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,mBAAmB,CAC5D,0CAA0C,EAC1C,6BAA6B,CAChC,CAAC;AAYF,oGAAoG;AACpG,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,0CAA0C,CAAC,CAKrD;AAED,kGAAkG;AAClG,wBAAsB,+BAA+B,CACjD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAClD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GAClB,8BAA8B,CAyBhC"}
1
+ {"version":3,"file":"computedAttributeMutationPort.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeMutationPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAEH,KAAK,0CAA0C,EAIlD,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,mBAAmB,CAC5D,0CAA0C,EAC1C,6BAA6B,CAChC,CAAC;AAYF,oGAAoG;AACpG,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,0CAA0C,CAAC,CAKrD;AAED,uHAAuH;AACvH,wBAAsB,+BAA+B,CACjD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAClD,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,GAClB,8BAA8B,CAyBhC"}
@@ -13,7 +13,7 @@ export function loadComputedAttribute(backend, workspace, item) {
13
13
  .computedAttributes()
14
14
  .getComputedAttribute(idRef(item.identifier, "computedAttribute"));
15
15
  }
16
- /** Titles of the insights, metrics, and dashboards referencing a computed attribute. @internal */
16
+ /** Titles of the insights, metrics, dashboards, and computed attributes referencing a computed attribute. @internal */
17
17
  export async function listComputedAttributeReferences(backend, workspace, item) {
18
18
  const referencing = await backend
19
19
  .workspace(workspace)
@@ -23,6 +23,7 @@ export async function listComputedAttributeReferences(backend, workspace, item)
23
23
  ...(referencing.insights ?? []).map((insight) => insightTitle(insight)),
24
24
  ...(referencing.measures ?? []).map((measure) => measure.title),
25
25
  ...(referencing.analyticalDashboards ?? []).map((dashboard) => dashboard.title),
26
+ ...(referencing.computedAttributes ?? []).map((computedAttribute) => computedAttribute.title),
26
27
  ];
27
28
  }
28
29
  /**