Skip to content

Commit 0cae4a4

Browse files
authored
Merge pull request #199 from arashsheyda/feat/repo-item-issues-animation
feat(ui): add smooth toggle transition for reposity issues list
2 parents 1e4780e + a6c5c19 commit 0cae4a4

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

components/RepositoryItem.tsx

+16-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type RepositoryItemProps = {
1414

1515
export const RepositoryItem = ({ repository }: RepositoryItemProps) => {
1616
const [isIssueOpen, setIsIssueOpen] = useState(false);
17+
const [isIssuesListVisible, setIsIssuesListVisible] = useState(false);
1718

1819
dayjs.extend(relativeTime);
1920
const useLastModified = (date: string) => {
@@ -25,10 +26,20 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => {
2526
};
2627
const lastModified = useLastModified(repository.last_modified);
2728

29+
useEffect(() => {
30+
if (isIssueOpen) {
31+
setIsIssuesListVisible(true);
32+
} else {
33+
// Delay unmounting to allow close animation to complete
34+
const timer = setTimeout(() => setIsIssuesListVisible(false), 300);
35+
return () => clearTimeout(timer);
36+
}
37+
}, [isIssueOpen]);
38+
2839
return (
2940
<div className="repo-item">
30-
<div id={`repo-${repository.id}`} onClick={() => setIsIssueOpen(!isIssueOpen)}>
31-
<div>
41+
<div id={`repo-${repository.id}`}>
42+
<div onClick={() => setIsIssueOpen(!isIssueOpen)}>
3243
<RepositoryItemTopBar
3344
isIssueOpen={isIssueOpen}
3445
repositoryHasNewIssues={repository.has_new_issues}
@@ -50,7 +61,9 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => {
5061
/>
5162
</div>
5263
</div>
53-
{isIssueOpen && <IssuesList issues={repository.issues} />}
64+
<div className={`repo-item__issues-warper ${isIssueOpen ? 'open' : ''}`}>
65+
{isIssuesListVisible && <IssuesList issues={repository.issues} />}
66+
</div>
5467
</div>
5568
</div>
5669
);

styles/globals.scss

+13
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,19 @@ base, html {
170170
}
171171
}
172172

173+
.repo-item__issues-warper {
174+
overflow: hidden;
175+
transition: all 0.3s ease-in-out;
176+
max-height: 0;
177+
opacity: 0;
178+
visibility: hidden;
179+
&.open {
180+
max-height: 1000px;
181+
opacity: 1;
182+
visibility: visible;
183+
}
184+
}
185+
173186
.repo-item__issue-list {
174187
display: flex;
175188
flex-direction: column;

0 commit comments

Comments
 (0)