tsx
import React, { useCallback } from 'react'
import { useAppStore } from '@/store/useAppStore'
import { Copy, ArrowRight, CheckCircle } from 'lucide-react'
/**
* Component for side-by-side comparison of original and optimized prompts
*/
export function ComparisonView() {
const {
result,
copiedStates,
setCopiedState
} = useAppStore()
if (!result) return null
/**
* Handle copy to clipboard with feedback
*/
const handleCopy = useCallback(async (text: string, type: 'original' | 'optimized') => {
try {
await navigator.clipboard.writeText(text)
setCopiedState(type, true)
setTimeout(() => {
setCopiedState(type, false)
}, 2000)
} catch (error) {
console.error('Failed to copy text:', error)
setCopiedState(type, true)
setTimeout(() => {
setCopiedState(type, false)
}, 2000)
}
}, [setCopiedState])
/**
* Calculate differences
*/
const originalWords = result.originalPrompt.split(/\s+/).length
const optimizedWords = result.optimizedPrompt.split(/\s+/).length
const wordsIncrease = optimizedWords - originalWords
const wordsIncreasePercent = Math.round((wordsIncrease / originalWords) * 100)
return (
{/* Header */}
Prompt-Vergleich
+{wordsIncrease} Wörter (+{wordsIncreasePercent}%)
Optimiert für {result.targetModel.replace('-', ' ')}
{/* Side-by-side comparison */}
{/* Original Prompt */}
Original
{result.originalPrompt.length} Zeichen, {originalWords} Wörter
{/* Optimization Arrow */}
Optimiert
+{result.executionTime}ms
{/* Optimized Prompt */}
Optimiert
{result.optimizedPrompt.length} Zeichen, {optimizedWords} Wörter
{/* Mobile optimization arrow */}
{/* Improvements List */}
Angewendete Verbesserungen
{result.improvements.map((improvement, index) => (
{improvement}
))}
{/* Final Action Button */}
)
}