You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Portfolio/src/pages/index.tsx

55 lines
1.4 KiB

import z from "zod";
import { NextSeo } from "next-seo";
import { GetStaticProps, InferGetStaticPropsType, NextPage } from "next";
import User from "@components/User";
import Layout from "@components/Layout";
import FeaturedRepositories from "@components/FeaturedRepositories";
import BestRepository from "@components/BestRepository";
import { RepositoryResponse } from "@models/responses";
import { fetchAvailability, fetchRepositories, fetchUser } from "@utils/fetch";
import { giteaUsername } from "@utils/config";
export const getStaticProps: GetStaticProps = async () => {
const isAvailable = await fetchAvailability();
const user = await fetchUser(giteaUsername);
const repositories = await fetchRepositories(user.id);
const bestRepository: z.infer<typeof RepositoryResponse> | undefined =
repositories.reduce((prev, current) =>
prev.stars_count > current.stars_count ? prev : current
);
return {
props: {
isAvailable,
user,
bestRepository,
repositories
},
revalidate: 60 * 5
};
};
const Index: NextPage = ({
repositories,
user,
bestRepository,
isAvailable
}: InferGetStaticPropsType<typeof getStaticProps>) => (
<Layout>
<NextSeo title="Home" />
<User isAvailable={isAvailable} user={user} />
<FeaturedRepositories repositories={repositories} />
<BestRepository repository={bestRepository} />
</Layout>
);
export default Index;