import React, { useState, useCallback, Suspense } from 'react'; import { PlusOutlined } from '@ant-design/icons'; import { IProjectTask } from '@/types/project/projectTasksViewModel.types'; // Lazy load the existing AssigneeSelector component only when needed (Asana-style) const LazyAssigneeSelector = React.lazy(() => import('@/components/AssigneeSelector').then(module => ({ default: module.default })) ); interface LazyAssigneeSelectorProps { task: IProjectTask; groupId?: string | null; isDarkMode?: boolean; kanbanMode?: boolean; // <-- Add this prop } // Lightweight loading placeholder const LoadingPlaceholder: React.FC<{ isDarkMode: boolean }> = ({ isDarkMode }) => (
); const LazyAssigneeSelectorWrapper: React.FC = ({ task, groupId = null, isDarkMode = false, kanbanMode = false, // <-- Default to false }) => { const [hasLoadedOnce, setHasLoadedOnce] = useState(false); const [showComponent, setShowComponent] = useState(false); const handleInteraction = useCallback( (e: React.MouseEvent) => { // Don't prevent the event from bubbling, just mark as loaded if (!hasLoadedOnce) { setHasLoadedOnce(true); setShowComponent(true); } }, [hasLoadedOnce] ); // If not loaded yet, show a simple placeholder button if (!hasLoadedOnce) { return ( ); } // Once loaded, show the full component return ( }> ); }; export default LazyAssigneeSelectorWrapper;