Skip to content

Commit 8faee3e

Browse files
committed
style: oxfmt two react files left unformatted by the merge
1 parent 6715100 commit 8faee3e

2 files changed

Lines changed: 24 additions & 74 deletions

File tree

packages/react/src/components/accounts-section.tsx

Lines changed: 19 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ import { useEffect, useMemo, useState } from "react";
22
import { useAtomValue, useAtomSet } from "@effect/atom-react";
33
import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
44
import * as Exit from "effect/Exit";
5-
import {
6-
IntegrationSlug,
7-
type Connection,
8-
type Owner,
9-
} from "@executor-js/sdk/shared";
5+
import { IntegrationSlug, type Connection, type Owner } from "@executor-js/sdk/shared";
106
import type { IntegrationAccountHandoff } from "@executor-js/sdk/client";
117
import { toast } from "sonner";
128

@@ -84,10 +80,7 @@ function AccountRow(props: {
8480
<CardStackEntryTitle className="flex min-w-0 items-center gap-2">
8581
<span className="truncate">{displayLabel}</span>
8682
{needsReconsent ? (
87-
<Badge
88-
variant="outline"
89-
className="shrink-0 border-border text-muted-foreground"
90-
>
83+
<Badge variant="outline" className="shrink-0 border-border text-muted-foreground">
9184
Reconnect to grant access
9285
</Badge>
9386
) : null}
@@ -99,8 +92,7 @@ function AccountRow(props: {
9992
) : null}
10093
{needsReconsent ? (
10194
<CardStackEntryDescription className="mt-1 text-xs text-muted-foreground">
102-
This connection wasn't granted all the access this integration now
103-
needs.
95+
This connection wasn't granted all the access this integration now needs.
10496
</CardStackEntryDescription>
10597
) : null}
10698
</CardStackEntryContent>
@@ -129,11 +121,7 @@ function AccountRow(props: {
129121
<DropdownMenuItem className="text-sm" onClick={props.onReconnect}>
130122
Reconnect
131123
</DropdownMenuItem>
132-
<DropdownMenuItem
133-
variant="destructive"
134-
className="text-sm"
135-
onClick={props.onRemove}
136-
>
124+
<DropdownMenuItem variant="destructive" className="text-sm" onClick={props.onRemove}>
137125
Remove
138126
</DropdownMenuItem>
139127
</DropdownMenuContent>
@@ -155,9 +143,7 @@ function OwnerAccounts(props: {
155143
readonly declaredScopes: readonly string[] | undefined;
156144
}) {
157145
const { integration, owner } = props;
158-
const connections = useAtomValue(
159-
connectionsForIntegrationAtom({ integration, owner }),
160-
);
146+
const connections = useAtomValue(connectionsForIntegrationAtom({ integration, owner }));
161147
const doRemove = useAtomSet(removeConnectionOptimistic(owner), {
162148
mode: "promiseExit",
163149
});
@@ -174,9 +160,7 @@ function OwnerAccounts(props: {
174160
startErrorMessage: "Failed to reconnect",
175161
});
176162

177-
const rows: readonly Connection[] = AsyncResult.isSuccess(connections)
178-
? connections.value
179-
: [];
163+
const rows: readonly Connection[] = AsyncResult.isSuccess(connections) ? connections.value : [];
180164
if (rows.length === 0) return null;
181165

182166
const handleReconnect = async (connection: Connection) => {
@@ -185,8 +169,7 @@ function OwnerAccounts(props: {
185169
if (reconnectMode(connection) === "oauth") {
186170
const method = props.methods.find(
187171
(candidate: AuthMethod) =>
188-
candidate.kind === "oauth" &&
189-
String(candidate.template) === String(connection.template),
172+
candidate.kind === "oauth" && String(candidate.template) === String(connection.template),
190173
);
191174
if (
192175
method?.oauth?.supportsDynamicRegistration === true ||
@@ -293,18 +276,13 @@ function OwnerAccounts(props: {
293276

294277
return (
295278
<CardStack>
296-
{props.showOwnerLabels ? (
297-
<CardStackHeader>{ownerLabel(owner)}</CardStackHeader>
298-
) : null}
279+
{props.showOwnerLabels ? <CardStackHeader>{ownerLabel(owner)}</CardStackHeader> : null}
299280
<CardStackContent>
300281
{rows.map((connection: Connection) => (
301282
<AccountRow
302283
key={`${connection.owner}:${connection.integration}:${connection.name}`}
303284
connection={connection}
304-
needsReconsent={connectionNeedsReconsent(
305-
connection,
306-
props.declaredScopes,
307-
)}
285+
needsReconsent={connectionNeedsReconsent(connection, props.declaredScopes)}
308286
showOwnerLabel={props.showOwnerLabels}
309287
onEdit={() => props.onEdit(connection)}
310288
onReconnect={() => void handleReconnect(connection)}
@@ -335,14 +313,10 @@ export function AccountsSection(props: {
335313
removeCustomMethod,
336314
} = props;
337315
const [adding, setAdding] = useState(false);
338-
const [editingConnection, setEditingConnection] = useState<Connection | null>(
339-
null,
340-
);
341-
const [reconnectHandoff, setReconnectHandoff] =
342-
useState<IntegrationAccountHandoff | null>(null);
316+
const [editingConnection, setEditingConnection] = useState<Connection | null>(null);
317+
const [reconnectHandoff, setReconnectHandoff] = useState<IntegrationAccountHandoff | null>(null);
343318
const ownerDisplay = useOwnerDisplay();
344-
const canAddConnection =
345-
methods.length > 0 || createCustomMethod !== undefined;
319+
const canAddConnection = methods.length > 0 || createCustomMethod !== undefined;
346320

347321
useEffect(() => {
348322
if (accountHandoff) {
@@ -364,9 +338,7 @@ export function AccountsSection(props: {
364338

365339
// Read both owners to decide between the grouped view and the empty CTA. The
366340
// grouped sub-components re-read these (effect-atom dedupes) and self-hide.
367-
const orgConnections = useAtomValue(
368-
connectionsForIntegrationAtom({ integration, owner: "org" }),
369-
);
341+
const orgConnections = useAtomValue(connectionsForIntegrationAtom({ integration, owner: "org" }));
370342
const userConnections = useAtomValue(
371343
connectionsForIntegrationAtom({ integration, owner: "user" }),
372344
);
@@ -377,18 +349,12 @@ export function AccountsSection(props: {
377349
useAtomSet(addConnectionOptimistic("user"));
378350

379351
const totalCount = useMemo(() => {
380-
const orgRows = AsyncResult.isSuccess(orgConnections)
381-
? orgConnections.value.length
382-
: 0;
383-
const userRows = AsyncResult.isSuccess(userConnections)
384-
? userConnections.value.length
385-
: 0;
352+
const orgRows = AsyncResult.isSuccess(orgConnections) ? orgConnections.value.length : 0;
353+
const userRows = AsyncResult.isSuccess(userConnections) ? userConnections.value.length : 0;
386354
return orgRows + userRows;
387355
}, [orgConnections, userConnections]);
388356

389-
const loading =
390-
!AsyncResult.isSuccess(orgConnections) &&
391-
!AsyncResult.isSuccess(userConnections);
357+
const loading = !AsyncResult.isSuccess(orgConnections) && !AsyncResult.isSuccess(userConnections);
392358

393359
const modalState = reconnectHandoff ?? accountHandoff;
394360
const modal = (
@@ -420,9 +386,7 @@ export function AccountsSection(props: {
420386
onClick={() => {
421387
trackEvent("connection_add_opened", {
422388
integration_slug: String(integration),
423-
has_oauth_method: methods.some(
424-
(m: AuthMethod) => m.kind === "oauth",
425-
),
389+
has_oauth_method: methods.some((m: AuthMethod) => m.kind === "oauth"),
426390
has_api_key_method: methods.some(
427391
(m: AuthMethod) => m.kind !== "oauth" && m.kind !== "none",
428392
),
@@ -442,9 +406,7 @@ export function AccountsSection(props: {
442406
</div>
443407
) : totalCount === 0 ? (
444408
<div className="rounded-lg border border-dashed border-border/60 px-6 py-8 text-center">
445-
<p className="text-sm font-medium text-foreground">
446-
No connections yet
447-
</p>
409+
<p className="text-sm font-medium text-foreground">No connections yet</p>
448410
<p className="mt-1 text-sm text-muted-foreground">
449411
Add a connection to make this integration's tools available.
450412
</p>
@@ -455,9 +417,7 @@ export function AccountsSection(props: {
455417
onClick={() => {
456418
trackEvent("connection_add_opened", {
457419
integration_slug: String(integration),
458-
has_oauth_method: methods.some(
459-
(m: AuthMethod) => m.kind === "oauth",
460-
),
420+
has_oauth_method: methods.some((m: AuthMethod) => m.kind === "oauth"),
461421
has_api_key_method: methods.some(
462422
(m: AuthMethod) => m.kind !== "oauth" && m.kind !== "none",
463423
),

packages/react/src/plugins/oauth-reconnect.ts

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ export function reconnectMode(connection: Connection): ReconnectMode {
2828
* connection are exactly the branded types `oauth.start` expects, so the same
2929
* connection (owner/integration/name) is re-minted with a fresh refresh token
3030
* and the widened scope union. Returns null for a non-OAuth connection. */
31-
export function oauthReconnectPayload(
32-
connection: Connection,
33-
): OAuthStartPayload | null {
31+
export function oauthReconnectPayload(connection: Connection): OAuthStartPayload | null {
3432
if (connection.oauthClient == null) return null;
3533
return {
3634
client: connection.oauthClient,
@@ -61,8 +59,7 @@ const OAUTH_SCOPE_ALIASES: Readonly<Record<string, string>> = {
6159
"https://www.googleapis.com/auth/userinfo.profile": "profile",
6260
};
6361

64-
const canonicalScope = (scope: string): string =>
65-
OAUTH_SCOPE_ALIASES[scope] ?? scope;
62+
const canonicalScope = (scope: string): string => OAUTH_SCOPE_ALIASES[scope] ?? scope;
6663

6764
/** Normalize a scope list: trim, canonicalize known provider aliases, drop
6865
* empties, de-dupe (order-preserving). A scope set is compared as a SET —
@@ -94,12 +91,8 @@ export function missingScopes(
9491

9592
/** The scopes a connection was actually GRANTED, parsed from its space-delimited
9693
* `oauthScope` record. Empty for static creds / when the AS omitted scope. */
97-
export function connectionGrantedScopes(
98-
connection: Connection,
99-
): readonly string[] {
100-
return connection.oauthScope
101-
? connection.oauthScope.split(/\s+/).filter(Boolean)
102-
: [];
94+
export function connectionGrantedScopes(connection: Connection): readonly string[] {
95+
return connection.oauthScope ? connection.oauthScope.split(/\s+/).filter(Boolean) : [];
10396
}
10497

10598
/** Whether an OAuth connection must RECONNECT to grant newly-needed access: the
@@ -113,10 +106,7 @@ export function connectionNeedsReconsent(
113106
declaredScopes: readonly string[] | undefined,
114107
): boolean {
115108
if (connection.oauthClient == null) return false;
116-
return (
117-
missingScopes(declaredScopes, connectionGrantedScopes(connection)).length >
118-
0
119-
);
109+
return missingScopes(declaredScopes, connectionGrantedScopes(connection)).length > 0;
120110
}
121111

122112
/** The scopes that count as REQUIRED for a connection to be considered fully

0 commit comments

Comments
 (0)