diff --git a/frontend/components/Note/NoteModal.tsx b/frontend/components/Note/NoteModal.tsx index 0a08f05..bc1af28 100644 --- a/frontend/components/Note/NoteModal.tsx +++ b/frontend/components/Note/NoteModal.tsx @@ -43,7 +43,13 @@ const NoteModal: React.FC = ({ }) => { const { t } = useTranslation(); const { - tagsStore: { tags: availableTagsStore }, + tagsStore: { + tags: availableTagsStore, + hasLoaded: tagsLoaded, + isLoading: tagsLoading, + isError: tagsError, + loadTags, + }, } = useStore(); const [formData, setFormData] = useState( note || { @@ -139,6 +145,13 @@ const NoteModal: React.FC = ({ } }, [isOpen, note, memoizedProjects]); + // Load tags when modal opens if not already loaded + useEffect(() => { + if (isOpen && !tagsLoaded && !tagsLoading && !tagsError) { + loadTags(); + } + }, [isOpen, tagsLoaded, tagsLoading, tagsError, loadTags]); + const handleClose = useCallback(() => { setIsClosing(true); setTimeout(() => { @@ -482,15 +495,26 @@ const NoteModal: React.FC = ({

{t('forms.tags')}

- + {tagsLoaded ? ( + + ) : ( +
+ {t( + 'common.loading', + 'Loading...' + )} +
+ )} )} diff --git a/frontend/components/Shared/PriorityDropdown.tsx b/frontend/components/Shared/PriorityDropdown.tsx index 33487f3..1c7e41b 100644 --- a/frontend/components/Shared/PriorityDropdown.tsx +++ b/frontend/components/Shared/PriorityDropdown.tsx @@ -102,11 +102,14 @@ const PriorityDropdown: React.FC = ({ }, [isOpen]); // Convert numeric priority to string if needed - const normalizedValue = typeof value === 'number' - ? ['low', 'medium', 'high'][value] || 'medium' - : value; - - const selectedPriority = priorities.find((p) => p.value === normalizedValue); + const normalizedValue = + typeof value === 'number' + ? ['low', 'medium', 'high'][value] || 'medium' + : value; + + const selectedPriority = priorities.find( + (p) => p.value === normalizedValue + ); return (
= ({ autoFocusSubtasks, }) => { const { - tagsStore: { tags: availableTags }, + tagsStore: { + tags: availableTags, + hasLoaded: tagsLoaded, + isLoading: tagsLoading, + isError: tagsError, + loadTags, + }, } = useStore(); const [formData, setFormData] = useState(task); const [tags, setTags] = useState( @@ -219,6 +224,13 @@ const TaskModal: React.FC = ({ } }, [isOpen, autoFocusSubtasks]); + // Load tags when modal opens if not already loaded + useEffect(() => { + if (isOpen && !tagsLoaded && !tagsLoading && !tagsError) { + loadTags(); + } + }, [isOpen, tagsLoaded, tagsLoading, tagsError, loadTags]); + const handleEditParent = () => { if (parentTask && onEditParentTask) { onEditParentTask(parentTask); @@ -524,20 +536,24 @@ const TaskModal: React.FC = ({ 'Tags' )} - - tag.name - ) || [] - } - onTagsChange={ - handleTagsChange - } - availableTags={ - availableTags - } - /> + {tagsLoaded ? ( + + ) : ( +
+ {t( + 'common.loading', + 'Loading...' + )} +
+ )}
)} @@ -584,14 +600,22 @@ const TaskModal: React.FC = ({ {expandedSections.priority && (

- {t('forms.task.labels.priority', 'Priority')} + {t( + 'forms.task.labels.priority', + 'Priority' + )}

+ value={getPriorityString( + formData.priority + )} + onChange={( + value: PriorityType + ) => setFormData({ ...formData, - priority: value, + priority: + value, }) } /> @@ -601,16 +625,30 @@ const TaskModal: React.FC = ({ {expandedSections.dueDate && (

- {t('forms.task.labels.dueDate', 'Due Date')} + {t( + 'forms.task.labels.dueDate', + 'Due Date' + )}

{ - const event = { - target: { name: 'due_date', value }, - } as React.ChangeEvent; - handleChange(event); + value={ + formData.due_date || + '' + } + onChange={( + value + ) => { + const event = + { + target: { + name: 'due_date', + value, + }, + } as React.ChangeEvent; + handleChange( + event + ); }} placeholder={t( 'forms.task.dueDatePlaceholder', @@ -778,7 +816,9 @@ const TaskModal: React.FC = ({ )} > - {getPriorityString(formData.priority) !== 'medium' && ( + {getPriorityString( + formData.priority + ) !== 'medium' && ( )}