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