ultisuite-client/lib/drive/docs-file-menu-export.ts
R3D347HR4Y 303b2b1074
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
wow
2026-06-11 01:22:40 +02:00

82 lines
2.5 KiB
TypeScript

import type { Editor } from "@tiptap/react"
import type { DocsExportSnapshot } from "@/lib/drive/docs-export-snapshot"
import {
baseNameFromSource,
downloadBlob,
exportFileName,
} from "@/lib/drive/docs-export-download"
import type { TipTapJSON } from "@/lib/drive/richtext-import"
export type DocsDownloadFormat =
| "docx"
| "pdf"
| "odt"
| "txt"
| "rtf"
| "html"
| "html-zip"
| "epub"
| "md"
export const DOCS_DOWNLOAD_FORMATS: { id: DocsDownloadFormat; label: string }[] = [
{ id: "docx", label: "Microsoft Word (.docx)" },
{ id: "pdf", label: "Document PDF (.pdf)" },
{ id: "odt", label: "Format OpenDocument (.odt)" },
{ id: "txt", label: "Texte brut (.txt)" },
{ id: "rtf", label: "Format texte enrichi (.rtf)" },
{ id: "html-zip", label: "Page Web (.html, zippé)" },
{ id: "epub", label: "Publication EPUB (.epub)" },
{ id: "md", label: "Markdown (.md)" },
]
export { downloadBlob, exportFileName } from "@/lib/drive/docs-export-download"
export async function exportDocsContent(
format: DocsDownloadFormat,
snapshot: DocsExportSnapshot | null,
editor: Editor | null,
sourceName: string
): Promise<"done" | "unsupported"> {
if (!editor && !snapshot) return "unsupported"
const base = baseNameFromSource(sourceName)
switch (format) {
case "docx": {
if (!snapshot) return "unsupported"
const { exportDocsToDocx } = await import("@/lib/drive/docs-docx-export")
const blob = await exportDocsToDocx(snapshot)
downloadBlob(blob, exportFileName(sourceName, "docx"))
return "done"
}
case "pdf": {
if (!snapshot) return "unsupported"
const { exportDocsToPdf } = await import("@/lib/drive/docs-pdf-export")
await exportDocsToPdf(snapshot)
return "done"
}
case "txt": {
if (!editor) return "unsupported"
const text = editor.getText()
downloadBlob(new Blob([text], { type: "text/plain;charset=utf-8" }), `${base}.txt`)
return "done"
}
case "md": {
if (!editor) return "unsupported"
const text = editor.getText()
downloadBlob(new Blob([text], { type: "text/markdown;charset=utf-8" }), `${base}.md`)
return "done"
}
case "html": {
if (!editor) return "unsupported"
const html = `<!DOCTYPE html><html><head><meta charset="utf-8"><title>${base}</title></head><body>${editor.getHTML()}</body></html>`
downloadBlob(new Blob([html], { type: "text/html;charset=utf-8" }), `${base}.html`)
return "done"
}
default:
return "unsupported"
}
}
export type { TipTapJSON }