11import React , { useState } from 'react' ;
2- import { connect } from 'react-redux' ;
32import { useForm } from '@tanstack/react-form' ;
43import dayjs from 'dayjs' ;
54import { z } from 'zod' ;
65import { zodValidator } from '@tanstack/zod-form-adapter' ;
76
8- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' ;
9- import { faPlus , faUndo } from '@fortawesome/free-solid-svg-icons' ;
107import ReactTooltip from 'react-tooltip' ;
11- import { useNotes , usePageTypeContext } from '@notes/hooks' ;
12- import { RootState , addNewTask , addNewNote , toggleModalOpen } from '@notes/redux' ;
13- import { Button , TextInput , Textarea } from '@mantine/core' ;
8+ import { useNotes } from '@notes/hooks' ;
9+ import { Button , TextInput , Textarea } from '@mantine/core' ;
1410import { StyledForm } from 'src/components/atoms' ;
15-
16-
11+ import { modals } from '@mantine/modals' ;
12+ import { Note } from '@notes/types' ;
1713
1814type AddTaskComponentProps = {
1915 addNewNote : any ;
@@ -23,22 +19,22 @@ type AddTaskComponentProps = {
2319 onAdd : any ;
2420} ;
2521
26- export const AddTask = ( { row } ) => {
22+ export const AddTask = ( { data , editNote } : { data : Note ; editNote } ) => {
2723 const { addNewNote } = useNotes ( ) ;
2824
2925 const { Field, Subscribe, handleSubmit, state, useStore } = useForm ( {
30- defaultValues : row
31- ? row
26+ defaultValues : data
27+ ? data
3228 : {
3329 title : '' ,
3430 content : '' ,
35- created : dayjs ( ) . format ( 'YYYY-MM-DD-HH:mm' ) ,
31+ created : dayjs ( ) . format ( 'YYYY-MM-DD-HH:mm' )
3632 } ,
3733 validatorAdapter : zodValidator ,
3834 onSubmit : async ( { value } ) => {
39- addNewNote . mutate ( value ) ;
40- close ( ) ;
41- } ,
35+ data ? editNote ( value , data . id ) : addNewNote . mutate ( value ) ;
36+ modals . closeAll ( ) ;
37+ }
4238 } ) ;
4339 return (
4440 < StyledForm
@@ -52,17 +48,17 @@ export const AddTask = ({ row }) => {
5248 name = "title"
5349 validators = { {
5450 onBlur : z . string ( {
55- required_error : 'Title is required' ,
51+ required_error : 'Title is required'
5652 } ) ,
5753 onSubmit : z
5854 . string ( )
5955 . trim ( )
6056 . min ( 3 , {
61- message : 'Title must be at least 3 characters' ,
57+ message : 'Title must be at least 3 characters'
6258 } )
6359 . max ( 50 , {
64- message : 'Title must be at most 50 characters' ,
65- } ) ,
60+ message : 'Title must be at most 50 characters'
61+ } )
6662 } }
6763 children = { ( { state, handleChange, handleBlur } ) => {
6864 return (
@@ -72,6 +68,8 @@ export const AddTask = ({ row }) => {
7268 defaultValue = { state . value }
7369 onChange = { e => handleChange ( e . target . value ) }
7470 onBlur = { handleBlur }
71+ withAsterisk
72+ label = "Note title"
7573 placeholder = "Enter note title"
7674 error = { state . meta ?. errors [ 0 ] }
7775 />
@@ -83,25 +81,29 @@ export const AddTask = ({ row }) => {
8381 name = "content"
8482 validators = { {
8583 onBlur : z . string ( {
86- required_error : 'Content is required' ,
84+ required_error : 'Content is required'
8785 } ) ,
8886 onSubmit : z
8987 . string ( )
9088 . trim ( )
9189 . min ( 10 , {
92- message : 'Title must be at least 10 characters' ,
90+ message : 'Title must be at least 10 characters'
9391 } )
9492 . max ( 255 , {
95- message : 'Title must be at most 255 characters' ,
96- } ) ,
93+ message : 'Title must be at most 255 characters'
94+ } )
9795 } }
9896 children = { ( { state, handleChange, handleBlur } ) => {
9997 return (
10098 < Textarea
99+ autosize
101100 size = "xl"
101+ minRows = { 4 }
102+ label = "Note details"
102103 defaultValue = { state . value }
103104 onChange = { e => handleChange ( e . target . value ) }
104105 onBlur = { handleBlur }
106+ withAsterisk
105107 placeholder = "Enter note content"
106108 error = { state . meta ?. errors [ 0 ] }
107109 />
@@ -172,5 +174,3 @@ export const AddTask = ({ row }) => {
172174 </ StyledForm >
173175 ) ;
174176} ;
175-
176-
0 commit comments