'use client'; import { base64Decode, getCodeHostInfoForRepo, unwrapServiceError } from "@/lib/utils"; import { useBrowseParams } from "@/app/[domain]/browse/hooks/useBrowseParams"; import { useQuery } from "@tanstack/react-query"; import { getFileSource } from "@/features/search/fileSourceApi"; import { useDomain } from "@/hooks/useDomain"; import { Loader2 } from "lucide-react"; import { Separator } from "@/components/ui/separator"; import { getRepoInfoByName } from "@/actions"; import { cn } from "@/lib/utils"; import Image from "next/image"; import { useMemo } from "react"; import { PureCodePreviewPanel } from "./pureCodePreviewPanel"; import { PathHeader } from "@/app/[domain]/components/pathHeader"; export const CodePreviewPanel = () => { const { path, repoName, revisionName } = useBrowseParams(); const domain = useDomain(); const { data: fileSourceResponse, isPending: isFileSourcePending, isError: isFileSourceError } = useQuery({ queryKey: ['fileSource', repoName, revisionName, path, domain], queryFn: () => unwrapServiceError(getFileSource({ fileName: path, repository: repoName, branch: revisionName }, domain)), }); const { data: repoInfoResponse, isPending: isRepoInfoPending, isError: isRepoInfoError } = useQuery({ queryKey: ['repoInfo', repoName, domain], queryFn: () => unwrapServiceError(getRepoInfoByName(repoName, domain)), }); const codeHostInfo = useMemo(() => { if (!repoInfoResponse) { return undefined; } return getCodeHostInfoForRepo({ codeHostType: repoInfoResponse.codeHostType, name: repoInfoResponse.name, displayName: repoInfoResponse.displayName, webUrl: repoInfoResponse.webUrl, }); }, [repoInfoResponse]); if (isFileSourcePending || isRepoInfoPending) { return (
Loading...
) } if (isFileSourceError || isRepoInfoError) { return
Error loading file source
} return ( <>
{(fileSourceResponse.webUrl && codeHostInfo) && ( {codeHostInfo.codeHostName} Open in {codeHostInfo.codeHostName} )}
) }