Skip to content

Commit 2b7da06

Browse files
committed
added feeds page
1 parent e1ca728 commit 2b7da06

11 files changed

+1375
-566
lines changed

src/components/feed/Feed.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { graphql, usePaginationFragment } from 'react-relay'
2+
import { FeedsQuery$key } from '../../queries/__generated__/FeedsQuery.graphql'
3+
import StoryPreview from './StoryPreview'
4+
5+
type FeedProps = {
6+
root: FeedsQuery$key
7+
}
8+
9+
const Feed = ({ root }: FeedProps) => {
10+
const { data, loadNext, hasNext } = usePaginationFragment(
11+
graphql`
12+
fragment FeedsQuery on Query
13+
@refetchable(queryName: "FeedsRoot_Query")
14+
@argumentDefinitions(
15+
count: { type: "Int", defaultValue: 10 }
16+
cursor: { type: "String" }
17+
) {
18+
feeds(first: $count, after: $cursor)
19+
@connection(key: "RootQuery__feeds") {
20+
edges {
21+
node {
22+
id
23+
...StoryPreview_node
24+
}
25+
}
26+
}
27+
}
28+
`,
29+
root
30+
)
31+
32+
return (
33+
<>
34+
{data.feeds.edges.map(
35+
(edge) => edge && <StoryPreview story={edge?.node} />
36+
)}
37+
</>
38+
)
39+
}
40+
41+
export default Feed

src/components/feed/StoryPreview.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { graphql, useFragment } from 'react-relay'
2+
import { StoryPreview_node$key } from '../../queries/__generated__/StoryPreview_node.graphql'
3+
import Card from '../Card'
4+
import UserSnippet from './UserSnippet'
5+
6+
type StoryPreviewProps = {
7+
story: StoryPreview_node$key
8+
}
9+
10+
const StoryPreview = ({ story }: StoryPreviewProps) => {
11+
const data = useFragment(
12+
graphql`
13+
fragment StoryPreview_node on Story {
14+
id
15+
abstractContent
16+
thumbnail
17+
timeCreated
18+
title
19+
createdBy {
20+
...UserSnippet_user
21+
}
22+
}
23+
`,
24+
story
25+
)
26+
27+
return (
28+
<>
29+
<Card classes="my-8">
30+
<UserSnippet user={data.createdBy} />
31+
<div className="prose">
32+
<h3>{data.title}</h3>
33+
<p>{data.abstractContent}</p>
34+
</div>
35+
</Card>
36+
</>
37+
)
38+
}
39+
40+
export default StoryPreview

src/components/feed/UserSnippet.tsx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import Link from 'next/link'
2+
import { graphql, useFragment } from 'react-relay'
3+
import { UserSnippet_user$key } from '../../queries/__generated__/UserSnippet_user.graphql'
4+
5+
type UserSnippetProps = {
6+
user: UserSnippet_user$key
7+
}
8+
9+
const UserSnippet = ({ user }: UserSnippetProps) => {
10+
const data = useFragment(
11+
graphql`
12+
fragment UserSnippet_user on User {
13+
avatar
14+
id
15+
handle
16+
reputation {
17+
value
18+
}
19+
}
20+
`,
21+
user
22+
)
23+
24+
const hanlde = `@${data.handle}`
25+
console.log(hanlde)
26+
return (
27+
<div className="flex">
28+
<img src={data.avatar} alt={data.handle} className="w-8 h-8 rounded-sm" />
29+
<Link href={`/${hanlde}`}> {data.handle} </Link>
30+
</div>
31+
)
32+
}
33+
34+
export default UserSnippet

src/pages/index.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import IssuesFromLastRepo from '../components/issue/IssuesFromLastRepo'
1010
import IssuesFromRecentRepos from '../components/issue/IssuesFromRecentRepo'
1111
import Layout from '../components/Layout'
1212
import Login from '../components/Login'
13+
import Feed from '../components/feed/Feed'
1314

14-
const FeedsQuery = graphql`
15+
const RootQuery = graphql`
1516
query pages_UserQuery {
1617
viewer {
1718
handle
@@ -20,12 +21,13 @@ const FeedsQuery = graphql`
2021
...IssuesFromLastRepo
2122
...IssuesFromRecentRepos
2223
}
24+
...FeedsQuery
2325
}
2426
`
2527
const Home = ({
2628
preloadedQuery,
2729
}: RelayProps<Record<string, never>, pages_UserQuery>) => {
28-
const query = usePreloadedQuery(FeedsQuery, preloadedQuery)
30+
const query = usePreloadedQuery(RootQuery, preloadedQuery)
2931
let leftSidebar = <Login />
3032
if (query.viewer) {
3133
leftSidebar = (
@@ -43,6 +45,7 @@ const Home = ({
4345
<Card>Posts</Card>
4446
{query.viewer && (
4547
<>
48+
<Feed root={query} />
4649
<IssuesFromLastRepo user={query.viewer} />
4750
<IssuesFromRecentRepos user={query.viewer} />
4851
<RelevantIssues user={query.viewer} />
@@ -52,7 +55,7 @@ const Home = ({
5255
)
5356
}
5457

55-
export default withRelay(Home, FeedsQuery, {
58+
export default withRelay(Home, RootQuery, {
5659
createClientEnvironment: () => getClientEnvironment()!,
5760
createServerEnvironment: async (ctx: NextPageContext) => {
5861
const { createServerEnvironment } = await import(

src/queries/__generated__/BioUpdateMutation.graphql.ts

Lines changed: 90 additions & 89 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)