@gooddata/sdk-ui-catalog 11.44.0-alpha.0 → 11.44.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.
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogItemAccessRow.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/CatalogItemAccessRow.tsx"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,mDAoBnC"}
1
+ {"version":3,"file":"CatalogItemAccessRow.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/CatalogItemAccessRow.tsx"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,mDAqBnC"}
@@ -23,7 +23,8 @@ export function CatalogItemAccessRow() {
23
23
  if (summary) {
24
24
  return _jsx(CatalogDetailAccessRow, { summary: summary, onOpen: open });
25
25
  }
26
- // Summary not available yet (loading or load error). Keep the row — Share is
27
- // still reachable with a placeholder rather than omitting it.
26
+ // Summary not available yet still loading. A definitive not-permissionable
27
+ // load failure makes the provider inactive (the row is gone via the guard
28
+ // above), so this placeholder only covers the genuine loading window.
28
29
  return (_jsx(CatalogDetailContentRow, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.share.access.row.label" }), content: _jsx(UiSkeleton, { itemWidth: 200, itemHeight: 20 }) }));
29
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogItemShareProvider.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/CatalogItemShareProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAA6D,MAAM,OAAO,CAAC;AAElG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,KAAK,sBAAsB,EAAkB,MAAM,sBAAsB,CAAC;AAEnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;GAKG;AACH,UAAU,sBAAsB;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC/C,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,UAAU,wBAAwB;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAiBD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,+FAA+F;IAC/F,aAAa,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChD,sDAAsD;IACtD,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC7C,mFAAmF;IACnF,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACrC,aAAa,EACb,MAAM,EACN,MAAM,EACN,QAAQ,EACX,EAAE,8BAA8B,2CAmDhC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,sBAAsB,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,wBAAwB,CAErE"}
1
+ {"version":3,"file":"CatalogItemShareProvider.d.ts","sourceRoot":"","sources":["../../../src/catalogDetail/share/CatalogItemShareProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAA6D,MAAM,OAAO,CAAC;AAElG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,KAAK,sBAAsB,EAAkB,MAAM,sBAAsB,CAAC;AAEnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;GAKG;AACH,UAAU,sBAAsB;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC/C,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,UAAU,wBAAwB;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACrB;AAiBD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,+FAA+F;IAC/F,aAAa,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAChD,sDAAsD;IACtD,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC7C,mFAAmF;IACnF,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACrC,aAAa,EACb,MAAM,EACN,MAAM,EACN,QAAQ,EACX,EAAE,8BAA8B,2CA4DhC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,sBAAsB,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,wBAAwB,CAErE"}
@@ -50,7 +50,15 @@ export function CatalogItemShareProvider({ shareableItem, target, labels, childr
50
50
  setIsOpen(true);
51
51
  }, [targetKey]);
52
52
  const close = useCallback(() => setIsOpen(false), []);
53
- const state = useMemo(() => shareableItem
53
+ // Sharing is offered only while the access list is reachable. The permissions
54
+ // endpoint is manage-gated, so a user who can only view/analyze the object gets
55
+ // a 404 (surfaced as `accessUnavailable`); we then hide both the Share button and
56
+ // the inline access row — there is nothing they can act on, and the row would
57
+ // otherwise load forever. A transient load error does not set the flag, so a flaky
58
+ // fetch doesn't strip the UI. The access list loads optimistically, so the row and
59
+ // button show until the 404 lands, then disappear.
60
+ const active = Boolean(shareableItem) && !controller.state.accessUnavailable;
61
+ const state = useMemo(() => active && shareableItem
54
62
  ? {
55
63
  active: true,
56
64
  controller,
@@ -59,8 +67,8 @@ export function CatalogItemShareProvider({ shareableItem, target, labels, childr
59
67
  isOpen,
60
68
  labelsLoading: labels.loading,
61
69
  }
62
- : INACTIVE_STATE, [shareableItem, controller, target, isOpen, labels.loading]);
63
- const actions = useMemo(() => (shareableItem ? { active: true, open, close } : INACTIVE_ACTIONS), [shareableItem, open, close]);
70
+ : INACTIVE_STATE, [active, shareableItem, controller, target, isOpen, labels.loading]);
71
+ const actions = useMemo(() => (active ? { active: true, open, close } : INACTIVE_ACTIONS), [active, open, close]);
64
72
  return (_jsx(ShareActionsContext.Provider, { value: actions, children: _jsx(ShareStateContext.Provider, { value: state, children: children }) }));
65
73
  }
66
74
  /**
@@ -6,6 +6,8 @@ import type { ICatalogItem, ICatalogItemRef } from "./types.js";
6
6
  export interface ICatalogFeedState {
7
7
  items: ICatalogItem[];
8
8
  status: AsyncStatus;
9
+ relatedItems: ICatalogItem[];
10
+ relatedItemsStatus: AsyncStatus;
9
11
  error: Error | null;
10
12
  totalCount: number;
11
13
  totalCountByType: Readonly<Record<ObjectType, number>>;
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogFeedContext.d.ts","sourceRoot":"","sources":["../../src/catalogItem/CatalogFeedContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAsC,MAAM,OAAO,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAMD,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACrD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,2CA8CnF;AAED,wBAAgB,mBAAmB,IAAI,iBAAiB,CAGvD;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,CAG3D;AAED,wBAAgB,qBAAqB,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAG5E"}
1
+ {"version":3,"file":"CatalogFeedContext.d.ts","sourceRoot":"","sources":["../../src/catalogItem/CatalogFeedContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAsC,MAAM,OAAO,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,kBAAkB,EAAE,WAAW,CAAC;IAChC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAMD,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACrD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,2CAkDnF;AAED,wBAAgB,mBAAmB,IAAI,iBAAiB,CAGvD;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,CAG3D;AAED,wBAAgB,qBAAqB,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAG5E"}
@@ -8,15 +8,17 @@ const CatalogFeedActionsContext = createContext(null);
8
8
  const CatalogFeedCounterContext = createContext(null);
9
9
  export function CatalogFeedProvider({ children, ...props }) {
10
10
  const feed = useCatalogItemFeed(props);
11
- const { items, status, error, totalCount, totalCountByType, hasNext, next, updateItem, removeItem, refetchObjectType, } = feed;
11
+ const { items, status, error, totalCount, totalCountByType, hasNext, relatedItems, relatedItemsStatus, next, updateItem, removeItem, refetchObjectType, } = feed;
12
12
  const state = useMemo(() => ({
13
13
  items,
14
14
  status,
15
+ relatedItems,
16
+ relatedItemsStatus,
15
17
  error,
16
18
  totalCount,
17
19
  totalCountByType,
18
20
  hasNext,
19
- }), [items, status, error, totalCount, totalCountByType, hasNext]);
21
+ }), [items, status, relatedItems, relatedItemsStatus, error, totalCount, totalCountByType, hasNext]);
20
22
  const actions = useMemo(() => ({
21
23
  next,
22
24
  updateItem,
@@ -1,5 +1,6 @@
1
1
  import type { IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
2
2
  import type { CertificationStatus, IDataSetMetadataObject, IParameterDefinition, IdentifierRef, MetricType, ObjectOrigin } from "@gooddata/sdk-model";
3
+ import { type AsyncStatus } from "../async/types.js";
3
4
  import type { ObjectType } from "../objectType/types.js";
4
5
  /**
5
6
  * Catalog item reference.
@@ -123,4 +124,11 @@ export interface ICatalogItemQueryOptions {
123
124
  certification?: boolean;
124
125
  pageSize?: number;
125
126
  }
127
+ export interface ICatalogItemSemanticSearchOptions {
128
+ queryOptions: ICatalogItemQueryOptions;
129
+ items: ICatalogItem[];
130
+ status: AsyncStatus;
131
+ types: ObjectType[];
132
+ search?: string;
133
+ }
126
134
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/catalogItem/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
- export {};
2
+ import {} from "../async/types.js";
@@ -2,8 +2,10 @@ import { type ObjectType } from "../objectType/types.js";
2
2
  import type { ICatalogItem, ICatalogItemFeedOptions, ICatalogItemRef } from "./types.js";
3
3
  export declare function useCatalogItemFeed(feedOptions: ICatalogItemFeedOptions): {
4
4
  items: ICatalogItem[];
5
- error: Error | null;
5
+ relatedItems: ICatalogItem[];
6
6
  status: import("../async/types.js").AsyncStatus;
7
+ relatedItemsStatus: import("../async/types.js").AsyncStatus;
8
+ error: Error | null;
7
9
  totalCount: number;
8
10
  totalCountByType: {
9
11
  analyticalDashboard: number;
@@ -1 +1 @@
1
- {"version":3,"file":"useCatalogItemFeed.d.ts","sourceRoot":"","sources":["../../src/catalogItem/useCatalogItemFeed.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIzF,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;EAiEtE"}
1
+ {"version":3,"file":"useCatalogItemFeed.d.ts","sourceRoot":"","sources":["../../src/catalogItem/useCatalogItemFeed.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKzF,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;EA8EtE"}
@@ -8,6 +8,7 @@ import { useFeatureFlags } from "../permission/PermissionsContext.js";
8
8
  import { useFullTextSearchState } from "../search/FullTextSearchContext.js";
9
9
  import { convertEntityToCatalogItem } from "./converter.js";
10
10
  import { useCatalogEndpoints, useCatalogQueryOptions } from "./useCatalogEndpoints.js";
11
+ import { useCatalogItemSemanticSearch } from "./useCatalogItemSemanticSearch.js";
11
12
  import { useEndpointPaginator } from "./useEndpointPaginator.js";
12
13
  export function useCatalogItemFeed(feedOptions) {
13
14
  const { searchTerm: search } = useFullTextSearchState();
@@ -26,7 +27,20 @@ export function useCatalogItemFeed(feedOptions) {
26
27
  const endpoints = useCatalogEndpoints(types, queryOptions, flags);
27
28
  const paginator = useEndpointPaginator(endpoints, convertEntityToCatalogItem);
28
29
  const { items, status, error, totalCount, totalCounts, hasNext, next, refetch, updateWhere, removeWhere, } = paginator;
29
- const totalCountByType = useMemo(() => getTotalCountByType(endpoints, totalCounts), [endpoints, totalCounts]);
30
+ const { relatedItems, relatedItemsStatus, relatedHasNext } = useCatalogItemSemanticSearch({
31
+ queryOptions,
32
+ items,
33
+ status,
34
+ types,
35
+ search,
36
+ });
37
+ const totalCountByType = useMemo(() => {
38
+ const counts = getTotalCountByType(endpoints, totalCounts);
39
+ for (const item of relatedItems) {
40
+ counts[item.type] += 1;
41
+ }
42
+ return counts;
43
+ }, [endpoints, totalCounts, relatedItems]);
30
44
  const refetchObjectType = useCallback((type) => {
31
45
  const index = endpoints.findIndex((endpoint) => endpoint.type === type);
32
46
  return index === -1 ? Promise.resolve() : refetch(index);
@@ -35,11 +49,13 @@ export function useCatalogItemFeed(feedOptions) {
35
49
  const removeItem = useCallback((item) => removeWhere((existing) => areObjRefsEqual(existing, item)), [removeWhere]);
36
50
  return {
37
51
  items,
38
- error,
52
+ relatedItems,
39
53
  status,
40
- totalCount,
54
+ relatedItemsStatus,
55
+ error,
56
+ totalCount: totalCount + relatedItems.length,
41
57
  totalCountByType,
42
- hasNext,
58
+ hasNext: hasNext || relatedHasNext,
43
59
  next,
44
60
  updateItem,
45
61
  removeItem,
@@ -0,0 +1,8 @@
1
+ import { type AsyncStatus } from "../async/types.js";
2
+ import { type ICatalogItem, type ICatalogItemSemanticSearchOptions } from "./types.js";
3
+ export declare function useCatalogItemSemanticSearch({ queryOptions, items, status, types, search }: ICatalogItemSemanticSearchOptions): {
4
+ relatedItems: ICatalogItem[];
5
+ relatedItemsStatus: AsyncStatus;
6
+ relatedHasNext: boolean;
7
+ };
8
+ //# sourceMappingURL=useCatalogItemSemanticSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCatalogItemSemanticSearch.d.ts","sourceRoot":"","sources":["../../src/catalogItem/useCatalogItemSemanticSearch.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAGvF,wBAAgB,4BAA4B,CAAC,EACzC,YAAY,EACZ,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACT,EAAE,iCAAiC;;;;EAkEnC"}
@@ -0,0 +1,95 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import {} from "@gooddata/sdk-model";
4
+ import { useCancelablePromise } from "@gooddata/sdk-ui";
5
+ import { useSemanticSearch } from "@gooddata/sdk-ui-semantic-search";
6
+ import {} from "../async/types.js";
7
+ import { mapGenAIObjectType } from "../objectType/mapping.js";
8
+ import { useFeatureFlags } from "../permission/PermissionsContext.js";
9
+ import { convertEntityToCatalogItem } from "./converter.js";
10
+ import {} from "./types.js";
11
+ import { useCatalogEndpoints } from "./useCatalogEndpoints.js";
12
+ export function useCatalogItemSemanticSearch({ queryOptions, items, status, types, search, }) {
13
+ const flags = useFeatureFlags();
14
+ const objectTypes = useMemo(() => convertTypesToGenAiTypes(types), [types]);
15
+ const isSemanticSearchEnabled = Boolean(flags?.enableSemanticSearch);
16
+ const isSemanticSearchPossible = isSemanticSearchEnabled && objectTypes.length && search && !queryOptions.id;
17
+ const { searchStatus, searchResults } = useSemanticSearch({
18
+ searchTerm: isSemanticSearchPossible ? search : "",
19
+ backend: queryOptions.backend,
20
+ workspace: queryOptions.workspace,
21
+ objectTypes,
22
+ });
23
+ const updateQueryOptions = useMemo(() => {
24
+ return {
25
+ ...queryOptions,
26
+ id: searchResults.map((item) => item.id),
27
+ search: undefined,
28
+ };
29
+ }, [queryOptions, searchResults]);
30
+ const endpoints = useCatalogEndpoints(types, updateQueryOptions, flags);
31
+ const { status: promiseStatus, result: promiseItems } = useCancelablePromise({
32
+ promise: async () => {
33
+ if (!isSemanticSearchEnabled || searchStatus !== "success") {
34
+ return [];
35
+ }
36
+ const firstPages = await Promise.all(endpoints.map((ep) => ep.query()));
37
+ const searchResultIds = searchResults.map((res) => res.id);
38
+ return firstPages
39
+ .reduce((items, page) => {
40
+ return [...items, ...page.items.map(convertEntityToCatalogItem)];
41
+ }, [])
42
+ .sort((a, b) => {
43
+ return searchResultIds.indexOf(a.identifier) - searchResultIds.indexOf(b.identifier);
44
+ });
45
+ },
46
+ onError: (err) => {
47
+ console.error(err);
48
+ },
49
+ }, [isSemanticSearchEnabled, searchStatus, endpoints, searchResults]);
50
+ const relatedItemsStatus = getRelatedItemsStatus(isSemanticSearchEnabled, searchStatus, promiseStatus);
51
+ const relatedHasNext = isSemanticSearchEnabled && relatedItemsStatus === "loading";
52
+ const isLoading = status === "loading" || status === "idle" || relatedHasNext;
53
+ const relatedItems = useMemo(() => {
54
+ if (isLoading) {
55
+ return [];
56
+ }
57
+ return (promiseItems ?? []).filter((relatedItem) => !items.some((item) => areCatalogItemsEqual(item, relatedItem)));
58
+ }, [promiseItems, isLoading, items]);
59
+ return {
60
+ relatedItems,
61
+ relatedItemsStatus,
62
+ relatedHasNext,
63
+ };
64
+ }
65
+ function convertTypesToGenAiTypes(types) {
66
+ if (!types.length) {
67
+ return ["fact", "attribute", "dashboard", "metric", "visualization", "dataset", "date"];
68
+ }
69
+ return types
70
+ .map((a) => {
71
+ if (a === "parameter") {
72
+ return null;
73
+ }
74
+ return mapGenAIObjectType(a);
75
+ })
76
+ .filter(Boolean);
77
+ }
78
+ function areCatalogItemsEqual(a, b) {
79
+ return a.identifier === b.identifier && a.type === b.type;
80
+ }
81
+ function getRelatedItemsStatus(isSemanticSearchEnabled, searchStatus, promiseStatus) {
82
+ if (!isSemanticSearchEnabled) {
83
+ return "idle";
84
+ }
85
+ if (searchStatus === "loading" || (searchStatus === "success" && promiseStatus === "loading")) {
86
+ return "loading";
87
+ }
88
+ if (searchStatus === "error" || promiseStatus === "error") {
89
+ return "error";
90
+ }
91
+ if (searchStatus === "success" && promiseStatus === "success") {
92
+ return "success";
93
+ }
94
+ return "idle";
95
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Main.d.ts","sourceRoot":"","sources":["../../src/main/Main.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,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAelF,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACrE,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3E,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/E,CAAC;AAQF,wBAAgB,IAAI,CAAC,EACjB,OAAO,EACP,SAAS,EACT,IAAI,EACJ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,uBAAuB,EAC1B,EAAE,KAAK,2CAiEP"}
1
+ {"version":3,"file":"Main.d.ts","sourceRoot":"","sources":["../../src/main/Main.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,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAelF,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACrE,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3E,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/E,CAAC;AAQF,wBAAgB,IAAI,CAAC,EACjB,OAAO,EACP,SAAS,EACT,IAAI,EACJ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,uBAAuB,EAC1B,EAAE,KAAK,2CAmEP"}
package/esm/main/Main.js CHANGED
@@ -28,7 +28,7 @@ export function Main({ backend, workspace, open, openedItem, setItemOpened, onOp
28
28
  const intl = useIntl();
29
29
  const { addError } = useToastMessage();
30
30
  const { toggleTag } = useFilterActions();
31
- const { items, status, hasNext, totalCount } = useCatalogFeedState();
31
+ const { items, status, hasNext, totalCount, relatedItems, relatedItemsStatus } = useCatalogFeedState();
32
32
  const { next, updateItem, removeItem, refetchObjectType } = useCatalogFeedActions();
33
33
  const isQualityEnabled = useIsCatalogQualityEnabled();
34
34
  return (_jsxs("section", { className: "gd-analytics-catalog__main", children: [
@@ -36,7 +36,7 @@ export function Main({ backend, workspace, open, openedItem, setItemOpened, onOp
36
36
  _jsx(FilterObjectTypeMemo, {}), _jsxs(FilterGroupLayout, { title: _jsx(FormattedMessage, { id: "analyticsCatalog.filter.title" }), children: [
37
37
  _jsx(FilterCreatedByMemo, { backend: backend, workspace: workspace }), _jsx(FilterTagsMemo, {}), _jsx(FilterOriginGuard, { backend: backend, workspace: workspace, children: _jsx(FilterOriginMemo, {}) }), isQualityEnabled ? _jsx(FilterQualityMemo, {}) : null, _jsx(FilterVisibilityMemo, {}), _jsx(FilterCertificationMemo, {}), _jsx(FilterResetButtonMemo, {})
38
38
  ] })
39
- ] }), _jsx(Table, { status: status, items: items, next: next, hasNext: hasNext, totalCount: totalCount, onItemClick: onOpenDetail, onTagClick: toggleTag }), _jsx(CatalogDetail, { open: open, objectDefinition: openedItem, onClose: onCloseDetail, onOpenClick: onOpenClick, onCatalogItemNavigation: (event, ref) => {
39
+ ] }), _jsx(Table, { status: status, items: items, next: next, hasNext: hasNext, totalCount: totalCount, onItemClick: onOpenDetail, onTagClick: toggleTag, relatedItems: relatedItems, relatedItemsStatus: relatedItemsStatus }), _jsx(CatalogDetail, { open: open, objectDefinition: openedItem, onClose: onCloseDetail, onOpenClick: onOpenClick, onCatalogItemNavigation: (event, ref) => {
40
40
  setItemOpened(ref);
41
41
  onCatalogItemNavigation?.(event, ref);
42
42
  }, onCatalogItemCreate: (item) => {
@@ -3,11 +3,13 @@ import type { ICatalogItem } from "../catalogItem/types.js";
3
3
  export interface ITableProps {
4
4
  status: AsyncStatus;
5
5
  items: ICatalogItem[];
6
+ relatedItems: ICatalogItem[];
7
+ relatedItemsStatus: AsyncStatus;
6
8
  totalCount: number;
7
9
  next: () => Promise<void>;
8
10
  hasNext: boolean;
9
11
  onTagClick?: (tag: string) => void;
10
12
  onItemClick?: (item: ICatalogItem) => void;
11
13
  }
12
- export declare function Table({ items, status, next, hasNext, totalCount, onTagClick, onItemClick }: ITableProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function Table({ items, status, next, hasNext, totalCount, relatedItemsStatus, relatedItems, onTagClick, onItemClick }: ITableProps): import("react/jsx-runtime").JSX.Element;
13
15
  //# sourceMappingURL=Table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/table/Table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,WAAW,2CA2EvG"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/table/Table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAU5D,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,kBAAkB,EAAE,WAAW,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,KAAK,CAAC,EAClB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,WAAW,EACd,EAAE,WAAW,2CAiFb"}
@@ -11,7 +11,7 @@ import { updatedAtColumn } from "./columns/ModifiedColumn.js";
11
11
  import { tagsColumn } from "./columns/TagsColumn.js";
12
12
  import { titleColumn } from "./columns/TitleColumn.js";
13
13
  const tableWidth = 1100;
14
- export function Table({ items, status, next, hasNext, totalCount, onTagClick, onItemClick }) {
14
+ export function Table({ items, status, next, hasNext, totalCount, relatedItemsStatus, relatedItems, onTagClick, onItemClick, }) {
15
15
  const intl = useIntl();
16
16
  const { searchTerm } = useFullTextSearchState();
17
17
  const { ref, height, width } = useElementSize();
@@ -26,9 +26,12 @@ export function Table({ items, status, next, hasNext, totalCount, onTagClick, on
26
26
  ];
27
27
  }, [intl, onTagClick, availableWidth]);
28
28
  const isLoading = status === "loading" || status === "idle";
29
+ const isRelatedLoading = relatedItemsStatus === "loading";
29
30
  const isSearching = searchTerm.length > 0;
30
- const effectiveItems = useMemo(() => items.map((item) => ({ ...item, id: item.identifier })), [items]);
31
- const skeletonItemsCount = isLoading ? 3 : totalCount - items.length;
31
+ const effectiveItems = useMemo(() => [...items, ...relatedItems].map((item) => ({ ...item, id: item.identifier })), [items, relatedItems]);
32
+ const skeletonItemsCount = isLoading
33
+ ? 3
34
+ : totalCount - effectiveItems.length + (isRelatedLoading ? 3 : 0);
32
35
  const announcedTotalResults = isSearching && status === "success" ? totalCount : undefined;
33
36
  if (status === "error") {
34
37
  return (_jsx(ErrorComponent, { message: intl.formatMessage({ id: "analyticsCatalog.error.unknown.message" }), description: intl.formatMessage({ id: "analyticsCatalog.error.unknown.description" }), width: "100%" }));
@@ -38,7 +41,7 @@ export function Table({ items, status, next, hasNext, totalCount, onTagClick, on
38
41
  //paging
39
42
  hasNextPage: hasNext, loadNextPage: () => {
40
43
  void next();
41
- }, maxHeight: height - UiAsyncTableRowHeightNormal, isLoading: isLoading,
44
+ }, maxHeight: height - UiAsyncTableRowHeightNormal, isLoading: isLoading || (items.length === 0 && isRelatedLoading),
42
45
  //events
43
46
  onItemClick: onItemClick,
44
47
  //renderers
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-catalog",
3
- "version": "11.44.0-alpha.0",
3
+ "version": "11.44.0-alpha.2",
4
4
  "description": "GoodData SDK - Analytics Catalog",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -45,14 +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.44.0-alpha.0",
49
- "@gooddata/sdk-model": "11.44.0-alpha.0",
50
- "@gooddata/sdk-ui": "11.44.0-alpha.0",
51
- "@gooddata/sdk-ui-ext": "11.44.0-alpha.0",
52
- "@gooddata/sdk-ui-kit": "11.44.0-alpha.0",
53
- "@gooddata/sdk-ui-semantic-search": "11.44.0-alpha.0",
54
- "@gooddata/sdk-ui-theme-provider": "11.44.0-alpha.0",
55
- "@gooddata/util": "11.44.0-alpha.0"
48
+ "@gooddata/sdk-backend-spi": "11.44.0-alpha.2",
49
+ "@gooddata/sdk-model": "11.44.0-alpha.2",
50
+ "@gooddata/sdk-ui": "11.44.0-alpha.2",
51
+ "@gooddata/sdk-ui-ext": "11.44.0-alpha.2",
52
+ "@gooddata/sdk-ui-semantic-search": "11.44.0-alpha.2",
53
+ "@gooddata/sdk-ui-theme-provider": "11.44.0-alpha.2",
54
+ "@gooddata/sdk-ui-kit": "11.44.0-alpha.2",
55
+ "@gooddata/util": "11.44.0-alpha.2"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@microsoft/api-documenter": "^7.17.0",
@@ -92,11 +92,11 @@
92
92
  "typescript": "5.9.3",
93
93
  "vitest": "4.1.8",
94
94
  "vitest-dom": "0.1.1",
95
- "@gooddata/eslint-config": "11.44.0-alpha.0",
96
- "@gooddata/i18n-toolkit": "11.44.0-alpha.0",
97
- "@gooddata/oxlint-config": "11.44.0-alpha.0",
98
- "@gooddata/sdk-backend-mockingbird": "11.44.0-alpha.0",
99
- "@gooddata/stylelint-config": "11.44.0-alpha.0"
95
+ "@gooddata/eslint-config": "11.44.0-alpha.2",
96
+ "@gooddata/i18n-toolkit": "11.44.0-alpha.2",
97
+ "@gooddata/oxlint-config": "11.44.0-alpha.2",
98
+ "@gooddata/sdk-backend-mockingbird": "11.44.0-alpha.2",
99
+ "@gooddata/stylelint-config": "11.44.0-alpha.2"
100
100
  },
101
101
  "peerDependencies": {
102
102
  "react": "^18.0.0 || ^19.0.0",