Skip to content

Commit 9877369

Browse files
committed
Code refactoring - app/get/repositories (#161)
1 parent 2d90b94 commit 9877369

File tree

3 files changed

+82
-73
lines changed

3 files changed

+82
-73
lines changed

src/app/get/repositories/ListAvailableWiki.tsx

Lines changed: 0 additions & 70 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
"use client";
2+
3+
import React, {JSX, useEffect, useState } from "react";
4+
import {
5+
Card,
6+
CardContent,
7+
CardDescription,
8+
CardHeader,
9+
CardTitle,
10+
} from "@/components/ui/card";
11+
import Link from "next/link";
12+
import { GitFork, Star } from "lucide-react";
13+
14+
export default function RepositoryList() {
15+
const [repositories, setRepositories] = useState<Repository[]>([]);
16+
17+
useEffect(() => {
18+
const fetchRepos = async () => {
19+
const response = await fetch("/api/repository");
20+
if (!response.ok) {
21+
return;
22+
}
23+
const data = await response.json();
24+
setRepositories(data);
25+
};
26+
fetchRepos();
27+
}, []);
28+
29+
return (
30+
<div>
31+
{repositories.map((repository) => (
32+
<AvailableRepositoryCard key={repository.url} repository={repository} />
33+
))}
34+
</div>
35+
)
36+
}
37+
38+
interface Repository {
39+
owner: string
40+
repo: string
41+
description: string
42+
stars: number
43+
forks: number
44+
url: string
45+
}
46+
interface RepositoryProps {
47+
repository: Repository
48+
}
49+
50+
export function AvailableRepositoryCard({ repository }: RepositoryProps): JSX.Element {
51+
// @ts-ignore
52+
return (
53+
<div key={repository.url} className="p-1">
54+
<Link href={`/${repository.owner}/${repository.repo}`}>
55+
<Card>
56+
<CardHeader>
57+
<CardTitle>
58+
{repository.owner}/{repository.repo}
59+
</CardTitle>
60+
<CardDescription>{repository.description}</CardDescription>
61+
</CardHeader>
62+
<CardContent>
63+
<div className="flex items-center gap-4 mb-4">
64+
<div className="flex items-center">
65+
<Star className="w-4 h-4 mr-1" />
66+
<span>{repository.stars}</span>
67+
</div>
68+
<div className="flex items-center">
69+
<GitFork className="w-4 h-4 mr-1" />
70+
<span>{repository.forks}</span>
71+
</div>
72+
</div>
73+
</CardContent>
74+
</Card>
75+
</Link>
76+
</div>
77+
);
78+
}

src/app/get/repositories/page.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
'use client'
21
import React, { Suspense } from 'react'
32
import Loading from '@/app/get/repositories/loading'
4-
import ListAvailableWiki from '@/app/get/repositories/ListAvailableWiki'
3+
import RepositoryList from '@/app/get/repositories/RepositoryList'
54

65
export default function Page() {
76
return (
87
<div>
98
<h1 className="text-3xl font-bold p-4 text-center" >Available Wiki Pages</h1>
10-
<ListAvailableWiki />
9+
<Suspense fallback={<Loading />}>
10+
<RepositoryList />
11+
</Suspense>
1112
</div>
1213
)
1314
}

0 commit comments

Comments
 (0)