Skip to content

Commit 564e0d6

Browse files
authored
Merge pull request #41 from firstcontributions/upgrade-next-to-13
2 parents 7f3bf30 + f018fa9 commit 564e0d6

File tree

83 files changed

+1223
-7336
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1223
-7336
lines changed

.babelrc

Lines changed: 0 additions & 4 deletions
This file was deleted.

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,7 @@ yarn-error.log*
3737
*.tsbuildinfo
3838

3939
#vscode
40-
.vscode
40+
.vscode
41+
42+
# relay
43+
__generated__

.storybook/RelayStorybook.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import { ReactNode, useEffect, useState } from 'react'
2+
import { RelayEnvironmentProvider } from 'react-relay'
23
import { createMockEnvironment, MockPayloadGenerator } from 'relay-test-utils'
34

4-
import { IEnvironment } from 'relay-runtime'
5-
import RelayEnvironmentProvider from '../src/lib/RelayEnvironmentProvider'
6-
import RelayModernEnvironment from 'relay-runtime/lib/store/RelayModernEnvironment'
7-
85
type RelayStorybookProps = {
96
children: ReactNode
107
mockResolvers?: Record<string, unknown>

app/Home.tsx

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
'use client'
2+
3+
import { Suspense } from 'react'
4+
import {
5+
RelayEnvironmentProvider,
6+
graphql,
7+
PreloadedQuery,
8+
usePreloadedQuery,
9+
Environment,
10+
} from 'react-relay'
11+
import HomeQueryNode, { HomeQuery } from '__generated__/HomeQuery.graphql'
12+
import { getCurrentEnvironment } from 'src/relay/environment'
13+
import { SerializablePreloadedQuery } from 'src/relay/loadSerializableQuery'
14+
import useSerializablePreloadedQuery from 'src/relay/useSerializablePreloadedQuery'
15+
import Card from 'src/components/Card'
16+
import Layout from 'src/components/Layout'
17+
import Login from 'src/components/Login'
18+
import Feed from 'src/components/feed/Feed'
19+
import UserDetails from 'src/components/UserDetails/UserDetails'
20+
21+
type HomePageProps = {
22+
preloadedQuery: SerializablePreloadedQuery<typeof HomeQueryNode, HomeQuery>
23+
cookies: string
24+
}
25+
26+
const HomePage = ({ preloadedQuery, cookies }: HomePageProps) => {
27+
const environment = getCurrentEnvironment(cookies)
28+
const queryRef = useSerializablePreloadedQuery(environment, preloadedQuery)
29+
30+
return (
31+
<RelayEnvironmentProvider environment={environment as Environment}>
32+
<Suspense fallback="Loading...">
33+
<MainView queryRef={queryRef} />
34+
</Suspense>
35+
</RelayEnvironmentProvider>
36+
)
37+
}
38+
39+
const RootQuery = graphql`
40+
query HomeQuery {
41+
viewer {
42+
handle
43+
...UserDetails_user
44+
...RelevantIssues
45+
...IssuesFromLastRepo
46+
...IssuesFromRecentRepos
47+
}
48+
...FeedsQuery
49+
}
50+
`
51+
52+
function MainView(props: { queryRef: PreloadedQuery<HomeQuery> }) {
53+
const data = usePreloadedQuery(RootQuery, props.queryRef)
54+
55+
let leftSidebar = <Login />
56+
if (data.viewer) {
57+
leftSidebar = (
58+
<Card>
59+
<UserDetails user={data.viewer} />
60+
</Card>
61+
)
62+
}
63+
64+
return (
65+
<Layout sidebarContentLeft={leftSidebar}>
66+
<Feed root={data} />
67+
</Layout>
68+
)
69+
}
70+
71+
export default HomePage

app/globals.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@tailwind base;
2+
@tailwind components;
3+
@tailwind utilities;

app/head.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default function Head() {
2+
return (
3+
<>
4+
<title>OpenSourcer</title>
5+
<meta content="width=device-width, initial-scale=1" name="viewport" />
6+
<link rel="icon" href="/favicon.ico" />
7+
</>
8+
)
9+
}

app/issues/Issues.tsx

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
'use client'
2+
3+
import {
4+
Environment,
5+
graphql,
6+
PreloadedQuery,
7+
RelayEnvironmentProvider,
8+
usePreloadedQuery,
9+
} from 'react-relay'
10+
import { getCurrentEnvironment } from 'src/relay/environment'
11+
import { SerializablePreloadedQuery } from 'src/relay/loadSerializableQuery'
12+
import useSerializablePreloadedQuery from 'src/relay/useSerializablePreloadedQuery'
13+
import Layout from 'src/components/Layout'
14+
import UserDetails from 'src/components/UserDetails/UserDetails'
15+
import IssuesQueryNode, { IssuesQuery } from '__generated__/IssuesQuery.graphql'
16+
import Card from 'src/components/Card'
17+
import IssuesFromLastRepo from 'src/components/issue/IssuesFromLastRepo'
18+
import IssuesFromRecentRepos from 'src/components/issue/IssuesFromRecentRepo'
19+
import RelevantIssues from 'src/components/issue/RelevantIssues'
20+
import { Suspense } from 'react'
21+
22+
const IssuesQuery = graphql`
23+
query IssuesQuery {
24+
viewer {
25+
handle
26+
...UserDetails_user
27+
...RelevantIssues
28+
...IssuesFromLastRepo
29+
...IssuesFromRecentRepos
30+
}
31+
}
32+
`
33+
type IssuesProps = {
34+
preloadedQuery: SerializablePreloadedQuery<
35+
typeof IssuesQueryNode,
36+
IssuesQuery
37+
>
38+
cookies: string
39+
}
40+
41+
export default function IssuesContainer({
42+
preloadedQuery,
43+
cookies,
44+
}: IssuesProps) {
45+
const environment = getCurrentEnvironment(cookies)
46+
const queryRef = useSerializablePreloadedQuery(environment, preloadedQuery)
47+
return (
48+
<RelayEnvironmentProvider environment={environment as Environment}>
49+
<Suspense fallback="Loading...">
50+
<Issues queryRef={queryRef} />
51+
</Suspense>
52+
</RelayEnvironmentProvider>
53+
)
54+
}
55+
56+
export function Issues(props: { queryRef: PreloadedQuery<IssuesQuery> }) {
57+
const data = usePreloadedQuery(IssuesQuery, props.queryRef)
58+
if (!data.viewer) {
59+
return <>User Not Found</>
60+
}
61+
return (
62+
<div>
63+
<Layout
64+
sidebarContentRight={<>UserPage right sidebar</>}
65+
sidebarContentLeft={
66+
<Card>
67+
<UserDetails user={data.viewer} />
68+
</Card>
69+
}
70+
>
71+
<IssuesFromLastRepo user={data.viewer} />
72+
<IssuesFromRecentRepos user={data.viewer} />
73+
<RelevantIssues user={data.viewer} />
74+
</Layout>
75+
</div>
76+
)
77+
}

app/issues/page.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { headers } from 'next/headers'
2+
import loadSerializableQuery from 'src/relay/loadSerializableQuery'
3+
import IssuesQueryNode, { IssuesQuery } from '__generated__/IssuesQuery.graphql'
4+
import Issues from './Issues'
5+
6+
export default async function IssuesPage({
7+
params,
8+
}: {
9+
params: { id: string }
10+
}) {
11+
const requestCookie = headers().get('cookie')
12+
const preloadedQuery = await loadSerializableQuery<
13+
typeof IssuesQueryNode,
14+
IssuesQuery
15+
>(
16+
IssuesQueryNode.params,
17+
{ id: (decodeURIComponent(params.id) as string) ?? '' },
18+
requestCookie ?? ''
19+
)
20+
return (
21+
<div>
22+
<Issues preloadedQuery={preloadedQuery} cookies={requestCookie ?? ''} />
23+
</div>
24+
)
25+
}

app/layout.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import './globals.css'
2+
3+
export default function RootLayout({
4+
children,
5+
}: {
6+
children: React.ReactNode
7+
}) {
8+
return (
9+
<html lang="en">
10+
<head />
11+
<body>{children}</body>
12+
</html>
13+
)
14+
}

app/page.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { headers } from 'next/headers'
2+
import loadSerializableQuery from 'src/relay/loadSerializableQuery'
3+
import MainViewQueryNode, { HomeQuery } from '__generated__/HomeQuery.graphql'
4+
import HomePage from './Home'
5+
6+
const Page = async () => {
7+
const requestCookie = headers().get('cookie')
8+
const preloadedQuery = await loadSerializableQuery<
9+
typeof MainViewQueryNode,
10+
HomeQuery
11+
>(MainViewQueryNode.params, {}, requestCookie ?? '')
12+
13+
return (
14+
<div>
15+
<HomePage preloadedQuery={preloadedQuery} cookies={requestCookie ?? ''} />
16+
</div>
17+
)
18+
}
19+
20+
export default Page
21+
22+
export const revalidate = 0

0 commit comments

Comments
 (0)