import type { ReactView } from "@ethicdevs/react-monolith";
import React from "react";
import type { Organization, Repository, User } from "@prisma/client";
import type { CommonProps, RepositoryHead, RepositoryFile } from "../../types";
import { Layout, PageWrapper } from "../../components";
import RepositoryInitialSetup from "../../islands/RepositoryInitialSetup";
import RepositoryTreeView from "../../islands/RepositoryTreeView";
export interface RepositoryDetailsViewProps extends CommonProps {
currentUser: null | User;
cloneUrl: {
http: string;
ssh: string;
};
parentOrg: Organization;
ref: string;
repo: Repository;
repoHead: null | RepositoryHead;
repoFiles: RepositoryFile[];
}
const RepositoryDetailsView: ReactView<RepositoryDetailsViewProps> = ({
currentUser,
commonProps,
cloneUrl,
parentOrg,
ref,
repo,
repoHead,
repoFiles,
}) => {
return (
<Layout {...commonProps} showSideMenu={false}>
<PageWrapper>
<h1>
{parentOrg.displayName || parentOrg.slug}
{" / "}
{repo.displayName || repo.slug}
{" ∙ "}
<span style={{ textTransform: "capitalize" }}>
({repo.visibility.toLowerCase()})
</span>
</h1>
<div>
<p>{repo.shortDescription}</p>
{repo.websiteUrl != null && (
<p>
<a
href={repo.websiteUrl}
target={"_blank"}
rel={"noopener noreferer noreferrer"}
>
{repo.websiteUrl}
</a>
</p>
)}
</div>
<div>
{repo.keywords.map((keyword, idx, arr) => (
<React.Fragment key={[idx, keyword].join(":")}>
<span>{keyword}</span>
{idx < arr.length - 1 ? ", " : "."}
</React.Fragment>
))}
</div>
<div>
<p>
HTTP Clone: <code>{cloneUrl.http}</code>
</p>
<p>
SSH Clone: <code>{cloneUrl.ssh}</code>
</p>
</div>
{repoHead == null ? (
<div data-islandid={`${RepositoryInitialSetup.name}$$0`}>
<RepositoryInitialSetup
cloneUrl={cloneUrl}
currentUser={currentUser}
ref={ref}
repo={repo}
/>
</div>
) : (
<div data-islandid={`${RepositoryTreeView.name}$$0`}>
<RepositoryTreeView
currPath={"/"}
orgSlug={parentOrg.slug}
repoHead={repoHead}
repoFiles={repoFiles}
repoSlug={repo.slug}
/>
</div>
)}
</PageWrapper>
</Layout>
);
};
RepositoryDetailsView.displayName = "RepositoryDetailsView";
export default RepositoryDetailsView;