-
Notifications
You must be signed in to change notification settings - Fork 373
Expand file tree
/
Copy pathpage.tsx
More file actions
68 lines (59 loc) · 2.61 KB
/
Copy pathpage.tsx
File metadata and controls
68 lines (59 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { addGithubRepo } from "@/features/workerApi/actions";
import { isServiceError, unwrapServiceError } from "@/lib/utils";
import { ServiceErrorException } from "@/lib/serviceError";
import { prisma } from "@/prisma";
import { SINGLE_TENANT_ORG_ID } from "@/lib/constants";
import { getRepoInfo } from "./api";
import { CustomSlateEditor } from "@/features/chat/customSlateEditor";
import { RepoIndexedGuard } from "./components/repoIndexedGuard";
import { LandingPage } from "./components/landingPage";
import { getConfiguredLanguageModelsInfo } from "@/features/chat/actions";
import { getIdentityProviderMetadata } from "@/lib/identityProviders";
import { auth } from "@/auth";
interface PageProps {
params: Promise<{ owner: string; repo: string }>;
}
export default async function GitHubRepoPage(props: PageProps) {
const params = await props.params;
const { owner, repo } = params;
const session = await auth();
const { repoId, isNewlyTriggered } = await (async () => {
// 1. Look up repo by owner/repo
const displayName = `${owner}/${repo}`;
const existingRepo = await prisma.repo.findFirst({
where: {
orgId: SINGLE_TENANT_ORG_ID,
displayName: displayName,
external_codeHostType: 'github',
external_codeHostUrl: 'https://github.com',
},
});
if (existingRepo) {
return { repoId: existingRepo.id, isNewlyTriggered: false };
}
// 2. If it doesn't exist, attempt to create it
const response = await addGithubRepo(owner, repo);
if (isServiceError(response)) {
throw new ServiceErrorException(response);
}
return { repoId: response.repoId, isNewlyTriggered: true };
})();
const repoInfo = await unwrapServiceError(getRepoInfo(repoId));
const languageModels = await unwrapServiceError(getConfiguredLanguageModelsInfo());
const providers = getIdentityProviderMetadata();
return (
<RepoIndexedGuard initialRepoInfo={repoInfo} isNewlyTriggered={isNewlyTriggered} repoFullName={`${owner}/${repo}`}>
<CustomSlateEditor>
<LandingPage
languageModels={languageModels}
repoName={repoInfo.name}
repoDisplayName={repoInfo.displayName ?? undefined}
imageUrl={repoInfo.imageUrl ?? undefined}
repoId={repoInfo.id}
providers={providers}
isAuthenticated={!!session?.user}
/>
</CustomSlateEditor>
</RepoIndexedGuard>
)
}