Snai3i-MarketPlace / frontend / src / pages / Dashboard / Market / index.tsx
index.tsx
Raw
import {
  useGetMarketCoursesQuery,
  useGetTagsQuery,
} from '@/app/backend/endpoints/courses';
import Fallback from '@/components/Fallback';
import { Button } from '@/components/ui/button';
import CourseCard from '@/pages/Main/Home/components/CourseCard';
import { useState } from 'react';

const Market = () => {
  const { data: coursesData, isLoading } = useGetMarketCoursesQuery();
  const courses = coursesData?.data;
  const [selectedCategory, setSelectedCategory] = useState('All');
  const { data: categoriesData } = useGetTagsQuery();
  const categories = categoriesData?.data ?? [];
  const filtredCourses = courses?.filter((course) => {
    return (
      selectedCategory === 'All' || course.tags?.includes(selectedCategory)
    );
  });
  if (isLoading) {
    return <Fallback />;
  }
  return (
    <section className="space-y-7">
      <span className="text-slate-700 text-[26px] font-semibold">Market</span>
      <div className="flex flex-wrap gap-1">
        <Button
          variant={selectedCategory === 'All' ? 'category' : 'ghost'}
          className="w-fit text-category font-semibold hover:text-cyan-700"
          onClick={() => setSelectedCategory('All')}
        >
          All
        </Button>
        {categories.map((category, index) => (
          <div key={index}>
            <Button
              variant={selectedCategory === category ? 'category' : 'ghost'}
              className="w-fit text-category font-semibold hover:text-cyan-700"
              onClick={() => setSelectedCategory(category)}
            >
              {category.charAt(0).toUpperCase() + category.slice(1)}
            </Button>
          </div>
        ))}
      </div>
      <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-x-4 gap-y-8">
        {filtredCourses?.map(
          (course) =>
            (
              <div key={course.course_id}>
                <CourseCard course={course} openInNewTab/>
              </div>
            ) ?? <p>No courses found</p>
        )}
      </div>
    </section>
  );
};

export default Market;