import React, { useState, useEffect, useCallback } from 'react'; import { Search, FileText, Loader2, } from 'lucide-react'; import { toast } from 'sonner'; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Card } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { focusGroupsApi } from '@/lib/api'; interface CopyGuideDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onCopyGuide: (focusGroup: any) => void; excludeFocusGroupId?: string | null; } export function CopyGuideDialog({ open, onOpenChange, onCopyGuide, excludeFocusGroupId, }: CopyGuideDialogProps) { const [searchTerm, setSearchTerm] = useState(''); const [availableFocusGroups, setAvailableFocusGroups] = useState([]); const [isLoading, setIsLoading] = useState(false); // Fetch available focus groups when dialog opens const fetchAvailableFocusGroups = useCallback(async () => { try { setIsLoading(true); const response = await focusGroupsApi.getAll(); // Filter to only include focus groups that have discussion guides const focusGroupsWithGuides = response.data.filter((fg: any) => fg.discussionGuide && fg.discussionGuide !== null && fg.discussionGuide !== '' && fg._id !== excludeFocusGroupId ); setAvailableFocusGroups(focusGroupsWithGuides); } catch (error) { console.error("Error fetching focus groups:", error); toast.error("Failed to load available focus groups"); } finally { setIsLoading(false); } }, [excludeFocusGroupId]); // Fetch when dialog opens useEffect(() => { if (open) { fetchAvailableFocusGroups(); } }, [open, fetchAvailableFocusGroups]); // Filter by search term const filteredFocusGroups = availableFocusGroups.filter(fg => !searchTerm || fg.name.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleSelectFocusGroup = (focusGroup: any) => { onCopyGuide(focusGroup); }; return ( Import Discussion Guide from Other Project Select a focus group to import its discussion guide from. Only focus groups with existing discussion guides are shown.
{/* Search box */}
setSearchTerm(e.target.value)} />
{/* Loading state */} {isLoading && (
Loading focus groups...
)} {/* Focus groups list */} {!isLoading && (
{filteredFocusGroups.length > 0 ? ( filteredFocusGroups.map((focusGroup) => ( handleSelectFocusGroup(focusGroup)} >

{focusGroup.name}

{focusGroup.participants_count || focusGroup.participants?.length || 0} participants
{focusGroup.description && (

{focusGroup.description}

)}
{focusGroup.created_at && ( Created {new Date(focusGroup.created_at).toLocaleDateString()} )} {focusGroup.duration && ( {focusGroup.duration} minutes )} {focusGroup.status && ( {focusGroup.status} )}
)) ) : (

{searchTerm ? "No focus groups match your search criteria." : "No focus groups with discussion guides found."}

{searchTerm && ( )}
)}
)}
); } export default CopyGuideDialog;