@@ -13,39 +13,63 @@ import {
13
13
import { Header , TextField } from '@/components' ;
14
14
import { Button } from '@/components/ui/button' ;
15
15
import { ICreateShelter } from '@/service/shelter/types' ;
16
+ import { toast } from '@/components/ui/use-toast' ;
17
+ import { ShelterServices } from '@/service' ;
18
+ import { withAuth } from '@/hocs' ;
16
19
17
- const CreateShelter = ( ) => {
20
+ const CreateShelterComponent = ( ) => {
18
21
const navigate = useNavigate ( ) ;
19
22
20
- const verifySelected = ( selected : string ) => {
21
- if ( selected === 'sim' ) return true ;
22
- return false ;
23
- } ;
24
-
25
- const { errors, getFieldProps, isSubmitting, setFieldValue, handleSubmit } =
26
- useFormik < ICreateShelter > ( {
27
- initialValues : {
28
- name : '' ,
29
- address : '' ,
30
- shelteredPeople : 0 ,
31
- capacity : 0 ,
32
- petFriendly : false ,
33
- contact : '' ,
34
- pix : '' ,
35
- } ,
36
- enableReinitialize : true ,
37
- validateOnBlur : false ,
38
- validateOnChange : false ,
39
- validateOnMount : false ,
40
- validationSchema : Yup . object ( ) . shape ( {
41
- name : Yup . string ( ) . required ( 'Este campo deve ser preenchido' ) ,
42
- address : Yup . string ( ) . required ( 'Este campo deve ser preenchido' ) ,
43
- } ) ,
44
- onSubmit : async ( values ) => {
45
- //criar endpoint
46
- console . log ( values ) ;
47
- } ,
48
- } ) ;
23
+ const {
24
+ errors,
25
+ getFieldProps,
26
+ isSubmitting,
27
+ setFieldValue,
28
+ handleSubmit,
29
+ values,
30
+ } = useFormik < ICreateShelter > ( {
31
+ initialValues : {
32
+ name : '' ,
33
+ address : '' ,
34
+ shelteredPeople : 0 ,
35
+ capacity : 0 ,
36
+ petFriendly : false ,
37
+ contact : null ,
38
+ pix : null ,
39
+ } ,
40
+ enableReinitialize : true ,
41
+ validateOnBlur : false ,
42
+ validateOnChange : false ,
43
+ validateOnMount : false ,
44
+ validationSchema : Yup . object ( ) . shape ( {
45
+ name : Yup . string ( ) . required ( 'Este campo deve ser preenchido' ) ,
46
+ address : Yup . string ( ) . required ( 'Este campo deve ser preenchido' ) ,
47
+ shelteredPeople : Yup . number ( )
48
+ . min ( 0 , 'O valor mínimo para este campo é 0' )
49
+ . nullable ( ) ,
50
+ capacity : Yup . number ( )
51
+ . min ( 1 , 'O valor mínimo para este campo é 1' )
52
+ . nullable ( ) ,
53
+ petFriendly : Yup . bool ( ) . nullable ( ) ,
54
+ contact : Yup . string ( ) . nullable ( ) ,
55
+ pix : Yup . string ( ) . nullable ( ) ,
56
+ } ) ,
57
+ onSubmit : async ( values , { resetForm } ) => {
58
+ try {
59
+ await ShelterServices . create ( values ) ;
60
+ toast ( {
61
+ title : 'Cadastro feita com sucesso' ,
62
+ } ) ;
63
+ resetForm ( ) ;
64
+ } catch ( err : any ) {
65
+ toast ( {
66
+ variant : 'destructive' ,
67
+ title : 'Ocorreu um erro ao tentar cadastrar' ,
68
+ description : `${ err ?. response ?. data ?. message ?? err } ` ,
69
+ } ) ;
70
+ }
71
+ } ,
72
+ } ) ;
49
73
50
74
return (
51
75
< div className = "flex flex-col h-screen items-center" >
@@ -56,7 +80,7 @@ const CreateShelter = () => {
56
80
< Button
57
81
variant = "ghost"
58
82
className = "[&_svg]:stroke-blue-500"
59
- onClick = { ( ) => navigate ( - 1 ) }
83
+ onClick = { ( ) => navigate ( '/' ) }
60
84
>
61
85
< ChevronLeft size = { 20 } />
62
86
</ Button >
@@ -75,54 +99,51 @@ const CreateShelter = () => {
75
99
error = { ! ! errors . name }
76
100
helperText = { errors . name }
77
101
/>
78
-
79
102
< TextField
80
103
label = "Endereço do abrigo"
81
104
{ ...getFieldProps ( 'address' ) }
82
105
error = { ! ! errors . address }
83
106
helperText = { errors . address }
84
107
/>
85
-
86
108
< TextField
87
109
label = "Contato"
88
110
{ ...getFieldProps ( 'contact' ) }
89
111
error = { ! ! errors . contact }
90
112
helperText = { errors . contact }
91
113
/>
92
-
93
114
< TextField
94
115
type = "number"
116
+ min = "0"
95
117
label = "Quantidade de pessoas abrigadas"
96
118
{ ...getFieldProps ( 'shelteredPeople' ) }
97
119
error = { ! ! errors . shelteredPeople }
98
120
helperText = { errors . shelteredPeople }
99
121
/>
100
-
101
122
< TextField
102
123
type = "number"
124
+ min = "0"
103
125
label = "Capacidade do abrigo"
104
126
{ ...getFieldProps ( 'capacity' ) }
105
127
error = { ! ! errors . capacity }
106
128
helperText = { errors . capacity }
107
129
/>
108
-
109
130
< label className = "text-muted-foreground" >
110
131
O abrigo aceita animais
111
132
</ label >
112
133
< Select
134
+ value = { values . petFriendly ? 'true' : 'false' }
113
135
onValueChange = { ( v ) => {
114
- setFieldValue ( 'petFriendly' , verifySelected ( v ) ) ;
136
+ setFieldValue ( 'petFriendly' , v === 'true' ) ;
115
137
} }
116
138
>
117
139
< SelectTrigger className = "w-full" >
118
140
< SelectValue className = "text-muted-foreground" />
119
141
</ SelectTrigger >
120
142
< SelectContent >
121
- < SelectItem value = "sim " > Sim</ SelectItem >
122
- < SelectItem value = "nao " > Não</ SelectItem >
143
+ < SelectItem value = "true " > Sim</ SelectItem >
144
+ < SelectItem value = "false " > Não</ SelectItem >
123
145
</ SelectContent >
124
146
</ Select >
125
-
126
147
< TextField
127
148
label = "Chave pix"
128
149
{ ...getFieldProps ( 'pix' ) }
@@ -145,4 +166,6 @@ const CreateShelter = () => {
145
166
) ;
146
167
} ;
147
168
169
+ const CreateShelter = withAuth ( CreateShelterComponent ) ;
170
+
148
171
export { CreateShelter } ;
0 commit comments