Skip to content

Commit 0f26915

Browse files
Joe ReuterTim Roeslmossman
authored
🪟🎉 Connector builder UI: User inputs, request options, authentication, pagination, slicing (#20809)
* 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 <tim@airbyte.io> * 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 <lake@airbyte.io> * 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 <lake@airbyte.io> * Update airbyte-webapp/src/components/connectorBuilder/Builder/InputsView.tsx Co-authored-by: Lake Mossman <lake@airbyte.io> * 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 <lake@airbyte.io> Co-authored-by: lmossman <lake@airbyte.io> * 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 <lake@airbyte.io> * Update airbyte-webapp/src/components/connectorBuilder/Builder/InputsView.tsx Co-authored-by: Lake Mossman <lake@airbyte.io> * 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 <joe@airbyte.io> * [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 <lake@airbyte.io> * Update airbyte-webapp/src/components/connectorBuilder/Builder/InputsView.tsx Co-authored-by: Lake Mossman <lake@airbyte.io> * 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 <joe@airbyte.io> * 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 <lake@airbyte.io> * use updated manifest types Co-authored-by: Lake Mossman <lake@airbyte.io> * 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 Co-authored-by: Tim Roes <tim@airbyte.io> Co-authored-by: lmossman <lake@airbyte.io>
1 parent 6a68d1f commit 0f26915

File tree

58 files changed

+2531
-300
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2531
-300
lines changed

‎airbyte-webapp/src/components/GroupControls/GroupControls.module.scss‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@ $border-width: variables.$border-thick;
3636
white-space: nowrap;
3737
}
3838

39-
.dropdown {
39+
.control {
4040
margin-left: auto;
4141
padding: 0 variables.$spacing-xs;
4242
background-color: colors.$white;
43-
min-width: calc(50% - 100px);
4443
}
4544

4645
.content {

‎airbyte-webapp/src/components/GroupControls/GroupControls.tsx‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
1+
import classNames from "classnames";
12
import React from "react";
23

34
import styles from "./GroupControls.module.scss";
45

56
interface GroupControlsProps {
67
label: React.ReactNode;
7-
dropdown?: React.ReactNode;
8+
control?: React.ReactNode;
9+
controlClassName?: string;
810
name?: string;
911
}
1012

11-
const GroupControls: React.FC<React.PropsWithChildren<GroupControlsProps>> = ({ label, dropdown, children, name }) => {
13+
const GroupControls: React.FC<React.PropsWithChildren<GroupControlsProps>> = ({
14+
label,
15+
control,
16+
children,
17+
name,
18+
controlClassName,
19+
}) => {
1220
return (
1321
// This outer div is necessary for .content > :first-child padding to be properly applied in the case of nested GroupControls
1422
<div>
1523
<div className={styles.container}>
1624
<div className={styles.title}>
1725
<div className={styles.label}>{label}</div>
18-
<div className={styles.dropdown}>{dropdown}</div>
26+
<div className={classNames(styles.control, controlClassName)}>{control}</div>
1927
</div>
2028
<div className={styles.content} data-testid={name}>
2129
{children}

‎airbyte-webapp/src/components/GroupControls/index.stories.tsx‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ComponentStory, ComponentMeta } from "@storybook/react";
22

3+
import { Button } from "components/ui/Button";
34
import { Card } from "components/ui/Card";
45

56
import { FormBlock, FormConditionItem } from "core/form/types";
@@ -73,3 +74,21 @@ WithContent.args = {
7374
</>
7475
),
7576
};
77+
78+
export const EmptyWithControl = Template.bind({});
79+
EmptyWithControl.args = {
80+
label,
81+
control: <Button variant="secondary">Control</Button>,
82+
};
83+
84+
export const ControlAndContent = Template.bind({});
85+
ControlAndContent.args = {
86+
label,
87+
control: <Button variant="secondary">Control</Button>,
88+
children: (
89+
<>
90+
<SectionContainer>Content part 1</SectionContainer>
91+
<SectionContainer>Content part 2</SectionContainer>
92+
</>
93+
),
94+
};

‎airbyte-webapp/src/components/connectorBuilder/Builder/AddStreamButton.tsx‎

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import { Form, Formik, useField } from "formik";
2+
import merge from "lodash/merge";
23
import { useState } from "react";
4+
import React from "react";
35
import { FormattedMessage, useIntl } from "react-intl";
6+
import * as yup from "yup";
47

58
import { Button } from "components/ui/Button";
69
import { Modal, ModalBody, ModalFooter } from "components/ui/Modal";
710

811
import { FormikPatch } from "core/form/FormikPatch";
912

1013
import { ReactComponent as PlusIcon } from "../../connection/ConnectionOnboarding/plusIcon.svg";
11-
import { BuilderStream } from "../types";
14+
import { BuilderStream, DEFAULT_BUILDER_STREAM_VALUES } from "../types";
1215
import styles from "./AddStreamButton.module.scss";
1316
import { BuilderField } from "./BuilderField";
1417

@@ -19,44 +22,48 @@ interface AddStreamValues {
1922

2023
interface AddStreamButtonProps {
2124
onAddStream: (addedStreamNum: number) => void;
25+
button?: React.ReactElement;
26+
initialValues?: Partial<BuilderStream>;
2227
}
2328

24-
export const AddStreamButton: React.FC<AddStreamButtonProps> = ({ onAddStream }) => {
29+
export const AddStreamButton: React.FC<AddStreamButtonProps> = ({ onAddStream, button, initialValues }) => {
2530
const { formatMessage } = useIntl();
2631
const [isOpen, setIsOpen] = useState(false);
2732
const [streamsField, , helpers] = useField<BuilderStream[]>("streams");
2833
const numStreams = streamsField.value.length;
2934

35+
const buttonClickHandler = () => {
36+
setIsOpen(true);
37+
};
38+
3039
return (
3140
<>
32-
<Button
33-
className={styles.addButton}
34-
onClick={() => {
35-
setIsOpen(true);
36-
}}
37-
icon={<PlusIcon />}
38-
/>
41+
{button ? (
42+
React.cloneElement(button, {
43+
onClick: buttonClickHandler,
44+
})
45+
) : (
46+
<Button className={styles.addButton} onClick={buttonClickHandler} icon={<PlusIcon />} />
47+
)}
3948
{isOpen && (
4049
<Formik
4150
initialValues={{ streamName: "", urlPath: "" }}
4251
onSubmit={(values: AddStreamValues) => {
4352
helpers.setValue([
4453
...streamsField.value,
45-
{
54+
merge({}, DEFAULT_BUILDER_STREAM_VALUES, {
55+
...initialValues,
4656
name: values.streamName,
4757
urlPath: values.urlPath,
48-
fieldPointer: [],
49-
httpMethod: "GET",
50-
requestOptions: {
51-
requestParameters: [],
52-
requestHeaders: [],
53-
requestBody: [],
54-
},
55-
},
58+
}),
5659
]);
5760
setIsOpen(false);
5861
onAddStream(numStreams);
5962
}}
63+
validationSchema={yup.object().shape({
64+
streamName: yup.string().required("form.empty.error"),
65+
urlPath: yup.string().required("form.empty.error"),
66+
})}
6067
>
6168
<>
6269
<FormikPatch />
@@ -71,13 +78,13 @@ export const AddStreamButton: React.FC<AddStreamButtonProps> = ({ onAddStream })
7178
<ModalBody className={styles.body}>
7279
<BuilderField
7380
path="streamName"
74-
type="text"
81+
type="string"
7582
label={formatMessage({ id: "connectorBuilder.addStreamModal.streamNameLabel" })}
7683
tooltip={formatMessage({ id: "connectorBuilder.addStreamModal.streamNameTooltip" })}
7784
/>
7885
<BuilderField
7986
path="urlPath"
80-
type="text"
87+
type="string"
8188
label={formatMessage({ id: "connectorBuilder.addStreamModal.urlPathLabel" })}
8289
tooltip={formatMessage({ id: "connectorBuilder.addStreamModal.urlPathTooltip" })}
8390
/>
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import { BuilderCard } from "./BuilderCard";
2+
import { BuilderField } from "./BuilderField";
3+
import { BuilderOneOf } from "./BuilderOneOf";
4+
import { BuilderOptional } from "./BuilderOptional";
5+
import { KeyValueListField } from "./KeyValueListField";
6+
import { UserInputField } from "./UserInputField";
7+
8+
export const AuthenticationSection: React.FC = () => {
9+
return (
10+
<BuilderCard>
11+
<BuilderOneOf
12+
path="global.authenticator"
13+
label="Authentication"
14+
tooltip="Authentication method to use for requests sent to the API"
15+
options={[
16+
{ label: "No Auth", typeValue: "NoAuth" },
17+
{
18+
label: "API Key",
19+
typeValue: "ApiKeyAuthenticator",
20+
default: {
21+
api_token: "{{ config['api_key'] }}",
22+
header: "",
23+
},
24+
children: (
25+
<>
26+
<BuilderField
27+
type="string"
28+
path="global.authenticator.header"
29+
label="Header"
30+
tooltip="HTTP header which should be set to the API Key"
31+
/>
32+
<UserInputField
33+
label="API Key"
34+
tooltip="The API key issued by the service. Fill it in in the user inputs"
35+
/>
36+
</>
37+
),
38+
},
39+
{
40+
label: "Bearer",
41+
typeValue: "BearerAuthenticator",
42+
default: {
43+
api_token: "{{ config['api_key'] }}",
44+
},
45+
children: (
46+
<UserInputField
47+
label="API Key"
48+
tooltip="The API key issued by the service. Fill it in in the user inputs"
49+
/>
50+
),
51+
},
52+
{
53+
label: "Basic HTTP",
54+
typeValue: "BasicHttpAuthenticator",
55+
default: {
56+
username: "{{ config['username'] }}",
57+
password: "{{ config['password'] }}",
58+
},
59+
children: (
60+
<>
61+
<UserInputField label="Username" tooltip="The username for the login. Fill it in in the user inputs" />
62+
<UserInputField label="Password" tooltip="The password for the login. Fill it in in the user inputs" />
63+
</>
64+
),
65+
},
66+
{
67+
label: "OAuth",
68+
typeValue: "OAuthAuthenticator",
69+
default: {
70+
client_id: "{{ config['client_id'] }}",
71+
client_secret: "{{ config['client_secret'] }}",
72+
refresh_token: "{{ config['client_refresh_token'] }}",
73+
refresh_request_body: [],
74+
token_refresh_endpoint: "",
75+
},
76+
children: (
77+
<>
78+
<BuilderField
79+
type="string"
80+
path="global.authenticator.token_refresh_endpoint"
81+
label="Token refresh endpoint"
82+
tooltip="The URL to call to obtain a new access token"
83+
/>
84+
<UserInputField label="Client ID" tooltip="The OAuth client ID" />
85+
<UserInputField label="Client secret" tooltip="The OAuth client secret" />
86+
<UserInputField label="Refresh token" tooltip="The OAuth refresh token" />
87+
<BuilderOptional>
88+
<BuilderField
89+
type="array"
90+
path="global.authenticator.scopes"
91+
optional
92+
label="Scopes"
93+
tooltip="Scopes to request"
94+
/>
95+
<BuilderField
96+
type="string"
97+
path="global.authenticator.token_expiry_date_format"
98+
optional
99+
label="Token expiry date format"
100+
tooltip="The format of the expiry date of the access token as obtained from the refresh endpoint"
101+
/>
102+
<BuilderField
103+
type="string"
104+
path="global.authenticator.expires_in_name"
105+
optional
106+
label="Token expiry property name"
107+
tooltip="The name of the property which contains the token exipiry date in the response from the token refresh endpoint"
108+
/>
109+
<BuilderField
110+
type="string"
111+
path="global.authenticator.access_token_name"
112+
optional
113+
label="Access token property name"
114+
tooltip="The name of the property which contains the access token in the response from the token refresh endpoint"
115+
/>
116+
<BuilderField
117+
type="string"
118+
path="global.authenticator.grant_type"
119+
optional
120+
label="Grant type"
121+
tooltip="The grant type to request for access_token"
122+
/>
123+
<KeyValueListField
124+
path="global.authenticator.refresh_request_body"
125+
label="Request Parameters"
126+
tooltip="The request body to send in the refresh request"
127+
/>
128+
</BuilderOptional>
129+
</>
130+
),
131+
},
132+
{
133+
label: "Session token",
134+
typeValue: "SessionTokenAuthenticator",
135+
default: {
136+
username: "{{ config['username'] }}",
137+
password: "{{ config['password'] }}",
138+
session_token: "{{ config['session_token'] }}",
139+
},
140+
children: (
141+
<>
142+
<BuilderField
143+
type="string"
144+
path="global.authenticator.header"
145+
label="Header"
146+
tooltip="Specific HTTP header of source API for providing session token"
147+
/>
148+
<BuilderField
149+
type="string"
150+
path="global.authenticator.session_token_response_key"
151+
label="Session token response key"
152+
tooltip="Key for retrieving session token from api response"
153+
/>
154+
<BuilderField
155+
type="string"
156+
path="global.authenticator.login_url"
157+
label="Login url"
158+
tooltip="Url for getting a specific session token"
159+
/>
160+
<BuilderField
161+
type="string"
162+
path="global.authenticator.validate_session_url"
163+
label="Validate session url"
164+
tooltip="Url to validate passed session token"
165+
/>
166+
<UserInputField label="Username" tooltip="The username" />
167+
<UserInputField label="Password" tooltip="The password" />
168+
<UserInputField
169+
label="Session token"
170+
tooltip="Session token generated by user (if provided username and password are not required)"
171+
/>
172+
</>
173+
),
174+
},
175+
]}
176+
/>
177+
</BuilderCard>
178+
);
179+
};

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@
1818
.form {
1919
flex: 1;
2020
padding: variables.$spacing-xl;
21+
overflow: auto;
2122
}

0 commit comments

Comments
 (0)