11'use client'
22
3- import { createElement , useEffect , useMemo , useState } from 'react'
3+ import { createElement , useCallback , useEffect , useMemo , useState } from 'react'
44import { createLogger } from '@sim/logger'
55import { AlertTriangle , Check , Copy , Plus , RefreshCw , Search , Share2 , Trash2 } from 'lucide-react'
66import { useParams } from 'next/navigation'
@@ -25,6 +25,8 @@ import { useSession } from '@/lib/auth/auth-client'
2525import { cn } from '@/lib/core/utils/cn'
2626import {
2727 clearPendingCredentialCreateRequest ,
28+ PENDING_CREDENTIAL_CREATE_REQUEST_EVENT ,
29+ type PendingCredentialCreateRequest ,
2830 readPendingCredentialCreateRequest ,
2931} from '@/lib/credentials/client-state'
3032import {
@@ -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 ) {
0 commit comments