"use client"; import type React from "react"; import Link from "next/link"; import { ChevronLeft, Search, Trash2, MoreVertical, Edit, ArrowUpDown, } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Progress } from "@/components/ui/progress"; import { useUser } from "@/context/user-context"; import { useState, useEffect } from "react"; import { AddQuestForm } from "@/components/add-quest-form"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, DialogFooter, } from "@/components/ui/dialog"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Quest } from "@/interface/quest.interface"; export default function QuestsPage() { const { userStats, completeQuest, updateQuestProgress, deleteQuest, updateQuest, } = useUser(); const [searchTerm, setSearchTerm] = useState(""); const [sortBy, setSortBy] = useState<"latest" | "priority">("latest"); // Load sorting preference from localStorage on component mount useEffect(() => { const savedSortBy = localStorage.getItem("questsSortBy"); if ( savedSortBy && (savedSortBy === "latest" || savedSortBy === "priority") ) { setSortBy(savedSortBy); } }, []); // Save sorting preference to localStorage whenever it changes const handleSortChange = (value: "latest" | "priority") => { setSortBy(value); localStorage.setItem("questsSortBy", value); }; // Sort function const sortQuests = (quests: Quest[], isCompleted = false) => { return quests.sort((a, b) => { if (sortBy === "priority") { // Sort by priority: High > Medium > Low (descending) const priorityOrder = { High: 3, Medium: 2, Low: 1 }; const priorityA = priorityOrder[a.priority] || 0; const priorityB = priorityOrder[b.priority] || 0; // If priorities are the same, sort by creation time (newest first) if (priorityA === priorityB) { const timeA = a.createdAt || 0; const timeB = b.createdAt || 0; return timeB - timeA; } return priorityB - priorityA; } else { // Sort by time (newest first) if (isCompleted) { // For completed quests, sort by completion time const timeA = a.completedAt || 0; const timeB = b.completedAt || 0; return timeB - timeA; } else { // For active quests, sort by creation time const timeA = a.createdAt || 0; const timeB = b.createdAt || 0; return timeB - timeA; } } }); }; // Filter and sort quests based on search term and status const activeQuests = sortQuests( userStats.quests.filter( (quest) => !quest.completed && (quest.title.toLowerCase().includes(searchTerm.toLowerCase()) || quest.description.toLowerCase().includes(searchTerm.toLowerCase())) ), false ); const completedQuests = sortQuests( userStats.quests.filter( (quest) => quest.completed && (quest.title.toLowerCase().includes(searchTerm.toLowerCase()) || quest.description.toLowerCase().includes(searchTerm.toLowerCase())) ), true ); const handleDeleteQuest = (questId: string) => { deleteQuest(questId); }; return (