ultisuite-client/app/drive/s/[token]/edit/[[...path]]/page.tsx
R3D347HR4Y 303b2b1074
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
wow
2026-06-11 01:22:40 +02:00

88 lines
2.8 KiB
TypeScript

"use client"
import { useParams, useSearchParams } from "next/navigation"
import { useEffect, useState } from "react"
import { PublicOfficeEditor } from "@/components/drive/public-office-editor"
import { PublicRichTextEditor } from "@/components/drive/public-richtext-editor"
import { PublicUltidrawEditor } from "@/components/drive/public-ultidraw-editor"
import { shouldOpenInRichTextEditor, shouldOpenInUltidrawEditor } from "@/lib/drive/drive-preview"
import { filePathFromPublicEditSegments, readPublicShareRootType } from "@/lib/drive/public-share-url"
import type { PublicShareRootType } from "@/lib/drive/public-share-url"
export default function PublicShareEditPage() {
const params = useParams()
const searchParams = useSearchParams()
const token = String(params.token ?? "")
const pathSegments = params.path as string[] | undefined
const filePath = filePathFromPublicEditSegments(token, pathSegments)
const returnTo = searchParams.get("returnTo")
const mode = searchParams.get("mode") === "view" ? "view" : "edit"
const fileDisplayName = searchParams.get("name") ?? undefined
const editorParam = searchParams.get("editor")
const shareRootParam = searchParams.get("shareRoot")
const shareRootFromUrl: PublicShareRootType | null =
shareRootParam === "file" || shareRootParam === "folder" ? shareRootParam : null
const [shareRoot, setShareRoot] = useState<PublicShareRootType | null>(shareRootFromUrl)
useEffect(() => {
if (shareRootFromUrl) {
setShareRoot(shareRootFromUrl)
return
}
setShareRoot(readPublicShareRootType(token))
}, [shareRootFromUrl, token])
const [password] = useState<string | undefined>(() => {
if (typeof window === "undefined") return undefined
return sessionStorage.getItem(`public-share-pw:${token}`) ?? undefined
})
const fileName = fileDisplayName ?? filePath.split("/").pop() ?? ""
const useUltidraw =
editorParam === "ultidraw" || shouldOpenInUltidrawEditor({ name: fileName })
const useRichText =
editorParam === "richtext" || shouldOpenInRichTextEditor({ name: fileName })
if (useUltidraw) {
return (
<PublicUltidrawEditor
token={token}
filePath={filePath}
password={password}
returnTo={returnTo}
mode={mode}
fileDisplayName={fileDisplayName}
shareRoot={shareRoot}
/>
)
}
if (useRichText) {
return (
<PublicRichTextEditor
token={token}
filePath={filePath}
password={password}
returnTo={returnTo}
mode={mode}
fileDisplayName={fileDisplayName}
shareRoot={shareRoot}
/>
)
}
return (
<PublicOfficeEditor
token={token}
filePath={filePath}
password={password}
returnTo={returnTo}
mode={mode}
fileDisplayName={fileDisplayName}
shareRoot={shareRoot}
/>
)
}