2a1273b683
* Added the new colours to the Tailwind config * Fixed Tsailwind compile errors * WIP Geist working in the app * WIP Storybook * Storybook is working again… ouch * Use Geist mono for CodeMirror * Some find/replace class changes * Resizable colours improved * WIP on primary button * Minor style improvements * Improve the side menu header styling * Improved v2 breadcrumbs * Account side menu tweaks * The page now works with the NavBar and UpgradePrompt * Removed unused import * Refactored the buttons to be dry-er * Removed the breadcrumbs * WIP on nav bar * WIP updating the button styles * Fix for the old test page * Fix for type errors * Removed console.log * Colour change in the resizable handle * New loading bar divider * Removed the design plugin * Creating our own storybook pages * Added some “storybook” pages * Added DetailCell storybook * WIP new animation for the loading page * Added the new loading divider * Fix for the time frame filter having a green border * Style improvements to the new test page * Small style improvements * Improvements to the list pagination components * Nav bar back button improved * Improvements to the run page * Lots of v2 style improvements * Help looks better * Improvements to the regenerate API key modal * More general improvements * Added section titles to our storybook * Added form stories * Fix for missing key prop * Loading bar is working * Fixed button submitting state * Fix for the test button icon * Code bg improved * Improved oauth buttons * Integration page header fix * Various improvements, mainly changing button variants * Segmented control style updates * Added an outline of 3px for the segment control * Fixes for the billing pages * More pricing improvements * Added dialog to storybook * Typography now in storybook * Free usage bar added to storybook * Added inline clode to storybook * Separated menu types into a sub section in storybook * NamedIcon now in storybook * Added page header to storybook * Added pricing callout to storybook * Added radio groups to storybook * Added segmented controllers to storybook * Added shortcuts to storybook * Added switches to storybook * Added toast to storybook * Added tooltips to storybook * Added tree view to storybook * Added usage charts to storybook * Tarted up the environment variables page * Fix for the FreePlanUsage panel bg colours * Added new badge variants * Added the <TaskPath /> to the tasks table * Span header improvements * Started work on the timeline * Started work on the timeline * Fix for the run page header * Timeline tick marks are working * Timeline working * Got the durations showing on hover * Button improvements * Experimenting with how the duration should be shown * Lots of refinements to the timeline * Much nicer API for the Timeline * The switch is now purple to match the design, with inverted thumb when on * Removed old stuff * Export the props * Added the span with duration back in * Simplified more and fixed the span durations * Put in some decent dummy data * Rendering defaults * Wip with the mouse cursor * Improvements to the story * Added Slider primitive * Integrated the icons into the slider * Lots of layout improvements * Cleaned up imports * “Root” indicator * Animated background on partials * Pull the styles through to the spans and log dots * Fixed some bugs in the TreeView when nodes get created or destroyed * Fix for incorrect parentTask reference * Added run streaming endpoint for live refreshing * Added the tabs to Storybook * Fix for status font size mismatch * Fix for the misaligned run filter status * Set a minimum duration on the timeline * The TreeView now re-calculates if the number of nodes has changed * Partials now render to the end * Improved the durations gutter * The duration is calculated using the current time if there are partial events * Added the environment label to storybook * Improved the environment label style * Removed bottom margin from badge * Button style improvements * Callouts style fits the new design better * Got the scrollbars to appear on the tree/timeline * Added scroll support * Synced scrolling working * Close button and exit icon for the detail panel * secure field shows start of env * Clipboard improvements * Latest lockfile * Fix for the durations wrapping --------- Co-authored-by: James Ritchie <james@jamesritchie.co.uk>
132 lines
4.5 KiB
TypeScript
132 lines
4.5 KiB
TypeScript
import { useState } from "react";
|
|
import { ApiAuthenticationMethodOAuth2, Integration } from "~/services/externalApis/types";
|
|
import { RadioGroup, RadioGroupItem } from "../primitives/RadioButton";
|
|
import type { ConnectionType } from "@trigger.dev/database";
|
|
import { Header2 } from "../primitives/Headers";
|
|
import { ConnectToOAuthForm } from "./ConnectToOAuthForm";
|
|
import { Paragraph } from "../primitives/Paragraph";
|
|
import { Client } from "~/presenters/IntegrationsPresenter.server";
|
|
import { UpdateOAuthForm } from "./UpdateOAuthForm";
|
|
import { LinkButton } from "../primitives/Buttons";
|
|
import { BookOpenIcon } from "@heroicons/react/20/solid";
|
|
|
|
export function SelectOAuthMethod({
|
|
integration,
|
|
organizationId,
|
|
callbackUrl,
|
|
existingIntegration,
|
|
}: {
|
|
existingIntegration?: Client;
|
|
integration: Integration;
|
|
organizationId: string;
|
|
callbackUrl: string;
|
|
}) {
|
|
const oAuthMethods = Object.entries(integration.authenticationMethods).filter(
|
|
(a): a is [string, ApiAuthenticationMethodOAuth2] => a[1].type === "oauth2"
|
|
);
|
|
|
|
const [oAuthKey, setOAuthKey] = useState<string | undefined>(
|
|
oAuthMethods.length === 1 ? oAuthMethods[0][0] : undefined
|
|
);
|
|
const [connectionType, setConnectionType] = useState<ConnectionType | undefined>();
|
|
|
|
const selectedOAuthMethod = oAuthKey
|
|
? (integration.authenticationMethods[oAuthKey] as ApiAuthenticationMethodOAuth2)
|
|
: undefined;
|
|
|
|
return (
|
|
<>
|
|
{oAuthMethods.length > 1 && (
|
|
<>
|
|
<Header2 className="mb-2 mt-4">Select an OAuth option</Header2>
|
|
<RadioGroup
|
|
name="oauth-method"
|
|
className="flex gap-2"
|
|
value={oAuthKey}
|
|
onValueChange={(v: any) => setOAuthKey(v)}
|
|
>
|
|
{oAuthMethods.map(([key, auth]) => (
|
|
<RadioGroupItem
|
|
key={key}
|
|
id={key}
|
|
value={key}
|
|
label={auth.name}
|
|
description={auth.description}
|
|
variant="description"
|
|
/>
|
|
))}
|
|
</RadioGroup>
|
|
</>
|
|
)}
|
|
{selectedOAuthMethod && (
|
|
<>
|
|
<Header2 className="mb-2 mt-4">Who is connecting to {integration.name}</Header2>
|
|
<RadioGroup
|
|
name="connection-type"
|
|
className="flex gap-2"
|
|
value={connectionType}
|
|
onValueChange={(v: any) => setConnectionType(v as ConnectionType)}
|
|
>
|
|
<RadioGroupItem
|
|
id="DEVELOPER"
|
|
value="DEVELOPER"
|
|
label="Developers"
|
|
description={`You will connect using an internal ${integration.name} account.`}
|
|
variant="description"
|
|
/>
|
|
<RadioGroupItem
|
|
id="EXTERNAL"
|
|
value="EXTERNAL"
|
|
label="Your users"
|
|
description="Use an external authentication provider or your own user database to provide auth credentails of your users."
|
|
variant="description"
|
|
/>
|
|
</RadioGroup>
|
|
</>
|
|
)}
|
|
{selectedOAuthMethod &&
|
|
connectionType &&
|
|
oAuthKey &&
|
|
(connectionType === "DEVELOPER" ? (
|
|
existingIntegration ? (
|
|
<UpdateOAuthForm
|
|
existingIntegration={existingIntegration}
|
|
integration={integration}
|
|
authMethod={selectedOAuthMethod}
|
|
authMethodKey={oAuthKey}
|
|
organizationId={organizationId}
|
|
clientType={connectionType}
|
|
callbackUrl={callbackUrl}
|
|
/>
|
|
) : (
|
|
<ConnectToOAuthForm
|
|
integration={integration}
|
|
authMethod={selectedOAuthMethod}
|
|
authMethodKey={oAuthKey}
|
|
organizationId={organizationId}
|
|
clientType={connectionType}
|
|
callbackUrl={callbackUrl}
|
|
/>
|
|
)
|
|
) : (
|
|
<>
|
|
<Header2 className="mb-1 mt-4">BYO Auth</Header2>
|
|
<Paragraph spacing>
|
|
We support external authentication providers through Auth Resolvers. Read the docs to
|
|
learn more:{" "}
|
|
<LinkButton
|
|
variant={"tertiary/small"}
|
|
LeadingIcon={BookOpenIcon}
|
|
TrailingIcon={"external-link"}
|
|
to="https://trigger.dev/docs/documentation/guides/using-integrations-byo-auth"
|
|
target="_blank"
|
|
>
|
|
Bring your own Auth
|
|
</LinkButton>
|
|
</Paragraph>
|
|
</>
|
|
))}
|
|
</>
|
|
);
|
|
}
|