import { useState, useEffect } from 'react';
import { useJadeSession } from '@gr33n-ai/jade-sdk-client';
function ChatInterface() {
const [input, setInput] = useState('');
const {
processedConversation,
media,
isStreaming,
streamingText,
showTinkering,
sendMessage,
cancel,
} = useJadeSession({
onMediaGenerated: (urls, type) => {
console.log(`Generated ${type}:`, urls);
},
});
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (input.trim() && !isStreaming) {
await sendMessage(input);
setInput('');
}
};
return (
<div>
{processedConversation.map((entry, i) => (
<div key={i} className={`message ${entry.originalType}`}>
<strong>{entry.title || entry.displayType}</strong>
<p>{entry.entry.text}</p>
{entry.mediaUrls?.map(url => (
<img key={url} src={url} alt="" />
))}
</div>
))}
{streamingText && <div className="streaming">{streamingText}</div>}
{showTinkering && <div className="thinking">Thinking...</div>}
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={e => setInput(e.target.value)}
placeholder="Type a message..."
disabled={isStreaming}
/>
<button type="submit" disabled={isStreaming}>
Send
</button>
{isStreaming && <button onClick={cancel}>Cancel</button>}
</form>
{media.length > 0 && (
<div className="gallery">
{media.map(m => (
<img key={m.url} src={m.url} alt={m.prompt} />
))}
</div>
)}
</div>
);
}