diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index ecc71fe5461..b58d2e41a62 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -14,17 +14,14 @@ import { TextInputV2 } from "@opencode-ai/ui/v2/text-input-v2" import { showToast } from "@/utils/toast" import { type Accessor, type Component, createMemo, createUniqueId, For, Match, onMount, Show, Switch } from "solid-js" import { createStore } from "solid-js/store" -import { useQueryClient } from "@tanstack/solid-query" import { useParams } from "@solidjs/router" import { Link } from "@/components/link" -import { useServerSDK } from "@/context/server-sdk" import { useServerSync } from "@/context/server-sync" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" import { popularProviders, useProviders } from "@/hooks/use-providers" import { CustomProviderForm } from "./dialog-custom-provider" import { decode64 } from "@/utils/base64" -import { pathKey } from "@/utils/path-key" import { createProviderConnectionController } from "./provider-connection-controller" const CUSTOM_ID = "_custom" @@ -370,8 +367,6 @@ function ProviderConnection(props: { }) { const dialog = useDialog() const serverSync = useServerSync() - const serverSDK = useServerSDK() - const queryClient = useQueryClient() const params = useParams() const language = useLanguage() const settings = useSettings() @@ -383,80 +378,18 @@ function ProviderConnection(props: { () => providers.all().get(props.provider) ?? serverSync().data.provider.all.get(props.provider)!, ) const controller = createProviderConnectionController({ - provider: props.provider, + provider: () => props.provider, directory, - fallbackKeyLabel: () => language.t("provider.connect.method.apiKey"), - requestFailed: () => language.t("common.requestFailed"), - invalidCode: () => language.t("provider.connect.oauth.code.invalid"), - services: { - integration: { - load: (integrationID, value) => - serverSDK() - .api.integration.get({ - integrationID, - location: value ? { directory: value } : undefined, - }) - .then((result) => result.data), - }, - connection: { - key: (integrationID, value, key) => - serverSDK().api.integration.connect.key({ - integrationID, - location: value ? { directory: value } : undefined, - key, - }), - oauth: (integrationID, value, methodID, inputs) => - serverSDK() - .api.integration.oauth.connect({ - integrationID, - methodID, - inputs, - location: value ? { directory: value } : undefined, - }) - .then((result) => result.data), - status: (integrationID, value, attemptID) => - serverSDK() - .api.integration.oauth.status({ - integrationID, - attemptID, - location: value ? { directory: value } : undefined, - }) - .then((result) => result.data), - complete: (integrationID, value, attemptID, code) => - serverSDK().api.integration.oauth.complete({ - integrationID, - attemptID, - location: value ? { directory: value } : undefined, - code, - }), - }, - provider: { - refresh: () => - queryClient.refetchQueries(serverSync().queryOptions.providers(directory() ? pathKey(directory()!) : null)), - }, - completion: { - finish: () => { - dialog.close() - showToast({ - variant: "success", - icon: "circle-check", - title: language.t("provider.connect.toast.connected.title", { provider: provider().name }), - description: language.t("provider.connect.toast.connected.description", { provider: provider().name }), - }) - }, - }, + onComplete: () => { + dialog.close() + showToast({ + variant: "success", + icon: "circle-check", + title: language.t("provider.connect.toast.connected.title", { provider: provider().name }), + description: language.t("provider.connect.toast.connected.description", { provider: provider().name }), + }) }, }) - const loading = controller.data.loading - const methods = controller.data.methods - const method = controller.data.method - const methodIndex = controller.data.methodIndex - const authorization = controller.data.authorization - const state = controller.auth.state - const error = controller.auth.error - const connectKey = controller.auth.connectKey - const completeCode = controller.auth.completeCode - const methodLabel = (value?: { type?: string; label?: string }) => { if (!value) return "" if (value.type === "key") return language.t("provider.connect.method.apiKey") @@ -473,8 +406,6 @@ function ProviderConnection(props: { } } - const selectMethod = controller.auth.select - function AuthPromptsView() { const [formStore, setFormStore] = createStore({ value: {} as Record, @@ -482,7 +413,7 @@ function ProviderConnection(props: { }) const prompts = createMemo(() => { - const value = method() + const value = controller.currentMethod() return value?.type === "oauth" ? (value.prompts ?? []) : [] }) const matches = (prompt: NonNullable[number]>, value: Record) => { @@ -508,14 +439,14 @@ function ProviderConnection(props: { }) async function next(index: number, value: Record) { - const selected = methodIndex() + const selected = controller.methodIndex() if (selected === undefined) return const next = prompts().findIndex((prompt, i) => i > index && matches(prompt, value)) if (next !== -1) { setFormStore("index", next) return } - await selectMethod(selected, value) + await controller.auth.select(selected, value) } async function handleSubmit(e: SubmitEvent) { @@ -606,7 +537,7 @@ function ProviderConnection(props: { } function goBack() { - if (methods().length > 1 && methodIndex() !== undefined) { + if (controller.methods().length > 1 && controller.methodIndex() !== undefined) { controller.auth.reset() return } @@ -623,14 +554,14 @@ function ProviderConnection(props: { {language.t("provider.connect.selectMethod", { provider: provider().name })}
- + {(item, index) => { const details = () => methodDetails(item) return (