@@ -25,9 +25,11 @@ export interface TaskFormRef {
2525interface TaskFormProps {
2626 task ?: Task ;
2727 onSuccess ?: ( ) => void ;
28+ initialTagIds ?: number [ ] ;
2829}
2930
30- const TaskForm = forwardRef < TaskFormRef , TaskFormProps > ( ( { task, onSuccess } , ref ) => {
31+ const TaskForm = forwardRef < TaskFormRef , TaskFormProps > (
32+ ( { task, onSuccess, initialTagIds } , ref ) => {
3133 const { selectedDate } = useSelectedDate ( ) ;
3234 const isEdit = task != null ;
3335
@@ -37,7 +39,7 @@ const TaskForm = forwardRef<TaskFormRef, TaskFormProps>(({ task, onSuccess }, re
3739 ) ;
3840 const [ showDatePicker , setShowDatePicker ] = useState ( false ) ;
3941 const [ tagNames , setTagNames ] = useState < string [ ] > ( [ ] ) ;
40- const [ tagNamesInitialized , setTagNamesInitialized ] = useState ( ! isEdit ) ;
42+ const [ tagNamesInitialized , setTagNamesInitialized ] = useState ( false ) ;
4143
4244 const { data : tagIds = [ ] } = useTaskTagIds ( isEdit ? task ! . id : undefined ) ;
4345 const { data : tags = [ ] } = useTagsQuery ( ) ;
@@ -51,6 +53,24 @@ const TaskForm = forwardRef<TaskFormRef, TaskFormProps>(({ task, onSuccess }, re
5153 setTagNamesInitialized ( true ) ;
5254 } , [ isEdit , tagIds , tags ] ) ;
5355
56+ useEffect ( ( ) => {
57+ if ( isEdit ) return ;
58+ if ( tagNamesInitialized ) return ;
59+ if ( ! initialTagIds || initialTagIds . length === 0 ) {
60+ setTagNamesInitialized ( true ) ;
61+ return ;
62+ }
63+ if ( tags . length === 0 ) {
64+ setTagNamesInitialized ( true ) ;
65+ return ;
66+ }
67+ const initialNames = initialTagIds
68+ . map ( ( id ) => tags . find ( ( t ) => t . id === id ) ?. name )
69+ . filter ( ( n ) : n is string => Boolean ( n ) ) ;
70+ setTagNames ( initialNames ) ;
71+ setTagNamesInitialized ( true ) ;
72+ } , [ isEdit , initialTagIds , tagNamesInitialized , tags ] ) ;
73+
5474 const [ isSubmitting , setIsSubmitting ] = useState ( false ) ;
5575 const createTask = useCreateTask ( ) ;
5676 const updateTask = useUpdateTask ( ) ;
@@ -102,8 +122,13 @@ const TaskForm = forwardRef<TaskFormRef, TaskFormProps>(({ task, onSuccess }, re
102122 if ( tagNames . length > 0 ) {
103123 const tagIdsToSet : number [ ] = [ ] ;
104124 for ( const name of tagNames ) {
105- const tag = await createTag . mutateAsync ( name ) ;
106- tagIdsToSet . push ( tag . id ) ;
125+ const existing = tags . find ( ( t ) => t . name === name ) ;
126+ if ( existing ) {
127+ tagIdsToSet . push ( existing . id ) ;
128+ } else {
129+ const tag = await createTag . mutateAsync ( name ) ;
130+ tagIdsToSet . push ( tag . id ) ;
131+ }
107132 }
108133 await setTaskTags . mutateAsync ( { taskId : newTask . id , tagIds : tagIdsToSet } ) ;
109134 }
@@ -210,7 +235,8 @@ const TaskForm = forwardRef<TaskFormRef, TaskFormProps>(({ task, onSuccess }, re
210235 isSubmitting ||
211236 pending ||
212237 ! taskTitle . trim ( ) ||
213- ( isEdit && ! tagNamesInitialized )
238+ ( ( isEdit || ( initialTagIds != null && initialTagIds . length > 0 ) ) &&
239+ ! tagNamesInitialized )
214240 }
215241 >
216242 < Text className = "text-base font-bold" style = { { color : Colors . text } } >
@@ -226,7 +252,8 @@ const TaskForm = forwardRef<TaskFormRef, TaskFormProps>(({ task, onSuccess }, re
226252 ) }
227253 </ View >
228254 ) ;
229- } ) ;
255+ }
256+ ) ;
230257
231258const styles = StyleSheet . create ( {
232259 formWrap : {
0 commit comments