|
import React, { useState } from 'react';
|
|
import './App.css';
|
|
import ChatInterface from './components/ChatInterface';
|
|
import Panel from './components/Panel';
|
|
import Login from './components/Login';
|
|
import Signin from './components/Signin';
|
|
|
|
|
|
function App() {
|
|
const [isCollapsed, setIsCollapsed] = useState(false);
|
|
const [messages, setMessages] = useState([]);
|
|
const [conversations, setConversations] = useState([
|
|
{ id: 1, title: "Premier diagnostic", date: "12 Mar" },
|
|
{ id: 2, title: "Question sur les symptômes", date: "11 Mar" },
|
|
{ id: 3, title: "Consultation générale", date: "10 Mar" }
|
|
]);
|
|
const [activeConversationId, setActiveConversationId] = useState(null);
|
|
|
|
const toggleCollapse = () => {
|
|
setIsCollapsed(!isCollapsed);
|
|
};
|
|
|
|
const handleNewChat = () => {
|
|
setActiveConversationId(null);
|
|
setMessages([]);
|
|
};
|
|
|
|
const handleMessageSent = (message) => {
|
|
|
|
if (!activeConversationId) {
|
|
const newChat = {
|
|
id: Date.now(),
|
|
title: message.length > 15 ? message.substring(0, 15) + "..." : message,
|
|
date: new Date().toLocaleDateString('fr-FR', { day: '2-digit', month: 'short' }),
|
|
time: new Date().toLocaleTimeString('fr-FR', { hour: 'numeric', minute: 'numeric' })
|
|
|
|
};
|
|
setConversations([newChat, ...conversations]);
|
|
setActiveConversationId(newChat.id);
|
|
}
|
|
};
|
|
|
|
const [page, setPage] = useState("chat");
|
|
|
|
return (
|
|
<div className={`App ${isCollapsed ? 'panel-collapsed' : ''}`}>
|
|
|
|
{page === "chat" && (
|
|
<Panel
|
|
conversations={conversations}
|
|
setConversations={setConversations}
|
|
activeConversationId={activeConversationId}
|
|
setActiveConversationId={setActiveConversationId}
|
|
onNewChat={handleNewChat}
|
|
onToggleCollapse={toggleCollapse}
|
|
isCollapsed={isCollapsed}
|
|
/>
|
|
)}
|
|
|
|
<div className="main-content">
|
|
{isCollapsed && (
|
|
<button className="collapse-button-main" onClick={toggleCollapse}>
|
|
<span className="material-icons">
|
|
<svg
|
|
fill="#FFFF"
|
|
width="20"
|
|
height="20"
|
|
viewBox="0 0 32 32"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
>
|
|
<defs>
|
|
<style>{`.cls-1{fill:none;}`}</style>
|
|
</defs>
|
|
<title>open-panel--solid--left</title>
|
|
<path d="M28,4H4A2,2,0,0,0,2,6V26a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V6A2,2,0,0,0,28,4Zm0,22H12V6H28Z" />
|
|
<rect
|
|
id="_Transparent_Rectangle_"
|
|
data-name="<Transparent Rectangle>"
|
|
className="cls-1"
|
|
width="20"
|
|
height="20"
|
|
/>
|
|
</svg>
|
|
</span>
|
|
</button>
|
|
)}
|
|
|
|
{page === "chat" &&
|
|
<ChatInterface
|
|
messages={messages}
|
|
setMessages={setMessages}
|
|
onMessageSent={handleMessageSent}
|
|
toLogin={() => setPage("login")}/>}
|
|
{page === "login" && <Login toSignin={() => setPage("signin")}/>}
|
|
{page === "signin" && <Signin toLogin={() => setPage("login")}/>}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default App; |