import {
Avatar,
Box,
Button,
FormControl,
FormLabel,
Input,
Stack,
Textarea,
Typography,
} from '@mui/joy'
import { useEffect, useState } from 'react'
import ModalActions from '../../../components/common/ModalActions'
import { useResponsiveModal } from '../../../hooks/useResponsiveModal'
import PROJECT_COLORS, {
getTextColorFromBackgroundColor,
} from '../../../utils/Colors'
import PROJECT_ICONS, { getIconComponent } from '../../../utils/ProjectIcons'
import {
useCreateProject,
useUpdateProject,
} from '../../Projects/ProjectQueries'
import IconPickerModal from './IconPickerModal'
import { useTranslation } from 'react-i18next'
const ProjectModal = ({ isOpen, onClose, onSave, project }) => {
const { t } = useTranslation('projects')
const { ResponsiveModal } = useResponsiveModal()
const [projectName, setProjectName] = useState('')
const [projectDescription, setProjectDescription] = useState('')
const [projectColor, setProjectColor] = useState(PROJECT_COLORS[0].value)
const [projectIcon, setProjectIcon] = useState(PROJECT_ICONS[0].value)
const [error, setError] = useState('')
const [isIconPickerOpen, setIsIconPickerOpen] = useState(false)
const createProjectMutation = useCreateProject()
const updateProjectMutation = useUpdateProject()
// Initialize form when modal opens or project changes
useEffect(() => {
if (isOpen) {
if (project) {
// Editing existing project
setProjectName(project.name || '')
setProjectDescription(project.description || '')
setProjectColor(project.color || PROJECT_COLORS[0].value)
setProjectIcon(project.icon || PROJECT_ICONS[0].value)
} else {
// Creating new project
setProjectName('')
setProjectDescription('')
setProjectColor(PROJECT_COLORS[0].value)
setProjectIcon(PROJECT_ICONS[0].value)
}
setError('')
}
}, [isOpen, project])
const handleSubmit = e => {
e.preventDefault()
if (!projectName.trim()) {
setError(t('modal.errorNameRequired'))
return
}
setError('')
const projectData = {
name: projectName.trim(),
description: projectDescription.trim(),
color: projectColor,
icon: projectIcon,
}
if (project) {
// Update existing project
updateProjectMutation.mutate(
{ projectId: project.id, projectData },
{
onSuccess: updatedProject => {
onSave(updatedProject)
onClose()
},
onError: error => {
console.error('Error updating project:', error)
setError(t('modal.errorUpdate'))
},
},
)
} else {
// Create new project
createProjectMutation.mutate(projectData, {
onSuccess: newProject => {
onSave(newProject)
onClose()
},
onError: error => {
console.error('Error creating project:', error)
setError(t('modal.errorCreate'))
},
})
}
}
const handleClose = () => {
const isLoading =
createProjectMutation.isPending || updateProjectMutation.isPending
if (!isLoading) {
onClose()
}
}
const isSubmitting =
createProjectMutation.isPending || updateProjectMutation.isPending
const handleIconSelect = iconValue => {
setProjectIcon(iconValue)
setIsIconPickerOpen(false)
}
return (