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

38 lines
1.4 KiB
TypeScript

import { apiClient } from "@/lib/api/client"
import type { DriveFileInfo } from "@/lib/api/types"
import { driveFolderHref } from "@/lib/drive/drive-sidebar-tree"
import { shouldOpenInOnlyOffice, shouldOpenInRichTextEditor } from "@/lib/drive/drive-preview"
import { buildDriveDocsEditHref, buildDriveEditHref } from "@/lib/drive/drive-url"
/** Normalize user-entered URL for TipTap link marks. */
export function normalizeDocsLinkHref(raw: string): string {
const trimmed = raw.trim()
if (!trimmed) return ""
if (/^(https?:\/\/|mailto:|tel:|\/|#)/i.test(trimmed)) return trimmed
return `https://${trimmed}`
}
/** Resolve an in-app href for a drive file or folder (for docs hyperlinks). */
export async function resolveDriveItemLinkHref(file: DriveFileInfo): Promise<string> {
if (file.type === "directory") {
const view = file.is_shared ? "shared" : "files"
return driveFolderHref(view, file.path)
}
if (shouldOpenInRichTextEditor(file)) {
let fileId = file.file_id
if (!fileId) {
const path = file.path.startsWith("/") ? file.path : `/${file.path}`
const info = await apiClient.get<DriveFileInfo>(`/drive/files/info${path}`)
fileId = info.file_id
}
if (fileId) return buildDriveDocsEditHref(fileId)
}
if (shouldOpenInOnlyOffice(file)) {
return buildDriveEditHref(file.path)
}
return buildDriveEditHref(file.path)
}