SPB Git
2.0 KB · 26 lines tsx
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
Files · main
Menu

Theme