- 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.
75 lines
2.6 KiB
TypeScript
75 lines
2.6 KiB
TypeScript
import { ApiRequestError } from "@/lib/api/client"
|
||
import { displayFileName } from "@/lib/drive/display-file-name"
|
||
|
||
/** Dossier par défaut lors de l’export 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))
|
||
}
|