mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-21 14:03:35 +08:00
feat: parse pasted JSON to auto-fill provider form fields
This commit is contained in:
parent
b49a8b6c9b
commit
f4dce4985d
@ -1,4 +1,4 @@
|
|||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect, useRef } from 'react'
|
||||||
import { useSettingsStore } from '../stores/settingsStore'
|
import { useSettingsStore } from '../stores/settingsStore'
|
||||||
import { useProviderStore } from '../stores/providerStore'
|
import { useProviderStore } from '../stores/providerStore'
|
||||||
import { useUIStore } from '../stores/uiStore'
|
import { useUIStore } from '../stores/uiStore'
|
||||||
@ -232,9 +232,15 @@ function ProviderFormModal({ open, onClose, mode, provider }: ProviderFormProps)
|
|||||||
const [isTesting, setIsTesting] = useState(false)
|
const [isTesting, setIsTesting] = useState(false)
|
||||||
const [settingsJson, setSettingsJson] = useState('')
|
const [settingsJson, setSettingsJson] = useState('')
|
||||||
const [settingsJsonError, setSettingsJsonError] = useState<string | null>(null)
|
const [settingsJsonError, setSettingsJsonError] = useState<string | null>(null)
|
||||||
|
const jsonPastedRef = useRef(false)
|
||||||
|
|
||||||
// Load current settings.json and merge provider env vars
|
// Load current settings.json and merge provider env vars
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
// Skip if JSON was just populated by user paste
|
||||||
|
if (jsonPastedRef.current) {
|
||||||
|
jsonPastedRef.current = false
|
||||||
|
return
|
||||||
|
}
|
||||||
import('../api/settings').then(({ settingsApi }) => {
|
import('../api/settings').then(({ settingsApi }) => {
|
||||||
settingsApi.getUser().then((settings) => {
|
settingsApi.getUser().then((settings) => {
|
||||||
const merged = {
|
const merged = {
|
||||||
@ -423,10 +429,36 @@ function ProviderFormModal({ open, onClose, mode, provider }: ProviderFormProps)
|
|||||||
<textarea
|
<textarea
|
||||||
value={settingsJson}
|
value={settingsJson}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setSettingsJson(e.target.value)
|
const raw = e.target.value
|
||||||
|
setSettingsJson(raw)
|
||||||
try {
|
try {
|
||||||
JSON.parse(e.target.value)
|
const parsed = JSON.parse(raw)
|
||||||
setSettingsJsonError(null)
|
setSettingsJsonError(null)
|
||||||
|
// Auto-fill form fields from parsed JSON env
|
||||||
|
const env = parsed.env as Record<string, string> | undefined
|
||||||
|
if (env) {
|
||||||
|
if (env.ANTHROPIC_BASE_URL) {
|
||||||
|
setBaseUrl(env.ANTHROPIC_BASE_URL)
|
||||||
|
// Auto-switch to matching preset or Custom
|
||||||
|
if (mode === 'create') {
|
||||||
|
const matchedPreset = availablePresets.find((p) => p.id !== 'custom' && p.baseUrl === env.ANTHROPIC_BASE_URL)
|
||||||
|
const targetPreset = matchedPreset || availablePresets.find((p) => p.id === 'custom')!
|
||||||
|
if (targetPreset.id !== selectedPreset.id) {
|
||||||
|
jsonPastedRef.current = true
|
||||||
|
setSelectedPreset(targetPreset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (env.ANTHROPIC_AUTH_TOKEN && env.ANTHROPIC_AUTH_TOKEN !== '(your API key)') setApiKey(env.ANTHROPIC_AUTH_TOKEN)
|
||||||
|
const newModels: Partial<ModelMapping> = {}
|
||||||
|
if (env.ANTHROPIC_MODEL) newModels.main = env.ANTHROPIC_MODEL
|
||||||
|
if (env.ANTHROPIC_DEFAULT_HAIKU_MODEL) newModels.haiku = env.ANTHROPIC_DEFAULT_HAIKU_MODEL
|
||||||
|
if (env.ANTHROPIC_DEFAULT_SONNET_MODEL) newModels.sonnet = env.ANTHROPIC_DEFAULT_SONNET_MODEL
|
||||||
|
if (env.ANTHROPIC_DEFAULT_OPUS_MODEL) newModels.opus = env.ANTHROPIC_DEFAULT_OPUS_MODEL
|
||||||
|
if (Object.keys(newModels).length > 0) {
|
||||||
|
setModels((prev) => ({ ...prev, ...newModels }))
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setSettingsJsonError(err instanceof Error ? err.message : 'Invalid JSON')
|
setSettingsJsonError(err instanceof Error ? err.message : 'Invalid JSON')
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user