Skip to content

Commit c0d5b56

Browse files
committed
feat: add component notfound data
1 parent ebb9f1b commit c0d5b56

5 files changed

Lines changed: 36 additions & 9 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { FileX } from "lucide-react";
2+
3+
export const NotFoundData = ({ message = "No data found" }: { message?: string }) => {
4+
return (
5+
<div className="flex flex-col items-center justify-center py-12 text-center text-gray-500">
6+
<FileX className="mb-4 h-12 w-12 text-gray-400" />
7+
<p className="text-lg font-medium">{message}</p>
8+
</div>
9+
);
10+
};

src/components/ui/Toaster/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const Toaster = ({ ...props }: ToasterProps) => {
1919
}
2020
toastOptions={{
2121
classNames: {
22+
success: "!bg-green-500 !text-white",
2223
error: "!bg-destructive !text-white",
2324
description: "!text-muted-foreground",
2425
},

src/features/events/hooks/useMyEvent.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { eventsService } from "@/services/events";
22
import { useQuery } from "@tanstack/react-query";
3+
import { useMemo } from "react";
4+
5+
export const useMyEvents = (page: number = 1, limit: number = 10, type: string) => {
6+
const typeMemo = useMemo(() => {
7+
return type === "all" ? "" : type;
8+
}, [type]);
39

4-
export const useMyEvents = (page: number = 1, limit: number = 10) => {
510
const { data, isLoading, error } = useQuery({
6-
queryKey: ["getListMyEvents", page, limit],
7-
queryFn: async () => eventsService.getMyEvents(page, limit),
11+
queryKey: ["getListMyEvents", page, limit, type],
12+
queryFn: async () => eventsService.getMyEvents(page, limit, typeMemo),
813
});
914

1015
return {

src/features/events/pages/UserEventPage.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import React from "react";
3+
import React, { useState } from "react";
44
import { useTranslations } from "next-intl";
55
import { motion } from "motion/react";
66
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/Select";
@@ -10,6 +10,7 @@ import MyEventCard from "../components/MyEventCard";
1010
import { EVENTS_TYPE } from "@/constants/event";
1111
import Loader from "@/components/common/Loader";
1212
import { UserEventType } from "@/domains/Events";
13+
import { NotFoundData } from "@/components/common/NotFoundData";
1314

1415
interface UserEventPageProps {
1516
page?: number;
@@ -18,7 +19,8 @@ interface UserEventPageProps {
1819

1920
const UserEventPage = ({ page = 1, perPage = 10 }: UserEventPageProps) => {
2021
const t = useTranslations("MyEventPage");
21-
const { myEvents, isLoading } = useMyEvents(page, perPage);
22+
const [typeActive, setTypeActive] = useState("all");
23+
const { myEvents, isLoading } = useMyEvents(page, perPage, typeActive);
2224

2325
const totalEvents = myEvents.length;
2426
const totalPages = Math.ceil(totalEvents / perPage);
@@ -55,12 +57,13 @@ const UserEventPage = ({ page = 1, perPage = 10 }: UserEventPageProps) => {
5557
transition={{ duration: 0.4, delay: 0.7 }}
5658
className="w-full sm:w-auto"
5759
>
58-
<Select>
60+
<Select onValueChange={setTypeActive} defaultValue="all">
5961
<SelectTrigger className="sm:w-[180px]">
60-
<SelectValue placeholder="Category" />
62+
<SelectValue placeholder="All Type Event" />
6163
</SelectTrigger>
6264
<SelectContent>
6365
<SelectGroup>
66+
<SelectItem value="all">All Type Event</SelectItem>
6467
{EVENTS_TYPE.map((item) => (
6568
<SelectItem key={item} value={item}>
6669
{item}
@@ -74,6 +77,8 @@ const UserEventPage = ({ page = 1, perPage = 10 }: UserEventPageProps) => {
7477
</header>
7578
{isLoading ? (
7679
<Loader />
80+
) : events.length === 0 ? (
81+
<NotFoundData />
7782
) : (
7883
<motion.div
7984
variants={{

src/services/events/index.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,13 @@ export const eventsService = {
2727
/**
2828
* API to retrieve the list of events owned by the current user.
2929
*/
30-
async getMyEvents(page: number = 1, limit: number = 10): Promise<HttpResponse<UserEventType[]>> {
31-
return fetcher.get(`/events/registrations?page=${page}&limit=${limit}`);
30+
async getMyEvents(page: number = 1, limit: number = 10, type?: string): Promise<HttpResponse<UserEventType[]>> {
31+
return fetcher.get(`/events/registrations`, {
32+
params: {
33+
page,
34+
limit,
35+
type,
36+
},
37+
});
3238
},
3339
};

0 commit comments

Comments
 (0)