Skip to content

Commit 22fc241

Browse files
authored
🪟 🔧 Don't request destination/source definition in <ConnectionInfoCard /> directly, use useConnectionFormService() instead (#21869)
* don't request destination definition in ConnectionInfoCard directly, use useConnectionFormService instead * add source mock: SourceDefinition and SourceDefinitionSpecification * update and fix tests * fix pr comment: use reference the source and destination icons off of the top-level source and destination objects instead of the definitions
1 parent 39a8d1e commit 22fc241

File tree

8 files changed

+502
-19
lines changed

8 files changed

+502
-19
lines changed

airbyte-webapp/src/components/connection/ConnectionInfoCard/ConnectionInfoCard.test.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { render } from "@testing-library/react";
2-
import { mockDestinationDefinitionSpecification } from "test-utils/mock-data/mockDestinationDefinitionSpecification";
3-
import { mockSourceDefinition } from "test-utils/mock-data/mockSourceDefinition";
2+
import { mockDestinationDefinition } from "test-utils/mock-data/mockDestination";
3+
import { mockSourceDefinition } from "test-utils/mock-data/mockSource";
44
import { mockConnection, TestWrapper } from "test-utils/testutils";
55

66
import { ConnectionStatus, SchemaChange } from "core/request/AirbyteClient";
@@ -15,12 +15,11 @@ jest.doMock("hooks/services/ConnectionEdit/ConnectionEditService", () => ({
1515
useConnectionEditService: mockUseConnectionEditService,
1616
}));
1717

18-
jest.doMock("services/connector/SourceDefinitionService", () => ({
19-
useSourceDefinition: () => mockSourceDefinition,
20-
}));
21-
22-
jest.doMock("services/connector/DestinationDefinitionService", () => ({
23-
useDestinationDefinition: () => mockDestinationDefinitionSpecification,
18+
jest.doMock("hooks/services/ConnectionForm/ConnectionFormService.tsx", () => ({
19+
useConnectionFormService: () => ({
20+
sourceDefinition: mockSourceDefinition,
21+
destDefinition: mockDestinationDefinition,
22+
}),
2423
}));
2524

2625
jest.doMock("components/connection/ConnectionForm/refreshSourceSchemaWithConfirmationOnDirty", () => ({

airbyte-webapp/src/components/connection/ConnectionInfoCard/ConnectionInfoCard.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ import { ConnectorCard } from "components";
99
import { ConnectionStatus } from "core/request/AirbyteClient";
1010
import { useSchemaChanges } from "hooks/connection/useSchemaChanges";
1111
import { useConnectionEditService } from "hooks/services/ConnectionEdit/ConnectionEditService";
12+
import { useConnectionFormService } from "hooks/services/ConnectionForm/ConnectionFormService";
1213
import { FeatureItem, useFeature } from "hooks/services/Feature";
1314
import { RoutePaths } from "pages/routePaths";
14-
import { useDestinationDefinition } from "services/connector/DestinationDefinitionService";
15-
import { useSourceDefinition } from "services/connector/SourceDefinitionService";
1615

1716
import styles from "./ConnectionInfoCard.module.scss";
1817
import { EnabledControl } from "./EnabledControl";
@@ -24,8 +23,7 @@ export const ConnectionInfoCard: React.FC = () => {
2423
schemaHasBeenRefreshed,
2524
} = useConnectionEditService();
2625
const { hasSchemaChanges, hasBreakingSchemaChange, hasNonBreakingSchemaChange } = useSchemaChanges(schemaChange);
27-
const sourceDefinition = useSourceDefinition(source.sourceDefinitionId);
28-
const destinationDefinition = useDestinationDefinition(destination.destinationDefinitionId);
26+
const { sourceDefinition, destDefinition } = useConnectionFormService();
2927

3028
const hasAllowSyncFeature = useFeature(FeatureItem.AllowSync);
3129

@@ -52,7 +50,7 @@ export const ConnectionInfoCard: React.FC = () => {
5250
>
5351
<ConnectorCard
5452
connectionName={source.sourceName}
55-
icon={sourceDefinition?.icon}
53+
icon={source?.icon}
5654
connectorName={source.name}
5755
releaseStage={sourceDefinition?.releaseStage}
5856
/>
@@ -65,9 +63,9 @@ export const ConnectionInfoCard: React.FC = () => {
6563
>
6664
<ConnectorCard
6765
connectionName={destination.destinationName}
68-
icon={destinationDefinition?.icon}
66+
icon={destination?.icon}
6967
connectorName={destination.name}
70-
releaseStage={destinationDefinition?.releaseStage}
68+
releaseStage={destDefinition?.releaseStage}
7169
/>
7270
</Link>
7371
</div>

airbyte-webapp/src/components/connection/CreateConnectionForm/CreateConnectionForm.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,22 @@ import {
88
mockDestinationDefinition,
99
mockDestinationDefinitionSpecification,
1010
} from "test-utils/mock-data/mockDestination";
11+
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
1112
import { TestWrapper } from "test-utils/testutils";
1213

1314
import { defaultOssFeatures, FeatureItem } from "hooks/services/Feature";
1415
import * as sourceHook from "hooks/services/useSourceHook";
1516

1617
import { CreateConnectionForm } from "./CreateConnectionForm";
1718

19+
jest.mock("services/connector/SourceDefinitionService", () => ({
20+
useSourceDefinition: () => mockSourceDefinition,
21+
}));
22+
23+
jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
24+
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
25+
}));
26+
1827
jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
1928
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
2029
}));

airbyte-webapp/src/hooks/services/ConnectionEdit/ConnectionEditService.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
mockDestinationDefinition,
77
mockDestinationDefinitionSpecification,
88
} from "test-utils/mock-data/mockDestination";
9+
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
910
import { mockWorkspace } from "test-utils/mock-data/mockWorkspace";
1011
import { TestWrapper } from "test-utils/testutils";
1112

@@ -14,6 +15,14 @@ import { WebBackendConnectionRead, WebBackendConnectionUpdate } from "core/reque
1415
import { ConnectionEditServiceProvider, useConnectionEditService } from "./ConnectionEditService";
1516
import { useConnectionFormService } from "../ConnectionForm/ConnectionFormService";
1617

18+
jest.mock("services/connector/SourceDefinitionService", () => ({
19+
useSourceDefinition: () => mockSourceDefinition,
20+
}));
21+
22+
jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
23+
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
24+
}));
25+
1726
jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
1827
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
1928
}));

