ultisuite-client/components/drive/richtext-legacy-redirect.tsx
R3D347HR4Y 303b2b1074
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
wow
2026-06-11 01:22:40 +02:00

58 lines
1.7 KiB
TypeScript

"use client"
import { useEffect, useState } from "react"
import { useRouter } from "next/navigation"
import { DocsLoadingSplash } from "@/components/drive/richtext/docs-loading-splash"
import { apiClient } from "@/lib/api/client"
import type { DriveFileInfo } from "@/lib/api/types"
import { stashDriveEditorReturnTo } from "@/lib/drive/drive-editor-return"
import { buildDriveDocsEditHref } from "@/lib/drive/drive-url"
/** Redirect path-based /drive/edit URLs to stable id-based /drive/docs URLs. */
export function RichTextEditorLegacyRedirect({
filePath,
returnTo,
}: {
filePath: string
returnTo?: string | null
}) {
const router = useRouter()
const [error, setError] = useState<string | null>(null)
useEffect(() => {
if (returnTo) stashDriveEditorReturnTo(returnTo)
else stashDriveEditorReturnTo()
let cancelled = false
void (async () => {
try {
const info = await apiClient.get<DriveFileInfo>(
`/drive/files/info${filePath.startsWith("/") ? filePath : `/${filePath}`}`
)
if (cancelled) return
if (!info.file_id) {
setError("Identifiant du document introuvable")
return
}
router.replace(buildDriveDocsEditHref(info.file_id))
} catch (e) {
if (!cancelled) {
setError(e instanceof Error ? e.message : "Impossible d'ouvrir le document")
}
}
})()
return () => {
cancelled = true
}
}, [filePath, returnTo, router])
if (error) {
return (
<div className="flex h-dvh items-center justify-center p-8 text-sm text-muted-foreground">
{error}
</div>
)
}
return <DocsLoadingSplash phase="opening" />
}