Skip to content

Commit cd1ccf1

Browse files
committed
autoselect provider when connecting from block
1 parent 6053050 commit cd1ccf1

File tree

2 files changed

+62
-26
lines changed

2 files changed

+62
-26
lines changed

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/credentials/credentials-manager.tsx

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { createElement, useEffect, useMemo, useState } from 'react'
3+
import { createElement, useCallback, useEffect, useMemo, useState } from 'react'
44
import { createLogger } from '@sim/logger'
55
import { AlertTriangle, Check, Copy, Plus, RefreshCw, Search, Share2, Trash2 } from 'lucide-react'
66
import { useParams } from 'next/navigation'
@@ -25,6 +25,8 @@ import { useSession } from '@/lib/auth/auth-client'
2525
import { cn } from '@/lib/core/utils/cn'
2626
import {
2727
clearPendingCredentialCreateRequest,
28+
PENDING_CREDENTIAL_CREATE_REQUEST_EVENT,
29+
type PendingCredentialCreateRequest,
2830
readPendingCredentialCreateRequest,
2931
} from '@/lib/credentials/client-state'
3032
import {
@@ -424,41 +426,69 @@ export function CredentialsManager() {
424426
setCreateError(null)
425427
}, [createOAuthProviderId])
426428

429+
const applyPendingCredentialCreateRequest = useCallback(
430+
(request: PendingCredentialCreateRequest) => {
431+
if (request.workspaceId !== workspaceId) {
432+
return
433+
}
434+
435+
if (Date.now() - request.requestedAt > 15 * 60 * 1000) {
436+
clearPendingCredentialCreateRequest()
437+
return
438+
}
439+
440+
setShowCreateModal(true)
441+
setShowCreateOAuthRequiredModal(false)
442+
setCreateError(null)
443+
setCreateDescription('')
444+
setCreateEnvValue('')
445+
446+
if (request.type === 'oauth') {
447+
setCreateType('oauth')
448+
setCreateOAuthProviderId(request.providerId)
449+
setCreateDisplayName(request.displayName)
450+
setCreateEnvKey('')
451+
} else {
452+
setCreateType('secret')
453+
setCreateSecretScope(request.type === 'env_workspace' ? 'workspace' : 'personal')
454+
setCreateOAuthProviderId('')
455+
setCreateDisplayName('')
456+
setCreateEnvKey(request.envKey || '')
457+
}
458+
459+
clearPendingCredentialCreateRequest()
460+
},
461+
[workspaceId]
462+
)
463+
427464
useEffect(() => {
428465
if (!workspaceId) return
429466
const request = readPendingCredentialCreateRequest()
430467
if (!request) return
468+
applyPendingCredentialCreateRequest(request)
469+
}, [workspaceId, applyPendingCredentialCreateRequest])
431470

432-
if (request.workspaceId !== workspaceId) {
433-
return
434-
}
471+
useEffect(() => {
472+
if (!workspaceId) return
435473

436-
if (Date.now() - request.requestedAt > 15 * 60 * 1000) {
437-
clearPendingCredentialCreateRequest()
438-
return
474+
const handlePendingCreateRequest = (event: Event) => {
475+
const request = (event as CustomEvent<PendingCredentialCreateRequest>).detail
476+
if (!request) return
477+
applyPendingCredentialCreateRequest(request)
439478
}
440479

441-
setShowCreateModal(true)
442-
setShowCreateOAuthRequiredModal(false)
443-
setCreateError(null)
444-
setCreateDescription('')
445-
setCreateEnvValue('')
480+
window.addEventListener(
481+
PENDING_CREDENTIAL_CREATE_REQUEST_EVENT,
482+
handlePendingCreateRequest as EventListener
483+
)
446484

447-
if (request.type === 'oauth') {
448-
setCreateType('oauth')
449-
setCreateOAuthProviderId(request.providerId)
450-
setCreateDisplayName(request.displayName)
451-
setCreateEnvKey('')
452-
} else {
453-
setCreateType('secret')
454-
setCreateSecretScope(request.type === 'env_workspace' ? 'workspace' : 'personal')
455-
setCreateOAuthProviderId('')
456-
setCreateDisplayName('')
457-
setCreateEnvKey(request.envKey || '')
485+
return () => {
486+
window.removeEventListener(
487+
PENDING_CREDENTIAL_CREATE_REQUEST_EVENT,
488+
handlePendingCreateRequest as EventListener
489+
)
458490
}
459-
460-
clearPendingCredentialCreateRequest()
461-
}, [workspaceId])
491+
}, [workspaceId, applyPendingCredentialCreateRequest])
462492

463493
useEffect(() => {
464494
if (!selectedCredential) {

apps/sim/lib/credentials/client-state.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
export const PENDING_OAUTH_CREDENTIAL_DRAFT_KEY = 'sim.pending-oauth-credential-draft'
44
export const PENDING_CREDENTIAL_CREATE_REQUEST_KEY = 'sim.pending-credential-create-request'
5+
export const PENDING_CREDENTIAL_CREATE_REQUEST_EVENT = 'sim:pending-credential-create-request'
56

67
export interface PendingOAuthCredentialDraft {
78
workspaceId: string
@@ -69,6 +70,11 @@ export function readPendingCredentialCreateRequest(): PendingCredentialCreateReq
6970
export function writePendingCredentialCreateRequest(payload: PendingCredentialCreateRequest) {
7071
if (typeof window === 'undefined') return
7172
window.sessionStorage.setItem(PENDING_CREDENTIAL_CREATE_REQUEST_KEY, JSON.stringify(payload))
73+
window.dispatchEvent(
74+
new CustomEvent<PendingCredentialCreateRequest>(PENDING_CREDENTIAL_CREATE_REQUEST_EVENT, {
75+
detail: payload,
76+
})
77+
)
7278
}
7379

7480
export function clearPendingCredentialCreateRequest() {

0 commit comments

Comments
 (0)