Skip to content

Commit

Permalink
adding home page
Browse files Browse the repository at this point in the history
  • Loading branch information
IslemMedjahdi committed Jan 7, 2023
1 parent 518a183 commit f1bb227
Show file tree
Hide file tree
Showing 30 changed files with 1,070 additions and 64 deletions.
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,26 @@
"@next/font": "13.1.0",
"@tailwindcss/typography": "^0.5.8",
"@types/node": "18.11.17",
"@types/nprogress": "^0.2.0",
"@types/react": "^18.0.26",
"@types/react-datepicker": "^4.8.0",
"@types/react-dom": "18.0.9",
"autoprefixer": "^10.4.13",
"axios": "^1.2.1",
"eslint": "8.30.0",
"eslint-config-next": "13.1.0",
"next": "13.1.0",
"next-seo": "^5.15.0",
"nprogress": "^0.2.0",
"postcss": "^8.4.20",
"react": "18.2.0",
"react-data-table-component": "^7.5.3",
"react-datepicker": "^4.8.0",
"react-dom": "18.2.0",
"react-icons": "^4.7.1",
"react-loader-spinner": "^5.3.4",
"react-range": "^1.8.14",
"react-zoom-pan-pinch": "^2.1.3",
"styled-components": "^5.3.6",
"swiper": "^8.4.5",
"tailwindcss": "^3.2.4",
Expand Down
1 change: 1 addition & 0 deletions public/no-announcements.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import Image from "next/image";
import React, { useEffect, useState } from "react";
import { IMAGES } from "../../../constants/images";
import AnnouncementService from "../../../services/annoucement.service";
import { Announcement } from "../../../typings/announcement";
import Pagination from "../../shared/Pagination";
import AnnoucementsFilters from "../shared/AnnoucementsFilters";
import AnnouncementCard from "../shared/AnnouncementCard";
import AnnouncementCardLoading from "../shared/AnnouncementCardLoading";

const announcementService = AnnouncementService.getInstance();

const AllAnouncementsIndex: React.FC = () => {
const [announcements, setAnnouncements] = useState<
Announcement.AnnouncementPart[] | null
>(null);
const [pageNum, setPageNum] = useState(1);
const [numberOfPages, setNumberOfPages] = useState<number>(0);
const [loading, setLoading] = useState(true);

const [filters, setFilters] = useState<Announcement.AnnouncementFilters>({});

const getAnnoncementByPage = async (page: number) => {
setLoading(true);
const savePage = pageNum;
setPageNum(page);
try {
const response = await announcementService.getAllAnnouncements(
page,
filters
);
// TODO: REMOVE AFTER DEPLOYING
setTimeout(() => {
setAnnouncements(response.data.annonces);
setNumberOfPages(response.data.num_pages);
setLoading(false);
}, 1000);
console.log(response);
} catch (e) {
setLoading(false);
setPageNum(savePage);
console.log(e);
} finally {
}
};

useEffect(() => {
getAnnoncementByPage(1);
}, []);
return (
<div className="flex justify-center">
<div className="container sm:px-4">
<div className="flex flex-col items-center justify-center gap-y-2 py-10">
<h1 className="relative z-10 w-fit text-center font-serif text-3xl font-semibold text-gray-900 after:absolute after:top-full after:left-0 after:h-2 after:w-full after:origin-left after:skew-y-1 after:animate-reveal after:bg-blue-primary">
Rechercher une offre
</h1>
</div>
<div className="flex w-full flex-col divide-y bg-white shadow">
<div className="w-full bg-blue-light p-4">
<AnnoucementsFilters
filters={filters}
onFilterChange={setFilters}
onSubmit={() => getAnnoncementByPage(1)}
/>
</div>
<div className="grid w-full grid-cols-1 gap-4 p-6 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5">
{loading || !announcements ? (
[1, 2, 3, 4, 5, 6, 7, 8].map((item) => (
<AnnouncementCardLoading key={item} />
))
) : announcements.length === 0 ? (
<div className="col-span-full flex w-full flex-col items-center gap-y-8 py-8">
<p className="relative font-serif text-2xl font-semibold after:absolute after:top-full after:left-0 after:h-1 after:w-full after:origin-left after:skew-y-[0.5deg] after:bg-blue-primary after:transition after:duration-300 hover:after:scale-x-100">
Il n'y a pas d'annonce
</p>
<Image
src={IMAGES.NO_ANNOUNCEMENTS}
alt="no-announcements"
width={500}
height={500}
className="object-contain"
/>
</div>
) : (
announcements.map(
({
id,
photos,
titre,
prix,
localisation,
categorie,
date_publication,
}) => (
<AnnouncementCard
key={id}
id={id}
photos={photos}
title={titre}
price={prix}
localisation={localisation}
category={categorie}
createdAt={date_publication}
/>
)
)
)}
</div>
{numberOfPages > 0 && (
<div className="p-4">
<Pagination
selectedPage={pageNum}
numberPages={numberOfPages}
onPageClick={getAnnoncementByPage}
/>
</div>
)}
</div>
</div>
</div>
);
};

export default AllAnouncementsIndex;
Loading

0 comments on commit f1bb227

Please sign in to comment.