// ======================================== // Issue Manager Page // ======================================== // Track and manage project issues with drag-drop queue import { useState, useMemo } from 'react'; import { AlertCircle, Plus, Filter, Search, RefreshCw, Loader2, Github, ListFilter, CheckCircle, Clock, AlertTriangle, } from 'lucide-react'; import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Badge } from '@/components/ui/Badge'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/Dialog'; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select'; import { IssueCard } from '@/components/shared/IssueCard'; import { useIssues, useIssueMutations } from '@/hooks'; import type { Issue } from '@/lib/api'; import { cn } from '@/lib/utils'; // ========== Types ========== type ViewMode = 'issues' | 'queue'; type StatusFilter = 'all' | Issue['status']; type PriorityFilter = 'all' | Issue['priority']; // ========== New Issue Dialog ========== interface NewIssueDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (data: { title: string; context?: string; priority?: Issue['priority'] }) => void; isCreating: boolean; } function NewIssueDialog({ open, onOpenChange, onSubmit, isCreating }: NewIssueDialogProps) { const [title, setTitle] = useState(''); const [context, setContext] = useState(''); const [priority, setPriority] = useState('medium'); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (title.trim()) { onSubmit({ title: title.trim(), context: context.trim() || undefined, priority }); setTitle(''); setContext(''); setPriority('medium'); } }; return ( Create New Issue
setTitle(e.target.value)} placeholder="Issue title..." className="mt-1" required />