"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import { api, DocumentItem } from "@/lib/api"; import { Shell } from "@/components/Shell"; import { Button, Card } from "@/components/ui"; export default function DocumentPage({ params }: { params: { documentId: string } }) { const documentId = Number(params.documentId); const [document, setDocument] = useState(null); const [content, setContent] = useState(""); const [savedContent, setSavedContent] = useState(""); const [status, setStatus] = useState(""); const dirty = content !== savedContent; useEffect(() => { Promise.all([api.document(documentId), api.markdown(documentId)]).then(([doc, markdown]) => { setDocument(doc); setContent(markdown); setSavedContent(markdown); }).catch((err) => setStatus(err.message)); }, [documentId]); async function save() { setStatus("Guardando..."); await api.saveMarkdown(documentId, content); setSavedContent(content); setStatus("Guardado"); } async function copy() { await navigator.clipboard.writeText(content); setStatus("Copiado al portapapeles"); } return ( Volver al dashboard

{document?.title || "Documento"}

{dirty ? "Cambios sin guardar" : "Sin cambios pendientes"} {status && `- ${status}`}

Descargar .md
Editor Markdown