Skip to content

Commit adc2c30

Browse files
authored
🪟 🧹 Optimizedestination over fetching - pass destination through react-router outlet context (#22068)
* optimize data fetching - pass "destination" through react-router outlet context * extract destination outlet context to separate interface
1 parent 88e95bc commit adc2c30

File tree

4 files changed

+17
-14
lines changed

4 files changed

+17
-14
lines changed

‎airbyte-webapp/src/pages/destination/DestinationItemPage/DestinationItemPage.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ import { Breadcrumbs } from "components/ui/Breadcrumbs";
1010
import { PageHeader } from "components/ui/PageHeader";
1111

1212
import { useTrackPage, PageTrackingCodes } from "hooks/services/Analytics";
13+
import { useGetDestination } from "hooks/services/useDestinationHook";
1314
import { ResourceNotFoundErrorBoundary } from "views/common/ResorceNotFoundErrorBoundary";
1415
import { StartOverErrorView } from "views/common/StartOverErrorView";
1516
import { ConnectorDocumentationWrapper } from "views/Connector/ConnectorDocumentationLayout";
1617

17-
import { useGetDestination } from "../../../hooks/services/useDestinationHook";
18-
1918
export const DestinationItemPage: React.FC = () => {
2019
useTrackPage(PageTrackingCodes.DESTINATION_ITEM);
2120
const params = useParams() as { "*": StepsTypes | ""; id: string };
@@ -48,7 +47,7 @@ export const DestinationItemPage: React.FC = () => {
4847
/>
4948
<Suspense fallback={<LoadingPage />}>
5049
<ApiErrorBoundary>
51-
<Outlet />
50+
<Outlet context={{ destination }} />
5251
</ApiErrorBoundary>
5352
</Suspense>
5453
</ConnectorDocumentationWrapper>

‎airbyte-webapp/src/pages/destination/DestinationOverviewPage.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
import { useMemo } from "react";
2-
import { useNavigate, useParams } from "react-router-dom";
2+
import { useNavigate } from "react-router-dom";
3+
import { useOutletContext } from "react-router-dom";
34

45
import { ConnectorIcon } from "components/common/ConnectorIcon";
5-
import { StepsTypes, TableItemTitle } from "components/ConnectorBlocks";
6+
import { TableItemTitle } from "components/ConnectorBlocks";
67
import { DestinationConnectionTable } from "components/destination/DestinationConnectionTable";
78
import Placeholder, { ResourceTypes } from "components/Placeholder";
89
import { DropdownMenuOptionType } from "components/ui/DropdownMenu";
910

1011
import { useConnectionList } from "hooks/services/useConnectionHook";
11-
import { useGetDestination } from "hooks/services/useDestinationHook";
1212
import { useSourceList } from "hooks/services/useSourceHook";
1313
import { DestinationPaths } from "pages/routePaths";
1414
import { useDestinationDefinition } from "services/connector/DestinationDefinitionService";
1515

16+
import { DestinationOutletContext } from "./types";
17+
1618
export const DestinationOverviewPage = () => {
17-
const params = useParams() as { "*": StepsTypes | ""; id: string };
1819
const navigate = useNavigate();
1920

20-
const destination = useGetDestination(params.id);
21+
const { destination } = useOutletContext<DestinationOutletContext>();
2122
const destinationDefinition = useDestinationDefinition(destination.destinationDefinitionId);
2223
// We load only connections attached to this destination to be shown in the connections grid
2324
const { connections } = useConnectionList({ destinationId: [destination.destinationId] });

‎airbyte-webapp/src/pages/destination/DestinationSettingsPage/DestinationSettingsPage.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
import React, { useCallback, useMemo } from "react";
22
import { FormattedMessage } from "react-intl";
3-
import { useParams } from "react-router-dom";
4-
5-
import { StepsTypes } from "components/ConnectorBlocks";
3+
import { useOutletContext } from "react-router-dom";
64

75
import { useTrackPage, PageTrackingCodes } from "hooks/services/Analytics";
86
import { useFormChangeTrackerService, useUniqueFormId } from "hooks/services/FormChangeTracker";
97
import { useConnectionList } from "hooks/services/useConnectionHook";
10-
import { useDeleteDestination, useGetDestination, useUpdateDestination } from "hooks/services/useDestinationHook";
8+
import { useDeleteDestination, useUpdateDestination } from "hooks/services/useDestinationHook";
119
import { useDeleteModal } from "hooks/useDeleteModal";
1210
import { useDestinationDefinition } from "services/connector/DestinationDefinitionService";
1311
import { useGetDestinationDefinitionSpecification } from "services/connector/DestinationDefinitionSpecificationService";
1412
import { ConnectorCard } from "views/Connector/ConnectorCard";
1513
import { ConnectorCardValues } from "views/Connector/ConnectorForm/types";
1614

1715
import styles from "./DestinationSettings.module.scss";
16+
import { DestinationOutletContext } from "../types";
1817

1918
export const DestinationSettingsPage: React.FC = () => {
20-
const params = useParams() as { "*": StepsTypes | ""; id: string };
21-
const destination = useGetDestination(params.id);
19+
const { destination } = useOutletContext<DestinationOutletContext>();
2220
const { connections: connectionsWithDestination } = useConnectionList({ destinationId: [destination.destinationId] });
2321
const destinationSpecification = useGetDestinationDefinitionSpecification(destination.destinationDefinitionId);
2422
const destinationDefinition = useDestinationDefinition(destination.destinationDefinitionId);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { DestinationRead } from "core/request/AirbyteClient";
2+
3+
export interface DestinationOutletContext {
4+
destination: DestinationRead;
5+
}

0 commit comments

Comments
 (0)