@gooddata/sdk-ui-catalog 11.46.0-alpha.2 → 11.46.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/AnalyticsCatalogDetail.d.ts.map +1 -1
- package/esm/AnalyticsCatalogDetail.js +2 -1
- package/esm/catalog/Catalog.d.ts.map +1 -1
- package/esm/catalog/Catalog.js +5 -2
- package/esm/catalogDetail/CatalogDetailActionBar.d.ts +6 -4
- package/esm/catalogDetail/CatalogDetailActionBar.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailActionBar.js +5 -6
- package/esm/catalogDetail/CatalogDetailActions.d.ts +2 -1
- package/esm/catalogDetail/CatalogDetailActions.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailActions.js +6 -2
- package/esm/catalogDetail/CatalogDetailContent.d.ts.map +1 -1
- package/esm/catalogDetail/CatalogDetailContent.js +3 -1
- package/esm/catalogItem/query.d.ts +7 -2
- package/esm/catalogItem/query.d.ts.map +1 -1
- package/esm/catalogItem/query.js +16 -1
- package/esm/header/CreateObjectButton.d.ts +2 -1
- package/esm/header/CreateObjectButton.d.ts.map +1 -1
- package/esm/header/CreateObjectButton.js +42 -38
- package/esm/localization/bundles/en-US.localization-bundle.d.ts +112 -0
- package/esm/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/localization/bundles/en-US.localization-bundle.js +112 -0
- package/esm/main/Main.d.ts.map +1 -1
- package/esm/main/Main.js +2 -3
- package/esm/metric/MetricCreateDialog.d.ts +11 -0
- package/esm/metric/MetricCreateDialog.d.ts.map +1 -0
- package/esm/metric/MetricCreateDialog.js +55 -0
- package/esm/metric/MetricDeleteDialog.d.ts +9 -0
- package/esm/metric/MetricDeleteDialog.d.ts.map +1 -0
- package/esm/metric/MetricDeleteDialog.js +68 -0
- package/esm/metric/MetricDetailActions.d.ts +23 -0
- package/esm/metric/MetricDetailActions.d.ts.map +1 -0
- package/esm/metric/MetricDetailActions.js +101 -0
- package/esm/metric/MetricDialog.d.ts +14 -0
- package/esm/metric/MetricDialog.d.ts.map +1 -0
- package/esm/metric/MetricDialog.js +100 -0
- package/esm/metric/MetricEditDialog.d.ts +11 -0
- package/esm/metric/MetricEditDialog.d.ts.map +1 -0
- package/esm/metric/MetricEditDialog.js +51 -0
- package/esm/metric/MetricMutationContext.d.ts +16 -0
- package/esm/metric/MetricMutationContext.d.ts.map +1 -0
- package/esm/metric/MetricMutationContext.js +32 -0
- package/esm/metric/MetricYamlEditor.d.ts +8 -0
- package/esm/metric/MetricYamlEditor.d.ts.map +1 -0
- package/esm/metric/MetricYamlEditor.js +20 -0
- package/esm/metric/gate.d.ts +9 -0
- package/esm/metric/gate.d.ts.map +1 -0
- package/esm/metric/gate.js +16 -0
- package/esm/metric/metricCompletions.d.ts +7 -0
- package/esm/metric/metricCompletions.d.ts.map +1 -0
- package/esm/metric/metricCompletions.js +59 -0
- package/esm/metric/metricConverter.d.ts +49 -0
- package/esm/metric/metricConverter.d.ts.map +1 -0
- package/esm/metric/metricConverter.js +101 -0
- package/esm/metric/metricCopy.d.ts +4 -0
- package/esm/metric/metricCopy.d.ts.map +1 -0
- package/esm/metric/metricCopy.js +60 -0
- package/esm/metric/metricMutationPort.d.ts +18 -0
- package/esm/metric/metricMutationPort.d.ts.map +1 -0
- package/esm/metric/metricMutationPort.js +39 -0
- package/esm/metric/metricSchema.d.ts +29 -0
- package/esm/metric/metricSchema.d.ts.map +1 -0
- package/esm/metric/metricSchema.js +30 -0
- package/esm/metric/metricSerialization.d.ts +10 -0
- package/esm/metric/metricSerialization.d.ts.map +1 -0
- package/esm/metric/metricSerialization.js +33 -0
- package/esm/metric/metricValidation.d.ts +15 -0
- package/esm/metric/metricValidation.d.ts.map +1 -0
- package/esm/metric/metricValidation.js +47 -0
- package/esm/metric/metricYamlLinter.d.ts +7 -0
- package/esm/metric/metricYamlLinter.d.ts.map +1 -0
- package/esm/metric/metricYamlLinter.js +13 -0
- package/esm/metric/tests/metricMutationPort.test.utils.d.ts +7 -0
- package/esm/metric/tests/metricMutationPort.test.utils.d.ts.map +1 -0
- package/esm/metric/tests/metricMutationPort.test.utils.js +43 -0
- package/esm/parameter/ParameterDialog.d.ts.map +1 -1
- package/esm/parameter/ParameterDialog.js +7 -7
- package/esm/parameter/ParameterYamlEditor.js +1 -1
- package/esm/parameter/yamlLinter.d.ts +1 -4
- package/esm/parameter/yamlLinter.d.ts.map +1 -1
- package/esm/parameter/yamlLinter.js +3 -24
- package/esm/utils/backendError.d.ts +11 -0
- package/esm/utils/backendError.d.ts.map +1 -0
- package/esm/utils/backendError.js +21 -0
- package/esm/utils/yamlSyntaxLinter.d.ts +11 -0
- package/esm/utils/yamlSyntaxLinter.d.ts.map +1 -0
- package/esm/utils/yamlSyntaxLinter.js +31 -0
- package/package.json +15 -14
- package/styles/css/{parameter.css → codeDialog.css} +26 -18
- package/styles/css/codeDialog.css.map +1 -0
- package/styles/css/detail.css +25 -17
- package/styles/css/detail.css.map +1 -1
- package/styles/css/main.css +25 -17
- package/styles/css/main.css.map +1 -1
- package/styles/scss/{parameter.scss → codeDialog.scss} +17 -8
- package/styles/scss/detail.scss +1 -1
- package/styles/css/parameter.css.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsCatalogDetail.d.ts","sourceRoot":"","sources":["../src/AnalyticsCatalogDetail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAEH,KAAK,0BAA0B,EAClC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalyticsCatalogDetail.d.ts","sourceRoot":"","sources":["../src/AnalyticsCatalogDetail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAEH,KAAK,0BAA0B,EAClC,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOxD;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,YAAY,CAAC;IACtG;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,OAAO,EACP,SAAS,EACT,MAAM,EACN,GAAG,SAAS,EACf,EAAE,4BAA4B,2CAM9B;AAED;;GAEG;AACH,MAAM,WAAW,mCAAoC,SAAQ,IAAI,CAC7D,0BAA0B,EAC1B,UAAU,GAAG,YAAY,CAC5B;IACG;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC3E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAC1C,OAAO,EACP,SAAS,EACT,MAAM,EACN,GAAG,SAAS,EACf,EAAE,mCAAmC,2CAMrC"}
|
|
@@ -5,6 +5,7 @@ import { CatalogDetail } from "./catalogDetail/CatalogDetail.js";
|
|
|
5
5
|
import { CatalogDetailContent, } from "./catalogDetail/CatalogDetailContent.js";
|
|
6
6
|
import { CatalogResourceProvider } from "./catalogResource/CatalogResourceProvider.js";
|
|
7
7
|
import { IntlWrapper } from "./localization/IntlWrapper.js";
|
|
8
|
+
import { MetricMutationProvider } from "./metric/MetricMutationContext.js";
|
|
8
9
|
import {} from "./objectType/types.js";
|
|
9
10
|
import { OverlayProvider } from "./overlay/OverlayProvider.js";
|
|
10
11
|
import { ParameterMutationProvider } from "./parameter/ParameterMutationContext.js";
|
|
@@ -27,5 +28,5 @@ function Providers(props) {
|
|
|
27
28
|
const backend = useBackendStrict(props.backend);
|
|
28
29
|
const workspace = useWorkspaceStrict(props.workspace);
|
|
29
30
|
const permissionsState = usePermissionsQuery({ backend, workspace });
|
|
30
|
-
return (_jsx(BackendProvider, { backend: backend, children: _jsx(WorkspaceProvider, { workspace: workspace, children: _jsx(IntlWrapper, { locale: props.locale, children: _jsx(ToastsCenterContextProvider, { children: _jsx(OverlayProvider, { children: _jsx(PermissionsProvider, { permissionsState: permissionsState, children: _jsx(QualityProvider, { backend: backend, workspace: workspace, children: _jsx(CatalogResourceProvider, { backend: backend, workspace: workspace, children: _jsx(ParameterMutationProvider, { children: props.children }) }) }) }) }) }) }) }) }));
|
|
31
|
+
return (_jsx(BackendProvider, { backend: backend, children: _jsx(WorkspaceProvider, { workspace: workspace, children: _jsx(IntlWrapper, { locale: props.locale, children: _jsx(ToastsCenterContextProvider, { children: _jsx(OverlayProvider, { children: _jsx(PermissionsProvider, { permissionsState: permissionsState, children: _jsx(QualityProvider, { backend: backend, workspace: workspace, children: _jsx(CatalogResourceProvider, { backend: backend, workspace: workspace, children: _jsx(ParameterMutationProvider, { children: _jsx(MetricMutationProvider, { children: props.children }) }) }) }) }) }) }) }) }) }));
|
|
31
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Catalog.d.ts","sourceRoot":"","sources":["../../src/catalog/Catalog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Catalog.d.ts","sourceRoot":"","sources":["../../src/catalog/Catalog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAYtE,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,sBAAsB,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnF,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/E,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAClE,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACpB,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACjB,EAAE,KAAK,2CAwEP"}
|
package/esm/catalog/Catalog.js
CHANGED
|
@@ -10,6 +10,8 @@ import { CreateObjectButton } from "../header/CreateObjectButton.js";
|
|
|
10
10
|
import { Header } from "../header/Header.js";
|
|
11
11
|
import { useCatalogItemOpen } from "../main/hooks/useCatalogItemOpen.js";
|
|
12
12
|
import { Main } from "../main/Main.js";
|
|
13
|
+
import { useCanManageMetric } from "../metric/gate.js";
|
|
14
|
+
import { MetricMutationProvider } from "../metric/MetricMutationContext.js";
|
|
13
15
|
import { useCanManageParameter } from "../parameter/gate.js";
|
|
14
16
|
import { ParameterMutationProvider } from "../parameter/ParameterMutationContext.js";
|
|
15
17
|
import { PermissionsGate } from "../permission/PermissionsGate.js";
|
|
@@ -22,6 +24,7 @@ import { Layout } from "./Layout.js";
|
|
|
22
24
|
export function Catalog({ openCatalogItemRef, backend, workspace, onCatalogItemOpenClick, onCatalogItemNavigation, onCatalogDetailOpened, onCatalogDetailClosed, onCreateObject, }) {
|
|
23
25
|
const intl = useIntl();
|
|
24
26
|
const showParameter = useCanManageParameter();
|
|
27
|
+
const showMetricEditor = useCanManageMetric();
|
|
25
28
|
const isTrendingEnabled = useIsCatalogTrendingObjectsEnabled();
|
|
26
29
|
const isQualityEnabled = useIsCatalogQualityEnabled();
|
|
27
30
|
const { open, openedItem, setItemOpened, onOpenDetail, onCloseDetail, onOpenClick } = useCatalogItemOpen(onCatalogItemOpenClick, onCatalogDetailOpened, onCatalogDetailClosed, openCatalogItemRef);
|
|
@@ -29,6 +32,6 @@ export function Catalog({ openCatalogItemRef, backend, workspace, onCatalogItemO
|
|
|
29
32
|
id: "analyticsCatalog.error.unknown.description",
|
|
30
33
|
}) }), unauthorizedNode: _jsx(ErrorComponent, { message: intl.formatMessage({ id: "analyticsCatalog.error.unauthorized.message" }), description: intl.formatMessage({
|
|
31
34
|
id: "analyticsCatalog.error.unauthorized.description",
|
|
32
|
-
}) }), children: _jsx(CatalogFeedProvider, { backend: backend, workspace: workspace, children:
|
|
33
|
-
|
|
35
|
+
}) }), children: _jsx(CatalogFeedProvider, { backend: backend, workspace: workspace, children: _jsx(ParameterMutationProvider, { children: _jsxs(MetricMutationProvider, { children: [_jsx(Header, { searchNode: _jsx(FullTextSearchInput, {}), createNode: onCreateObject ? (_jsx(CreateObjectButton, { onCreateObject: onCreateObject, showParameter: showParameter, showMetricEditor: showMetricEditor })) : null }), isTrendingEnabled ? (_jsx(CatalogTabs, { onItemClick: onOpenDetail })) : isQualityEnabled ? (_jsx(QualityScoreCard, {})) : null, _jsx(Main, { workspace: workspace, backend: backend, open: open, openedItem: openedItem, setItemOpened: setItemOpened, onOpenDetail: onOpenDetail, onCloseDetail: onCloseDetail, onOpenClick: onOpenClick, onCatalogItemNavigation: onCatalogItemNavigation })
|
|
36
|
+
] }) }) }) }) }));
|
|
34
37
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { type MouseEvent } from "react";
|
|
1
|
+
import { type KeyboardEvent, type MouseEvent, type ReactNode } from "react";
|
|
2
2
|
import type { ICatalogItem } from "../catalogItem/types.js";
|
|
3
3
|
import type { EditHandlerEvent, ICatalogDetailAction } from "./types.js";
|
|
4
4
|
export type ICatalogDetailActionBarProps = {
|
|
5
5
|
item: ICatalogItem;
|
|
6
6
|
workspaceId: string;
|
|
7
7
|
actions: ICatalogDetailAction[];
|
|
8
|
+
/** Rendered before the Edit button (e.g. a Share button). */
|
|
9
|
+
leadingActions?: ReactNode;
|
|
8
10
|
onEditClick?: (event: MouseEvent, editClickEvent: EditHandlerEvent) => void;
|
|
9
|
-
onActionsMenuSelect: (actionId: string) => void;
|
|
11
|
+
onActionsMenuSelect: (actionId: string, event: MouseEvent | KeyboardEvent) => void;
|
|
10
12
|
};
|
|
11
13
|
/**
|
|
12
|
-
* Detail action bar: primary Edit button
|
|
14
|
+
* Detail action bar: optional leading actions, a primary Edit button, and an item actions menu.
|
|
13
15
|
*/
|
|
14
|
-
export declare function CatalogDetailActionBar({ item, workspaceId, actions, onEditClick, onActionsMenuSelect }: ICatalogDetailActionBarProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function CatalogDetailActionBar({ item, workspaceId, actions, leadingActions, onEditClick, onActionsMenuSelect }: ICatalogDetailActionBarProps): import("react/jsx-runtime").JSX.Element;
|
|
15
17
|
//# sourceMappingURL=CatalogDetailActionBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDetailActionBar.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActionBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAW,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CatalogDetailActionBar.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActionBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAOrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAUzE,MAAM,MAAM,4BAA4B,GAAG;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,6DAA6D;IAC7D,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC;CACtF,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,IAAI,EACJ,WAAW,EACX,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACtB,EAAE,4BAA4B,2CAwE9B"}
|
|
@@ -8,9 +8,9 @@ const messages = defineMessages({
|
|
|
8
8
|
actionsMenuAriaLabel: { id: "analyticsCatalog.catalogItem.actionsMenu.ariaLabel" },
|
|
9
9
|
});
|
|
10
10
|
/**
|
|
11
|
-
* Detail action bar: primary Edit button
|
|
11
|
+
* Detail action bar: optional leading actions, a primary Edit button, and an item actions menu.
|
|
12
12
|
*/
|
|
13
|
-
export function CatalogDetailActionBar({ item, workspaceId, actions, onEditClick, onActionsMenuSelect, }) {
|
|
13
|
+
export function CatalogDetailActionBar({ item, workspaceId, actions, leadingActions, onEditClick, onActionsMenuSelect, }) {
|
|
14
14
|
const intl = useIntl();
|
|
15
15
|
const actionsMenuItems = useMemo(() => {
|
|
16
16
|
return actions.map((action) => ({
|
|
@@ -21,8 +21,7 @@ export function CatalogDetailActionBar({ item, workspaceId, actions, onEditClick
|
|
|
21
21
|
isDestructive: action.isDestructive,
|
|
22
22
|
}));
|
|
23
23
|
}, [actions]);
|
|
24
|
-
return (_jsxs("div", { className: "gd-analytics-catalog-detail__detail-actions", children: [
|
|
25
|
-
_jsx(UiButton, { label: intl.formatMessage({ id: "analyticsCatalog.edit" }), variant: "primary", size: "medium", onClick: (event) => {
|
|
24
|
+
return (_jsxs("div", { className: "gd-analytics-catalog-detail__detail-actions", children: [leadingActions, _jsx(UiButton, { label: intl.formatMessage({ id: "analyticsCatalog.edit" }), variant: "primary", size: "medium", onClick: (event) => {
|
|
26
25
|
onEditClick?.(event, {
|
|
27
26
|
item,
|
|
28
27
|
workspaceId,
|
|
@@ -39,9 +38,9 @@ export function CatalogDetailActionBar({ item, workspaceId, actions, onEditClick
|
|
|
39
38
|
ariaExpanded: ariaAttributes["aria-expanded"],
|
|
40
39
|
ariaHaspopup: ariaAttributes["aria-haspopup"],
|
|
41
40
|
ariaControls: ariaAttributes["aria-controls"],
|
|
42
|
-
} })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { items: actionsMenuItems, minWidth: 140, onClose: closeDropdown, onSelect: (menuItem) => {
|
|
41
|
+
} })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { items: actionsMenuItems, minWidth: 140, onClose: closeDropdown, onSelect: (menuItem, event) => {
|
|
43
42
|
closeDropdown();
|
|
44
|
-
onActionsMenuSelect(menuItem.data.id);
|
|
43
|
+
onActionsMenuSelect(menuItem.data.id, event);
|
|
45
44
|
}, ariaAttributes: ariaAttributes, itemDataTestId: getItemDataTestId, containerTopPadding: "small", containerBottomPadding: "small" })), closeOnEscape: true, autofocusOnOpen: true })] }));
|
|
46
45
|
}
|
|
47
46
|
function getItemDataTestId(menuItem) {
|
|
@@ -7,6 +7,7 @@ import type { OpenHandlerEvent } from "./types.js";
|
|
|
7
7
|
export interface ICatalogDetailActionsProps {
|
|
8
8
|
item: ICatalogItem;
|
|
9
9
|
canEdit: boolean;
|
|
10
|
+
isMetricEditorEnabled?: boolean;
|
|
10
11
|
onOpen?: (event: MouseEvent, openEvent: OpenHandlerEvent) => void;
|
|
11
12
|
onCatalogItemCreate?: (item: ICatalogItem) => void;
|
|
12
13
|
onCatalogItemUpdate?: (item: ICatalogItem) => void;
|
|
@@ -15,5 +16,5 @@ export interface ICatalogDetailActionsProps {
|
|
|
15
16
|
/**
|
|
16
17
|
* @internal
|
|
17
18
|
*/
|
|
18
|
-
export declare function CatalogDetailActions({ item, canEdit, onOpen, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete }: ICatalogDetailActionsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
19
|
+
export declare function CatalogDetailActions({ item, canEdit, isMetricEditorEnabled, onOpen, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete }: ICatalogDetailActionsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
19
20
|
//# sourceMappingURL=CatalogDetailActions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDetailActions.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAkC,MAAM,OAAO,CAAC;AAUxE,OAAO,KAAK,EAAE,YAAY,EAAyB,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"CatalogDetailActions.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAkC,MAAM,OAAO,CAAC;AAUxE,OAAO,KAAK,EAAE,YAAY,EAAyB,eAAe,EAAE,MAAM,yBAAyB,CAAC;AASpG,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAczE;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CACxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,IAAI,EACJ,OAAO,EACP,qBAAqB,EACrB,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACtB,EAAE,0BAA0B,kDA4J5B"}
|
|
@@ -5,7 +5,8 @@ import { defineMessages, useIntl } from "react-intl";
|
|
|
5
5
|
import { useWorkspaceStrict } from "@gooddata/sdk-ui";
|
|
6
6
|
import { UiButton } from "@gooddata/sdk-ui-kit";
|
|
7
7
|
import { catalogDetailActionDelete, catalogDetailActionDuplicate } from "../automation/testIds.js";
|
|
8
|
-
import { isCatalogItemParameter } from "../catalogItem/guards.js";
|
|
8
|
+
import { isCatalogItemMeasure, isCatalogItemParameter } from "../catalogItem/guards.js";
|
|
9
|
+
import { MetricDetailActions } from "../metric/MetricDetailActions.js";
|
|
9
10
|
import { ParameterCreateDialog } from "../parameter/ParameterCreateDialog.js";
|
|
10
11
|
import { ParameterDeleteDialog } from "../parameter/ParameterDeleteDialog.js";
|
|
11
12
|
import { ParameterEditDialog } from "../parameter/ParameterEditDialog.js";
|
|
@@ -19,7 +20,7 @@ const messages = defineMessages({
|
|
|
19
20
|
/**
|
|
20
21
|
* @internal
|
|
21
22
|
*/
|
|
22
|
-
export function CatalogDetailActions({ item, canEdit, onOpen, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, }) {
|
|
23
|
+
export function CatalogDetailActions({ item, canEdit, isMetricEditorEnabled, onOpen, onCatalogItemCreate, onCatalogItemUpdate, onCatalogItemDelete, }) {
|
|
23
24
|
const intl = useIntl();
|
|
24
25
|
const workspaceId = useWorkspaceStrict();
|
|
25
26
|
const [dialog, setDialog] = useState(undefined);
|
|
@@ -87,6 +88,9 @@ export function CatalogDetailActions({ item, canEdit, onOpen, onCatalogItemCreat
|
|
|
87
88
|
return (_jsxs(_Fragment, { children: [
|
|
88
89
|
_jsx(CatalogDetailActionBar, { item: item, workspaceId: workspaceId, actions: parameterActions, onEditClick: handleEditOpen, onActionsMenuSelect: handleActionsMenuSelect }), dialog?.kind === "edit" ? (_jsx(ParameterEditDialog, { item: dialog.item, onClose: closeDialog, onSaved: handleSaved, onDuplicate: handleEditDuplicate })) : null, dialog?.kind === "duplicate" ? (_jsx(ParameterCreateDialog, { sourceItem: dialog.item, onClose: closeDialog, onCreated: handleCreated })) : null, dialog?.kind === "delete" ? (_jsx(ParameterDeleteDialog, { item: dialog.item, onClose: closeDialog, onDeleted: handleDeleted })) : null] }));
|
|
89
90
|
}
|
|
91
|
+
if (isCatalogItemMeasure(item) && isMetricEditorEnabled && canEdit) {
|
|
92
|
+
return (_jsx(MetricDetailActions, { item: item, onOpen: onOpen, canShare: share.active, onShare: share.open, onCatalogItemCreate: onCatalogItemCreate, onCatalogItemUpdate: onCatalogItemUpdate, onCatalogItemDelete: onCatalogItemDelete }));
|
|
93
|
+
}
|
|
90
94
|
return (_jsxs("div", { className: "gd-analytics-catalog-detail__header-actions", children: [share.active ? _jsx(ShareButton, { onClick: share.open }) : null, _jsx(UiButton, { label: intl.formatMessage({ id: "analyticsCatalog.catalogItem.open" }), variant: "primary", accessibilityConfig: { role: "link" }, onClick: (event) => {
|
|
91
95
|
onOpen?.(event, {
|
|
92
96
|
item,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDetailContent.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,OAAO,CAAC;AAUtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"CatalogDetailContent.d.ts","sourceRoot":"","sources":["../../src/catalogDetail/CatalogDetailContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAgC,MAAM,OAAO,CAAC;AAUtE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAIlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IACzD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;IACrD;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EAC1B,EAAE,0BAA0B,2CAsN5B"}
|
|
@@ -10,6 +10,7 @@ import { canEditCatalogItem } from "../catalogItem/permission.js";
|
|
|
10
10
|
import {} from "../catalogItem/types.js";
|
|
11
11
|
import { useIsCertificationAllowed } from "../certification/gate.js";
|
|
12
12
|
import { useIsLineageEnabled } from "../lineage/gate.js";
|
|
13
|
+
import { useIsCatalogMetricEditorEnabled } from "../metric/gate.js";
|
|
13
14
|
import {} from "../objectType/types.js";
|
|
14
15
|
import { usePermissionsState } from "../permission/PermissionsContext.js";
|
|
15
16
|
import { useIsCatalogDescriptionGenerationEnabled, useIsCatalogQualityEnabled } from "../quality/gate.js";
|
|
@@ -61,6 +62,7 @@ export function CatalogDetailContent({ objectId, objectType, objectDefinition, o
|
|
|
61
62
|
const enableMetricFormatOverrides = Boolean(settings?.["enableMetricFormatOverrides"]);
|
|
62
63
|
const currencyFormatOverride = settings?.currencyFormatOverride ?? null;
|
|
63
64
|
const isDescriptionGenerationEnabled = useIsCatalogDescriptionGenerationEnabled();
|
|
65
|
+
const isMetricEditorEnabled = useIsCatalogMetricEditorEnabled();
|
|
64
66
|
// Quality
|
|
65
67
|
const { status: qualityStatus } = useQualityReportState();
|
|
66
68
|
const isQualityEnabled = useIsCatalogQualityEnabled();
|
|
@@ -114,7 +116,7 @@ export function CatalogDetailContent({ objectId, objectType, objectDefinition, o
|
|
|
114
116
|
_jsx(CatalogDetailStatus, { status: status, error: error, children: item ? (_jsxs("div", { className: cx("gd-analytics-catalog-detail__content", {
|
|
115
117
|
lineage: selectedTabId === Tabs.LINEAGE,
|
|
116
118
|
}), children: [
|
|
117
|
-
_jsx(CatalogDetailHeader, { item: item, canEdit: canEdit, updateItemTitle: updateItemTitle, updateItemDescription: updateItemDescription, isDescriptionGenerationEnabled: isDescriptionGenerationEnabled, headerRef: headerRef, labels: shareableItem ? shareLabels.labels : undefined, labelsLoading: shareableItem ? shareLabels.loading : false, showInfoRow: enableColumnLevelPermissions, actions: _jsx(CatalogDetailActions, { item: item, canEdit: canEdit, onOpen: onOpenClick, onCatalogItemCreate: onCatalogItemCreate, onCatalogItemUpdate: applyItemUpdate, onCatalogItemDelete: applyItemDelete }) }), _jsx(UiTabs, { size: "large", tabs: tabs, onTabSelect: (tab) => setSelectedTabId(tab.id), selectedTabId: selectedTabId }), selectedTabId === Tabs.METADATA && (_jsx(CatalogDetailTabMetadata, { item: item, canEdit: canEdit,
|
|
119
|
+
_jsx(CatalogDetailHeader, { item: item, canEdit: canEdit, updateItemTitle: updateItemTitle, updateItemDescription: updateItemDescription, isDescriptionGenerationEnabled: isDescriptionGenerationEnabled, headerRef: headerRef, labels: shareableItem ? shareLabels.labels : undefined, labelsLoading: shareableItem ? shareLabels.loading : false, showInfoRow: enableColumnLevelPermissions, actions: _jsx(CatalogDetailActions, { item: item, canEdit: canEdit, isMetricEditorEnabled: isMetricEditorEnabled, onOpen: onOpenClick, onCatalogItemCreate: onCatalogItemCreate, onCatalogItemUpdate: applyItemUpdate, onCatalogItemDelete: applyItemDelete }) }), _jsx(UiTabs, { size: "large", tabs: tabs, onTabSelect: (tab) => setSelectedTabId(tab.id), selectedTabId: selectedTabId }), selectedTabId === Tabs.METADATA && (_jsx(CatalogDetailTabMetadata, { item: item, canEdit: canEdit,
|
|
118
120
|
// With OLP off the dataset isn't relocated to the header,
|
|
119
121
|
// so keep the Dataset row in the metadata tab.
|
|
120
122
|
showDatasetRow: !enableColumnLevelPermissions, onTagClick: (tag) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AnalyticsCatalogGenerateDescriptionObjectType, IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
|
|
2
|
-
import { type IParameterMetadataObjectDefinition, type ObjRef } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IMeasureMetadataObject, type IMeasureMetadataObjectDefinition, type IParameterMetadataObjectDefinition, type ObjRef } from "@gooddata/sdk-model";
|
|
3
3
|
import type { ObjectType } from "../objectType/types.js";
|
|
4
4
|
import type { ICatalogItem, ICatalogItemParameter, ICatalogItemQueryOptions } from "./types.js";
|
|
5
5
|
/**
|
|
@@ -14,9 +14,14 @@ export declare function getParametersQuery({ backend, workspace, search, origin,
|
|
|
14
14
|
export declare function getAttributesQuery({ backend, workspace, search, origin, id, excludeId, tags, excludeTags, isHidden, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IAttributesQuery;
|
|
15
15
|
export declare function getFactsQuery({ backend, workspace, search, origin, id, excludeId, tags, excludeTags, isHidden, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IFactsQuery;
|
|
16
16
|
export declare function getDateDatasetsQuery({ backend, workspace, search, origin, id, excludeId, tags, excludeTags, isHidden, pageSize }: ICatalogItemQueryOptions): import("@gooddata/sdk-backend-spi").IDatasetsQuery;
|
|
17
|
-
export declare function updateCatalogItem(backend: IAnalyticalBackend, workspace: string, item: ICatalogItem): Promise<import("@gooddata/sdk-model").IAttributeMetadataObject> | Promise<import("@gooddata/sdk-model").IDashboard<import("@gooddata/sdk-model").IDashboardWidget>> | Promise<import("@gooddata/sdk-model").IDataSetMetadataObject> | Promise<import("@gooddata/sdk-model").IFactMetadataObject> | Promise<import("@gooddata/sdk-model").IParameterMetadataObject> | Promise<import("@gooddata/sdk-model").IInsight> | Promise<
|
|
17
|
+
export declare function updateCatalogItem(backend: IAnalyticalBackend, workspace: string, item: ICatalogItem): Promise<import("@gooddata/sdk-model").IAttributeMetadataObject> | Promise<import("@gooddata/sdk-model").IDashboard<import("@gooddata/sdk-model").IDashboardWidget>> | Promise<import("@gooddata/sdk-model").IDataSetMetadataObject> | Promise<import("@gooddata/sdk-model").IFactMetadataObject> | Promise<import("@gooddata/sdk-model").IParameterMetadataObject> | Promise<import("@gooddata/sdk-model").IInsight> | Promise<IMeasureMetadataObject>;
|
|
18
18
|
export declare function createParameterCatalogItem(backend: IAnalyticalBackend, workspace: string, parameter: IParameterMetadataObjectDefinition): Promise<import("@gooddata/sdk-model").IParameterMetadataObject>;
|
|
19
19
|
export declare function updateParameterCatalogItem(backend: IAnalyticalBackend, workspace: string, item: ICatalogItemParameter): Promise<import("@gooddata/sdk-model").IParameterMetadataObject>;
|
|
20
20
|
export declare function deleteParameterCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<void>;
|
|
21
|
+
export declare function createMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, measure: IMeasureMetadataObjectDefinition): Promise<IMeasureMetadataObject>;
|
|
22
|
+
export declare function updateMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, measure: IMeasureMetadataObject): Promise<IMeasureMetadataObject>;
|
|
23
|
+
export declare function deleteMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<void>;
|
|
24
|
+
export declare function getMeasureCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<IMeasureMetadataObject>;
|
|
25
|
+
export declare function getMeasureReferencingObjectsCatalogItem(backend: IAnalyticalBackend, workspace: string, ref: ObjRef): Promise<import("@gooddata/sdk-backend-spi").IMeasureReferencing>;
|
|
21
26
|
export declare function updateCatalogItemCertification(backend: IAnalyticalBackend, workspace: string, item: Pick<ICatalogItem, "type" | "identifier" | "certification">): Promise<void>;
|
|
22
27
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,6CAA6C,EAC7C,kBAAkB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/catalogItem/query.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,6CAA6C,EAC7C,kBAAkB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,MAAM,EAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EACR,YAAY,EAOZ,qBAAqB,EACrB,wBAAwB,EAE3B,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,wCAAwC,CACpD,UAAU,EAAE,UAAU,GACvB,UAAU,IAAI,6CAA6C,CAQ7D;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,QAAQ,EACR,aAAa,EACb,QAAoB,EACvB,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,EACvB,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,EACvB,EAAE,wBAAwB,sDAsB1B;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,EACvB,EAAE,wBAAwB,wDAoB1B;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,EACvB,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,EACvB,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,EACvB,EAAE,wBAAwB,sDAuB1B;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,0bAmBnG;AAmGD,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,IAAI,EAAE,qBAAqB,mEAY9B;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAErG;AAED,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,mCAG5C;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"}
|
package/esm/catalogItem/query.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// (C) 2025-2026 GoodData Corporation
|
|
2
|
-
import { idRef } from "@gooddata/sdk-model";
|
|
2
|
+
import { idRef, } from "@gooddata/sdk-model";
|
|
3
3
|
const PAGE_SIZE = 50;
|
|
4
4
|
/**
|
|
5
5
|
* Type guard for catalog object types supported by AI description generation.
|
|
@@ -289,6 +289,21 @@ export function updateParameterCatalogItem(backend, workspace, item) {
|
|
|
289
289
|
export function deleteParameterCatalogItem(backend, workspace, ref) {
|
|
290
290
|
return backend.workspace(workspace).parameters().deleteParameter(ref);
|
|
291
291
|
}
|
|
292
|
+
export function createMeasureCatalogItem(backend, workspace, measure) {
|
|
293
|
+
return backend.workspace(workspace).measures().createMeasure(measure);
|
|
294
|
+
}
|
|
295
|
+
export function updateMeasureCatalogItem(backend, workspace, measure) {
|
|
296
|
+
return backend.workspace(workspace).measures().updateMeasure(measure);
|
|
297
|
+
}
|
|
298
|
+
export function deleteMeasureCatalogItem(backend, workspace, ref) {
|
|
299
|
+
return backend.workspace(workspace).measures().deleteMeasure(ref);
|
|
300
|
+
}
|
|
301
|
+
export function getMeasureCatalogItem(backend, workspace, ref) {
|
|
302
|
+
return backend.workspace(workspace).measures().getMeasure(ref);
|
|
303
|
+
}
|
|
304
|
+
export function getMeasureReferencingObjectsCatalogItem(backend, workspace, ref) {
|
|
305
|
+
return backend.workspace(workspace).measures().getMeasureReferencingObjects(ref);
|
|
306
|
+
}
|
|
292
307
|
export function updateCatalogItemCertification(backend, workspace, item) {
|
|
293
308
|
const ref = idRef(item.identifier, item.type);
|
|
294
309
|
switch (item.type) {
|
|
@@ -2,7 +2,8 @@ import type { CatalogCreateObjectType } from "../objectType/types.js";
|
|
|
2
2
|
type Props = {
|
|
3
3
|
onCreateObject: (objectType: CatalogCreateObjectType) => void;
|
|
4
4
|
showParameter?: boolean;
|
|
5
|
+
showMetricEditor?: boolean;
|
|
5
6
|
};
|
|
6
|
-
export declare function CreateObjectButton({ onCreateObject, showParameter }: Props): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function CreateObjectButton({ onCreateObject, showParameter, showMetricEditor }: Props): import("react/jsx-runtime").JSX.Element;
|
|
7
8
|
export {};
|
|
8
9
|
//# sourceMappingURL=CreateObjectButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateObjectButton.d.ts","sourceRoot":"","sources":["../../src/header/CreateObjectButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreateObjectButton.d.ts","sourceRoot":"","sources":["../../src/header/CreateObjectButton.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAetE,KAAK,KAAK,GAAG;IACT,cAAc,EAAE,CAAC,UAAU,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,EAAE,KAAK,2CA0H5F"}
|
|
@@ -4,6 +4,7 @@ import { useCallback, useMemo, useState } from "react";
|
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { Dropdown, SeparatorLine, UiButton, UiIcon, UiMenu, } from "@gooddata/sdk-ui-kit";
|
|
6
6
|
import { useCatalogFeedActions } from "../catalogItem/CatalogFeedContext.js";
|
|
7
|
+
import { MetricCreateDialog } from "../metric/MetricCreateDialog.js";
|
|
7
8
|
import { ObjectTypes } from "../objectType/constants.js";
|
|
8
9
|
import { getObjectTypeLabel } from "../objectType/labels.js";
|
|
9
10
|
import { ParameterCreateDialog } from "../parameter/ParameterCreateDialog.js";
|
|
@@ -13,63 +14,66 @@ const icons = {
|
|
|
13
14
|
[ObjectTypes.METRIC]: "metric",
|
|
14
15
|
[ObjectTypes.PARAMETER]: "parameter",
|
|
15
16
|
};
|
|
16
|
-
export function CreateObjectButton({ onCreateObject, showParameter }) {
|
|
17
|
+
export function CreateObjectButton({ onCreateObject, showParameter, showMetricEditor }) {
|
|
17
18
|
const intl = useIntl();
|
|
18
19
|
const { refetchObjectType } = useCatalogFeedActions();
|
|
19
20
|
const [isParameterDialogOpen, setIsParameterDialogOpen] = useState(false);
|
|
21
|
+
const [isMetricDialogOpen, setIsMetricDialogOpen] = useState(false);
|
|
20
22
|
const items = useMemo(() => {
|
|
21
23
|
const externalLinkIcon = _jsx(MenuItemIcon, { type: "externalLink" });
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
type: "interactive",
|
|
41
|
-
id: ObjectTypes.METRIC,
|
|
42
|
-
stringTitle: getObjectTypeLabel(intl, ObjectTypes.METRIC),
|
|
43
|
-
iconLeft: _jsx(MenuItemIcon, { type: icons[ObjectTypes.METRIC] }),
|
|
44
|
-
iconRight: externalLinkIcon,
|
|
45
|
-
data: ObjectTypes.METRIC,
|
|
46
|
-
},
|
|
24
|
+
const interactiveItem = (type, redirects) => ({
|
|
25
|
+
type: "interactive",
|
|
26
|
+
id: type,
|
|
27
|
+
stringTitle: getObjectTypeLabel(intl, type),
|
|
28
|
+
iconLeft: _jsx(MenuItemIcon, { type: icons[type] }),
|
|
29
|
+
// A redirect create leaves the catalog for the standalone editor; an in-catalog create
|
|
30
|
+
// opens a dialog and needs no external-link affordance.
|
|
31
|
+
iconRight: redirects ? externalLinkIcon : undefined,
|
|
32
|
+
data: type,
|
|
33
|
+
});
|
|
34
|
+
// A separator divides creates that redirect to a standalone editor from those handled inline
|
|
35
|
+
// in a catalog dialog. Metric switches sides: it redirects unless its in-catalog editor is on.
|
|
36
|
+
const redirectItems = [
|
|
37
|
+
interactiveItem(ObjectTypes.DASHBOARD, true),
|
|
38
|
+
interactiveItem(ObjectTypes.VISUALIZATION, true),
|
|
39
|
+
...(showMetricEditor ? [] : [interactiveItem(ObjectTypes.METRIC, true)]),
|
|
47
40
|
];
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
data: ObjectTypes.PARAMETER,
|
|
55
|
-
});
|
|
41
|
+
const inCatalogItems = [
|
|
42
|
+
...(showMetricEditor ? [interactiveItem(ObjectTypes.METRIC, false)] : []),
|
|
43
|
+
...(showParameter ? [interactiveItem(ObjectTypes.PARAMETER, false)] : []),
|
|
44
|
+
];
|
|
45
|
+
if (inCatalogItems.length === 0) {
|
|
46
|
+
return redirectItems;
|
|
56
47
|
}
|
|
57
|
-
return
|
|
58
|
-
|
|
48
|
+
return [
|
|
49
|
+
...redirectItems,
|
|
50
|
+
{ type: "static", data: _jsx(SeparatorLine, { pT: 5, pR: 10, pB: 4, pL: 10 }) },
|
|
51
|
+
...inCatalogItems,
|
|
52
|
+
];
|
|
53
|
+
}, [intl, showParameter, showMetricEditor]);
|
|
59
54
|
const handleSelect = useCallback((item, _event) => {
|
|
60
55
|
if (item.data === ObjectTypes.PARAMETER) {
|
|
61
56
|
setIsParameterDialogOpen(true);
|
|
62
57
|
}
|
|
58
|
+
else if (item.data === ObjectTypes.METRIC && showMetricEditor) {
|
|
59
|
+
setIsMetricDialogOpen(true);
|
|
60
|
+
}
|
|
63
61
|
else {
|
|
64
62
|
onCreateObject(item.data);
|
|
65
63
|
}
|
|
66
|
-
}, [onCreateObject]);
|
|
64
|
+
}, [onCreateObject, showMetricEditor]);
|
|
67
65
|
const handleParameterDialogClose = useCallback(() => {
|
|
68
66
|
setIsParameterDialogOpen(false);
|
|
69
67
|
}, []);
|
|
70
68
|
const handleParameterCreated = useCallback(() => {
|
|
71
69
|
void refetchObjectType(ObjectTypes.PARAMETER);
|
|
72
70
|
}, [refetchObjectType]);
|
|
71
|
+
const handleMetricDialogClose = useCallback(() => {
|
|
72
|
+
setIsMetricDialogOpen(false);
|
|
73
|
+
}, []);
|
|
74
|
+
const handleMetricCreated = useCallback(() => {
|
|
75
|
+
void refetchObjectType(ObjectTypes.METRIC);
|
|
76
|
+
}, [refetchObjectType]);
|
|
73
77
|
return (_jsxs(_Fragment, { children: [_jsx(Dropdown, { alignPoints: [{ align: "br tr" }], renderButton: ({ toggleDropdown, buttonRef, ariaAttributes, accessibilityConfig }) => (_jsx(UiButton, { ref: (element) => {
|
|
74
78
|
buttonRef.current = element;
|
|
75
79
|
}, label: intl.formatMessage({ id: "analyticsCatalog.create" }), onClick: toggleDropdown, variant: "primary", iconBefore: "plus", iconAfter: "navigateDown", accessibilityConfig: {
|
|
@@ -78,7 +82,7 @@ export function CreateObjectButton({ onCreateObject, showParameter }) {
|
|
|
78
82
|
ariaHaspopup: ariaAttributes["aria-haspopup"],
|
|
79
83
|
ariaControls: ariaAttributes["aria-controls"],
|
|
80
84
|
iconAriaHidden: true,
|
|
81
|
-
} })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { items: items, minWidth: 180, onClose: closeDropdown, onSelect: handleSelect, shouldCloseOnSelect: true, ariaAttributes: ariaAttributes, containerTopPadding: "small", containerBottomPadding: "small" })), closeOnEscape: true, autofocusOnOpen: true }), isParameterDialogOpen ? (_jsx(ParameterCreateDialog, { onClose: handleParameterDialogClose, onCreated: handleParameterCreated })) : null] }));
|
|
85
|
+
} })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { items: items, minWidth: 180, onClose: closeDropdown, onSelect: handleSelect, shouldCloseOnSelect: true, ariaAttributes: ariaAttributes, containerTopPadding: "small", containerBottomPadding: "small" })), closeOnEscape: true, autofocusOnOpen: true }), isParameterDialogOpen ? (_jsx(ParameterCreateDialog, { onClose: handleParameterDialogClose, onCreated: handleParameterCreated })) : null, isMetricDialogOpen ? (_jsx(MetricCreateDialog, { onClose: handleMetricDialogClose, onCreated: handleMetricCreated })) : null] }));
|
|
82
86
|
}
|
|
83
87
|
function MenuItemIcon({ type }) {
|
|
84
88
|
return _jsx(UiIcon, { type: type, size: 14, color: "complementary-5" });
|
|
@@ -759,6 +759,118 @@ export declare const en_US: {
|
|
|
759
759
|
text: string;
|
|
760
760
|
crowdinContext: string;
|
|
761
761
|
};
|
|
762
|
+
"analyticsCatalog.metric.dialog.create.title": {
|
|
763
|
+
text: string;
|
|
764
|
+
crowdinContext: string;
|
|
765
|
+
};
|
|
766
|
+
"analyticsCatalog.metric.dialog.edit.title": {
|
|
767
|
+
text: string;
|
|
768
|
+
crowdinContext: string;
|
|
769
|
+
};
|
|
770
|
+
"analyticsCatalog.metric.dialog.sectionHeader": {
|
|
771
|
+
text: string;
|
|
772
|
+
crowdinContext: string;
|
|
773
|
+
};
|
|
774
|
+
"analyticsCatalog.metric.dialog.sectionHeader.tooltip": {
|
|
775
|
+
text: string;
|
|
776
|
+
crowdinContext: string;
|
|
777
|
+
};
|
|
778
|
+
"analyticsCatalog.metric.dialog.create.submit": {
|
|
779
|
+
text: string;
|
|
780
|
+
crowdinContext: string;
|
|
781
|
+
};
|
|
782
|
+
"analyticsCatalog.metric.dialog.edit.submit": {
|
|
783
|
+
text: string;
|
|
784
|
+
crowdinContext: string;
|
|
785
|
+
};
|
|
786
|
+
"analyticsCatalog.metric.actions.openInEditor": {
|
|
787
|
+
text: string;
|
|
788
|
+
crowdinContext: string;
|
|
789
|
+
};
|
|
790
|
+
"analyticsCatalog.metric.dialog.edit.duplicate": {
|
|
791
|
+
text: string;
|
|
792
|
+
crowdinContext: string;
|
|
793
|
+
};
|
|
794
|
+
"analyticsCatalog.metric.dialog.edit.idImmutable": {
|
|
795
|
+
text: string;
|
|
796
|
+
crowdinContext: string;
|
|
797
|
+
};
|
|
798
|
+
"analyticsCatalog.metric.dialog.cancel": {
|
|
799
|
+
text: string;
|
|
800
|
+
crowdinContext: string;
|
|
801
|
+
};
|
|
802
|
+
"analyticsCatalog.metric.dialog.help": {
|
|
803
|
+
text: string;
|
|
804
|
+
crowdinContext: string;
|
|
805
|
+
};
|
|
806
|
+
"analyticsCatalog.metric.dialog.submit.error": {
|
|
807
|
+
text: string;
|
|
808
|
+
crowdinContext: string;
|
|
809
|
+
};
|
|
810
|
+
"analyticsCatalog.metric.validation.empty": {
|
|
811
|
+
text: string;
|
|
812
|
+
crowdinContext: string;
|
|
813
|
+
};
|
|
814
|
+
"analyticsCatalog.metric.validation.syntax": {
|
|
815
|
+
text: string;
|
|
816
|
+
crowdinContext: string;
|
|
817
|
+
};
|
|
818
|
+
"analyticsCatalog.metric.validation.invalidStructure": {
|
|
819
|
+
text: string;
|
|
820
|
+
crowdinContext: string;
|
|
821
|
+
};
|
|
822
|
+
"analyticsCatalog.metric.validation.missingMaql": {
|
|
823
|
+
text: string;
|
|
824
|
+
crowdinContext: string;
|
|
825
|
+
};
|
|
826
|
+
"analyticsCatalog.metric.validation.invalidTags": {
|
|
827
|
+
text: string;
|
|
828
|
+
crowdinContext: string;
|
|
829
|
+
};
|
|
830
|
+
"analyticsCatalog.dialog.error.label": {
|
|
831
|
+
text: string;
|
|
832
|
+
crowdinContext: string;
|
|
833
|
+
};
|
|
834
|
+
"analyticsCatalog.metric.create.defaultTitle": {
|
|
835
|
+
text: string;
|
|
836
|
+
crowdinContext: string;
|
|
837
|
+
};
|
|
838
|
+
"analyticsCatalog.metric.create.success": {
|
|
839
|
+
text: string;
|
|
840
|
+
crowdinContext: string;
|
|
841
|
+
};
|
|
842
|
+
"analyticsCatalog.metric.update.success": {
|
|
843
|
+
text: string;
|
|
844
|
+
crowdinContext: string;
|
|
845
|
+
};
|
|
846
|
+
"analyticsCatalog.metric.load.error": {
|
|
847
|
+
text: string;
|
|
848
|
+
crowdinContext: string;
|
|
849
|
+
};
|
|
850
|
+
"analyticsCatalog.metric.dialog.delete.title": {
|
|
851
|
+
text: string;
|
|
852
|
+
crowdinContext: string;
|
|
853
|
+
};
|
|
854
|
+
"analyticsCatalog.metric.dialog.delete.body": {
|
|
855
|
+
text: string;
|
|
856
|
+
crowdinContext: string;
|
|
857
|
+
};
|
|
858
|
+
"analyticsCatalog.metric.dialog.delete.usageWarning": {
|
|
859
|
+
text: string;
|
|
860
|
+
crowdinContext: string;
|
|
861
|
+
};
|
|
862
|
+
"analyticsCatalog.metric.dialog.delete.submit": {
|
|
863
|
+
text: string;
|
|
864
|
+
crowdinContext: string;
|
|
865
|
+
};
|
|
866
|
+
"analyticsCatalog.metric.delete.success": {
|
|
867
|
+
text: string;
|
|
868
|
+
crowdinContext: string;
|
|
869
|
+
};
|
|
870
|
+
"analyticsCatalog.metric.delete.error": {
|
|
871
|
+
text: string;
|
|
872
|
+
crowdinContext: string;
|
|
873
|
+
};
|
|
762
874
|
"analyticsCatalog.share.button": {
|
|
763
875
|
text: string;
|
|
764
876
|
crowdinContext: string;
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAi5BjB,CAAC"}
|