spb/chat-spboucher-ai
Public
1"use client";2import { useState } from "react";3import { api } from "@/lib/client/fetcher";4import { Button, Dialog, Textarea, toast } from "../ui";5import { CATEGORIES } from "./memory-shared";67export function AddMemoryDialog({ open, onClose, onAdded, projectId }: { open: boolean; onClose: () => void; onAdded: () => void; projectId?: string | null }) {8 const [content, setContent] = useState(""); const [category, setCategory] = useState("context"); const [busy, setBusy] = useState(false);9 async function submit() {10 setBusy(true);11 try { await api("/api/memories", { method: "POST", json: { content: content.trim(), category, projectId: projectId ?? null } }); toast("Souvenir ajouté", "ok"); setContent(""); onAdded(); onClose(); }12 catch (e) { toast((e as Error).message, "error"); } finally { setBusy(false); }13 }14 return (15 <Dialog open={open} onClose={onClose} title="Ajouter un souvenir">16 <div className="space-y-3 p-5">17 <p className="text-[13px] text-muted">Un fait durable sur toi, tes projets ou ta façon de travailler. Jamais de mot de passe, de clé ni de donnée sensible.</p>18 <Textarea autoFocus value={content} onChange={e => setContent(e.target.value)} placeholder="Ex. : Le propriétaire préfère des réponses en français québécois, concises, avec des tableaux." className="text-[14px]" />19 <div className="flex flex-wrap gap-1.5">{CATEGORIES.map(c => <button key={c.id} type="button" onClick={() => setCategory(c.id)} className={`rounded-lg border px-2.5 py-1 text-[12px] transition-colors ${category === c.id ? "border-accent bg-accent/10 text-accent" : "border-border text-fg-2 hover:bg-surface-2"}`}>{c.label}</button>)}</div>20 {projectId && <div className="text-[12px] text-muted">Ce souvenir sera limité au projet courant.</div>}21 <div className="flex justify-end gap-2 pt-1"><Button variant="ghost" onClick={onClose}>Annuler</Button><Button variant="primary" loading={busy} disabled={content.trim().length < 3} onClick={submit}>Ajouter</Button></div>22 </div>23 </Dialog>24 );25}26