// ======================================== // Issue Hub Page // ======================================== // Unified page for issues, queue, and discovery with tab navigation import { useState, useCallback, useRef } from 'react'; import { useSearchParams } from 'react-router-dom'; import { useIntl } from 'react-intl'; import { Plus, RefreshCw, Github, Loader2, } from 'lucide-react'; import { IssueHubHeader } from '@/components/issue/hub/IssueHubHeader'; import { IssueHubTabs, type IssueTab } from '@/components/issue/hub/IssueHubTabs'; import { IssuesPanel } from '@/components/issue/hub/IssuesPanel'; import { IssueBoardPanel } from '@/components/issue/hub/IssueBoardPanel'; import { QueuePanel } from '@/components/issue/hub/QueuePanel'; import { DiscoveryPanel } from '@/components/issue/hub/DiscoveryPanel'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/Dialog'; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/Select'; import { useIssues, useIssueMutations, useIssueQueue } from '@/hooks'; import { pullIssuesFromGitHub } from '@/lib/api'; import type { Issue } from '@/lib/api'; import { cn } from '@/lib/utils'; function NewIssueDialog({ open, onOpenChange, onSubmit, isCreating }: { open: boolean; onOpenChange: (open: boolean) => void; onSubmit: (data: { title: string; context?: string; priority?: Issue['priority'] }) => void; isCreating: boolean; }) { const { formatMessage } = useIntl(); 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 ( {formatMessage({ id: 'issues.createDialog.title' })}
setTitle(e.target.value)} placeholder={formatMessage({ id: 'issues.createDialog.placeholders.title' })} className="mt-1" required />