| import { useState } from "react";
|
| import { Input } from "@/components/ui/input";
|
| import { Button } from "@/components/ui/button";
|
| import { v4 as uuidv4 } from "uuid";
|
| import {
|
| useChatInteract,
|
| useChatMessages,
|
| IStep,
|
| } from "@chainlit/react-client";
|
|
|
|
|
|
|
| export function Playground() {
|
| const [inputValue, setInputValue] = useState("");
|
| const { sendMessage } = useChatInteract();
|
| const { messages } = useChatMessages();
|
|
|
| const handleSendMessage = () => {
|
| const content = inputValue.trim();
|
| if (content) {
|
| const message: IStep = {
|
| id: uuidv4(),
|
| name: "user",
|
| type: "user_message",
|
| output: content,
|
| createdAt: new Date().toISOString(),
|
| };
|
| sendMessage(message, []);
|
| setInputValue("");
|
| }
|
| };
|
|
|
| const renderMessage = (message: IStep) => {
|
| const dateOptions: Intl.DateTimeFormatOptions = {
|
| hour: "2-digit",
|
| minute: "2-digit",
|
| };
|
| const date = new Date(message.createdAt).toLocaleTimeString(undefined, dateOptions);
|
| return (
|
| <div key={message.id} className="flex items-start space-x-2">
|
| <div className="w-20 text-sm text-green-500">{message.name}</div>
|
| <div className="flex-1 border rounded-lg p-2">
|
| <p className="text-black dark:text-white">{message.output}</p>
|
| <small className="text-xs text-gray-500">{date}</small>
|
| </div>
|
| </div>
|
| );
|
| };
|
|
|
| return (
|
|
|
| <div className="playground-container bg-gray-100 dark:bg-gray-900 flex flex-col" style={{ borderRadius: '10px' }}>
|
|
|
| <div style={{ backgroundColor: '#d00404', height: '50px' }}>
|
| {/* Add your content for the red section here */}
|
| </div>
|
|
|
| <div className="flex-1 overflow-auto p-6">
|
| <div className="space-y-4">
|
| {messages.map((message) => renderMessage(message))}
|
| </div>
|
| </div>
|
| <div className="border-t p-4 bg-white dark:bg-gray-800">
|
| <div className="flex items-center space-x-2">
|
| <Input
|
| autoFocus
|
| className="flex-1"
|
| id="message-input"
|
| placeholder="Type a message"
|
| value={inputValue}
|
| onChange={(e) => setInputValue(e.target.value)}
|
| onKeyUp={(e) => {
|
| if (e.key === "Enter") {
|
| handleSendMessage();
|
| }
|
| }}
|
| />
|
| <Button onClick={handleSendMessage} type="submit">
|
| Send
|
| </Button>
|
| </div>
|
| </div>
|
| </div>
|
| );
|
| }
|
|
|