import { Button, Drawer, Dropdown } from 'antd'; import { useEffect, useState } from 'react'; import { useAppDispatch } from '@/hooks/useAppDispatch'; import { DownOutlined, EditOutlined, ImportOutlined } from '@ant-design/icons'; import TemplateDrawer from '@/components/common/template-drawer/template-drawer'; import { useTranslation } from 'react-i18next'; import { useLocation, useNavigate } from 'react-router-dom'; import { setProjectData, setProjectId, toggleProjectDrawer, } from '@/features/project/project-drawer.slice'; import { IProjectViewModel } from '@/types/project/projectViewModel.types'; import { projectTemplatesApiService } from '@/api/project-templates/project-templates.api.service'; import { evt_projects_create_click } from '@/shared/worklenz-analytics-events'; import { useMixpanelTracking } from '@/hooks/useMixpanelTracking'; interface CreateProjectButtonProps { className?: string; } const CreateProjectButton: React.FC = ({ className }) => { const dispatch = useAppDispatch(); const navigate = useNavigate(); const { trackMixpanelEvent } = useMixpanelTracking(); const [isTemplateDrawerOpen, setIsTemplateDrawerOpen] = useState(false); const [currentTemplateId, setCurrentTemplateId] = useState(''); const [selectedType, setSelectedType] = useState<'worklenz' | 'custom'>('worklenz'); const [projectImporting, setProjectImporting] = useState(false); const [currentPath, setCurrentPath] = useState(''); const location = useLocation(); const { t } = useTranslation('create-first-project-form'); useEffect(() => { const pathKey = location.pathname.split('/').pop(); setCurrentPath(pathKey ?? 'home'); }, [location]); const handleTemplateDrawerOpen = () => { setIsTemplateDrawerOpen(true); }; const handleTemplateDrawerClose = () => { setIsTemplateDrawerOpen(false); setCurrentTemplateId(''); setSelectedType('worklenz'); }; const handleTemplateSelect = (templateId: string) => { setCurrentTemplateId(templateId); }; const createFromWorklenzTemplate = async () => { if (!currentTemplateId || currentTemplateId === '') return; try { setProjectImporting(true); } catch (e) { console.error(e); } finally { setProjectImporting(false); handleTemplateDrawerClose(); } }; const createFromCustomTemplate = async () => { if (!currentTemplateId || currentTemplateId === '') return; try { setProjectImporting(true); } catch (e) { console.error(e); } finally { setProjectImporting(false); handleTemplateDrawerClose(); } }; const setCreatedProjectTemplate = async () => { if (!currentTemplateId || currentTemplateId === '') return; try { setProjectImporting(true); if (selectedType === 'worklenz') { const res = await projectTemplatesApiService.createFromWorklenzTemplate({ template_id: currentTemplateId, }); if (res.done) { navigate( `/worklenz/projects/${res.body.project_id}?tab=tasks-list&pinned_tab=tasks-list` ); } } else { const res = await projectTemplatesApiService.createFromCustomTemplate({ template_id: currentTemplateId, }); if (res.done) { navigate( `/worklenz/projects/${res.body.project_id}?tab=tasks-list&pinned_tab=tasks-list` ); } } } catch (e) { console.error(e); } finally { setProjectImporting(false); handleTemplateDrawerClose(); } }; const dropdownItems = [ { key: 'template', label: (
{currentPath === 'home' ? t('templateButton') : t('createFromTemplate')}
), }, ]; const handleCreateProject = () => { trackMixpanelEvent(evt_projects_create_click); dispatch(setProjectId(null)); dispatch(setProjectData({} as IProjectViewModel)); setTimeout(() => { dispatch(toggleProjectDrawer()); }, 300); }; return (
} onClick={handleCreateProject} menu={{ items: dropdownItems }} > {t('createProject')}
} > ); }; export default CreateProjectButton;