@@ -5,15 +5,16 @@ import { useRemoteData } from '@notes/hooks';
55import { Button , TextInput , Textarea } from '@mantine/core' ;
66import { DateTimePicker } from '@mantine/dates' ;
77import { modals } from '@mantine/modals' ;
8- import { CollectionType , Todo } from '@notes/types' ;
8+ import { CollectionType , Todo , TodoWithId } from '@notes/types' ;
99import { Timestamp } from 'firebase/firestore' ;
10+ import { removeId } from '@notes/utils' ;
1011
11- export const TodoManagementForm = ( { data, editTodo } : { data : Todo ; editTodo } ) => {
12- const { addElement } = useRemoteData < Todo > ( { key : CollectionType . TODOS } ) ;
12+ export const TodoManagementForm = ( { data } : { data ?: TodoWithId } ) => {
13+ const { addElement, editElement } = useRemoteData < Todo > ( { key : CollectionType . TODOS } ) ;
1314
14- const { Field, Subscribe, handleSubmit, state , useStore } = useForm ( {
15+ const { Field, Subscribe, handleSubmit } = useForm ( {
1516 defaultValues : data
16- ? data
17+ ? removeId < TodoWithId > ( data )
1718 : {
1819 title : '' ,
1920 extraContent : '' ,
@@ -23,7 +24,7 @@ export const TodoManagementForm = ({ data, editTodo }: { data: Todo; editTodo })
2324 } ,
2425 validatorAdapter : zodValidator ,
2526 onSubmit : async ( { value } ) => {
26- data ? editTodo ( { ... value , id : data . id } ) : addElement . mutate ( value ) ;
27+ data ? editElement . mutate ( { element : value , id : data . id } ) : addElement . mutate ( value ) ;
2728 modals . closeAll ( ) ;
2829 }
2930 } ) ;
@@ -71,10 +72,12 @@ export const TodoManagementForm = ({ data, editTodo }: { data: Todo; editTodo })
7172 < Field
7273 name = "deadline"
7374 validators = { {
74- onSubmit : z . object ( {
75- seconds : z . number ( ) ,
76- nanoseconds : z . number ( )
77- } )
75+ onSubmit : z
76+ . object ( {
77+ seconds : z . number ( ) . optional ( ) ,
78+ nanoseconds : z . number ( ) . optional ( )
79+ } )
80+ . optional ( )
7881 } }
7982 children = { ( { state, handleChange, handleBlur } ) => {
8083 return (
@@ -88,7 +91,6 @@ export const TodoManagementForm = ({ data, editTodo }: { data: Todo; editTodo })
8891 const timestamp = Timestamp . fromDate ( e as Date ) ;
8992 handleChange ( timestamp ) ;
9093 } }
91- withAsterisk
9294 placeholder = "Enter todo deadline date"
9395 error = { state . meta ?. errors [ 0 ] }
9496 />
0 commit comments