@gooddata/sdk-ui-catalog 11.43.0-alpha.0 → 11.43.0-alpha.2
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/automation/testIds.d.ts +7 -0
- package/esm/automation/testIds.d.ts.map +1 -1
- package/esm/automation/testIds.js +7 -0
- package/esm/catalogDetail/CatalogDetailActions.d.ts +3 -1
- package/esm/catalogDetail/CatalogDetailActions.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailActions.js +11 -9
- package/esm/catalogDetail/CatalogDetailContent.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailContent.js +62 -23
- package/esm/catalogDetail/CatalogDetailHeader.d.ts +13 -1
- package/esm/catalogDetail/CatalogDetailHeader.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailHeader.js +44 -28
- package/esm/catalogDetail/CatalogDetailTabMetadata.d.ts +17 -1
- package/esm/catalogDetail/CatalogDetailTabMetadata.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailTabMetadata.js +8 -3
- package/esm/catalogDetail/share/CatalogDetailAccessRow.d.ts +19 -0
- package/esm/catalogDetail/share/CatalogDetailAccessRow.d.ts.map +1 -0
- package/esm/catalogDetail/share/CatalogDetailAccessRow.js +33 -0
- package/esm/catalogDetail/share/CatalogDetailLabels.d.ts +17 -0
- package/esm/catalogDetail/share/CatalogDetailLabels.d.ts.map +1 -0
- package/esm/catalogDetail/share/CatalogDetailLabels.js +36 -0
- package/esm/catalogDetail/share/ShareButton.d.ts +15 -0
- package/esm/catalogDetail/share/ShareButton.d.ts.map +1 -0
- package/esm/catalogDetail/share/ShareButton.js +16 -0
- package/esm/catalogDetail/share/guards.d.ts +15 -0
- package/esm/catalogDetail/share/guards.d.ts.map +1 -0
- package/esm/catalogDetail/share/guards.js +21 -0
- package/esm/catalogDetail/share/messages.d.ts +43 -0
- package/esm/catalogDetail/share/messages.d.ts.map +1 -0
- package/esm/catalogDetail/share/messages.js +24 -0
- package/esm/catalogDetail/share/types.d.ts +7 -0
- package/esm/catalogDetail/share/types.d.ts.map +1 -0
- package/esm/catalogDetail/share/types.js +2 -0
- package/esm/catalogDetail/share/useShareableLabels.d.ts +31 -0
- package/esm/catalogDetail/share/useShareableLabels.d.ts.map +1 -0
- package/esm/catalogDetail/share/useShareableLabels.js +37 -0
- package/esm/localization/bundles/en-US.localization-bundle.d.ts +44 -0
- package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-US.localization-bundle.js +44 -0
- package/esm/localization/translations.d.ts +1 -1
- package/esm/localization/translations.d.ts.map +1 -1
- package/esm/localization/translations.js +7 -5
- package/esm/tsdoc-metadata.json +1 -1
- package/package.json +14 -13
- package/styles/css/detail.css +67 -3
- package/styles/css/detail.css.map +1 -1
- package/styles/css/main.css +67 -3
- package/styles/css/main.css.map +1 -1
- package/styles/scss/detail.scss +86 -8
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
4
|
+
import { UiButton } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { catalogDetailActionShare } from "../../automation/testIds.js";
|
|
6
|
+
import { shareMessages } from "./messages.js";
|
|
7
|
+
/**
|
|
8
|
+
* Catalog detail header trigger for the share dialog. Rendered in the
|
|
9
|
+
* `CatalogDetailActions` slot, immediately before the primary "Open" button.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export function ShareButton({ onClick, isDisabled }) {
|
|
14
|
+
const intl = useIntl();
|
|
15
|
+
return (_jsx(UiButton, { label: intl.formatMessage(shareMessages.shareButton), variant: "secondary", onClick: onClick, isDisabled: isDisabled, dataTestId: catalogDetailActionShare }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IObjectPermissionsObject } from "@gooddata/sdk-backend-spi";
|
|
2
|
+
import type { ICatalogItem } from "../../catalogItem/types.js";
|
|
3
|
+
import type { ShareableCatalogItem } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Catalog items the share dialog can target: attributes and facts. Labels are
|
|
6
|
+
* not first-class catalog items; they appear inside the labels picker when
|
|
7
|
+
* sharing an attribute.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isShareableCatalogItem(item: ICatalogItem): item is ShareableCatalogItem;
|
|
10
|
+
/**
|
|
11
|
+
* Build the backend target descriptor from a shareable catalog item. The kind
|
|
12
|
+
* enum matches the catalog item's discriminator, so the mapping is direct.
|
|
13
|
+
*/
|
|
14
|
+
export declare function toShareTarget(item: ShareableCatalogItem): IObjectPermissionsObject;
|
|
15
|
+
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { idRef } from "@gooddata/sdk-model";
|
|
3
|
+
import { isCatalogItemAttribute, isCatalogItemFact } from "../../catalogItem/guards.js";
|
|
4
|
+
/**
|
|
5
|
+
* Catalog items the share dialog can target: attributes and facts. Labels are
|
|
6
|
+
* not first-class catalog items; they appear inside the labels picker when
|
|
7
|
+
* sharing an attribute.
|
|
8
|
+
*/
|
|
9
|
+
export function isShareableCatalogItem(item) {
|
|
10
|
+
return isCatalogItemAttribute(item) || isCatalogItemFact(item);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the backend target descriptor from a shareable catalog item. The kind
|
|
14
|
+
* enum matches the catalog item's discriminator, so the mapping is direct.
|
|
15
|
+
*/
|
|
16
|
+
export function toShareTarget(item) {
|
|
17
|
+
return {
|
|
18
|
+
kind: item.type,
|
|
19
|
+
ref: idRef(item.identifier, item.type),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strings owned by the catalog detail share launcher + inline access row.
|
|
3
|
+
* Dialog/confirm/toast strings are owned by `@gooddata/sdk-ui-ext` under the
|
|
4
|
+
* `objectShare.*` namespace.
|
|
5
|
+
*/
|
|
6
|
+
export declare const shareMessages: {
|
|
7
|
+
shareButton: {
|
|
8
|
+
id: string;
|
|
9
|
+
};
|
|
10
|
+
accessRowLabel: {
|
|
11
|
+
id: string;
|
|
12
|
+
};
|
|
13
|
+
accessRowRestricted: {
|
|
14
|
+
id: string;
|
|
15
|
+
};
|
|
16
|
+
accessRowWorkspaceView: {
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
accessRowWorkspaceShare: {
|
|
20
|
+
id: string;
|
|
21
|
+
};
|
|
22
|
+
accessRowSharedWith: {
|
|
23
|
+
id: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Strings for the labels summary + read-only labels popup in the detail header.
|
|
28
|
+
*/
|
|
29
|
+
export declare const labelsMessages: {
|
|
30
|
+
more: {
|
|
31
|
+
id: string;
|
|
32
|
+
};
|
|
33
|
+
triggerAriaLabel: {
|
|
34
|
+
id: string;
|
|
35
|
+
};
|
|
36
|
+
popupTitle: {
|
|
37
|
+
id: string;
|
|
38
|
+
};
|
|
39
|
+
popupClose: {
|
|
40
|
+
id: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/messages.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;CAOxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAKzB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { defineMessages } from "react-intl";
|
|
3
|
+
/**
|
|
4
|
+
* Strings owned by the catalog detail share launcher + inline access row.
|
|
5
|
+
* Dialog/confirm/toast strings are owned by `@gooddata/sdk-ui-ext` under the
|
|
6
|
+
* `objectShare.*` namespace.
|
|
7
|
+
*/
|
|
8
|
+
export const shareMessages = defineMessages({
|
|
9
|
+
shareButton: { id: "analyticsCatalog.share.button" },
|
|
10
|
+
accessRowLabel: { id: "analyticsCatalog.share.access.row.label" },
|
|
11
|
+
accessRowRestricted: { id: "analyticsCatalog.share.access.row.restricted" },
|
|
12
|
+
accessRowWorkspaceView: { id: "analyticsCatalog.share.access.row.workspace.view" },
|
|
13
|
+
accessRowWorkspaceShare: { id: "analyticsCatalog.share.access.row.workspace.share" },
|
|
14
|
+
accessRowSharedWith: { id: "analyticsCatalog.share.access.row.sharedWith" },
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Strings for the labels summary + read-only labels popup in the detail header.
|
|
18
|
+
*/
|
|
19
|
+
export const labelsMessages = defineMessages({
|
|
20
|
+
more: { id: "analyticsCatalog.labels.more" },
|
|
21
|
+
triggerAriaLabel: { id: "analyticsCatalog.labels.trigger.ariaLabel" },
|
|
22
|
+
popupTitle: { id: "analyticsCatalog.labels.popup.title" },
|
|
23
|
+
popupClose: { id: "analyticsCatalog.labels.popup.close" },
|
|
24
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ICatalogItemAttribute, ICatalogItemFact } from "../../catalogItem/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Catalog items that can be shared: attributes and facts. Labels are sub-selected
|
|
4
|
+
* from inside an attribute share, not shared as standalone targets.
|
|
5
|
+
*/
|
|
6
|
+
export type ShareableCatalogItem = ICatalogItemAttribute | ICatalogItemFact;
|
|
7
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE1F;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { IObjectShareLabel } from "@gooddata/sdk-ui-ext";
|
|
2
|
+
import type { ShareableCatalogItem } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export interface IShareableLabels {
|
|
7
|
+
/** Display forms of the shareable attribute; empty for facts. */
|
|
8
|
+
labels: IObjectShareLabel[];
|
|
9
|
+
/**
|
|
10
|
+
* True while an attribute's labels are still being fetched. Facts skip the
|
|
11
|
+
* fetch and report `false`. Gates the dialog's Add action so a grantee can't
|
|
12
|
+
* be added before its labels are known.
|
|
13
|
+
*/
|
|
14
|
+
loading: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* True when the attribute's label fetch failed. Add stays disabled in this
|
|
17
|
+
* case too: a new grantee defaults to all labels, which can't be honored if
|
|
18
|
+
* the labels couldn't be loaded — otherwise the object would be granted with
|
|
19
|
+
* no label grants.
|
|
20
|
+
*/
|
|
21
|
+
error: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Loads the labels (display forms) of a shareable attribute so the share dialog
|
|
25
|
+
* can scope a grantee's access per label. Facts have no labels — returns an empty
|
|
26
|
+
* list and skips the fetch. The result feeds {@link ObjectShareDialog}'s `labels`.
|
|
27
|
+
*
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export declare function useShareableLabels(item: ShareableCatalogItem | undefined): IShareableLabels;
|
|
31
|
+
//# sourceMappingURL=useShareableLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useShareableLabels.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/useShareableLabels.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,iEAAiE;IACjE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,gBAAgB,CAsC3F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { objRefToString } from "@gooddata/sdk-model";
|
|
4
|
+
import { useBackendStrict, useCancelablePromise, useWorkspaceStrict } from "@gooddata/sdk-ui";
|
|
5
|
+
/**
|
|
6
|
+
* Loads the labels (display forms) of a shareable attribute so the share dialog
|
|
7
|
+
* can scope a grantee's access per label. Facts have no labels — returns an empty
|
|
8
|
+
* list and skips the fetch. The result feeds {@link ObjectShareDialog}'s `labels`.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export function useShareableLabels(item) {
|
|
13
|
+
const backend = useBackendStrict();
|
|
14
|
+
const workspace = useWorkspaceStrict();
|
|
15
|
+
// Only attributes carry labels; facts do not.
|
|
16
|
+
const attributeRef = item?.type === "attribute" ? item.identifier : undefined;
|
|
17
|
+
const { result, status } = useCancelablePromise({
|
|
18
|
+
promise: attributeRef
|
|
19
|
+
? () => backend
|
|
20
|
+
.workspace(workspace)
|
|
21
|
+
.attributes()
|
|
22
|
+
.getAttribute({ identifier: attributeRef, type: "attribute" })
|
|
23
|
+
: undefined,
|
|
24
|
+
}, [backend, workspace, attributeRef]);
|
|
25
|
+
const labels = useMemo(() => (result?.displayForms ?? []).map((df) => ({
|
|
26
|
+
ref: df.ref,
|
|
27
|
+
id: objRefToString(df.ref),
|
|
28
|
+
title: df.title,
|
|
29
|
+
isPrimary: df.isPrimary === true,
|
|
30
|
+
isDefault: df.isDefault === true,
|
|
31
|
+
})), [result]);
|
|
32
|
+
// A fact has no fetch, so it never "loads". An attribute loads until its
|
|
33
|
+
// fetch settles (success or error).
|
|
34
|
+
const loading = attributeRef !== undefined && status !== "success" && status !== "error";
|
|
35
|
+
const error = attributeRef !== undefined && status === "error";
|
|
36
|
+
return { labels, loading, error };
|
|
37
|
+
}
|
|
@@ -235,6 +235,10 @@ export declare const en_US: {
|
|
|
235
235
|
text: string;
|
|
236
236
|
crowdinContext: string;
|
|
237
237
|
};
|
|
238
|
+
"analyticsCatalog.column.title.labels": {
|
|
239
|
+
text: string;
|
|
240
|
+
crowdinContext: string;
|
|
241
|
+
};
|
|
238
242
|
"analyticsCatalog.column.title.createdBy": {
|
|
239
243
|
text: string;
|
|
240
244
|
crowdinContext: string;
|
|
@@ -767,5 +771,45 @@ export declare const en_US: {
|
|
|
767
771
|
text: string;
|
|
768
772
|
crowdinContext: string;
|
|
769
773
|
};
|
|
774
|
+
"analyticsCatalog.share.button": {
|
|
775
|
+
text: string;
|
|
776
|
+
crowdinContext: string;
|
|
777
|
+
};
|
|
778
|
+
"analyticsCatalog.share.access.row.label": {
|
|
779
|
+
text: string;
|
|
780
|
+
crowdinContext: string;
|
|
781
|
+
};
|
|
782
|
+
"analyticsCatalog.share.access.row.restricted": {
|
|
783
|
+
text: string;
|
|
784
|
+
crowdinContext: string;
|
|
785
|
+
};
|
|
786
|
+
"analyticsCatalog.share.access.row.workspace.view": {
|
|
787
|
+
text: string;
|
|
788
|
+
crowdinContext: string;
|
|
789
|
+
};
|
|
790
|
+
"analyticsCatalog.share.access.row.workspace.share": {
|
|
791
|
+
text: string;
|
|
792
|
+
crowdinContext: string;
|
|
793
|
+
};
|
|
794
|
+
"analyticsCatalog.share.access.row.sharedWith": {
|
|
795
|
+
text: string;
|
|
796
|
+
crowdinContext: string;
|
|
797
|
+
};
|
|
798
|
+
"analyticsCatalog.labels.more": {
|
|
799
|
+
text: string;
|
|
800
|
+
crowdinContext: string;
|
|
801
|
+
};
|
|
802
|
+
"analyticsCatalog.labels.trigger.ariaLabel": {
|
|
803
|
+
text: string;
|
|
804
|
+
crowdinContext: string;
|
|
805
|
+
};
|
|
806
|
+
"analyticsCatalog.labels.popup.title": {
|
|
807
|
+
text: string;
|
|
808
|
+
crowdinContext: string;
|
|
809
|
+
};
|
|
810
|
+
"analyticsCatalog.labels.popup.close": {
|
|
811
|
+
text: string;
|
|
812
|
+
crowdinContext: string;
|
|
813
|
+
};
|
|
770
814
|
};
|
|
771
815
|
//# sourceMappingURL=en-US.localization-bundle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-US.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/localization/bundles/en-US.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"en-US.localization-bundle.d.ts","sourceRoot":"","sources":["../../../src/localization/bundles/en-US.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6yBjB,CAAC"}
|
|
@@ -237,6 +237,10 @@ export const en_US = {
|
|
|
237
237
|
"text": "Dataset",
|
|
238
238
|
"crowdinContext": "Title of the column containing the dataSet of the object."
|
|
239
239
|
},
|
|
240
|
+
"analyticsCatalog.column.title.labels": {
|
|
241
|
+
"text": "Labels",
|
|
242
|
+
"crowdinContext": "Title of the header column listing the display-form labels of an attribute."
|
|
243
|
+
},
|
|
240
244
|
"analyticsCatalog.column.title.createdBy": {
|
|
241
245
|
"text": "Created by",
|
|
242
246
|
"crowdinContext": "Title of the column containing the name of the creator of the object."
|
|
@@ -768,5 +772,45 @@ export const en_US = {
|
|
|
768
772
|
"analyticsCatalog.parameter.delete.error": {
|
|
769
773
|
"text": "Parameter could not be deleted.",
|
|
770
774
|
"crowdinContext": "Error toast shown when parameter deletion fails."
|
|
775
|
+
},
|
|
776
|
+
"analyticsCatalog.share.button": {
|
|
777
|
+
"text": "Share",
|
|
778
|
+
"crowdinContext": "Button label opening the share dialog from the catalog detail page."
|
|
779
|
+
},
|
|
780
|
+
"analyticsCatalog.share.access.row.label": {
|
|
781
|
+
"text": "Access",
|
|
782
|
+
"crowdinContext": "Label for the row in the catalog detail metadata grid that shows the current sharing state of the object."
|
|
783
|
+
},
|
|
784
|
+
"analyticsCatalog.share.access.row.restricted": {
|
|
785
|
+
"text": "Restricted",
|
|
786
|
+
"crowdinContext": "State chip text shown when the object's access is restricted to explicitly listed grantees only."
|
|
787
|
+
},
|
|
788
|
+
"analyticsCatalog.share.access.row.workspace.view": {
|
|
789
|
+
"text": "All workspace users can view",
|
|
790
|
+
"crowdinContext": "State chip text shown when every workspace user has view access to the object."
|
|
791
|
+
},
|
|
792
|
+
"analyticsCatalog.share.access.row.workspace.share": {
|
|
793
|
+
"text": "All workspace users can share",
|
|
794
|
+
"crowdinContext": "State chip text shown when every workspace user has view+share access to the object."
|
|
795
|
+
},
|
|
796
|
+
"analyticsCatalog.share.access.row.sharedWith": {
|
|
797
|
+
"text": "Shared with {count, plural, one {# user or group} other {# users or groups}}",
|
|
798
|
+
"crowdinContext": "Clickable summary in the catalog detail Access row. Opens the share dialog. Placeholder is the count of named grantees (users and groups)."
|
|
799
|
+
},
|
|
800
|
+
"analyticsCatalog.labels.more": {
|
|
801
|
+
"text": "+{remaining} more",
|
|
802
|
+
"crowdinContext": "Count of additional labels beyond the primary one, shown as an underlined link after the primary label title in the catalog detail header (e.g. '+8 more'). Placeholder is the number of remaining labels."
|
|
803
|
+
},
|
|
804
|
+
"analyticsCatalog.labels.trigger.ariaLabel": {
|
|
805
|
+
"text": "Show all labels",
|
|
806
|
+
"crowdinContext": "Accessible name for the labels link in the catalog detail header that opens a popup listing all of the attribute's labels."
|
|
807
|
+
},
|
|
808
|
+
"analyticsCatalog.labels.popup.title": {
|
|
809
|
+
"text": "Labels",
|
|
810
|
+
"crowdinContext": "Title of the popup in the catalog detail header that lists all of an attribute's labels. Plain noun."
|
|
811
|
+
},
|
|
812
|
+
"analyticsCatalog.labels.popup.close": {
|
|
813
|
+
"text": "Close",
|
|
814
|
+
"crowdinContext": "Accessible name for the close (X) button of the labels popup in the catalog detail header."
|
|
771
815
|
}
|
|
772
816
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/localization/translations.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../src/localization/translations.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA0DtD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAoC,CAAC;AAE5G,eAAO,MAAM,gBAAgB,UAAU,CAAC;AACxC,eAAO,MAAM,gBAAgB;;;;CAK5B,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// (C) 2024-2026 GoodData Corporation
|
|
2
2
|
import { memoize, merge } from "lodash-es";
|
|
3
|
-
|
|
3
|
+
// sdk-ui-ext bundles its own strings (e.g. the object-share dialog) on top of sdk-ui's,
|
|
4
|
+
// so resolving through ext gives us both layers in one merge.
|
|
5
|
+
import { DEFAULT_MESSAGES as DEFAULT_MESSAGES_SDK_UI_EXT, resolveMessages as resolveMessagesSdkUiExt, } from "@gooddata/sdk-ui-ext/internal";
|
|
4
6
|
import { removeMetadata } from "@gooddata/util";
|
|
5
7
|
import { en_US } from "./bundles/en-US.localization-bundle.js";
|
|
6
8
|
const asyncCatalogTranslations = {
|
|
@@ -42,11 +44,11 @@ const asyncCatalogTranslations = {
|
|
|
42
44
|
*/
|
|
43
45
|
const resolveMessagesInternal = async (locale) => {
|
|
44
46
|
const catalogLoader = asyncCatalogTranslations[locale] || asyncCatalogTranslations["en-US"];
|
|
45
|
-
const [catalogTranslations,
|
|
47
|
+
const [catalogTranslations, sdkUiExtTranslations] = await Promise.all([
|
|
46
48
|
catalogLoader(),
|
|
47
|
-
|
|
49
|
+
resolveMessagesSdkUiExt(locale),
|
|
48
50
|
]);
|
|
49
|
-
return merge({},
|
|
51
|
+
return merge({}, sdkUiExtTranslations, catalogTranslations);
|
|
50
52
|
};
|
|
51
53
|
/**
|
|
52
54
|
* Resolves translation messages for the given locale.
|
|
@@ -58,7 +60,7 @@ export const resolveMessages = memoize(resolveMessagesInternal);
|
|
|
58
60
|
export const DEFAULT_LANGUAGE = "en-US";
|
|
59
61
|
export const DEFAULT_MESSAGES = {
|
|
60
62
|
[DEFAULT_LANGUAGE]: {
|
|
61
|
-
...
|
|
63
|
+
...DEFAULT_MESSAGES_SDK_UI_EXT[DEFAULT_LANGUAGE],
|
|
62
64
|
...removeMetadata(en_US),
|
|
63
65
|
},
|
|
64
66
|
};
|
package/esm/tsdoc-metadata.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-catalog",
|
|
3
|
-
"version": "11.43.0-alpha.
|
|
3
|
+
"version": "11.43.0-alpha.2",
|
|
4
4
|
"description": "GoodData SDK - Analytics Catalog",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -45,13 +45,14 @@
|
|
|
45
45
|
"tslib": "2.8.1",
|
|
46
46
|
"yaml": "2.8.3",
|
|
47
47
|
"zod": "4.3.6",
|
|
48
|
-
"@gooddata/sdk-backend-spi": "11.43.0-alpha.
|
|
49
|
-
"@gooddata/sdk-model": "11.43.0-alpha.
|
|
50
|
-
"@gooddata/sdk-ui": "11.43.0-alpha.
|
|
51
|
-
"@gooddata/sdk-ui-
|
|
52
|
-
"@gooddata/sdk-ui-
|
|
53
|
-
"@gooddata/sdk-ui-theme-provider": "11.43.0-alpha.
|
|
54
|
-
"@gooddata/
|
|
48
|
+
"@gooddata/sdk-backend-spi": "11.43.0-alpha.2",
|
|
49
|
+
"@gooddata/sdk-model": "11.43.0-alpha.2",
|
|
50
|
+
"@gooddata/sdk-ui": "11.43.0-alpha.2",
|
|
51
|
+
"@gooddata/sdk-ui-ext": "11.43.0-alpha.2",
|
|
52
|
+
"@gooddata/sdk-ui-kit": "11.43.0-alpha.2",
|
|
53
|
+
"@gooddata/sdk-ui-theme-provider": "11.43.0-alpha.2",
|
|
54
|
+
"@gooddata/sdk-ui-semantic-search": "11.43.0-alpha.2",
|
|
55
|
+
"@gooddata/util": "11.43.0-alpha.2"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
|
57
58
|
"@microsoft/api-documenter": "^7.17.0",
|
|
@@ -91,11 +92,11 @@
|
|
|
91
92
|
"typescript": "5.9.3",
|
|
92
93
|
"vitest": "4.1.8",
|
|
93
94
|
"vitest-dom": "0.1.1",
|
|
94
|
-
"@gooddata/eslint-config": "11.43.0-alpha.
|
|
95
|
-
"@gooddata/
|
|
96
|
-
"@gooddata/
|
|
97
|
-
"@gooddata/
|
|
98
|
-
"@gooddata/stylelint-config": "11.43.0-alpha.
|
|
95
|
+
"@gooddata/eslint-config": "11.43.0-alpha.2",
|
|
96
|
+
"@gooddata/i18n-toolkit": "11.43.0-alpha.2",
|
|
97
|
+
"@gooddata/oxlint-config": "11.43.0-alpha.2",
|
|
98
|
+
"@gooddata/sdk-backend-mockingbird": "11.43.0-alpha.2",
|
|
99
|
+
"@gooddata/stylelint-config": "11.43.0-alpha.2"
|
|
99
100
|
},
|
|
100
101
|
"peerDependencies": {
|
|
101
102
|
"react": "^18.0.0 || ^19.0.0",
|
package/styles/css/detail.css
CHANGED
|
@@ -147,17 +147,29 @@
|
|
|
147
147
|
flex-direction: column;
|
|
148
148
|
gap: 10px;
|
|
149
149
|
}
|
|
150
|
-
.gd-analytics-catalog-detail__content .gd-ui-kit-tabs {
|
|
151
|
-
background: transparent;
|
|
152
|
-
}
|
|
153
150
|
.gd-analytics-catalog-detail__content.lineage {
|
|
154
151
|
height: 100%;
|
|
155
152
|
}
|
|
156
153
|
.gd-analytics-catalog-detail__card {
|
|
154
|
+
gap: 10px;
|
|
155
|
+
display: flex;
|
|
156
|
+
flex-direction: column;
|
|
157
|
+
}
|
|
158
|
+
.gd-analytics-catalog-detail__card__top {
|
|
157
159
|
gap: 20px;
|
|
158
160
|
display: flex;
|
|
159
161
|
flex-direction: row;
|
|
160
162
|
}
|
|
163
|
+
.gd-analytics-catalog-detail__card__info {
|
|
164
|
+
display: flex;
|
|
165
|
+
gap: 20px;
|
|
166
|
+
}
|
|
167
|
+
.gd-analytics-catalog-detail__card__info__cell {
|
|
168
|
+
flex: 1 1 0;
|
|
169
|
+
min-width: 0;
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-direction: column;
|
|
172
|
+
}
|
|
161
173
|
.gd-analytics-catalog-detail__card__header {
|
|
162
174
|
gap: 10px;
|
|
163
175
|
flex-grow: 1;
|
|
@@ -252,6 +264,11 @@
|
|
|
252
264
|
.gd-analytics-catalog-detail__detail-actions .gd-dropdown {
|
|
253
265
|
display: flex;
|
|
254
266
|
}
|
|
267
|
+
.gd-analytics-catalog-detail__header-actions {
|
|
268
|
+
display: flex;
|
|
269
|
+
align-items: center;
|
|
270
|
+
gap: 10px;
|
|
271
|
+
}
|
|
255
272
|
.gd-analytics-catalog-detail__tab-content {
|
|
256
273
|
display: grid;
|
|
257
274
|
grid-template-columns: minmax(120px, auto) 1fr;
|
|
@@ -270,6 +287,53 @@
|
|
|
270
287
|
.gd-analytics-catalog-detail__tab-content__cell {
|
|
271
288
|
padding: 4px 0;
|
|
272
289
|
}
|
|
290
|
+
.gd-analytics-catalog-detail__labels {
|
|
291
|
+
padding: 0;
|
|
292
|
+
border: none;
|
|
293
|
+
background: transparent;
|
|
294
|
+
color: inherit;
|
|
295
|
+
font: inherit;
|
|
296
|
+
cursor: pointer;
|
|
297
|
+
text-align: left;
|
|
298
|
+
}
|
|
299
|
+
.gd-analytics-catalog-detail__labels__more {
|
|
300
|
+
text-decoration: underline;
|
|
301
|
+
}
|
|
302
|
+
.gd-analytics-catalog-detail__labels:hover {
|
|
303
|
+
color: var(--gd-palette-primary-base);
|
|
304
|
+
}
|
|
305
|
+
.gd-analytics-catalog-detail__access-row {
|
|
306
|
+
display: flex;
|
|
307
|
+
flex-wrap: wrap;
|
|
308
|
+
align-items: center;
|
|
309
|
+
gap: 10px;
|
|
310
|
+
}
|
|
311
|
+
.gd-analytics-catalog-detail__access-row__chip {
|
|
312
|
+
display: inline-flex;
|
|
313
|
+
align-items: center;
|
|
314
|
+
gap: 7px;
|
|
315
|
+
padding: 0;
|
|
316
|
+
background: transparent;
|
|
317
|
+
border: none;
|
|
318
|
+
color: var(--gd-palette-complementary-8);
|
|
319
|
+
font: inherit;
|
|
320
|
+
}
|
|
321
|
+
.gd-analytics-catalog-detail__access-row__chip-icon {
|
|
322
|
+
display: inline-flex;
|
|
323
|
+
align-items: center;
|
|
324
|
+
justify-content: center;
|
|
325
|
+
width: 26px;
|
|
326
|
+
height: 26px;
|
|
327
|
+
border-radius: 50%;
|
|
328
|
+
background: var(--gd-palette-complementary-2);
|
|
329
|
+
}
|
|
330
|
+
.gd-analytics-catalog-detail__access-row__shared-link {
|
|
331
|
+
cursor: pointer;
|
|
332
|
+
text-decoration: underline;
|
|
333
|
+
}
|
|
334
|
+
.gd-analytics-catalog-detail__access-row__shared-link:hover {
|
|
335
|
+
color: var(--gd-palette-primary-base);
|
|
336
|
+
}
|
|
273
337
|
.gd-analytics-catalog-detail__granularities {
|
|
274
338
|
margin: 0;
|
|
275
339
|
padding: 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../scss/objectType.scss","../scss/parameter.scss","../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss","../scss/detail.scss"],"names":[],"mappings":"AAKI;EAEI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EAEI;;AAGJ;EACI;;;ACrBR;EACI;EACA;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI,cC3BU;;AD+BlB;EACI;;AAGJ;EACI;EACA;EACA;EACA;;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA,OC7GiB;ED8GjB;EACA;EACA;;AAEA;EACI;;;AE9GR;EACI,aDwFc;ECvFd,WAJgB;EAKhB,OAVI;EAWJ;;AAEA;EANJ;IAOQ;;;AAGJ;EAEI;EACA;;AAGJ;EACI;EACA;EACA;;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/objectType.scss","../scss/parameter.scss","../../node_modules/@gooddata/sdk-ui-kit/styles/scss/variables.scss","../scss/detail.scss"],"names":[],"mappings":"AAKI;EAEI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EAEI;;AAGJ;EACI;;;ACrBR;EACI;EACA;EACA;EACA;EACA;;AAGA;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI,cC3BU;;AD+BlB;EACI;;AAGJ;EACI;EACA;EACA;EACA;;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA,OC7GiB;ED8GjB;EACA;EACA;;AAEA;EACI;;;AE9GR;EACI,aDwFc;ECvFd,WAJgB;EAKhB,OAVI;EAWJ;;AAEA;EANJ;IAOQ;;;AAGJ;EAEI;EACA;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAIR;EACI;EACA;EACA;;AAGA;EACI;EACA;EACA;;AAIJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA,ODzCA;EC0CA,WAtEE;EAuEF,aAtES;EAuET;EACA;;AAEA;EACI;;AAOJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI,OD3EG;;AC8EP;EACI;EACA,OD7EJ;EC8EI;EACA;;AAGJ;EAEI;;AAGJ;EACI;EACA;EACA;EACA;;AAIR;EACI;;AAEA;EACI,ODnGJ;ECoGI,aAzHQ;EA0HR,WA3HC;EA4HD;EACA;EACA;;AAGJ;EACI,ODxGJ;ECyGI,WAjIA;EAkIA;EACA;EACA;EACA;EACA;;AAGJ;EACI,ODzHG;;AC4HP;EACI;EACA,OD3HJ;;AC+HJ;EACI;;AAEA;EACI;;AAKZ;EACI;EACA;;AAIR;EACI;EACA;EACA;;AAEA;EACI;;AAKR;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEI;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAMR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA,OD/PQ;ECgQR;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAKJ;EACI;;AAGJ;EACI;EACA;;AAKJ;EACI;;AAGJ;EACI,OD/RW;;ACkSf;EACI;EACA,ODjSI;;ACqSZ;EACI,ODlSQ;ECmSR;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAEA;EACI,ODrTW;ECsTX;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAEJ;EACI;EACA;;AAEJ;EACI;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAIR;EACI,MD3XS;;AC6Xb;AAAA;EAEI,MD9XQ;;ACgYZ;AAAA;EAEI,MDhYO;;ACkYX;EACI;;AAEJ;EACI;;AAGJ;EACI,QDzXW;;;AC+XnB;EACI;EACA;EACA;EACA;EACA;EACA;EACA,kBD5YS;EC6YT;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGI;EACI;EACA;;AAIR;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA,kBD7bK;EC8bL;EACA;EACA,ODnbI;;ACqbJ;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI","file":"detail.css"}
|