"use client"; import { CustomButton } from "@/core/components/base/button"; import { CustomInput } from "@/core/components/base/input"; import { userInfoService } from "@/core/service/user-info.service"; import { getContactImageUrl } from "@/core/utils"; import { DASHBOARD_ROUTE } from "@modules/dashboard/routes/route.constant"; import { useQuery } from "@tanstack/react-query"; import { Plus, Search, Users } from "lucide-react"; import { useEffect, useState, type ChangeEvent } from "react"; import { useNavigate } from "react-router-dom"; import { CreateCampaignModal } from "../../components/create-campaign-modal"; import { getCampaignsService } from "../../service/campaigns.service"; import type { Campaign, CampaignTab } from "./campaigns.type"; export function CampaignsPage() { const navigate = useNavigate(); const [activeTab, setActiveTab] = useState("فعال"); const [searchQuery, setSearchQuery] = useState(""); const [currentCampaign, setCurrentCampaign] = useState>([]); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const { data: campaigns = [], isLoading, refetch, } = useQuery({ queryKey: ["campaigns"], queryFn: getCampaignsService, }); useEffect(() => { if (campaigns) { const user = userInfoService.getUserInfo(); let filtered = campaigns; switch (activeTab) { case "my": filtered = campaigns.filter( (c) => Number(c.user_id) === Number(user.WorkflowID) ); break; case "منتخب": filtered = campaigns.filter((c) => c.status === "منتخب"); break; case "group": filtered = campaigns.filter( (c) => c.school_code === user.school_code ); break; case "فعال": default: filtered = campaigns; break; } setCurrentCampaign(filtered); } }, [campaigns, activeTab]); // Added activeTab to dependencies const tabs: { value: CampaignTab; label: string }[] = [ { value: "فعال", label: "تمام کارزار‌ها" }, { value: "my", label: "کارزار‌های من" }, { value: "منتخب", label: "کارزار‌های برتر" }, { value: "group", label: "کارزار‌های گروه" }, ]; const handleSearchChange = (e: ChangeEvent) => { const query = e.target.value; setSearchQuery(query); setActiveTab("فعال"); if (query === "") { handleTabChange(activeTab, campaigns); } else { const filteredCampaigns = campaigns.filter((campaign) => campaign.title.toLowerCase().includes(query.toLowerCase()) ); setCurrentCampaign(filteredCampaigns); } }; const handleTabChange = (tab: CampaignTab, campaignData = campaigns) => { setActiveTab(tab); const user = userInfoService.getUserInfo(); let filtered = campaignData; switch (tab) { case "my": filtered = campaignData.filter( (c) => Number(c.user_id) === Number(user.WorkflowID) ); break; case "منتخب": filtered = campaignData.filter((c) => c.status === "منتخب"); break; case "group": filtered = campaignData.filter( (c) => c.school_code === user.school_code ); break; case "فعال": default: filtered = campaignData; break; } setCurrentCampaign(filtered); setSearchQuery(""); }; const handleJoin = (campaign: Campaign) => { navigate( `${DASHBOARD_ROUTE.sub}/${DASHBOARD_ROUTE.joinToCampaing}?id=${campaign.WorkflowID}`, { replace: true, } ); }; const showCampaing = (cId: number) => { navigate(`${DASHBOARD_ROUTE.sub}/${DASHBOARD_ROUTE.campaing}/${cId}`, { replace: true, }); }; const renderSkeleton = () => (
{[1, 2, 3].map((i) => (
))}
); return (

کارزار‌ها

برای تغییر جهان، کارزار ایجاد کنید و دیگران را دعوت کنید

setIsCreateModalOpen(true)} className="flex items-center justify-center gap-2" > ایجاد کارزار
{tabs.map((tab) => ( ))}
{isLoading ? ( renderSkeleton() ) : currentCampaign.length > 0 ? (
    {currentCampaign.map((campaign) => (
  • {campaign.image ? ( {campaign.title} ) : (
    )}

    {campaign.title}

    ایجاد کننده :

    {campaign.user_id_nickname}

    {Number(campaign.signature_count)} عضو

    {Number(campaign.comment_count)} کامنت

    {activeTab === "منتخب" && ( handleJoin(campaign)} variant="info" className="shrink-0" > انتخاب{" "} )} showCampaing(campaign.WorkflowID)} variant="info" className="shrink-0" > جزییات
  • ))}
) : (

{searchQuery ? "کارزاری با این مشخصات یافت نشد." : "کارزاری در این دسته وجود ندارد."}

)}
setIsCreateModalOpen(false)} onSuccess={() => refetch()} />
); } export default CampaignsPage;