|
1 | | -import React, { useState } from "react"; |
| 1 | +import { useEffect, useState } from "react"; |
| 2 | +import { useUser } from "../contexts/userContext"; |
| 3 | +import { useUserPreferencesUpdate } from "../hooks/useUserPreferencesUpdate"; |
| 4 | +import { DIETARY_PREFERENCES } from "../types/enums"; |
| 5 | + |
| 6 | +const defaultPreferences = { |
| 7 | + vegetarian: false, |
| 8 | + vegan: false, |
| 9 | + glutenFree: false, |
| 10 | + dairyFree: false, |
| 11 | + nutFree: false, |
| 12 | + spicyFood: false, |
| 13 | +}; |
| 14 | + |
| 15 | +const getPreferenceMap = (list: DietaryPreference[]) => ({ |
| 16 | + vegetarian: list.includes(DIETARY_PREFERENCES.VEGETARIAN), |
| 17 | + vegan: list.includes(DIETARY_PREFERENCES.VEGAN), |
| 18 | + glutenFree: list.includes(DIETARY_PREFERENCES.GLUTEN_FREE), |
| 19 | + dairyFree: list.includes(DIETARY_PREFERENCES.DAIRY_FREE), |
| 20 | + nutFree: list.includes(DIETARY_PREFERENCES.NUT_FREE), |
| 21 | + spicyFood: list.includes(DIETARY_PREFERENCES.SPICY_FOOD), |
| 22 | +}); |
| 23 | + |
| 24 | +const getPreferenceList = (preferences: typeof defaultPreferences) => { |
| 25 | + const list: DietaryPreference[] = []; |
| 26 | + if (preferences.vegetarian) list.push(DIETARY_PREFERENCES.VEGETARIAN); |
| 27 | + if (preferences.vegan) list.push(DIETARY_PREFERENCES.VEGAN); |
| 28 | + if (preferences.glutenFree) list.push(DIETARY_PREFERENCES.GLUTEN_FREE); |
| 29 | + if (preferences.dairyFree) list.push(DIETARY_PREFERENCES.DAIRY_FREE); |
| 30 | + if (preferences.nutFree) list.push(DIETARY_PREFERENCES.NUT_FREE); |
| 31 | + if (preferences.spicyFood) list.push(DIETARY_PREFERENCES.SPICY_FOOD); |
| 32 | + return list; |
| 33 | +}; |
2 | 34 |
|
3 | 35 | const PreferencesPage: React.FC = () => { |
4 | | - const [preferences, setPreferences] = useState({ |
5 | | - vegetarian: false, |
6 | | - vegan: false, |
7 | | - glutenFree: false, |
8 | | - dairyFree: false, |
9 | | - nutFree: false, |
10 | | - spicyFood: false, |
11 | | - }); |
| 36 | + const { user } = useUser(); |
| 37 | + const { updateUserPreferences } = useUserPreferencesUpdate({}); |
| 38 | + const [preferences, setPreferences] = useState(defaultPreferences); |
| 39 | + |
| 40 | + useEffect(() => { |
| 41 | + setPreferences( |
| 42 | + user?.dietaryPreferences |
| 43 | + ? getPreferenceMap(user.dietaryPreferences) |
| 44 | + : defaultPreferences |
| 45 | + ); |
| 46 | + }, [user?.dietaryPreferences]); |
12 | 47 |
|
13 | 48 | const handleToggle = (key: keyof typeof preferences) => { |
14 | | - setPreferences((prev) => ({ |
15 | | - ...prev, |
16 | | - [key]: !prev[key], |
17 | | - })); |
| 49 | + const updatedPreferences = { ...preferences, [key]: !preferences[key] }; |
| 50 | + setPreferences(updatedPreferences); |
| 51 | + const updatedPreferenceList = getPreferenceList(updatedPreferences); |
| 52 | + updateUserPreferences({ preferences: updatedPreferenceList }); |
18 | 53 | }; |
19 | 54 |
|
20 | 55 | return ( |
|
0 commit comments