diff --git a/components/ActionPlanGenerator.tsx b/components/ActionPlanGenerator.tsx index 97237d3..8cf7558 100644 --- a/components/ActionPlanGenerator.tsx +++ b/components/ActionPlanGenerator.tsx @@ -11,7 +11,16 @@ import { cn } from "@/lib/utils"; import { translations } from "@/lib/i18n/translations"; export default function ActionPlanGenerator() { - language, + const { + language, + currentPrompt, + actionPlan, + selectedProvider, + selectedModels, + availableModels, + apiKeys, + isProcessing, + error, setCurrentPrompt, setSelectedProvider, setActionPlan, @@ -21,241 +30,241 @@ export default function ActionPlanGenerator() { setSelectedModel, } = useStore(); -const t = translations[language].actionPlan; -const common = translations[language].common; + const t = translations[language].actionPlan; + const common = translations[language].common; -const [copied, setCopied] = useState(false); + const [copied, setCopied] = useState(false); -const selectedModel = selectedModels[selectedProvider]; -const models = availableModels[selectedProvider] || modelAdapter.getAvailableModels(selectedProvider); + const selectedModel = selectedModels[selectedProvider]; + const models = availableModels[selectedProvider] || modelAdapter.getAvailableModels(selectedProvider); -useEffect(() => { - if (typeof window !== "undefined") { - loadAvailableModels(); - const saved = localStorage.getItem("promptarch-api-keys"); - if (saved) { - try { - const keys = JSON.parse(saved); - if (keys.qwen) modelAdapter.updateQwenApiKey(keys.qwen); - if (keys.ollama) modelAdapter.updateOllamaApiKey(keys.ollama); - if (keys.zai) modelAdapter.updateZaiApiKey(keys.zai); - } catch (e) { - console.error("Failed to load API keys:", e); + useEffect(() => { + if (typeof window !== "undefined") { + loadAvailableModels(); + const saved = localStorage.getItem("promptarch-api-keys"); + if (saved) { + try { + const keys = JSON.parse(saved); + if (keys.qwen) modelAdapter.updateQwenApiKey(keys.qwen); + if (keys.ollama) modelAdapter.updateOllamaApiKey(keys.ollama); + if (keys.zai) modelAdapter.updateZaiApiKey(keys.zai); + } catch (e) { + console.error("Failed to load API keys:", e); + } } } - } -}, [selectedProvider]); + }, [selectedProvider]); -const loadAvailableModels = async () => { - const fallbackModels = modelAdapter.getAvailableModels(selectedProvider); - setAvailableModels(selectedProvider, fallbackModels); + const loadAvailableModels = async () => { + const fallbackModels = modelAdapter.getAvailableModels(selectedProvider); + setAvailableModels(selectedProvider, fallbackModels); - try { - const result = await modelAdapter.listModels(selectedProvider); - if (result.success && result.data) { - setAvailableModels(selectedProvider, result.data[selectedProvider] || fallbackModels); + try { + const result = await modelAdapter.listModels(selectedProvider); + if (result.success && result.data) { + setAvailableModels(selectedProvider, result.data[selectedProvider] || fallbackModels); + } + } catch (error) { + console.error("Failed to load models:", error); } - } catch (error) { - console.error("Failed to load models:", error); - } -}; + }; -const handleGenerate = async () => { - if (!currentPrompt.trim()) { - setError("Please enter PRD or project requirements"); - return; - } - - const apiKey = apiKeys[selectedProvider]; - const isQwenOAuth = selectedProvider === "qwen" && modelAdapter.hasQwenAuth(); - - if (!isQwenOAuth && (!apiKey || !apiKey.trim())) { - setError(`Please configure your ${selectedProvider.toUpperCase()} API key in Settings`); - return; - } - - setProcessing(true); - setError(null); - - console.log("[ActionPlanGenerator] Starting action plan generation...", { selectedProvider, selectedModel, hasQwenAuth: modelAdapter.hasQwenAuth() }); - - try { - const result = await modelAdapter.generateActionPlan(currentPrompt, selectedProvider, selectedModel); - - console.log("[ActionPlanGenerator] Generation result:", result); - - if (result.success && result.data) { - const newPlan = { - id: Math.random().toString(36).substr(2, 9), - prdId: "", - tasks: [], - frameworks: [], - architecture: { - pattern: "", - structure: "", - technologies: [], - bestPractices: [], - }, - estimatedDuration: "", - createdAt: new Date(), - rawContent: result.data, - }; - setActionPlan(newPlan); - } else { - console.error("[ActionPlanGenerator] Generation failed:", result.error); - setError(result.error || "Failed to generate action plan"); + const handleGenerate = async () => { + if (!currentPrompt.trim()) { + setError("Please enter PRD or project requirements"); + return; } - } catch (err) { - console.error("[ActionPlanGenerator] Generation error:", err); - setError(err instanceof Error ? err.message : "An error occurred"); - } finally { - setProcessing(false); - } -}; -const handleCopy = async () => { - if (actionPlan?.rawContent) { - await navigator.clipboard.writeText(actionPlan.rawContent); - setCopied(true); - setTimeout(() => setCopied(false), 2000); - } -}; + const apiKey = apiKeys[selectedProvider]; + const isQwenOAuth = selectedProvider === "qwen" && modelAdapter.hasQwenAuth(); -return ( -
{actionPlan.rawContent}
- {actionPlan.rawContent}
+ {googleAdsResult.rawContent};
}
- }
-};
+ };
-const renderMagicWandSectionContent = (sectionId: string) => {
- if (!magicWandResult) return null;
+ const renderMagicWandSectionContent = (sectionId: string) => {
+ if (!magicWandResult) return null;
- switch (sectionId) {
- case "market":
- return (
- {strat.targetAudience}
-- The "Why": - {strat.rationale} -
- -{strat.targetAudience}
++ The "Why": + {strat.rationale} +
+ +{magicWandResult.rawContent};
- }
-};
-
-
-return (
- {magicWandResult.rawContent};
+ }
+ };
- {enhancedPrompt}
+ {enhancedPrompt}
-