77 MY_WISHLIST_ITEMS ,
88 UPDATE_GIFT ,
99} from "../graphql/operations/wishlistOperations" ;
10+ import { useToggle } from "../hooks/useToggle" ;
1011import type { Gift } from "../types/Gift" ;
1112import { useMyProfileStore } from "../zustand/myProfileStore" ;
1213import Button from "./utils/Button" ;
@@ -29,18 +30,35 @@ export default function Wishlist() {
2930 const [ deleteGift ] = useMutation ( DELETE_GIFT ) ;
3031
3132 const [ updateGift , { loading : updating } ] = useMutation ( UPDATE_GIFT ) ;
32- const [ editingGift , setEditingGift ] = useState < Gift | null > ( null ) ;
33- const [ isEditModalOpen , setEditModalOpen ] = useState ( false ) ;
3433
34+ // hooks
35+ const addModal = useToggle ( false ) ;
36+ const editModal = useToggle ( false ) ;
37+
38+ // state
3539 const [ editFormData , setEditFormData ] = useState ( {
3640 name : "" ,
3741 description : "" ,
3842 imageUrl : "" ,
3943 url : "" ,
4044 } ) ;
41-
42- const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
4345 const [ formData , setFormData ] = useState ( { name : "" , description : "" , imageUrl : "" , url : "" } ) ;
46+ const [ editingGift , setEditingGift ] = useState < Gift | null > ( null ) ;
47+
48+ // helpers
49+ const closeAddModal = ( ) => {
50+ addModal . close ( ) ;
51+ setFormData ( {
52+ name : "" ,
53+ description : "" ,
54+ imageUrl : "" ,
55+ url : "" ,
56+ } ) ;
57+ } ;
58+ const closeEditModal = ( ) => {
59+ editModal . close ( ) ;
60+ setEditingGift ( null ) ;
61+ } ;
4462
4563 const handleChange = ( e : React . ChangeEvent < HTMLInputElement | HTMLTextAreaElement > ) =>
4664 setFormData ( { ...formData , [ e . target . name ] : e . target . value } ) ;
@@ -66,7 +84,8 @@ export default function Wishlist() {
6684 } ) ;
6785
6886 setFormData ( { name : "" , description : "" , imageUrl : "" , url : "" } ) ;
69- setIsModalOpen ( false ) ;
87+ // setIsModalOpen(false);
88+ addModal . close ( ) ;
7089 } ;
7190
7291 const handleDeleteGift = async ( gift : Gift ) => {
@@ -101,7 +120,7 @@ export default function Wishlist() {
101120 refetchQueries : [ { query : MY_WISHLIST_ITEMS } ] ,
102121 awaitRefetchQueries : true ,
103122 } ) ;
104- setEditModalOpen ( false ) ;
123+ editModal . close ( ) ;
105124 setEditingGift ( null ) ;
106125 } ;
107126
@@ -118,7 +137,7 @@ export default function Wishlist() {
118137 icon = "plus"
119138 text = "Nouvelle idée"
120139 colour = "green"
121- onClick = { ( ) => setIsModalOpen ( true ) }
140+ onClick = { addModal . open }
122141 className = "max-md:hidden"
123142 />
124143 </ div >
@@ -132,14 +151,14 @@ export default function Wishlist() {
132151 < div className = "flex flex-col items-center justify-center text-white" >
133152 < Icon icon = "gift" className = "text-7xl opacity-80 mb-3" />
134153 < p className = "text-lg mb-8" > Aucune idée pour l'instant.</ p >
135- < button
154+ < Button
136155 type = "button"
137- onClick = { ( ) => setIsModalOpen ( true ) }
138- className = "flex items-center gap-2 bg-green text-white font-semibold px-4 py-2 rounded-xl hover:bg-[#01803b] transition "
139- >
140- < Icon icon = "plus" />
141- Ajouter une idée
142- </ button >
156+ icon = "plus"
157+ text = "Ajouter une idée "
158+ colour = "green"
159+ onClick = { addModal . open }
160+ className = "px-4 py-2 rounded-xl"
161+ / >
143162 </ div >
144163 </ div >
145164 ) : (
@@ -176,7 +195,7 @@ export default function Wishlist() {
176195 imageUrl : gift . imageUrl ?? "" ,
177196 url : gift . url ?? "" ,
178197 } ) ;
179- setEditModalOpen ( true ) ;
198+ editModal . open ( ) ;
180199 } }
181200 />
182201 </ li >
@@ -192,13 +211,13 @@ export default function Wishlist() {
192211 icon = "plus"
193212 text = "Nouvelle idée"
194213 colour = "green"
195- onClick = { ( ) => setIsModalOpen ( true ) }
214+ onClick = { addModal . open }
196215 className = "wishlist-mobile-button"
197216 />
198217 </ div >
199218
200219 { /* Modal when adding */ }
201- < Modal isOpen = { isModalOpen } onClose = { ( ) => setIsModalOpen ( false ) } >
220+ < Modal isOpen = { addModal . isOpen } onClose = { closeAddModal } >
202221 < div className = "modal-mobile-content" >
203222 < h2 className = "text-xl font-bold text-dark mb-4" > Ajouter une nouvelle idée</ h2 >
204223 < form onSubmit = { handleSubmit } className = "space-y-3" >
@@ -256,27 +275,24 @@ export default function Wishlist() {
256275 />
257276 </ div >
258277 < div className = "flex justify-end gap-3 pt-3 modal-buttons" >
259- < button
278+ < Button
260279 type = "submit"
280+ text = { creating ? "Ajout…" : "Ajouter" }
281+ colour = "green"
282+ className = "rounded-[10px]"
283+ // If Button supports disabled:
261284 disabled = { creating }
262- className = "px-4 py-2 rounded-[10px] bg-green text-white font-semibold hover:bg-[#01803b]"
263- >
264- { creating ? "Ajout…" : "Ajouter" }
265- </ button >
266- < button
267- type = "button"
268- onClick = { ( ) => setIsModalOpen ( false ) }
269- className = "px-4 py-2 rounded-[10px] bg-dark text-white font-semibold hover:bg-[#463835]"
270- >
285+ />
286+ < Button type = "button" colour = "dark" onClick = { closeAddModal } className = "rounded-[10px]" >
271287 Annuler
272- </ button >
288+ </ Button >
273289 </ div >
274290 </ form >
275291 </ div >
276292 </ Modal >
277293
278294 { /* edit modal */ }
279- < Modal isOpen = { isEditModalOpen } onClose = { ( ) => setEditModalOpen ( false ) } >
295+ < Modal isOpen = { editModal . isOpen } onClose = { closeEditModal } >
280296 < div className = "modal-mobile-content" >
281297 < h2 className = "text-xl font-bold text-dark mb-4" > Modifier le cadeau</ h2 >
282298 < form onSubmit = { handleEditSubmit } className = "space-y-3" >
@@ -334,20 +350,12 @@ export default function Wishlist() {
334350 />
335351 </ div >
336352 < div className = "flex justify-end gap-3 pt-3 modal-buttons" >
337- < button
338- type = "submit"
339- disabled = { updating }
340- className = "px-4 py-2 rounded-[10px] bg-green text-white font-semibold hover:bg-[#01803b]"
341- >
353+ < Button type = "submit" colour = "green" className = "rounded-[10px]" >
342354 { updating ? "Mis à jour…" : "Mettre à jour" }
343- </ button >
344- < button
345- type = "button"
346- onClick = { ( ) => setEditModalOpen ( false ) }
347- className = "px-4 py-2 rounded-[10px] bg-dark text-white font-semibold hover:bg-[#463835]"
348- >
355+ </ Button >
356+ < Button type = "button" colour = "dark" onClick = { closeEditModal } className = "rounded-[10px]" >
349357 Annuler
350- </ button >
358+ </ Button >
351359 </ div >
352360 </ form >
353361 </ div >
0 commit comments