ultisuite-client/lib/mail/mail-drive.ts
R3D347HR4Y 6ec95262af Add OnlyOffice integration and update project configurations
- Updated .env.example to include configuration for OnlyOffice Document Server.
- Modified the workspace configuration to remove the drive-suite path.
- Adjusted TypeScript environment imports for consistency.
- Enhanced Next.js configuration to disable canvas in Webpack.
- Updated package.json to include new dependencies for OnlyOffice and PDF.js.
- Added global styles for OnlyOffice theme integration in the CSS.
- Created new layout and page components for the Drive feature, including public sharing and editing functionalities.
- Updated metadata handling across various layouts to reflect the new app structure.
2026-06-07 15:49:21 +02:00

75 lines
2.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { ApiRequestError } from "@/lib/api/client"
import { displayFileName } from "@/lib/drive/display-file-name"
/** Dossier par défaut lors de lexport mail → Drive. */
export const MAIL_DRIVE_DEFAULT_FOLDER = "/"
export function normalizeMailDriveFolder(folderPath: string): string {
const trimmed = folderPath.trim() || MAIL_DRIVE_DEFAULT_FOLDER
const withSlash = trimmed.startsWith("/") ? trimmed : `/${trimmed}`
const cleaned = withSlash.replace(/\/+/g, "/")
if (cleaned === "" || cleaned === "//") return MAIL_DRIVE_DEFAULT_FOLDER
return cleaned.replace(/\/$/, "") || MAIL_DRIVE_DEFAULT_FOLDER
}
export function mailDriveFolderPathLabel(folderPath: string): string {
const folder = normalizeMailDriveFolder(folderPath)
if (folder === "/") return "Mon Drive"
return folder
.slice(1)
.split("/")
.map((segment) => displayFileName(segment))
.join(" / ")
}
/** Dossier parent affiché (chemin fichier complet). */
export function mailDriveFolderLabel(filePath: string): string {
const normalized = filePath.replace(/\/+/g, "/")
const idx = normalized.lastIndexOf("/")
if (idx <= 0) return "Mon Drive"
return mailDriveFolderPathLabel(normalized.slice(0, idx))
}
export function mailDriveFolderHref(folderPath: string): string {
const segments = normalizeMailDriveFolder(folderPath)
.replace(/^\//, "")
.split("/")
.filter(Boolean)
if (segments.length === 0) return "/drive"
return `/drive/folders/${segments.map((s) => encodeURIComponent(s)).join("/")}`
}
export function mailDriveParentFolder(filePath: string): string {
const normalized = filePath.replace(/\/+/g, "/")
const idx = normalized.lastIndexOf("/")
if (idx <= 0) return MAIL_DRIVE_DEFAULT_FOLDER
return normalized.slice(0, idx)
}
export function mailDriveSaveSuccessMessage(folderPath: string): string {
const label = mailDriveFolderPathLabel(folderPath)
if (label === "Mon Drive") {
return "Pièce jointe enregistrée à la racine de Mon Drive"
}
return `Pièce jointe enregistrée dans ${label}`
}
export function mailDriveSaveErrorMessage(err: unknown): string {
if (err instanceof ApiRequestError) {
if (err.code === "drive.quota_exceeded" || err.status === 507) {
return "Espace de stockage Drive insuffisant"
}
if (err.code === "drive_unavailable") {
return "UltiDrive est indisponible"
}
}
return "Impossible d'enregistrer dans UltiDrive"
}
export function mailDriveFileHref(filePath: string): string {
const normalized = filePath.replace(/\/+/g, "/")
const idx = normalized.lastIndexOf("/")
if (idx <= 0) return "/drive"
return mailDriveFolderHref(normalized.slice(0, idx))
}