Skip to content

Commit 2893666

Browse files
committed
add horizontal scroll to issues from recent repo
1 parent ddaf26a commit 2893666

File tree

4 files changed

+251
-79
lines changed

4 files changed

+251
-79
lines changed

src/components/issue/Issue.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const Issue = ({ issue }: IssueProps) => {
2020
issue
2121
)
2222
return (
23-
<div className="flex flex-col p-6 rounded-lg shadow-lg hover:shadow-md bg-white dark:bg-dark-700">
23+
<div className="w-96 flex flex-col p-6 rounded-lg shadow-lg hover:shadow-md bg-white dark:bg-dark-700">
2424
<a href={data.url} target="_blank" rel="noopener noreferrer">
2525
<div className="flex flex-row">
2626
<img

src/components/issue/IssuesFromLastRepo.tsx

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import React from 'react'
1+
import React, { useCallback, useEffect } from 'react'
22
import { graphql, usePaginationFragment } from 'react-relay'
33
import { IssuesFromLastRepo$key } from '../../queries/__generated__/IssuesFromLastRepo.graphql'
4-
import { IssuesFromLastRepo_Query } from '../../queries/__generated__/IssuesFromLastRepo_Query.graphql'
5-
import { UserDetails_user$key } from '../../queries/__generated__/UserDetails_user.graphql'
4+
import { FaChevronRight } from '@react-icons/all-files/fa/FaChevronRight'
65
import Issue from './Issue'
76

87
type IssuesFromLastRepoProps = {
@@ -32,27 +31,70 @@ const IssuesFromLastRepo = ({ user }: IssuesFromLastRepoProps) => {
3231
user
3332
)
3433

34+
const scrollableElement = React.useRef<HTMLDivElement>(null)
35+
36+
enum scrollDirection {
37+
Left = -1,
38+
Right = 1,
39+
}
40+
41+
const scrollHorizontally = useCallback((direction: scrollDirection) => {
42+
scrollableElement.current &&
43+
(scrollableElement.current.scrollLeft += direction * 550)
44+
}, [])
45+
46+
const handleScrollRight = () => {
47+
if (hasNext) {
48+
loadNext(2)
49+
}
50+
scrollHorizontally(scrollDirection.Right)
51+
}
52+
53+
useEffect(() => {
54+
console.log('IssuesFromLastRepo: useEffect', data.issuesFromLastRepo.edges)
55+
scrollHorizontally(scrollDirection.Right)
56+
}, [data.issuesFromLastRepo.edges, scrollHorizontally, scrollDirection.Right])
57+
3558
if (!data || data.issuesFromLastRepo.edges.length === 0) {
3659
return <></>
3760
}
3861

3962
return (
4063
<div className="mt-10">
4164
<h3 className="font-bold text-gray-500 text-lg">Issues from last repo</h3>
42-
<div className="grid grid-cols-2 xl:grid-cols-2 gap-4 mt-4">
43-
{data.issuesFromLastRepo.edges.map(
44-
(issue) => issue && <Issue issue={issue.node} key={issue.node.id} />
45-
)}
46-
{hasNext ? (
47-
<button
48-
onClick={() => {
49-
loadNext(3)
50-
}}
51-
>
52-
Load more
53-
</button>
54-
) : null}
65+
<div className="relative">
66+
<div
67+
className=" flex overflow-x-auto space-x-4 no-scrollbar scroll-smooth"
68+
ref={scrollableElement}
69+
>
70+
{data.issuesFromLastRepo.edges.map(
71+
(issue) => issue && <Issue issue={issue.node} key={issue.node.id} />
72+
)}
73+
</div>
74+
<button
75+
className="absolute right-8 bottom-0 mr-4 mt-4"
76+
onClick={() => scrollHorizontally(scrollDirection.Left)}
77+
>
78+
<FaChevronRight className="b-0 w-6 h-6 rotate-180 dark:text-gray-300 bg-gray-300 dark:bg-dark-900 rounded-full p-1 font-bold" />
79+
</button>
80+
<button
81+
className="absolute right-0 bottom-0 mr-4 mt-4"
82+
onClick={() => handleScrollRight()}
83+
>
84+
<FaChevronRight className="b-0 w-6 h-6 dark:text-gray-300 bg-gray-300 dark:bg-dark-900 rounded-full p-1 font-bold" />
85+
</button>
5586
</div>
87+
<style jsx>
88+
{`
89+
.no-scrollbar::-webkit-scrollbar {
90+
display: none;
91+
}
92+
.no-scrollbar {
93+
-ms-overflow-style: none; /* IE and Edge */
94+
scrollbar-width: none;
95+
}
96+
`}
97+
</style>
5698
</div>
5799
)
58100
}

src/pages/issues/index.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import IssuesFromLastRepo from '../../components/issue/IssuesFromLastRepo'
99
import IssuesFromRecentRepos from '../../components/issue/IssuesFromRecentRepo'
1010
import RelevantIssues from '../../components/issue/RelevantIssues'
1111
import { issuesQuery } from '../../queries/__generated__/issuesQuery.graphql'
12+
import UserDetails from '../../components/UserDetails/UserDetails'
1213

1314
const IssuesQuery = graphql`
1415
query issuesQuery {
1516
viewer {
1617
handle
18+
...UserDetails_user
1719
...RelevantIssues
1820
...IssuesFromLastRepo
1921
...IssuesFromRecentRepos
@@ -31,7 +33,11 @@ const Issues = ({
3133
{query.viewer && (
3234
<Layout
3335
sidebarContentRight={query.viewer.handle}
34-
sidebarContentLeft={<Card></Card>}
36+
sidebarContentLeft={
37+
<Card>
38+
<UserDetails user={query.viewer} />
39+
</Card>
40+
}
3541
>
3642
<IssuesFromLastRepo user={query.viewer} />
3743
<IssuesFromRecentRepos user={query.viewer} />

0 commit comments

Comments
 (0)