@@ -8,12 +8,26 @@ import { HeaderTitle } from "@/components/header/HeaderTitle";
8
8
import { Button } from "@/components/ui/button" ;
9
9
import { isValidSource , getSourceMetadata } from "@/lib/sources" ;
10
10
import { FederatedConnectorForm } from "@/components/admin/federated/FederatedConnectorForm" ;
11
+ import { useSearchParams } from "next/navigation" ;
12
+ import useSWR from "swr" ;
13
+ import { errorHandlingFetcher } from "@/lib/fetcher" ;
14
+ import { buildSimilarCredentialInfoURL } from "@/app/admin/connector/[ccPairId]/lib" ;
15
+ import { Credential } from "@/lib/connectors/credentials" ;
11
16
12
17
export default function ConnectorWrapper ( {
13
18
connector,
14
19
} : {
15
20
connector : ConfigurableSources ;
16
21
} ) {
22
+ const searchParams = useSearchParams ( ) ;
23
+ const mode = searchParams ?. get ( "mode" ) ; // 'federated' or 'regular'
24
+
25
+ // Fetch existing credentials for this connector type
26
+ const { data : existingCredentials } = useSWR < Credential < any > [ ] > (
27
+ buildSimilarCredentialInfoURL ( connector ) ,
28
+ errorHandlingFetcher
29
+ ) ;
30
+
17
31
// Check if the connector is valid
18
32
if ( ! isValidSource ( connector ) ) {
19
33
return (
@@ -39,12 +53,34 @@ export default function ConnectorWrapper({
39
53
) ;
40
54
}
41
55
42
- // Check if the connector is federated
43
56
const sourceMetadata = getSourceMetadata ( connector ) ;
44
- const isFederated = sourceMetadata . federated ;
57
+ const supportsFederated = sourceMetadata . federated === true ;
58
+ const hasExistingCredentials =
59
+ existingCredentials && existingCredentials . length > 0 ;
60
+
61
+ // Determine which form to show based on:
62
+ // 1. URL parameter mode (takes priority)
63
+ // 2. If no mode specified and existing credentials exist, show regular form
64
+ // 3. If no mode specified and no credentials, show federated form for federated-supported sources
65
+ let showFederatedForm = false ;
66
+
67
+ if ( mode === "federated" ) {
68
+ showFederatedForm = supportsFederated ;
69
+ } else if ( mode === "regular" ) {
70
+ showFederatedForm = false ;
71
+ } else {
72
+ // No mode specified - use default logic
73
+ if ( hasExistingCredentials ) {
74
+ // Default to regular form if existing credentials exist
75
+ showFederatedForm = false ;
76
+ } else {
77
+ // Default to federated for federated-supported sources with no existing credentials
78
+ showFederatedForm = supportsFederated ;
79
+ }
80
+ }
45
81
46
- // For federated connectors , use the specialized form without FormProvider
47
- if ( isFederated ) {
82
+ // For federated form , use the specialized form without FormProvider
83
+ if ( showFederatedForm ) {
48
84
return (
49
85
< div className = "flex justify-center w-full h-full" >
50
86
< div className = "mt-12 w-full max-w-4xl mx-auto" >
0 commit comments