import { Box, Button, FormControl, Input, Modal, ModalDialog, Option, Select, Typography, } from '@mui/joy' import React, { useEffect } from 'react' import { useQueryClient } from 'react-query' import { CreateLabel, UpdateLabel } from '../../../utils/Fetcher' import LABEL_COLORS from '../../../utils/LabelColors' import { useLabels } from '../../Labels/LabelQueries' function LabelModal({ isOpen, onClose, onSave, label }) { const [labelName, setLabelName] = React.useState('') const [color, setColor] = React.useState('') const [error, setError] = React.useState('') const { data: userLabels, isLoadingLabels } = useLabels() const queryClient = useQueryClient() // Populate the form fields when editing useEffect(() => { if (label) { setLabelName(label.name) setColor(label.color) } else { setLabelName('') setColor('') } setError('') }, [label]) const validateLabel = () => { if (!labelName || labelName.trim() === '') { setError('Name cannot be empty') return false } else if ( userLabels.some( userLabel => userLabel.name === labelName && userLabel.id !== label.id, ) ) { setError('Label with this name already exists') return false } else if (color === '') { setError('Please select a color') return false } return true } const handleSave = () => { if (!validateLabel()) { return } const saveAction = label ? UpdateLabel({ id: label.id, name: labelName, color }) : CreateLabel({ name: labelName, color }) saveAction.then(res => { if (res.error) { console.log(res.error) setError('Failed to save label. Please try again.') return } res.json().then(data => { if (data.error) { setError('Failed to save label. Please try again.') return } onSave({ id: data?.res?.id, name: labelName, color }) onClose() }) }) } return ( {label ? 'Edit Label' : 'Add Label'} Name setLabelName(e.target.value)} /> {/* Color Selection */} Color: {error && ( {error} )} ) } export default LabelModal