GitFOSS
.ts
TypeScript
(application/typescript)
// 1st-party
import type { ReactView } from "@ethicdevs/react-monolith";
// 3rd-party
import React from "react";
// generated via script[prisma:generate]
import type { Organization, User } from "@prisma/client";
// app
import type {
  CommonProps,
  RepositoryFileDiff,
  RepositoryWithForkedFromRepo,
} from "../../types";
import { Grid, IslandWrapper, Layout, PageWrapper } from "../../components";
// app islands
import RepositoryFilesDiffsList from "../../islands/RepositoryFilesDiffsList";
import RepositoryHero from "../../islands/RepositoryHero";

export interface RepositoryCompareViewProps extends CommonProps {
  currentUser: null | User;
  filesDiffs: RepositoryFileDiff[];
  parentOrg: Organization;
  repo: RepositoryWithForkedFromRepo;
  refA: string;
  refB: string;
}

const RepositoryCompareView: ReactView<RepositoryCompareViewProps> = ({
  commonProps,
  filesDiffs,
  parentOrg,
  repo,
  refA,
  refB,
}) => {
  return (
    <Layout {...commonProps}>
      <PageWrapper>
        <IslandWrapper data-islandid={`${RepositoryHero.name}$$0`}>
          <RepositoryHero
            forkedFromRepo={repo.forkedFromRepo}
            forksCount={repo.forks.length}
            parentOrg={parentOrg}
            path={`${refA}..${refB}`}
            repo={repo}
            separator={"/"}
          />
        </IslandWrapper>
        <Grid.Col fluid data-islandid={`${RepositoryFilesDiffsList.name}$$0`}>
          <RepositoryFilesDiffsList
            filesDiffs={filesDiffs}
            themeScheme={commonProps.themeScheme}
            orgSlug={parentOrg.slug}
            repoSlug={repo.slug}
            commitHash={refB}
          />
        </Grid.Col>
      </PageWrapper>
    </Layout>
  );
};

RepositoryCompareView.displayName = "RepositoryCompareView";
export default RepositoryCompareView;