mirror of https://github.com/kern/filepizza
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { JSX } from 'react'
|
|
import { notFound } from 'next/navigation'
|
|
import { getOrCreateChannelRepo } from '../../../channel'
|
|
import Spinner from '../../../components/Spinner'
|
|
import Wordmark from '../../../components/Wordmark'
|
|
import Downloader from '../../../components/Downloader'
|
|
import MultiDownloader from '../../../components/MultiDownloader'
|
|
import WebRTCPeerProvider from '../../../components/WebRTCProvider'
|
|
import ReportTermsViolationButton from '../../../components/ReportTermsViolationButton'
|
|
|
|
const normalizeSlug = (rawSlug: string | string[]): string => {
|
|
if (typeof rawSlug === 'string') {
|
|
return rawSlug
|
|
} else {
|
|
return rawSlug.join('/')
|
|
}
|
|
}
|
|
|
|
export default async function DownloadPage({
|
|
params,
|
|
}: {
|
|
params: Promise<{ slug: string[] }>
|
|
}): Promise<JSX.Element> {
|
|
const { slug: slugRaw } = await params
|
|
const slug = normalizeSlug(slugRaw)
|
|
const channel = await getOrCreateChannelRepo().fetchChannel(slug)
|
|
|
|
if (!channel) {
|
|
notFound()
|
|
}
|
|
|
|
return (
|
|
<div className="flex flex-col items-center space-y-5 py-10 max-w-2xl mx-auto">
|
|
<Spinner direction="down" />
|
|
<Wordmark />
|
|
<WebRTCPeerProvider>
|
|
{channel.additionalUploaders && channel.additionalUploaders.length > 0 ? (
|
|
<MultiDownloader
|
|
primaryUploaderID={channel.uploaderPeerID}
|
|
additionalUploaders={channel.additionalUploaders}
|
|
/>
|
|
) : (
|
|
<Downloader uploaderPeerID={channel.uploaderPeerID} />
|
|
)}
|
|
<ReportTermsViolationButton
|
|
uploaderPeerID={channel.uploaderPeerID}
|
|
slug={slug}
|
|
/>
|
|
</WebRTCPeerProvider>
|
|
</div>
|
|
)
|
|
} |