@gooddata/sdk-ui-catalog 11.55.0-alpha.1 → 11.55.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/asCode/validateYaml.d.ts +3 -3
- package/esm/asCode/validateYaml.d.ts.map +1 -1
- package/esm/asCode/validateYaml.js +21 -5
- package/esm/catalogDetail/CatalogDetailGenerateDescription.d.ts +2 -2
- package/esm/catalogDetail/CatalogDetailGenerateDescription.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailGenerateDescription.js +0 -4
- package/esm/catalogDetail/CatalogDetailGenerateTitle.d.ts +2 -2
- package/esm/catalogDetail/CatalogDetailGenerateTitle.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailGenerateTitle.js +0 -4
- package/esm/catalogDetail/CatalogDetailHeader.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailHeader.js +2 -2
- package/esm/catalogItem/guards.d.ts +6 -1
- package/esm/catalogItem/guards.d.ts.map +1 -1
- package/esm/catalogItem/guards.js +11 -0
- package/esm/catalogItem/query.d.ts +1 -7
- package/esm/catalogItem/query.d.ts.map +1 -1
- package/esm/catalogItem/query.js +0 -11
- package/esm/catalogItem/types.d.ts +8 -1
- package/esm/catalogItem/types.d.ts.map +1 -1
- package/esm/computedAttribute/computedAttributeDescriptor.d.ts.map +1 -1
- package/esm/computedAttribute/computedAttributeDescriptor.js +4 -3
- package/esm/computedAttribute/computedAttributeMutationPort.d.ts +1 -1
- package/esm/computedAttribute/computedAttributeMutationPort.d.ts.map +1 -1
- package/esm/computedAttribute/computedAttributeMutationPort.js +2 -1
- package/esm/computedAttribute/computedAttributeSerialization.d.ts +6 -4
- package/esm/computedAttribute/computedAttributeSerialization.d.ts.map +1 -1
- package/esm/computedAttribute/computedAttributeSerialization.js +16 -8
- package/esm/computedAttribute/computedAttributeValidation.d.ts +1 -1
- package/esm/computedAttribute/computedAttributeValidation.d.ts.map +1 -1
- package/esm/computedAttribute/computedAttributeValidation.js +6 -1
- package/esm/localization/bundles/de-DE.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/de-DE.localization-bundle.js +20 -0
- package/esm/localization/bundles/en-AU.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-AU.localization-bundle.js +20 -0
- package/esm/localization/bundles/en-GB.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-GB.localization-bundle.js +20 -0
- package/esm/localization/bundles/en-US.localization-bundle.d.ts +8 -0
- package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-US.localization-bundle.js +12 -4
- package/esm/localization/bundles/es-419.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/es-419.localization-bundle.js +20 -0
- package/esm/localization/bundles/es-ES.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/es-ES.localization-bundle.js +20 -0
- package/esm/localization/bundles/fi-FI.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/fi-FI.localization-bundle.js +20 -0
- package/esm/localization/bundles/fr-CA.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/fr-CA.localization-bundle.js +20 -0
- package/esm/localization/bundles/fr-FR.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/fr-FR.localization-bundle.js +20 -0
- package/esm/localization/bundles/id-ID.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/id-ID.localization-bundle.js +20 -0
- package/esm/localization/bundles/it-IT.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/it-IT.localization-bundle.js +20 -0
- package/esm/localization/bundles/ja-JP.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/ja-JP.localization-bundle.js +20 -0
- package/esm/localization/bundles/ko-KR.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/ko-KR.localization-bundle.js +20 -0
- package/esm/localization/bundles/nl-NL.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/nl-NL.localization-bundle.js +20 -0
- package/esm/localization/bundles/pl-PL.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/pl-PL.localization-bundle.js +20 -0
- package/esm/localization/bundles/pt-BR.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/pt-BR.localization-bundle.js +20 -0
- package/esm/localization/bundles/pt-PT.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/pt-PT.localization-bundle.js +20 -0
- package/esm/localization/bundles/ru-RU.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/ru-RU.localization-bundle.js +20 -0
- package/esm/localization/bundles/sl-SI.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/sl-SI.localization-bundle.js +20 -0
- package/esm/localization/bundles/th-TH.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/th-TH.localization-bundle.js +20 -0
- package/esm/localization/bundles/tr-TR.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/tr-TR.localization-bundle.js +20 -0
- package/esm/localization/bundles/uk-UA.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/uk-UA.localization-bundle.js +20 -0
- package/esm/localization/bundles/vi-VN.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/vi-VN.localization-bundle.js +20 -0
- package/esm/localization/bundles/zh-HK.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/zh-HK.localization-bundle.js +21 -1
- package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/zh-Hans.localization-bundle.js +20 -0
- package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts +20 -0
- package/esm/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/zh-Hant.localization-bundle.js +20 -0
- package/esm/metric/metricValidation.js +1 -1
- package/esm/parameter/parameterDescriptor.d.ts.map +1 -1
- package/esm/parameter/parameterDescriptor.js +1 -0
- package/esm/parameter/parameterSerialization.d.ts +8 -0
- package/esm/parameter/parameterSerialization.d.ts.map +1 -1
- package/esm/parameter/parameterSerialization.js +11 -1
- package/esm/parameter/parameterValidation.d.ts +1 -1
- package/esm/parameter/parameterValidation.d.ts.map +1 -1
- package/esm/parameter/parameterValidation.js +6 -0
- package/package.json +16 -19
- package/styles/css/codeDialog.css +3 -0
- package/styles/css/codeDialog.css.map +1 -1
- package/styles/css/detail.css +3 -0
- package/styles/css/detail.css.map +1 -1
- package/styles/css/main.css +3 -0
- package/styles/css/main.css.map +1 -1
- package/styles/scss/codeDialog.scss +4 -0
|
@@ -32,9 +32,9 @@ type ValidateYamlOptions<TData> = {
|
|
|
32
32
|
fixedIdentifier?: string;
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
35
|
-
* Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML,
|
|
36
|
-
* the schema, and enforce identity immutability. The schema itself and the
|
|
37
|
-
* into a definition are the caller's.
|
|
35
|
+
* Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML, drop a blank
|
|
36
|
+
* identity, validate against the schema, and enforce identity immutability. The schema itself and the
|
|
37
|
+
* conversion of validated data into a definition are the caller's.
|
|
38
38
|
*/
|
|
39
39
|
export declare function validateYaml<TData extends {
|
|
40
40
|
id?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateYaml.d.ts","sourceRoot":"","sources":["../../src/asCode/validateYaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAA;CAAE,GACvD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,KAAK,eAAe,CAAC,KAAK,IAAI;IAC1B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;KAAE,CAAC;CAC3G,CAAC;AAEF,KAAK,mBAAmB,CAAC,KAAK,IAAI;IAC9B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,qGAAqG;IACrG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,KAAK,EAAE,MAAM,EACb,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GACxD,cAAc,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"validateYaml.d.ts","sourceRoot":"","sources":["../../src/asCode/validateYaml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,CAAC,MAAM,UAAU,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAA;CAAE,GACvD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,KAAK,eAAe,CAAC,KAAK,IAAI;IAC1B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;KAAE,CAAC;CAC3G,CAAC;AAEF,KAAK,mBAAmB,CAAC,KAAK,IAAI;IAC9B,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,qGAAqG;IACrG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,KAAK,EAAE,MAAM,EACb,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,GACxD,cAAc,CAAC,KAAK,CAAC,CAuBvB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
2
|
import { parse as parseYaml } from "yaml";
|
|
3
3
|
/**
|
|
4
|
-
* Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML,
|
|
5
|
-
* the schema, and enforce identity immutability. The schema itself and the
|
|
6
|
-
* into a definition are the caller's.
|
|
4
|
+
* Runs the steps every as-code YAML shares: reject empty input, parse (strict) YAML, drop a blank
|
|
5
|
+
* identity, validate against the schema, and enforce identity immutability. The schema itself and the
|
|
6
|
+
* conversion of validated data into a definition are the caller's.
|
|
7
7
|
*/
|
|
8
8
|
export function validateYaml(value, { schema, fixedIdentifier }) {
|
|
9
9
|
if (value.trim() === "") {
|
|
@@ -16,12 +16,28 @@ export function validateYaml(value, { schema, fixedIdentifier }) {
|
|
|
16
16
|
catch {
|
|
17
17
|
return { ok: false, kind: "syntax" };
|
|
18
18
|
}
|
|
19
|
-
const
|
|
19
|
+
const document = withoutBlankIdentity(parsed);
|
|
20
|
+
const result = schema.safeParse(document);
|
|
20
21
|
if (!result.success) {
|
|
21
|
-
return { ok: false, kind: "schema", error: result.error, parsed };
|
|
22
|
+
return { ok: false, kind: "schema", error: result.error, parsed: document };
|
|
22
23
|
}
|
|
23
24
|
if (fixedIdentifier !== undefined && result.data.id !== fixedIdentifier) {
|
|
24
25
|
return { ok: false, kind: "idImmutable" };
|
|
25
26
|
}
|
|
26
27
|
return { ok: true, data: result.data };
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Drops an `id` the author left blank, so the template can offer the key without forcing a value.
|
|
31
|
+
*
|
|
32
|
+
* The seeded template renders `id: ` for an object that has none yet; left untouched it parses to
|
|
33
|
+
* `null`, and a whitespace-only value to a blank string. Either means "no identity chosen" — the
|
|
34
|
+
* server derives one on create — so the key is removed rather than passed on as a value the schema
|
|
35
|
+
* would reject or the backend would take literally.
|
|
36
|
+
*/
|
|
37
|
+
function withoutBlankIdentity(parsed) {
|
|
38
|
+
if (!parsed || typeof parsed !== "object" || !("id" in parsed)) {
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
const { id, ...rest } = parsed;
|
|
42
|
+
return id === null || (typeof id === "string" && id.trim() === "") ? rest : parsed;
|
|
43
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ICatalogItemTextGenerable } from "../catalogItem/types.js";
|
|
2
2
|
interface ICatalogDetailGenerateDescriptionProps {
|
|
3
|
-
item:
|
|
3
|
+
item: ICatalogItemTextGenerable;
|
|
4
4
|
onApplyDescription: (description: string) => void;
|
|
5
5
|
}
|
|
6
6
|
export declare const CatalogDetailGenerateDescription: import("react").ForwardRefExoticComponent<ICatalogDetailGenerateDescriptionProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDetailGenerateDescription.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateDescription.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CatalogDetailGenerateDescription.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateDescription.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAqBzE,UAAU,sCAAsC;IAC5C,IAAI,EAAE,yBAAyB,CAAC;IAChC,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,eAAO,MAAM,gCAAgC,mIAyD3C,CAAC"}
|
|
@@ -4,7 +4,6 @@ import { forwardRef, useCallback } from "react";
|
|
|
4
4
|
import { defineMessages, useIntl } from "react-intl";
|
|
5
5
|
import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
|
|
6
6
|
import { UiInlineTextGenerator, useToastMessage, } from "@gooddata/sdk-ui-kit";
|
|
7
|
-
import { isGenerateDescriptionSupportedObjectType } from "../catalogItem/query.js";
|
|
8
7
|
const messages = defineMessages({
|
|
9
8
|
generateDescriptionButton: {
|
|
10
9
|
id: "analyticsCatalog.catalogItem.description.generate",
|
|
@@ -29,9 +28,6 @@ export const CatalogDetailGenerateDescription = forwardRef(({ item, onApplyDescr
|
|
|
29
28
|
const workspaceId = useWorkspaceStrict();
|
|
30
29
|
const { addError } = useToastMessage();
|
|
31
30
|
const generateItemDescription = useCallback(async () => {
|
|
32
|
-
if (!isGenerateDescriptionSupportedObjectType(item.type)) {
|
|
33
|
-
throw new Error(`Unsupported object type for generated description: ${item.type}`);
|
|
34
|
-
}
|
|
35
31
|
const response = await backend
|
|
36
32
|
.workspace(workspaceId)
|
|
37
33
|
.genAI()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ICatalogItemTextGenerable } from "../catalogItem/types.js";
|
|
2
2
|
interface ICatalogDetailGenerateTitleProps {
|
|
3
|
-
item:
|
|
3
|
+
item: ICatalogItemTextGenerable;
|
|
4
4
|
onApplyTitle: (title: string) => void;
|
|
5
5
|
}
|
|
6
6
|
export declare const CatalogDetailGenerateTitle: import("react").ForwardRefExoticComponent<ICatalogDetailGenerateTitleProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDetailGenerateTitle.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateTitle.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CatalogDetailGenerateTitle.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailGenerateTitle.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAqBzE,UAAU,gCAAgC;IACtC,IAAI,EAAE,yBAAyB,CAAC;IAChC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,eAAO,MAAM,0BAA0B,6HAwDtC,CAAC"}
|
|
@@ -4,7 +4,6 @@ import { forwardRef, useCallback } from "react";
|
|
|
4
4
|
import { defineMessages, useIntl } from "react-intl";
|
|
5
5
|
import { useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
|
|
6
6
|
import { UiInlineTextGenerator, useToastMessage, } from "@gooddata/sdk-ui-kit";
|
|
7
|
-
import { isGenerateDescriptionSupportedObjectType } from "../catalogItem/query.js";
|
|
8
7
|
const messages = defineMessages({
|
|
9
8
|
generateTitleButton: {
|
|
10
9
|
id: "analyticsCatalog.catalogItem.title.generate",
|
|
@@ -29,9 +28,6 @@ export const CatalogDetailGenerateTitle = forwardRef(({ item, onApplyTitle }, re
|
|
|
29
28
|
const workspaceId = useWorkspaceStrict();
|
|
30
29
|
const { addError } = useToastMessage();
|
|
31
30
|
const generateItemTitle = useCallback(async () => {
|
|
32
|
-
if (!isGenerateDescriptionSupportedObjectType(item.type)) {
|
|
33
|
-
throw new Error(`Unsupported object type for generated title: ${item.type}`);
|
|
34
|
-
}
|
|
35
31
|
const response = await backend
|
|
36
32
|
.workspace(workspaceId)
|
|
37
33
|
.genAI()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDetailHeader.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAIpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"CatalogDetailHeader.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAIpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAU9D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAS5D,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,UAAU,MAAM;IACZ,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qBAAqB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,8BAA8B,EAAE,OAAO,CAAC;IACxC,SAAS,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IACrD,mGAAmG;IACnG,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,SAAS,EACT,MAAM,EACN,aAAa,EACb,WAAW,EACd,EAAE,MAAM,2CAqMR"}
|
|
@@ -4,7 +4,7 @@ import { useImperativeHandle, useRef } from "react";
|
|
|
4
4
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
5
5
|
import { EditableLabel, UiCard, UiCopyButton, UiSkeleton } from "@gooddata/sdk-ui-kit";
|
|
6
6
|
import { CatalogItemLockMemo } from "../catalogItem/CatalogItemLock.js";
|
|
7
|
-
import { getVisualizationType, isCatalogItemAttribute, isCatalogItemFact } from "../catalogItem/guards.js";
|
|
7
|
+
import { getVisualizationType, isCatalogItemAttribute, isCatalogItemFact, isCatalogItemTextGenerable, } from "../catalogItem/guards.js";
|
|
8
8
|
import {} from "../catalogItem/types.js";
|
|
9
9
|
import { CatalogCertificationIconMemo } from "../certification/CatalogCertificationIcon.js";
|
|
10
10
|
import { ObjectTypeIconMemo } from "../objectType/ObjectTypeIcon.js";
|
|
@@ -16,7 +16,7 @@ export function CatalogDetailHeader({ item, canEdit, actions, updateItemTitle, u
|
|
|
16
16
|
const intl = useIntl();
|
|
17
17
|
const type = item.type ?? "analyticalDashboard";
|
|
18
18
|
const visualizationType = getVisualizationType(item);
|
|
19
|
-
const canGenerateText =
|
|
19
|
+
const canGenerateText = isDescriptionGenerationEnabled && isCatalogItemTextGenerable(item);
|
|
20
20
|
// Header info columns: ID is always shown; Dataset only for attributes/facts
|
|
21
21
|
// that carry one; Labels for attributes — a skeleton while they load, then the
|
|
22
22
|
// value (or nothing if the attribute turns out to have no permissionable labels).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ICatalogItem, ICatalogItemAttribute, ICatalogItemComputedAttribute, ICatalogItemDashboard, ICatalogItemDataSet, ICatalogItemFact, ICatalogItemHidable, ICatalogItemInsight, ICatalogItemMeasure, ICatalogItemParameter, ICatalogItemRef, VisualizationType } from "./types.js";
|
|
1
|
+
import type { ICatalogItem, ICatalogItemAttribute, ICatalogItemComputedAttribute, ICatalogItemDashboard, ICatalogItemDataSet, ICatalogItemFact, ICatalogItemHidable, ICatalogItemInsight, ICatalogItemMeasure, ICatalogItemParameter, ICatalogItemRef, ICatalogItemTextGenerable, VisualizationType } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
@@ -36,6 +36,11 @@ export declare function isCatalogItemDataSet(item: ICatalogItem | undefined | nu
|
|
|
36
36
|
* @internal
|
|
37
37
|
*/
|
|
38
38
|
export declare function isCatalogItemHidable(item: ICatalogItem | undefined | null): item is ICatalogItemHidable;
|
|
39
|
+
/**
|
|
40
|
+
* Type guard for catalog items that support AI text generation.
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export declare function isCatalogItemTextGenerable(item: ICatalogItem | undefined | null): item is ICatalogItemTextGenerable;
|
|
39
44
|
/**
|
|
40
45
|
* Returns true when the provided value is a fully loaded catalog item
|
|
41
46
|
* as opposed to just an identity-only reference.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/catalogItem/guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GACtC,IAAI,IAAI,6BAA6B,CAEvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEjG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAOvG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GACxD,IAAI,IAAI,YAAY,CAEtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAEzG"}
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/catalogItem/guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GACtC,IAAI,IAAI,6BAA6B,CAEvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAE3G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEjG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAEvG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,IAAI,mBAAmB,CAOvG;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GACtC,IAAI,IAAI,yBAAyB,CAQnC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GACxD,IAAI,IAAI,YAAY,CAEtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAEzG"}
|
|
@@ -57,6 +57,17 @@ export function isCatalogItemHidable(item) {
|
|
|
57
57
|
isCatalogItemAttribute(item) ||
|
|
58
58
|
isCatalogItemFact(item));
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Type guard for catalog items that support AI text generation.
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export function isCatalogItemTextGenerable(item) {
|
|
65
|
+
return (isCatalogItemInsight(item) ||
|
|
66
|
+
isCatalogItemDashboard(item) ||
|
|
67
|
+
isCatalogItemMeasure(item) ||
|
|
68
|
+
isCatalogItemFact(item) ||
|
|
69
|
+
isCatalogItemAttribute(item));
|
|
70
|
+
}
|
|
60
71
|
/**
|
|
61
72
|
* Returns true when the provided value is a fully loaded catalog item
|
|
62
73
|
* as opposed to just an identity-only reference.
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
|
|
2
2
|
import { type IMeasureMetadataObject, type IMeasureMetadataObjectDefinition, type IParameterMetadataObjectDefinition, type ObjRef } from "@gooddata/sdk-model";
|
|
3
|
-
import type { ObjectType } from "../objectType/types.js";
|
|
4
3
|
import type { ICatalogItem, ICatalogItemQueryOptions } from "./types.js";
|
|
5
|
-
/**
|
|
6
|
-
* Type guard for catalog object types supported by AI description generation.
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
export declare function isGenerateDescriptionSupportedObjectType(objectType: ObjectType): objectType is AnalyticsCatalogGenerateDescriptionObjectType;
|
|
10
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;
|
|
11
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;
|
|
12
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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"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"}
|
package/esm/catalogItem/query.js
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
// (C) 2025-2026 GoodData Corporation
|
|
2
2
|
import { idRef, } from "@gooddata/sdk-model";
|
|
3
3
|
const PAGE_SIZE = 50;
|
|
4
|
-
/**
|
|
5
|
-
* Type guard for catalog object types supported by AI description generation.
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
export function isGenerateDescriptionSupportedObjectType(objectType) {
|
|
9
|
-
return (objectType === "insight" ||
|
|
10
|
-
objectType === "analyticalDashboard" ||
|
|
11
|
-
objectType === "measure" ||
|
|
12
|
-
objectType === "fact" ||
|
|
13
|
-
objectType === "attribute");
|
|
14
|
-
}
|
|
15
4
|
export function getDashboardsQuery({ backend, workspace, search, origin, id, excludeId, createdBy, excludeCreatedBy, tags, excludeTags, isHidden, certification, pageSize = PAGE_SIZE, }) {
|
|
16
5
|
return backend
|
|
17
6
|
.workspace(workspace)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
|
|
1
|
+
import type { AnalyticsCatalogGenerateDescriptionObjectType, IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
|
|
2
2
|
import type { 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";
|
|
@@ -120,6 +120,13 @@ export interface ICatalogItemDataSet extends ICatalogItemBase {
|
|
|
120
120
|
export type ICatalogItemHidable = Extract<ICatalogItem, {
|
|
121
121
|
type: "insight" | "measure" | "attribute" | "fact";
|
|
122
122
|
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Catalog items that support AI text generation.
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
export type ICatalogItemTextGenerable = Extract<ICatalogItem, {
|
|
128
|
+
type: AnalyticsCatalogGenerateDescriptionObjectType;
|
|
129
|
+
}>;
|
|
123
130
|
export type ICatalogItemFeedOptions = Omit<ICatalogItemQueryOptions, "origin" | "tags">;
|
|
124
131
|
export interface ICatalogItemQueryOptions {
|
|
125
132
|
backend: IAnalyticalBackend;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
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":"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;
|
|
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"}
|
|
@@ -39,6 +39,7 @@ const errorMessages = defineMessages({
|
|
|
39
39
|
invalidStructure: { id: "analyticsCatalog.computedAttribute.validation.invalidStructure" },
|
|
40
40
|
idImmutable: { id: "analyticsCatalog.computedAttribute.dialog.edit.idImmutable" },
|
|
41
41
|
missingMaql: { id: "analyticsCatalog.computedAttribute.validation.missingMaql" },
|
|
42
|
+
invalidType: { id: "analyticsCatalog.computedAttribute.validation.invalidType" },
|
|
42
43
|
invalidTags: { id: "analyticsCatalog.computedAttribute.validation.invalidTags" },
|
|
43
44
|
});
|
|
44
45
|
function useComputedAttributeEditing() {
|
|
@@ -83,9 +84,9 @@ export const computedAttributeDescriptor = defineAsCodeDescriptor({
|
|
|
83
84
|
}),
|
|
84
85
|
// The catalog item carries no MAQL, so the full object is fetched for editing.
|
|
85
86
|
seed: { load: loadComputedAttribute, loadError: capabilityMessages.loadError },
|
|
86
|
-
// Refuses the deletion while a visualization still
|
|
87
|
-
//
|
|
88
|
-
// silently), so the catalog is the guard.
|
|
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.
|
|
89
90
|
referenceCounted: {
|
|
90
91
|
load: listComputedAttributeReferences,
|
|
91
92
|
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 and
|
|
11
|
+
/** Titles of the insights, metrics, and dashboards 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,
|
|
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"}
|
|
@@ -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 and
|
|
16
|
+
/** Titles of the insights, metrics, and dashboards referencing a computed attribute. @internal */
|
|
17
17
|
export async function listComputedAttributeReferences(backend, workspace, item) {
|
|
18
18
|
const referencing = await backend
|
|
19
19
|
.workspace(workspace)
|
|
@@ -22,6 +22,7 @@ export async function listComputedAttributeReferences(backend, workspace, item)
|
|
|
22
22
|
return [
|
|
23
23
|
...(referencing.insights ?? []).map((insight) => insightTitle(insight)),
|
|
24
24
|
...(referencing.measures ?? []).map((measure) => measure.title),
|
|
25
|
+
...(referencing.analyticalDashboards ?? []).map((dashboard) => dashboard.title),
|
|
25
26
|
];
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
@@ -4,12 +4,14 @@ import type { ComputedAttributeYaml } from "./computedAttributeConverter.js";
|
|
|
4
4
|
*
|
|
5
5
|
* The document is a flat, gap-free list of lines in the order the design prescribes: `id`, `type`,
|
|
6
6
|
* `title`, `description`, then `maql` last, so the expression the author came to write sits at the
|
|
7
|
-
* bottom with the room below it. The `id` line is
|
|
8
|
-
* the
|
|
7
|
+
* bottom with the room below it. The `id` line is always rendered, empty when the computed attribute
|
|
8
|
+
* has none, so an author who wants to choose the identity has the key waiting; left blank it is
|
|
9
|
+
* dropped on validation and the server derives one on create.
|
|
9
10
|
*
|
|
10
11
|
* `description` is always rendered, empty as `""`, so the field an author is likely to fill is
|
|
11
|
-
* offered rather than hidden. An empty `maql` renders as
|
|
12
|
-
*
|
|
12
|
+
* offered rather than hidden. An empty `maql` renders as `maql: ` (a trailing space after the
|
|
13
|
+
* colon) so the next character the author types is a YAML scalar, not `maql:SELECT` which is
|
|
14
|
+
* a syntax error; an empty `id` renders the same way for the same reason.
|
|
13
15
|
*/
|
|
14
16
|
export declare function serializeComputedAttributeToYaml(computedAttribute: ComputedAttributeYaml): string;
|
|
15
17
|
//# sourceMappingURL=computedAttributeSerialization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computedAttributeSerialization.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeSerialization.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E
|
|
1
|
+
{"version":3,"file":"computedAttributeSerialization.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeSerialization.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,MAAM,CAkBjG"}
|
|
@@ -5,17 +5,17 @@ import { Document } from "yaml";
|
|
|
5
5
|
*
|
|
6
6
|
* The document is a flat, gap-free list of lines in the order the design prescribes: `id`, `type`,
|
|
7
7
|
* `title`, `description`, then `maql` last, so the expression the author came to write sits at the
|
|
8
|
-
* bottom with the room below it. The `id` line is
|
|
9
|
-
* the
|
|
8
|
+
* bottom with the room below it. The `id` line is always rendered, empty when the computed attribute
|
|
9
|
+
* has none, so an author who wants to choose the identity has the key waiting; left blank it is
|
|
10
|
+
* dropped on validation and the server derives one on create.
|
|
10
11
|
*
|
|
11
12
|
* `description` is always rendered, empty as `""`, so the field an author is likely to fill is
|
|
12
|
-
* offered rather than hidden. An empty `maql` renders as
|
|
13
|
-
*
|
|
13
|
+
* offered rather than hidden. An empty `maql` renders as `maql: ` (a trailing space after the
|
|
14
|
+
* colon) so the next character the author types is a YAML scalar, not `maql:SELECT` which is
|
|
15
|
+
* a syntax error; an empty `id` renders the same way for the same reason.
|
|
14
16
|
*/
|
|
15
17
|
export function serializeComputedAttributeToYaml(computedAttribute) {
|
|
16
|
-
const doc = new Document(computedAttribute.id
|
|
17
|
-
? { type: "computed_attribute" }
|
|
18
|
-
: { id: computedAttribute.id, type: "computed_attribute" });
|
|
18
|
+
const doc = new Document({ id: computedAttribute.id ?? null, type: "computed_attribute" });
|
|
19
19
|
doc.add(doc.createPair("title", computedAttribute.title ?? ""));
|
|
20
20
|
doc.add(doc.createPair("description", computedAttribute.description ?? ""));
|
|
21
21
|
if (computedAttribute.tags && computedAttribute.tags.length > 0) {
|
|
@@ -25,5 +25,13 @@ export function serializeComputedAttributeToYaml(computedAttribute) {
|
|
|
25
25
|
doc.add(doc.createPair("locale", computedAttribute.locale));
|
|
26
26
|
}
|
|
27
27
|
doc.add(doc.createPair("maql", computedAttribute.maql ? computedAttribute.maql : null));
|
|
28
|
-
|
|
28
|
+
// An unset field is a null pair (`nullStr: ""` → `maql:`). Keep one space after the colon so the
|
|
29
|
+
// next character typed is a YAML scalar (`maql: SELECT …`), not `maql:SELECT` which is a syntax
|
|
30
|
+
// error. Do not `trimEnd` — that would strip the space.
|
|
31
|
+
const yaml = doc.toString({ lineWidth: 0, nullStr: "" }).replace(/\n+$/, "");
|
|
32
|
+
return withBlankLineSpace(withBlankLineSpace(yaml, "id"), "maql");
|
|
33
|
+
}
|
|
34
|
+
/** Restores the space `nullStr: ""` leaves out after a blank key's colon, wherever the line sits. */
|
|
35
|
+
function withBlankLineSpace(yaml, key) {
|
|
36
|
+
return yaml.replace(new RegExp(`^${key}:$`, "m"), `${key}: `);
|
|
29
37
|
}
|
|
@@ -6,7 +6,7 @@ export type ComputedAttributeValidationResult = {
|
|
|
6
6
|
isValid: false;
|
|
7
7
|
errorCode: ComputedAttributeValidationErrorCode;
|
|
8
8
|
};
|
|
9
|
-
export type ComputedAttributeValidationErrorCode = "empty" | "syntax" | "invalidStructure" | "idImmutable" | "missingMaql" | "invalidTags";
|
|
9
|
+
export type ComputedAttributeValidationErrorCode = "empty" | "syntax" | "invalidStructure" | "idImmutable" | "missingMaql" | "invalidType" | "invalidTags";
|
|
10
10
|
type ValidateComputedAttributeYamlOptions = {
|
|
11
11
|
fixedIdentifier?: string;
|
|
12
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computedAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeValidation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAOtF,MAAM,MAAM,iCAAiC,GACvC;IACI,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,0CAA0C,CAAC;CACjE,GACD;IACI,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,oCAAoC,CAAC;CACnD,CAAC;AAER,MAAM,MAAM,oCAAoC,GAC1C,OAAO,GACP,QAAQ,GACR,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,aAAa,CAAC;AAEpB,KAAK,oCAAoC,GAAG;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oCAAyC,GACnD,iCAAiC,CAgBnC"}
|
|
1
|
+
{"version":3,"file":"computedAttributeValidation.d.ts","sourceRoot":"","sources":["../../src/computedAttribute/computedAttributeValidation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAOtF,MAAM,MAAM,iCAAiC,GACvC;IACI,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,0CAA0C,CAAC;CACjE,GACD;IACI,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,EAAE,oCAAoC,CAAC;CACnD,CAAC;AAER,MAAM,MAAM,oCAAoC,GAC1C,OAAO,GACP,QAAQ,GACR,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,CAAC;AAEpB,KAAK,oCAAoC,GAAG;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oCAAyC,GACnD,iCAAiC,CAgBnC"}
|
|
@@ -18,7 +18,7 @@ export function validateComputedAttributeYaml(value, options = {}) {
|
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
function classifyComputedAttributeError(error, parsed) {
|
|
21
|
-
// A blank `maql:` line parses to null - the seeded template's state - and counts as unwritten,
|
|
21
|
+
// A blank `maql:` / `maql: ` line parses to null - the seeded template's state - and counts as unwritten,
|
|
22
22
|
// not as a value of the wrong type.
|
|
23
23
|
const maqlProvided = typeof parsed === "object" &&
|
|
24
24
|
parsed !== null &&
|
|
@@ -29,6 +29,11 @@ function classifyComputedAttributeError(error, parsed) {
|
|
|
29
29
|
// A present-but-wrong-typed maql is a structural error, not a missing field.
|
|
30
30
|
return maqlProvided ? "invalidStructure" : "missingMaql";
|
|
31
31
|
}
|
|
32
|
+
// A mistyped `type` is easy to make and impossible to spot in a generic structure error,
|
|
33
|
+
// so it gets its own message naming the one value the field accepts.
|
|
34
|
+
if (path === "type") {
|
|
35
|
+
return "invalidType";
|
|
36
|
+
}
|
|
32
37
|
if (path === "tags" || path.startsWith("tags.")) {
|
|
33
38
|
return "invalidTags";
|
|
34
39
|
}
|
|
@@ -17,6 +17,7 @@ export declare const de_DE: {
|
|
|
17
17
|
"analyticsCatalog.objectType.fact.name": string;
|
|
18
18
|
"analyticsCatalog.objectType.dateDataset.name": string;
|
|
19
19
|
"analyticsCatalog.objectType.parameter.name": string;
|
|
20
|
+
"analyticsCatalog.objectType.computedAttribute.name": string;
|
|
20
21
|
"analyticsCatalog.visualizationType.table.tooltip": string;
|
|
21
22
|
"analyticsCatalog.visualizationType.area.tooltip": string;
|
|
22
23
|
"analyticsCatalog.visualizationType.treemap.tooltip": string;
|
|
@@ -193,11 +194,30 @@ export declare const de_DE: {
|
|
|
193
194
|
"analyticsCatalog.parameter.dialog.delete.submit": string;
|
|
194
195
|
"analyticsCatalog.parameter.delete.success": string;
|
|
195
196
|
"analyticsCatalog.parameter.delete.error": string;
|
|
197
|
+
"analyticsCatalog.computedAttribute.dialog.create.title": string;
|
|
198
|
+
"analyticsCatalog.computedAttribute.dialog.edit.title": string;
|
|
196
199
|
"analyticsCatalog.computedAttribute.dialog.edit.duplicate": string;
|
|
200
|
+
"analyticsCatalog.computedAttribute.dialog.edit.idImmutable": string;
|
|
201
|
+
"analyticsCatalog.computedAttribute.dialog.sectionHeader": string;
|
|
202
|
+
"analyticsCatalog.computedAttribute.dialog.sectionHeader.tooltip": string;
|
|
203
|
+
"analyticsCatalog.computedAttribute.dialog.help": string;
|
|
204
|
+
"analyticsCatalog.computedAttribute.dialog.submit.error": string;
|
|
205
|
+
"analyticsCatalog.computedAttribute.validation.empty": string;
|
|
197
206
|
"analyticsCatalog.computedAttribute.validation.syntax": string;
|
|
207
|
+
"analyticsCatalog.computedAttribute.validation.invalidStructure": string;
|
|
208
|
+
"analyticsCatalog.computedAttribute.validation.missingMaql": string;
|
|
198
209
|
"analyticsCatalog.computedAttribute.validation.invalidTags": string;
|
|
210
|
+
"analyticsCatalog.computedAttribute.create.defaultTitle": string;
|
|
211
|
+
"analyticsCatalog.computedAttribute.create.success": string;
|
|
212
|
+
"analyticsCatalog.computedAttribute.update.success": string;
|
|
213
|
+
"analyticsCatalog.computedAttribute.load.error": string;
|
|
214
|
+
"analyticsCatalog.computedAttribute.dialog.delete.title": string;
|
|
199
215
|
"analyticsCatalog.computedAttribute.dialog.delete.body": string;
|
|
216
|
+
"analyticsCatalog.computedAttribute.dialog.delete.usageWarning": string;
|
|
217
|
+
"analyticsCatalog.computedAttribute.dialog.delete.blocked": string;
|
|
200
218
|
"analyticsCatalog.computedAttribute.dialog.delete.submit": string;
|
|
219
|
+
"analyticsCatalog.computedAttribute.delete.success": string;
|
|
220
|
+
"analyticsCatalog.computedAttribute.delete.error": string;
|
|
201
221
|
"analyticsCatalog.metric.dialog.create.title": string;
|
|
202
222
|
"analyticsCatalog.metric.dialog.edit.title": string;
|
|
203
223
|
"analyticsCatalog.metric.dialog.sectionHeader": string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0RjB,CAAC"}
|
|
@@ -19,6 +19,7 @@ export const de_DE = {
|
|
|
19
19
|
"analyticsCatalog.objectType.fact.name": "Fakt",
|
|
20
20
|
"analyticsCatalog.objectType.dateDataset.name": "Datumsdatensatz",
|
|
21
21
|
"analyticsCatalog.objectType.parameter.name": "Parameter",
|
|
22
|
+
"analyticsCatalog.objectType.computedAttribute.name": "Berechnetes Attribut",
|
|
22
23
|
"analyticsCatalog.visualizationType.table.tooltip": "Tabelle",
|
|
23
24
|
"analyticsCatalog.visualizationType.area.tooltip": "Flächendiagramm",
|
|
24
25
|
"analyticsCatalog.visualizationType.treemap.tooltip": "Baumkarte-Diagramm",
|
|
@@ -195,11 +196,30 @@ export const de_DE = {
|
|
|
195
196
|
"analyticsCatalog.parameter.dialog.delete.submit": "Löschen",
|
|
196
197
|
"analyticsCatalog.parameter.delete.success": "Parameter gelöscht.",
|
|
197
198
|
"analyticsCatalog.parameter.delete.error": "Parameter konnte nicht gelöscht werden.",
|
|
199
|
+
"analyticsCatalog.computedAttribute.dialog.create.title": "Berechnetes Attribut erstellen",
|
|
200
|
+
"analyticsCatalog.computedAttribute.dialog.edit.title": "Berechnetes Attribut bearbeiten",
|
|
198
201
|
"analyticsCatalog.computedAttribute.dialog.edit.duplicate": "Als neu speichern",
|
|
202
|
+
"analyticsCatalog.computedAttribute.dialog.edit.idImmutable": "Die ID des berechneten Attributs kann beim Speichern eines vorhandenen berechneten Attributs nicht geändert werden. Verwenden Sie stattdessen „Als neu speichern“.",
|
|
203
|
+
"analyticsCatalog.computedAttribute.dialog.sectionHeader": "Definition des berechneten Attributs",
|
|
204
|
+
"analyticsCatalog.computedAttribute.dialog.sectionHeader.tooltip": "Schreiben Sie einen MAQL-Ausdruck, der jeder Zeile mithilfe von CASE-WHEN-Verzweigungen über eine Metrik oder einen Fakt einen Wert zuweist.",
|
|
205
|
+
"analyticsCatalog.computedAttribute.dialog.help": "Wie erstelle ich ein berechnetes Attribut?",
|
|
206
|
+
"analyticsCatalog.computedAttribute.dialog.submit.error": "Das berechnete Attribut konnte nicht gespeichert werden.",
|
|
207
|
+
"analyticsCatalog.computedAttribute.validation.empty": "Die Definition des berechneten Attributs darf nicht leer sein.",
|
|
199
208
|
"analyticsCatalog.computedAttribute.validation.syntax": "YAML-Syntaxfehler",
|
|
209
|
+
"analyticsCatalog.computedAttribute.validation.invalidStructure": "Die Definition des berechneten Attributs hat eine ungültige Struktur.",
|
|
210
|
+
"analyticsCatalog.computedAttribute.validation.missingMaql": "Das berechnete Attribut muss einen MAQL-Ausdruck definieren.",
|
|
200
211
|
"analyticsCatalog.computedAttribute.validation.invalidTags": "Tags müssen eine Liste von Textwerten sein.",
|
|
212
|
+
"analyticsCatalog.computedAttribute.create.defaultTitle": "Mein berechnetes Attribut",
|
|
213
|
+
"analyticsCatalog.computedAttribute.create.success": "Berechnetes Attribut erstellt.",
|
|
214
|
+
"analyticsCatalog.computedAttribute.update.success": "Berechnetes Attribut gespeichert.",
|
|
215
|
+
"analyticsCatalog.computedAttribute.load.error": "Das berechnete Attribut konnte nicht geladen werden.",
|
|
216
|
+
"analyticsCatalog.computedAttribute.dialog.delete.title": "Berechnetes Attribut löschen?",
|
|
201
217
|
"analyticsCatalog.computedAttribute.dialog.delete.body": "Möchten Sie <b>{name}</b> wirklich löschen?",
|
|
218
|
+
"analyticsCatalog.computedAttribute.dialog.delete.usageWarning": "Dieses Attribut wird in <b>{count, plural, one {# Visualisierung} other {# Visualisierungen}}</b> verwendet",
|
|
219
|
+
"analyticsCatalog.computedAttribute.dialog.delete.blocked": "Das berechnete Attribut <b>{name}</b> kann nicht gelöscht werden, weil es in einigen Visualisierungen verwendet wird. Um dieses Attribut zu löschen, entfernen Sie es zuerst aus allen Visualisierungen.",
|
|
202
220
|
"analyticsCatalog.computedAttribute.dialog.delete.submit": "Löschen",
|
|
221
|
+
"analyticsCatalog.computedAttribute.delete.success": "Berechnetes Attribut gelöscht.",
|
|
222
|
+
"analyticsCatalog.computedAttribute.delete.error": "Das berechnete Attribut konnte nicht gelöscht werden.",
|
|
203
223
|
"analyticsCatalog.metric.dialog.create.title": "Metrik erstellen",
|
|
204
224
|
"analyticsCatalog.metric.dialog.edit.title": "Metrik bearbeiten",
|
|
205
225
|
"analyticsCatalog.metric.dialog.sectionHeader": "Metrikdefinition",
|
|
@@ -17,6 +17,7 @@ export declare const en_AU: {
|
|
|
17
17
|
"analyticsCatalog.objectType.fact.name": string;
|
|
18
18
|
"analyticsCatalog.objectType.dateDataset.name": string;
|
|
19
19
|
"analyticsCatalog.objectType.parameter.name": string;
|
|
20
|
+
"analyticsCatalog.objectType.computedAttribute.name": string;
|
|
20
21
|
"analyticsCatalog.visualizationType.table.tooltip": string;
|
|
21
22
|
"analyticsCatalog.visualizationType.area.tooltip": string;
|
|
22
23
|
"analyticsCatalog.visualizationType.treemap.tooltip": string;
|
|
@@ -193,11 +194,30 @@ export declare const en_AU: {
|
|
|
193
194
|
"analyticsCatalog.parameter.dialog.delete.submit": string;
|
|
194
195
|
"analyticsCatalog.parameter.delete.success": string;
|
|
195
196
|
"analyticsCatalog.parameter.delete.error": string;
|
|
197
|
+
"analyticsCatalog.computedAttribute.dialog.create.title": string;
|
|
198
|
+
"analyticsCatalog.computedAttribute.dialog.edit.title": string;
|
|
196
199
|
"analyticsCatalog.computedAttribute.dialog.edit.duplicate": string;
|
|
200
|
+
"analyticsCatalog.computedAttribute.dialog.edit.idImmutable": string;
|
|
201
|
+
"analyticsCatalog.computedAttribute.dialog.sectionHeader": string;
|
|
202
|
+
"analyticsCatalog.computedAttribute.dialog.sectionHeader.tooltip": string;
|
|
203
|
+
"analyticsCatalog.computedAttribute.dialog.help": string;
|
|
204
|
+
"analyticsCatalog.computedAttribute.dialog.submit.error": string;
|
|
205
|
+
"analyticsCatalog.computedAttribute.validation.empty": string;
|
|
197
206
|
"analyticsCatalog.computedAttribute.validation.syntax": string;
|
|
207
|
+
"analyticsCatalog.computedAttribute.validation.invalidStructure": string;
|
|
208
|
+
"analyticsCatalog.computedAttribute.validation.missingMaql": string;
|
|
198
209
|
"analyticsCatalog.computedAttribute.validation.invalidTags": string;
|
|
210
|
+
"analyticsCatalog.computedAttribute.create.defaultTitle": string;
|
|
211
|
+
"analyticsCatalog.computedAttribute.create.success": string;
|
|
212
|
+
"analyticsCatalog.computedAttribute.update.success": string;
|
|
213
|
+
"analyticsCatalog.computedAttribute.load.error": string;
|
|
214
|
+
"analyticsCatalog.computedAttribute.dialog.delete.title": string;
|
|
199
215
|
"analyticsCatalog.computedAttribute.dialog.delete.body": string;
|
|
216
|
+
"analyticsCatalog.computedAttribute.dialog.delete.usageWarning": string;
|
|
217
|
+
"analyticsCatalog.computedAttribute.dialog.delete.blocked": string;
|
|
200
218
|
"analyticsCatalog.computedAttribute.dialog.delete.submit": string;
|
|
219
|
+
"analyticsCatalog.computedAttribute.delete.success": string;
|
|
220
|
+
"analyticsCatalog.computedAttribute.delete.error": string;
|
|
201
221
|
"analyticsCatalog.metric.dialog.create.title": string;
|
|
202
222
|
"analyticsCatalog.metric.dialog.edit.title": string;
|
|
203
223
|
"analyticsCatalog.metric.dialog.sectionHeader": string;
|