import { ReqHandler } from "@ethicdevs/react-monolith";
import { AppRoute, AppRoutesParams } from "../../routes";
import { makeOrganizationService } from "../../services/organization";
import { makeRepositoryService } from "../../services/repository";
import {
PullRequestFormState,
RepositoryPullRequestCreateFormVariant,
} from "../../islands/RepositoryPullRequestCreateForm";
import RepositoryPullRequestCreateView, {
RepositoryPullRequestCreateViewProps,
} from "../../views/repository/RepositoryPullRequestCreateView";
const getRepositoryPullRequestCreateView: ReqHandler = async (
request,
reply
) => {
const { orgSlug, repoSlug } =
request.params as AppRoutesParams[AppRoute.REPOSITORY_PULL_REQUEST_CREATE]["params"];
const orgService = makeOrganizationService({ request });
const repoService = makeRepositoryService({ request });
const parentOrg = await orgService.getOrganizationBySlug(orgSlug);
const repo = await repoService.getRepository(orgSlug, repoSlug);
if (parentOrg == null || repo == null) {
return reply.status(404).callNotFound();
}
const branches = await repoService.getRepositoryBranches(repo);
const variant: RepositoryPullRequestCreateFormVariant = {
state: PullRequestFormState.CONFIGURE,
data: {
source: {
branches,
parentOrg,
repo,
isFork: repo.forkedFromRepoId != null,
},
initialTarget: undefined,
},
};
const reqHandler = reply.makeRequestHandler(request, reply);
return reqHandler<RepositoryPullRequestCreateViewProps>(
RepositoryPullRequestCreateView.name,
{
errorMessage: null,
initialValues: {},
parentOrg,
repo,
variant,
}
);
};
export default getRepositoryPullRequestCreateView;