Skip to content

Commit eb85edf

Browse files
authored
Migrate from useObjectDetails to useGetObject (part 2) (#6452)
1 parent e47bff5 commit eb85edf

File tree

8 files changed

+51
-52
lines changed

8 files changed

+51
-52
lines changed

frontend/app/src/entities/artifacts/ui/artifact-details.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { CONFIG } from "@/config/config";
22
import { ArtifactFile } from "@/entities/artifacts/ui/artifact-file";
33
import { NodeEvents } from "@/entities/events/ui/node-details-events";
4-
import { useObjectDetails } from "@/entities/nodes/hooks/useObjectDetails";
4+
import { useGetObject } from "@/entities/nodes/object/domain/get-object.query";
55
import { NodeDescription } from "@/entities/nodes/object/ui/node-description";
66
import { ModelSchema } from "@/entities/schema/types";
7+
import { CoreArtifact } from "@/shared/api/graphql/generated/graphql";
78
import ErrorScreen from "@/shared/components/errors/error-screen";
8-
import NoDataFound from "@/shared/components/errors/no-data-found";
99
import Content from "@/shared/components/layout/content";
1010
import { LoadingIndicator } from "@/shared/components/loading/loading-indicator";
1111
import { Card } from "@/shared/components/ui/card";
@@ -19,20 +19,20 @@ export interface ArtifactsDetailsProps {
1919

2020
export function ArtifactsDetails({ artifactId, artifactSchema }: ArtifactsDetailsProps) {
2121
const artifactKind = artifactSchema.kind as string;
22-
const { loading, error, data } = useObjectDetails(artifactSchema, artifactId);
22+
const { isPending, error, data } = useGetObject({
23+
objectSchema: artifactSchema,
24+
objectId: artifactId,
25+
});
2326

24-
if (loading) {
27+
if (isPending) {
2528
return <LoadingIndicator className="h-full" />;
2629
}
2730

2831
if (error) {
29-
return <ErrorScreen message={`Something went wrong when fetching artifact ${artifactId}`} />;
32+
return <ErrorScreen message={error.message} />;
3033
}
3134

32-
const objectDetailsData = data?.[artifactKind]?.edges?.[0]?.node;
33-
if (!objectDetailsData) {
34-
return <NoDataFound message={`No artifact found with id ${artifactId}`} />;
35-
}
35+
const objectDetailsData = data as unknown as CoreArtifact;
3636

3737
const fileUrl: string = CONFIG.ARTIFACTS_CONTENT_URL(objectDetailsData?.storage_id?.value);
3838
const contentType = objectDetailsData.content_type?.value;

frontend/app/src/entities/groups/ui/add-group-trigger-button.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { GroupDataFromAPI } from "@/entities/groups/api/types";
22
import AddGroupForm from "@/entities/groups/ui/add-group-form";
3-
import { useObjectDetails } from "@/entities/nodes/hooks/useObjectDetails";
3+
import { useGetObject } from "@/entities/nodes/object/domain/get-object.query";
44
import { Permission } from "@/entities/permission/types";
55
import { NodeSchema } from "@/entities/schema/types";
66
import graphqlClient from "@/shared/api/graphql/graphqlClientApollo";
@@ -25,9 +25,7 @@ export default function AddGroupTriggerButton({
2525
}: AddGroupTriggerButtonProps) {
2626
const [isAddGroupFormOpen, setIsAddGroupFormOpen] = useState(false);
2727

28-
const { data } = useObjectDetails(schema, objectId);
29-
30-
const objectDetailsData = schema && data && data[schema.kind!]?.edges[0]?.node;
28+
const { data: objectDetailsData } = useGetObject({ objectSchema: schema, objectId });
3129

3230
return (
3331
<>

frontend/app/src/entities/groups/ui/groups-manager-trigger-button.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { GroupsManager, GroupsManagerProps } from "@/entities/groups/ui/groups-manager";
2-
import { useObjectDetails } from "@/entities/nodes/hooks/useObjectDetails";
2+
import { useGetObject } from "@/entities/nodes/object/domain/get-object.query";
33
import { ButtonProps, ButtonWithTooltip } from "@/shared/components/buttons/button-primitive";
44
import SlideOver, { SlideOverTitle } from "@/shared/components/display/slide-over";
55
import { Icon } from "@iconify-icon/react";
@@ -15,9 +15,7 @@ export const GroupsManagerTriggerButton = ({
1515
}: GroupsManagerTriggerProps) => {
1616
const [isManageGroupsDrawerOpen, setIsManageGroupsDrawerOpen] = useState(false);
1717

18-
const { data } = useObjectDetails(schema, objectId);
19-
20-
const objectDetailsData = schema && data && data[schema.kind!]?.edges[0]?.node;
18+
const { data: objectDetailsData } = useGetObject({ objectSchema: schema, objectId });
2119

2220
return (
2321
<>

frontend/app/src/entities/nodes/object/ui/CoreGraphQLQuery/graphql-query-details.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import { GraphqlQueryActivities } from "@/entities/graphql/ui/graphql-query-acti
22
import GraphqlQueryDetailsCard from "@/entities/graphql/ui/graphql-query-details-card";
33
import GraphQLQueryDetailsPageSkeleton from "@/entities/graphql/ui/graphql-query-details-page-skeleton";
44
import GraphqlQueryViewerCard from "@/entities/graphql/ui/graphql-query-viewer-card";
5-
import { useObjectDetails } from "@/entities/nodes/hooks/useObjectDetails";
5+
import { useGetObject } from "@/entities/nodes/object/domain/get-object.query";
66
import { Permission } from "@/entities/permission/types";
77
import { ModelSchema } from "@/entities/schema/types";
88
import { CoreGraphQlQuery } from "@/shared/api/graphql/generated/graphql";
9-
import NoDataFound from "@/shared/components/errors/no-data-found";
9+
import ErrorScreen from "@/shared/components/errors/error-screen";
1010

1111
export function GraphqlQueryDetails({
1212
graphqlQueryId,
@@ -17,14 +17,20 @@ export function GraphqlQueryDetails({
1717
graphqlQuerySchema: ModelSchema;
1818
permission: Permission;
1919
}) {
20-
const { loading, data, refetch } = useObjectDetails(graphqlQuerySchema, graphqlQueryId);
20+
const { isPending, error, data, refetch } = useGetObject({
21+
objectSchema: graphqlQuerySchema,
22+
objectId: graphqlQueryId,
23+
});
2124

22-
if (loading) return <GraphQLQueryDetailsPageSkeleton />;
25+
if (isPending) {
26+
return <GraphQLQueryDetailsPageSkeleton />;
27+
}
2328

24-
const graphqlQueries = data && data.CoreGraphQLQuery.edges;
25-
if (graphqlQueries.length === 0) return <NoDataFound />;
29+
if (error) {
30+
return <ErrorScreen message={error.message} />;
31+
}
2632

27-
const graphqlQuery: CoreGraphQlQuery = graphqlQueries[0].node;
33+
const graphqlQuery: CoreGraphQlQuery = data as unknown as CoreGraphQlQuery;
2834

2935
return (
3036
<section className="grid grid-cols-1 lg:grid-cols-2 gap-2 p-2">

frontend/app/src/shared/components/layout/breadcrumb-navigation/items/breadcrumb-object-selector.tsx

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { useObjectDetails } from "@/entities/nodes/hooks/useObjectDetails";
1+
import { useGetObject } from "@/entities/nodes/object/domain/get-object.query";
2+
import { getNodeLabel } from "@/entities/nodes/object/utils/get-node-label";
23
import { getObjectDetailsUrl } from "@/entities/nodes/utils";
34
import { ModelSchema } from "@/entities/schema/types";
45
import { useSchema } from "@/entities/schema/ui/hooks/useSchema";
56
import { BreadcrumbLink } from "@/shared/components/layout/breadcrumb-navigation/items/breadcrumb-link";
67
import BreadcrumbLoading from "@/shared/components/layout/breadcrumb-navigation/items/breadcrumb-loading";
7-
import { NetworkStatus } from "@apollo/client";
88

99
export default function BreadcrumbObjectSelector({
1010
kind,
@@ -31,22 +31,15 @@ const ObjectSelector = ({
3131
id: string;
3232
className?: string;
3333
}) => {
34-
const { data, error, networkStatus } = useObjectDetails(schema, id);
34+
const { data, error, isPending } = useGetObject({ objectSchema: schema, objectId: id });
3535

36-
if (networkStatus === NetworkStatus.loading) return <BreadcrumbLoading />;
36+
if (isPending) return <BreadcrumbLoading />;
3737

3838
if (error) return null;
3939

40-
const objectList = data?.[schema.kind!].edges.map((edge: any) => edge.node);
41-
if (!objectList || objectList.length === 0) return null;
42-
43-
const currentObject = objectList.find((node: any) => node.id === id);
44-
45-
if (!currentObject) return null;
46-
4740
return (
48-
<BreadcrumbLink to={getObjectDetailsUrl(currentObject.__typename, currentObject.id)} {...props}>
49-
{currentObject.display_label}
41+
<BreadcrumbLink to={getObjectDetailsUrl(data.__typename, data.id)} {...props}>
42+
{getNodeLabel(data)}
5043
</BreadcrumbLink>
5144
);
5245
};

frontend/app/src/shared/components/search/search-anywhere-dialog.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ export function SearchAnywhereDialog({ children, className, ...props }: DialogPr
2626
)}
2727
{...props}
2828
>
29-
<Dialog aria-label="Search anywhere" data-testid="search-anywhere">
29+
<Dialog
30+
aria-label="Search anywhere"
31+
data-testid="search-anywhere"
32+
className="overflow-hidden"
33+
>
3034
{children}
3135
</Dialog>
3236
</Modal>

frontend/app/src/shared/components/search/search-nodes.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { SEARCH_QUERY_NAME } from "@/config/constants";
22
import { POOLS_PEER } from "@/entities/ipam/constants";
33
import { SEARCH } from "@/entities/nodes/api/search";
4-
import { useObjectDetails } from "@/entities/nodes/hooks/useObjectDetails";
54
import { getSchemaObjectColumns } from "@/entities/nodes/object-items/getSchemaObjectColumns";
5+
import { useGetObject } from "@/entities/nodes/object/domain/get-object.query";
6+
import { getNodeLabel } from "@/entities/nodes/object/utils/get-node-label";
67
import { getObjectDetailsUrl } from "@/entities/nodes/utils";
78
import { ATTRIBUTE_KIND } from "@/entities/schema/constants";
89
import { useSchema } from "@/entities/schema/ui/hooks/useSchema";
@@ -64,15 +65,22 @@ type NodesOptionsProps = {
6465

6566
const NodesOptions = ({ node }: NodesOptionsProps) => {
6667
const { isGeneric, schema } = useSchema(node.kind);
67-
const { data, loading, error } = useObjectDetails(schema!, node.id);
68+
const {
69+
data: objectDetailsData,
70+
isPending,
71+
error,
72+
} = useGetObject({
73+
objectSchema: schema!,
74+
objectId: node.id,
75+
getRelationshipsVisible: (rel) => rel,
76+
});
6877

6978
if (!schema) return null;
7079

71-
if (loading) return <SearchResultNodeSkeleton />;
80+
if (isPending) return <SearchResultNodeSkeleton />;
7281

7382
if (error) return null;
7483

75-
const objectDetailsData = schema && data?.[node.kind]?.edges[0]?.node;
7684
if (!objectDetailsData) return <div className="text-sm">No data found for this object</div>;
7785

7886
const useIpNamespace =
@@ -99,7 +107,7 @@ const NodesOptions = ({ node }: NodesOptionsProps) => {
99107
<div className="grow text-sm overflow-auto">
100108
<div className="flex justify-between">
101109
<span className="mr-1 font-semibold text-custom-blue-800">
102-
{objectDetailsData?.display_label}
110+
{getNodeLabel(objectDetailsData)}
103111
</span>
104112

105113
<div className="inline-flex items-center gap-1">

frontend/app/tests/e2e/search.spec.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
import { expect, test } from "@playwright/test";
22

33
test.describe("when searching an object", () => {
4-
test.beforeEach(async function ({ page }) {
5-
page.on("response", async (response) => {
6-
if (response.status() === 500) {
7-
await expect(response.url()).toBe("This URL responded with a 500 status");
8-
}
9-
});
10-
});
11-
124
test("should open search anywhere modal", async ({ page }) => {
135
await page.goto("/");
146

@@ -106,7 +98,7 @@ test.describe("when searching an object", () => {
10698

10799
await page.getByTestId("search-anywhere-input").fill(uuid);
108100
await expect(
109-
page.getByRole("option", { name: "AS174 174 Infra Autonomous System" })
101+
page.getByRole("option", { name: "AS174, 174 Infra Autonomous System" })
110102
).toBeVisible();
111103
});
112104
});

0 commit comments

Comments
 (0)