@gooddata/sdk-ui-catalog 11.44.0-alpha.1 → 11.44.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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.1",
3
+ "version": "11.44.0-alpha.3",
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.1",
49
- "@gooddata/sdk-model": "11.44.0-alpha.1",
50
- "@gooddata/sdk-ui": "11.44.0-alpha.1",
51
- "@gooddata/sdk-ui-ext": "11.44.0-alpha.1",
52
- "@gooddata/sdk-ui-kit": "11.44.0-alpha.1",
53
- "@gooddata/sdk-ui-semantic-search": "11.44.0-alpha.1",
54
- "@gooddata/sdk-ui-theme-provider": "11.44.0-alpha.1",
55
- "@gooddata/util": "11.44.0-alpha.1"
48
+ "@gooddata/sdk-backend-spi": "11.44.0-alpha.3",
49
+ "@gooddata/sdk-ui": "11.44.0-alpha.3",
50
+ "@gooddata/sdk-ui-kit": "11.44.0-alpha.3",
51
+ "@gooddata/sdk-model": "11.44.0-alpha.3",
52
+ "@gooddata/sdk-ui-ext": "11.44.0-alpha.3",
53
+ "@gooddata/sdk-ui-semantic-search": "11.44.0-alpha.3",
54
+ "@gooddata/sdk-ui-theme-provider": "11.44.0-alpha.3",
55
+ "@gooddata/util": "11.44.0-alpha.3"
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.1",
96
- "@gooddata/oxlint-config": "11.44.0-alpha.1",
97
- "@gooddata/i18n-toolkit": "11.44.0-alpha.1",
98
- "@gooddata/sdk-backend-mockingbird": "11.44.0-alpha.1",
99
- "@gooddata/stylelint-config": "11.44.0-alpha.1"
95
+ "@gooddata/eslint-config": "11.44.0-alpha.3",
96
+ "@gooddata/i18n-toolkit": "11.44.0-alpha.3",
97
+ "@gooddata/sdk-backend-mockingbird": "11.44.0-alpha.3",
98
+ "@gooddata/stylelint-config": "11.44.0-alpha.3",
99
+ "@gooddata/oxlint-config": "11.44.0-alpha.3"
100
100
  },
101
101
  "peerDependencies": {
102
102
  "react": "^18.0.0 || ^19.0.0",