airbyte-webapp/src/hooks/services/ConnectionForm/ConnectionFormService.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
mockDestinationDefinition,
66
mockDestinationDefinitionSpecification,
77
} from "test-utils/mock-data/mockDestination";
8+
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
89
import { mockWorkspace } from "test-utils/mock-data/mockWorkspace";
910
import { TestWrapper } from "test-utils/testutils";
1011

@@ -16,6 +17,14 @@ import {
1617
useConnectionFormService,
1718
} from "./ConnectionFormService";
1819

20+
jest.mock("services/connector/SourceDefinitionService", () => ({
21+
useSourceDefinition: () => mockSourceDefinition,
22+
}));
23+
24+
jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
25+
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
26+
}));
27+
1928
jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
2029
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
2130
}));

airbyte-webapp/src/hooks/services/ConnectionForm/ConnectionFormService.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@ import {
1414
DestinationDefinitionRead,
1515
DestinationDefinitionSpecificationRead,
1616
OperationRead,
17+
SourceDefinitionRead,
18+
SourceDefinitionSpecificationRead,
1719
WebBackendConnectionRead,
1820
} from "core/request/AirbyteClient";
1921
import { useNewTableDesignExperiment } from "hooks/connection/useNewTableDesignExperiment";
2022
import { useDestinationDefinition } from "services/connector/DestinationDefinitionService";
2123
import { useGetDestinationDefinitionSpecification } from "services/connector/DestinationDefinitionSpecificationService";
24+
import { useSourceDefinition } from "services/connector/SourceDefinitionService";
25+
import { useGetSourceDefinitionSpecification } from "services/connector/SourceDefinitionSpecificationService";
2226
import { FormError, generateMessageFromError } from "utils/errorStatusMessage";
2327

2428
import { useUniqueFormId } from "../FormChangeTracker";
@@ -61,6 +65,8 @@ export const tidyConnectionFormValues = (
6165
interface ConnectionFormHook {
6266
connection: ConnectionOrPartialConnection;
6367
mode: ConnectionFormMode;
68+
sourceDefinition: SourceDefinitionRead;
69+
sourceDefinitionSpecification: SourceDefinitionSpecificationRead;
6470
destDefinition: DestinationDefinitionRead;
6571
destDefinitionSpecification: DestinationDefinitionSpecificationRead;
6672
initialValues: FormikConnectionFormValues;
@@ -77,10 +83,16 @@ const useConnectionForm = ({
7783
schemaError,
7884
refreshSchema,
7985
}: ConnectionServiceProps): ConnectionFormHook => {
80-
const destDefinition = useDestinationDefinition(connection.destination.destinationDefinitionId);
81-
const destDefinitionSpecification = useGetDestinationDefinitionSpecification(
82-
connection.destination.destinationDefinitionId
83-
);
86+
const {
87+
source: { sourceDefinitionId },
88+
destination: { destinationDefinitionId },
89+
} = connection;
90+
91+
const sourceDefinition = useSourceDefinition(sourceDefinitionId);
92+
const sourceDefinitionSpecification = useGetSourceDefinitionSpecification(sourceDefinitionId);
93+
const destDefinition = useDestinationDefinition(destinationDefinitionId);
94+
const destDefinitionSpecification = useGetDestinationDefinitionSpecification(destinationDefinitionId);
95+
8496
const initialValues = useInitialValues(connection, destDefinition, destDefinitionSpecification, mode !== "create");
8597
const { formatMessage } = useIntl();
8698
const [submitError, setSubmitError] = useState<FormError | null>(null);
@@ -109,6 +121,8 @@ const useConnectionForm = ({
109121
return {
110122
connection,
111123
mode,
124+
sourceDefinition,
125+
sourceDefinitionSpecification,
112126
destDefinition,
113127
destDefinitionSpecification,
114128
initialValues,

airbyte-webapp/src/pages/connections/ConnectionReplicationPage/ConnectionReplicationPage.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
mockDestinationDefinition,
1111
mockDestinationDefinitionSpecification,
1212
} from "test-utils/mock-data/mockDestination";
13+
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
1314
import { mockWorkspace } from "test-utils/mock-data/mockWorkspace";
1415
import { mockWorkspaceId } from "test-utils/mock-data/mockWorkspaceId";
1516
import { TestWrapper } from "test-utils/testutils";
@@ -21,6 +22,14 @@ import * as connectionHook from "hooks/services/useConnectionHook";
2122

2223
import { ConnectionReplicationPage } from "./ConnectionReplicationPage";
2324

25+
jest.mock("services/connector/SourceDefinitionService", () => ({
26+
useSourceDefinition: () => mockSourceDefinition,
27+
}));
28+
29+
jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
30+
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
31+
}));
32+
2433
jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
2534
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
2635
}));

0 commit comments

Comments
 (0)