Skip to content

Commit f2f17af

Browse files
Joe ReuterTim Roeslmossman
authored
🪟🎉 Connector builder: Add manual schema (#20862)
* improve some types * improve further * clean up a bit more * refactor loading state * move loading state up * remove isLoading references * remove unused props and make fetch connector error work * remove special component for name * remove top level state for unifinished flows * start removing uiwidget * Update airbyte-webapp/src/views/Connector/ConnectorCard/ConnectorCard.module.scss Co-authored-by: Tim Roes <[email protected]> * remove undefined option for selected id * remove unused prop * fix types * remove uiwidget state * clean up * adjust comment * handle errors in a nice way * do not respect default on oneOf fields * rename to formblock * reduce re-renders * pass error to secure inputs * simplify and improve styling * align top * code review * remove comment * review comments * rename file * be strict about boolean values * add example * track form error in error boundary * review comments * handle unexpected cases better * enrich error with connector id * 🪟🎉 Add copy stream button (#20577) * add copy stream button * review comments * rename prop * 🪟🎉 Connector builder: Integrate connector form for test input (#20385) * move connector builder components into the same shared components/connectorBuilder directory * move diff over from poc branch * save current progress * add modal for adding streams * focus stream after adding and reset button style * add reset confirm modal and select view on add * style global config and streams buttons * styling improvements * handle long stream names better * pull in connector manifest schema directly * add box shadows to resizable panels * upgrade orval and use connector manifest schema directly * remove airbyte protocol from connector builder api spec * generate python models from openapi change * fix position of yaml toggle * handle no stream case with better looking message * group global fields into single object and fix console error * confirmation modal on toggling dirty form + cleanup * fix connector name display * undo change to manifest schema * remove commented code * remove unnecessary change * fix spacing * use shadow mixin for connector img * add comment about connector img * change onSubmit to no-op * remove console log * clean up styling * simplify sidebar to remove StreamSelectButton component * swap colors of toggle * move FormikPatch to src/core/form * move types up to connectorBuilder/ level * use grid display for ui yaml toggle button * use spread instead of setting array index directly * add intl in missing places * pull connector manifest schema in through separate openapi spec * use correct intl string id * throttle setting json manifest in yaml editor * use button prop instead of manually styling * consolidate AddStreamButton styles * fix sidebar flex styles * use specific flex properties instead of flex * clean up download and reset button styles * use row-reverse for yaml editor download button * fix stream selector styles to remove margins * give connector setup guide panel same corner and shadow styles * remove blur from page display * set view to stream when selected in test panel * add placeholder when stream name is empty * switch to index-based stream selection to preserve testing panel selected stream on rename * handle empty name in stream selector * make connector form work in connector builder * fix small stuff * add warning label * review comments * adjust translation Co-authored-by: lmossman <[email protected]> * use request_body_json instead of request_body_data * 🪟 🎨 Move `Add` button into the line of Connector Builder key value list fields (#20699) * move add button into line * add stories for empty with control, and content + control * change button name to Control * 🪟🎉 Connector builder: Allow defining inputs (#20431) * move connector builder components into the same shared components/connectorBuilder directory * move diff over from poc branch * save current progress * add modal for adding streams * focus stream after adding and reset button style * add reset confirm modal and select view on add * style global config and streams buttons * styling improvements * handle long stream names better * pull in connector manifest schema directly * add box shadows to resizable panels * upgrade orval and use connector manifest schema directly * remove airbyte protocol from connector builder api spec * generate python models from openapi change * fix position of yaml toggle * handle no stream case with better looking message * group global fields into single object and fix console error * confirmation modal on toggling dirty form + cleanup * fix connector name display * undo change to manifest schema * remove commented code * remove unnecessary change * fix spacing * use shadow mixin for connector img * add comment about connector img * change onSubmit to no-op * remove console log * clean up styling * simplify sidebar to remove StreamSelectButton component * swap colors of toggle * move FormikPatch to src/core/form * move types up to connectorBuilder/ level * use grid display for ui yaml toggle button * use spread instead of setting array index directly * add intl in missing places * pull connector manifest schema in through separate openapi spec * use correct intl string id * throttle setting json manifest in yaml editor * use button prop instead of manually styling * consolidate AddStreamButton styles * fix sidebar flex styles * use specific flex properties instead of flex * clean up download and reset button styles * use row-reverse for yaml editor download button * fix stream selector styles to remove margins * give connector setup guide panel same corner and shadow styles * remove blur from page display * set view to stream when selected in test panel * add placeholder when stream name is empty * switch to index-based stream selection to preserve testing panel selected stream on rename * handle empty name in stream selector * make connector form work in connector builder * wip * fix small stuff * add basic input UI * user inputs * make most of inputs configuration work * fix a bunch of stuff * handle unknown config types * add warning label * fix label * fix some styling * review comments * improve state management and error handling * handle stored form values that don't contain new fields properly * Update airbyte-webapp/src/locales/en.json Co-authored-by: Lake Mossman <[email protected]> * Update airbyte-webapp/src/components/connectorBuilder/Builder/InputsView.tsx Co-authored-by: Lake Mossman <[email protected]> * inputs editing weirdness * input form reset * using the Label component * 🪟🎉 Connector builder authentication (#20645) * allow auth configuration * check for conflicts with the inferred inputs * fix invisible inputs * reduce redundancy and hide advanced input options for inferred inputs * unnecessary validation * typo * unnecessary effect hook * build spec even for invalid forms but do not update stream list * fix keys * 🪟🎉 Connector builder: Session token and oauth authentication (#20712) * session token and oauth authentication * fill in session token variable * typos * make sure validation error does not go away * 🪟🎉 Connector builder: Always validate inputs form (#20664) * validate user input outside of form * review comments Co-authored-by: lmossman <[email protected]> Co-authored-by: lmossman <[email protected]> * fix merge conflict with dropdown prop being renamed to control * [Connector Builder] Add paginator (#20698) * move connector builder components into the same shared components/connectorBuilder directory * move diff over from poc branch * save current progress * add modal for adding streams * focus stream after adding and reset button style * add reset confirm modal and select view on add * style global config and streams buttons * styling improvements * handle long stream names better * pull in connector manifest schema directly * add box shadows to resizable panels * upgrade orval and use connector manifest schema directly * remove airbyte protocol from connector builder api spec * generate python models from openapi change * fix position of yaml toggle * handle no stream case with better looking message * group global fields into single object and fix console error * confirmation modal on toggling dirty form + cleanup * fix connector name display * undo change to manifest schema * remove commented code * remove unnecessary change * fix spacing * use shadow mixin for connector img * add comment about connector img * change onSubmit to no-op * remove console log * clean up styling * simplify sidebar to remove StreamSelectButton component * swap colors of toggle * move FormikPatch to src/core/form * move types up to connectorBuilder/ level * use grid display for ui yaml toggle button * use spread instead of setting array index directly * add intl in missing places * pull connector manifest schema in through separate openapi spec * use correct intl string id * throttle setting json manifest in yaml editor * use button prop instead of manually styling * consolidate AddStreamButton styles * fix sidebar flex styles * use specific flex properties instead of flex * clean up download and reset button styles * use row-reverse for yaml editor download button * fix stream selector styles to remove margins * give connector setup guide panel same corner and shadow styles * remove blur from page display * set view to stream when selected in test panel * add placeholder when stream name is empty * switch to index-based stream selection to preserve testing panel selected stream on rename * handle empty name in stream selector * make connector form work in connector builder * wip * fix small stuff * add basic input UI * user inputs * make most of inputs configuration work * fix a bunch of stuff * handle unknown config types * add warning label * fix label * fix some styling * review comments * improve state management and error handling * allow auth configuration * check for conflicts with the inferred inputs * fix invisible inputs * handle stored form values that don't contain new fields properly * session token and oauth authentication * fill in session token variable * fix merge of default values * add primaryKey and cursorField to builder types, and consolidate default valeues to types.ts * add cursor and primary key fields to ui * save * add page size and token option inputs * fixes after rebase * add pagination * fix pagination types * handle empty field_name better * Update airbyte-webapp/src/locales/en.json Co-authored-by: Lake Mossman <[email protected]> * Update airbyte-webapp/src/components/connectorBuilder/Builder/InputsView.tsx Co-authored-by: Lake Mossman <[email protected]> * inputs editing weirdness * input form reset * using the Label component * reduce redundancy and hide advanced input options for inferred inputs * unnecessary validation * typo * unnecessary effect hook * build spec even for invalid forms but do not update stream list * typos * make sure validation error does not go away * make primary key and cursor optional, and reorder * save toggle group progress * fix style of toggle label * handle empty values better * fix page size/token option field validation and rendering * handle cursor pagination page size option correctly Co-authored-by: Joe Reuter <[email protected]> * [Connector Builder] Add stream slicer (#20748) * move connector builder components into the same shared components/connectorBuilder directory * move diff over from poc branch * save current progress * add modal for adding streams * focus stream after adding and reset button style * add reset confirm modal and select view on add * style global config and streams buttons * styling improvements * handle long stream names better * pull in connector manifest schema directly * add box shadows to resizable panels * upgrade orval and use connector manifest schema directly * remove airbyte protocol from connector builder api spec * generate python models from openapi change * fix position of yaml toggle * handle no stream case with better looking message * group global fields into single object and fix console error * confirmation modal on toggling dirty form + cleanup * fix connector name display * undo change to manifest schema * remove commented code * remove unnecessary change * fix spacing * use shadow mixin for connector img * add comment about connector img * change onSubmit to no-op * remove console log * clean up styling * simplify sidebar to remove StreamSelectButton component * swap colors of toggle * move FormikPatch to src/core/form * move types up to connectorBuilder/ level * use grid display for ui yaml toggle button * use spread instead of setting array index directly * add intl in missing places * pull connector manifest schema in through separate openapi spec * use correct intl string id * throttle setting json manifest in yaml editor * use button prop instead of manually styling * consolidate AddStreamButton styles * fix sidebar flex styles * use specific flex properties instead of flex * clean up download and reset button styles * use row-reverse for yaml editor download button * fix stream selector styles to remove margins * give connector setup guide panel same corner and shadow styles * remove blur from page display * set view to stream when selected in test panel * add placeholder when stream name is empty * switch to index-based stream selection to preserve testing panel selected stream on rename * handle empty name in stream selector * make connector form work in connector builder * wip * fix small stuff * add basic input UI * user inputs * make most of inputs configuration work * fix a bunch of stuff * handle unknown config types * add warning label * fix label * fix some styling * review comments * improve state management and error handling * allow auth configuration * check for conflicts with the inferred inputs * fix invisible inputs * handle stored form values that don't contain new fields properly * session token and oauth authentication * fill in session token variable * fix merge of default values * add primaryKey and cursorField to builder types, and consolidate default valeues to types.ts * add cursor and primary key fields to ui * save * add page size and token option inputs * fixes after rebase * add pagination * fix pagination types * handle empty field_name better * Update airbyte-webapp/src/locales/en.json Co-authored-by: Lake Mossman <[email protected]> * Update airbyte-webapp/src/components/connectorBuilder/Builder/InputsView.tsx Co-authored-by: Lake Mossman <[email protected]> * inputs editing weirdness * input form reset * using the Label component * reduce redundancy and hide advanced input options for inferred inputs * unnecessary validation * typo * unnecessary effect hook * build spec even for invalid forms but do not update stream list * typos * make sure validation error does not go away * make primary key and cursor optional, and reorder * save toggle group progress * fix style of toggle label * handle empty values better * fix page size/token option field validation and rendering * handle cursor pagination page size option correctly * save stream slicer progress * finish stream slicer * fix stream slicer fields and validation Co-authored-by: Joe Reuter <[email protected]> * debounce form builder values update to reduce load * 🪟🔧 Connector builder: use new lowcode manifest (#20715) * use new manifest yaml * Update airbyte-webapp/src/components/connectorBuilder/types.ts Co-authored-by: Lake Mossman <[email protected]> * use updated manifest types Co-authored-by: Lake Mossman <[email protected]> * add manual schema * make buttons not submit the form accidentally * debounce validation as well * akways show stream test button in error state if there are errors * fix type of oauth input * add validation schema for add stream form * validate all views on test click * add type to prevent console warning * improve error indicator * make schema editor take up full height (#21000) * prevent resizing card when error message is shown or hidden * Revert "improve error indicator" This reverts commit abb9c0b. Co-authored-by: Tim Roes <[email protected]> Co-authored-by: lmossman <[email protected]>
1 parent 2381403 commit f2f17af

File tree

6 files changed

+172
-49
lines changed

6 files changed

+172
-49
lines changed

airbyte-webapp/src/components/connectorBuilder/Builder/BuilderConfigView.module.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
display: flex;
66
flex-direction: column;
77
gap: variables.$spacing-md;
8+
height: 100%;
89
}
910

1011
.heading {

airbyte-webapp/src/components/connectorBuilder/Builder/BuilderOptional.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const BuilderOptional: React.FC<React.PropsWithChildren<unknown>> = ({ ch
1111
return (
1212
<div className={styles.wrapper}>
1313
<button
14+
type="button"
1415
onClick={() => {
1516
setIsOpen(!isOpen);
1617
}}

airbyte-webapp/src/components/connectorBuilder/Builder/StreamConfigView.module.scss

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ $controlButtonWidth: 24px;
66
.controls {
77
display: flex;
88
justify-content: center;
9-
gap: variables.$spacing-sm;
9+
align-items: center;
10+
gap: variables.$spacing-md;
1011
}
1112

1213
.controlButton {
@@ -33,6 +34,33 @@ $controlButtonWidth: 24px;
3334
}
3435
}
3536

37+
.tab {
38+
background: none;
39+
border: none;
40+
padding: variables.$spacing-md;
41+
border-bottom: variables.$border-thick solid transparent;
42+
color: colors.$grey-400;
43+
cursor: pointer;
44+
display: flex;
45+
gap: variables.$spacing-md;
46+
align-items: center;
47+
}
48+
49+
.selectedTab {
50+
color: colors.$black;
51+
border-bottom-color: colors.$yellow-900;
52+
}
53+
54+
.errorMessage {
55+
// hardcode height to prevent resizing when error message is hidden
56+
height: 16px;
57+
color: colors.$red;
58+
}
59+
60+
.schemaEditor {
61+
height: 100%;
62+
}
63+
3664
.multiStreams {
3765
padding-right: 50px;
3866
}

airbyte-webapp/src/components/connectorBuilder/Builder/StreamConfigView.tsx

Lines changed: 111 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import { faTrashCan, faCopy } from "@fortawesome/free-regular-svg-icons";
22
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
33
import classNames from "classnames";
44
import { useField } from "formik";
5-
import { useIntl } from "react-intl";
5+
import { useState } from "react";
6+
import { FormattedMessage, useIntl } from "react-intl";
7+
8+
import Indicator from "components/Indicator";
9+
import { CodeEditor } from "components/ui/CodeEditor";
10+
import { Text } from "components/ui/Text";
611

712
import { useConfirmationModalService } from "hooks/services/ConfirmationModal";
813
import { BuilderView, useConnectorBuilderState } from "services/connectorBuilder/ConnectorBuilderStateService";
@@ -26,6 +31,7 @@ interface StreamConfigViewProps {
2631
export const StreamConfigView: React.FC<StreamConfigViewProps> = ({ streamNum, hasMultipleStreams }) => {
2732
const { formatMessage } = useIntl();
2833
const [field, , helpers] = useField<BuilderStream[]>("streams");
34+
const [selectedTab, setSelectedTab] = useState<"configuration" | "schema">("configuration");
2935
const { openConfirmationModal, closeConfirmationModal } = useConfirmationModalService();
3036
const { setSelectedView, setTestStreamIndex } = useConnectorBuilderState();
3137

@@ -49,6 +55,9 @@ export const StreamConfigView: React.FC<StreamConfigViewProps> = ({ streamNum, h
4955
});
5056
};
5157

58+
const [, meta] = useField<string | undefined>(streamFieldPath("schema"));
59+
const hasSchemaErrors = Boolean(meta.error);
60+
5261
return (
5362
<BuilderConfigView
5463
heading={formatMessage({ id: "connectorBuilder.stream" })}
@@ -57,6 +66,17 @@ export const StreamConfigView: React.FC<StreamConfigViewProps> = ({ streamNum, h
5766
{/* Not using intl for the labels and tooltips in this component in order to keep maintainence simple */}
5867
<BuilderTitle path={streamFieldPath("name")} label="Stream Name" size="md" />
5968
<div className={styles.controls}>
69+
<StreamTab
70+
label={formatMessage({ id: "connectorBuilder.streamConfiguration" })}
71+
selected={selectedTab === "configuration"}
72+
onSelect={() => setSelectedTab("configuration")}
73+
/>
74+
<StreamTab
75+
label={formatMessage({ id: "connectorBuilder.streamSchema" })}
76+
selected={selectedTab === "schema"}
77+
onSelect={() => setSelectedTab("schema")}
78+
showErrorIndicator={hasSchemaErrors}
79+
/>
6080
<AddStreamButton
6181
onAddStream={(addedStreamNum) => {
6282
setSelectedView(addedStreamNum);
@@ -73,53 +93,96 @@ export const StreamConfigView: React.FC<StreamConfigViewProps> = ({ streamNum, h
7393
<FontAwesomeIcon icon={faTrashCan} />
7494
</button>
7595
</div>
76-
<BuilderCard>
77-
<BuilderField
78-
type="string"
79-
path={streamFieldPath("urlPath")}
80-
label="Path URL"
81-
tooltip="Path of the endpoint that this stream represents."
82-
/>
83-
<BuilderField
84-
type="enum"
85-
path={streamFieldPath("httpMethod")}
86-
options={["GET", "POST"]}
87-
label="HTTP Method"
88-
tooltip="HTTP method to use for requests sent to the API"
89-
/>
90-
<BuilderField
91-
type="array"
92-
path={streamFieldPath("fieldPointer")}
93-
label="Record selector"
94-
tooltip="Pointer into the response that should be extracted as the final record"
95-
/>
96-
<BuilderField
97-
type="array"
98-
path={streamFieldPath("primaryKey")}
99-
label="Primary key"
100-
tooltip="Pointer into the response that should be used as the primary key when deduplicating records in the destination"
101-
optional
102-
/>
103-
</BuilderCard>
104-
<PaginationSection streamFieldPath={streamFieldPath} currentStreamIndex={streamNum} />
105-
<StreamSlicerSection streamFieldPath={streamFieldPath} currentStreamIndex={streamNum} />
106-
<BuilderCard>
107-
<KeyValueListField
108-
path={streamFieldPath("requestOptions.requestParameters")}
109-
label="Request Parameters"
110-
tooltip="Parameters to attach to API requests"
111-
/>
112-
<KeyValueListField
113-
path={streamFieldPath("requestOptions.requestHeaders")}
114-
label="Request Headers"
115-
tooltip="Headers to attach to API requests"
116-
/>
117-
<KeyValueListField
118-
path={streamFieldPath("requestOptions.requestBody")}
119-
label="Request Body"
120-
tooltip="Body to attach to API requests as url-encoded form values"
121-
/>
122-
</BuilderCard>
96+
{selectedTab === "configuration" ? (
97+
<>
98+
<BuilderCard>
99+
<BuilderField
100+
type="string"
101+
path={streamFieldPath("urlPath")}
102+
label="Path URL"
103+
tooltip="Path of the endpoint that this stream represents."
104+
/>
105+
<BuilderField
106+
type="enum"
107+
path={streamFieldPath("httpMethod")}
108+
options={["GET", "POST"]}
109+
label="HTTP Method"
110+
tooltip="HTTP method to use for requests sent to the API"
111+
/>
112+
<BuilderField
113+
type="array"
114+
path={streamFieldPath("fieldPointer")}
115+
label="Record selector"
116+
tooltip="Pointer into the response that should be extracted as the final record"
117+
/>
118+
<BuilderField
119+
type="array"
120+
path={streamFieldPath("primaryKey")}
121+
label="Primary key"
122+
tooltip="Pointer into the response that should be used as the primary key when deduplicating records in the destination"
123+
optional
124+
/>
125+
</BuilderCard>
126+
<PaginationSection streamFieldPath={streamFieldPath} currentStreamIndex={streamNum} />
127+
<StreamSlicerSection streamFieldPath={streamFieldPath} currentStreamIndex={streamNum} />
128+
<BuilderCard>
129+
<KeyValueListField
130+
path={streamFieldPath("requestOptions.requestParameters")}
131+
label="Request Parameters"
132+
tooltip="Parameters to attach to API requests"
133+
/>
134+
<KeyValueListField
135+
path={streamFieldPath("requestOptions.requestHeaders")}
136+
label="Request Headers"
137+
tooltip="Headers to attach to API requests"
138+
/>
139+
<KeyValueListField
140+
path={streamFieldPath("requestOptions.requestBody")}
141+
label="Request Body"
142+
tooltip="Body to attach to API requests as url-encoded form values"
143+
/>
144+
</BuilderCard>
145+
</>
146+
) : (
147+
<BuilderCard className={styles.schemaEditor}>
148+
<SchemaEditor streamFieldPath={streamFieldPath} />
149+
</BuilderCard>
150+
)}
123151
</BuilderConfigView>
124152
);
125153
};
154+
155+
const StreamTab = ({
156+
selected,
157+
label,
158+
onSelect,
159+
showErrorIndicator,
160+
}: {
161+
selected: boolean;
162+
label: string;
163+
onSelect: () => void;
164+
showErrorIndicator?: boolean;
165+
}) => (
166+
<button type="button" className={classNames(styles.tab, { [styles.selectedTab]: selected })} onClick={onSelect}>
167+
{label}
168+
{showErrorIndicator && <Indicator />}
169+
</button>
170+
);
171+
172+
const SchemaEditor = ({ streamFieldPath }: { streamFieldPath: (fieldPath: string) => string }) => {
173+
const [field, meta, helpers] = useField<string | undefined>(streamFieldPath("schema"));
174+
175+
return (
176+
<>
177+
<CodeEditor
178+
value={field.value || ""}
179+
language="json"
180+
theme="airbyte-light"
181+
onChange={(val: string | undefined) => {
182+
helpers.setValue(val);
183+
}}
184+
/>
185+
<Text className={styles.errorMessage}>{meta.error && <FormattedMessage id={meta.error} />}</Text>
186+
</>
187+
);
188+
};

airbyte-webapp/src/components/connectorBuilder/types.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export interface BuilderStream {
6666
};
6767
paginator?: BuilderPaginator;
6868
streamSlicer?: SimpleRetrieverStreamSlicer;
69+
schema?: string;
6970
}
7071

7172
export const DEFAULT_BUILDER_FORM_VALUES: BuilderFormValues = {
@@ -274,6 +275,20 @@ export const builderFormValidationSchema = yup.object().shape({
274275
requestHeaders: yup.array().of(yup.array().of(yup.string())),
275276
requestBody: yup.array().of(yup.array().of(yup.string())),
276277
}),
278+
schema: yup.string().test({
279+
test: (val: string | undefined) => {
280+
if (!val) {
281+
return true;
282+
}
283+
try {
284+
JSON.parse(val);
285+
return true;
286+
} catch {
287+
return false;
288+
}
289+
},
290+
message: "connectorBuilder.invalidSchema",
291+
}),
277292
paginator: yup
278293
.object()
279294
.shape({
@@ -394,12 +409,24 @@ function builderFormAuthenticatorToAuthenticator(
394409
return globalSettings.authenticator as HttpRequesterAuthenticator;
395410
}
396411

412+
function parseSchemaString(schema?: string) {
413+
if (!schema) {
414+
return undefined;
415+
}
416+
try {
417+
return { type: "InlineSchemaLoader", schema: JSON.parse(schema) };
418+
} catch {
419+
return undefined;
420+
}
421+
}
422+
397423
export const convertToManifest = (values: BuilderFormValues): ConnectorManifest => {
398424
const manifestStreams: DeclarativeStream[] = values.streams.map((stream) => {
399425
return {
400426
type: "DeclarativeStream",
401427
name: stream.name,
402428
primary_key: stream.primaryKey,
429+
schema_loader: parseSchemaString(stream.schema),
403430
retriever: {
404431
type: "SimpleRetriever",
405432
name: stream.name,

airbyte-webapp/src/locales/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,9 @@
718718
"connectorBuilder.setInUserInput": "This setting is configured as part of the user inputs in the testing panel",
719719
"connectorBuilder.optionalFieldsLabel": "Optional fields",
720720
"connectorBuilder.duplicateFieldID": "Make sure no field ID is used multiple times",
721+
"connectorBuilder.streamConfiguration": "Configuration",
722+
"connectorBuilder.streamSchema": "Schema",
723+
"connectorBuilder.invalidSchema": "Invalid JSON - please fix schema to have it applied",
721724
"connectorBuilder.copyToPaginationTitle": "Copy pagination settings to...",
722725
"connectorBuilder.copyFromPaginationTitle": "Import pagination settings from...",
723726
"connectorBuilder.copyToSlicerTitle": "Copy slicing settings to...",

0 commit comments

Comments
 (0)