Files
cc-switch/src/components/providers/forms/hooks/useApiKeyState.ts

64 lines
1.3 KiB
TypeScript
Raw Normal View History

import { useState, useCallback } from "react";
import {
getApiKeyFromConfig,
setApiKeyInConfig,
hasApiKeyField,
} from "@/utils/providerConfigUtils";
interface UseApiKeyStateProps {
initialConfig?: string;
onConfigChange: (config: string) => void;
selectedPresetId: string | null;
}
/**
* API Key
* API Key JSON
*/
export function useApiKeyState({
initialConfig,
onConfigChange,
selectedPresetId,
}: UseApiKeyStateProps) {
const [apiKey, setApiKey] = useState(() => {
if (initialConfig) {
return getApiKeyFromConfig(initialConfig);
}
return "";
});
const handleApiKeyChange = useCallback(
(key: string) => {
setApiKey(key);
const configString = setApiKeyInConfig(
initialConfig || "{}",
key.trim(),
{
createIfMissing:
selectedPresetId !== null && selectedPresetId !== "custom",
},
);
onConfigChange(configString);
},
[initialConfig, selectedPresetId, onConfigChange],
);
const showApiKey = useCallback(
(config: string, isEditMode: boolean) => {
return (
selectedPresetId !== null || (!isEditMode && hasApiKeyField(config))
);
},
[selectedPresetId],
);
return {
apiKey,
setApiKey,
handleApiKeyChange,
showApiKey,
};
}