@@ -75,6 +75,7 @@ interface PreferencesContextType {
7575 itemDisplayLimit : number ;
7676 calorieGoalAdjustmentMode : 'dynamic' | 'fixed' ; // Add new preference
7777 energyUnit : EnergyUnit ; // Add energy unit
78+ autoScaleOpenFoodFactsImports : boolean ; // Auto-scale nutrition from 100g to serving size
7879 nutrientDisplayPreferences : NutrientPreference [ ] ;
7980 water_display_unit : 'ml' | 'oz' | 'liter' ;
8081 language : string ;
@@ -97,6 +98,7 @@ interface PreferencesContextType {
9798 setItemDisplayLimit : ( limit : number ) => void ;
9899 setCalorieGoalAdjustmentMode : ( mode : 'dynamic' | 'fixed' ) => void ; // Add setter for calorie goal adjustment mode
99100 setEnergyUnit : ( unit : EnergyUnit ) => void ; // Add setter for energy unit
101+ setAutoScaleOpenFoodFactsImports : ( enabled : boolean ) => void ; // Add boolean for auto-scale
100102 loadNutrientDisplayPreferences : ( ) => Promise < void > ;
101103 setWaterDisplayUnit : ( unit : 'ml' | 'oz' | 'liter' ) => void ;
102104 setLanguage : ( language : string ) => void ;
@@ -144,6 +146,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
144146 const [ foodDisplayLimit , setFoodDisplayLimitState ] = useState < number > ( 10 ) ; // Add state for foodDisplayLimit
145147 const [ calorieGoalAdjustmentMode , setCalorieGoalAdjustmentModeState ] = useState < 'dynamic' | 'fixed' > ( 'dynamic' ) ; // New state for calorie goal adjustment
146148 const [ energyUnit , setEnergyUnitState ] = useState < EnergyUnit > ( 'kcal' ) ; // Add state for energy unit
149+ const [ autoScaleOpenFoodFactsImports , setAutoScaleOpenFoodFactsImportsState ] = useState < boolean > ( false ) ; // Auto-scale OpenFoodFacts imports
147150 const [ nutrientDisplayPreferences , setNutrientDisplayPreferences ] = useState < NutrientPreference [ ] > ( [ ] ) ;
148151 const [ waterDisplayUnit , setWaterDisplayUnitState ] = useState < 'ml' | 'oz' | 'liter' > ( 'ml' ) ;
149152 const [ language , setLanguageState ] = useState < string > ( 'en' ) ;
@@ -178,6 +181,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
178181 const savedLanguage = localStorage . getItem ( 'language' ) ;
179182 const savedCalorieGoalAdjustmentMode = localStorage . getItem ( 'calorieGoalAdjustmentMode' ) as 'dynamic' | 'fixed' ;
180183 const savedEnergyUnit = localStorage . getItem ( 'energyUnit' ) as EnergyUnit ; // Load energy unit
184+ const savedAutoScaleOpenFoodFactsImports = localStorage . getItem ( 'autoScaleOpenFoodFactsImports' ) ; // Load auto-scale preference
181185
182186 if ( savedWeightUnit ) {
183187 setWeightUnitState ( savedWeightUnit ) ;
@@ -207,6 +211,10 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
207211 setEnergyUnitState ( savedEnergyUnit ) ;
208212 debug ( loggingLevel , "PreferencesProvider: Loaded energyUnit from localStorage:" , savedEnergyUnit ) ;
209213 }
214+ if ( savedAutoScaleOpenFoodFactsImports !== null ) { // Set auto-scale state from localStorage
215+ setAutoScaleOpenFoodFactsImportsState ( savedAutoScaleOpenFoodFactsImports === 'true' ) ;
216+ debug ( loggingLevel , "PreferencesProvider: Loaded autoScaleOpenFoodFactsImports from localStorage:" , savedAutoScaleOpenFoodFactsImports ) ;
217+ }
210218 }
211219 }
212220 } , [ user , loading ] ) ; // Add loading to dependency array
@@ -236,6 +244,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
236244 setLanguageState ( data . language || 'en' ) ;
237245 setCalorieGoalAdjustmentModeState ( data . calorie_goal_adjustment_mode || 'dynamic' ) ; // Set calorie goal adjustment mode state
238246 setEnergyUnitState ( data . energy_unit as EnergyUnit || 'kcal' ) ; // Set energy unit state, default to kcal
247+ setAutoScaleOpenFoodFactsImportsState ( data . auto_scale_open_food_facts_imports ?? false ) ; // Set auto-scale state, default to false
239248 setBmrAlgorithmState ( ( data . bmr_algorithm as BmrAlgorithm ) || BmrAlgorithm . MIFFLIN_ST_JEOR ) ;
240249 setBodyFatAlgorithmState ( ( data . body_fat_algorithm as BodyFatAlgorithm ) || BodyFatAlgorithm . US_NAVY ) ;
241250 setIncludeBmrInNetCaloriesState ( data . include_bmr_in_net_calories ?? false ) ;
@@ -293,6 +302,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
293302 language : 'en' ,
294303 calorie_goal_adjustment_mode : 'dynamic' , // Add default for new preference
295304 energy_unit : 'kcal' , // Add default energy unit
305+ auto_scale_open_food_facts_imports : false , // Add default auto-scale for OpenFoodFacts
296306 selected_diet : 'balanced' , // Add default diet
297307 } ;
298308
@@ -332,6 +342,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
332342 language : string ;
333343 calorie_goal_adjustment_mode : 'dynamic' | 'fixed' ;
334344 energy_unit : EnergyUnit ;
345+ auto_scale_open_food_facts_imports : boolean ;
335346 bmr_algorithm : BmrAlgorithm ;
336347 body_fat_algorithm : BodyFatAlgorithm ;
337348 include_bmr_in_net_calories : boolean ;
@@ -373,6 +384,10 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
373384 localStorage . setItem ( 'energyUnit' , updates . energy_unit ) ;
374385 debug ( loggingLevel , "PreferencesProvider: Saved energyUnit to localStorage:" , updates . energy_unit ) ;
375386 }
387+ if ( updates . auto_scale_open_food_facts_imports !== undefined ) { // Save auto-scale to localStorage
388+ localStorage . setItem ( 'autoScaleOpenFoodFactsImports' , String ( updates . auto_scale_open_food_facts_imports ) ) ;
389+ debug ( loggingLevel , "PreferencesProvider: Saved autoScaleOpenFoodFactsImports to localStorage:" , updates . auto_scale_open_food_facts_imports ) ;
390+ }
376391 // default_food_data_provider_id, logging_level and item_display_limit are not stored in localStorage
377392 // food_display_limit is also not stored in localStorage
378393 return ;
@@ -590,6 +605,12 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
590605 saveAllPreferences ( { energyUnit : unit } ) ; // Persist the change
591606 } ;
592607
608+ const setAutoScaleOpenFoodFactsImports = ( enabled : boolean ) => {
609+ info ( loggingLevel , "PreferencesProvider: Setting auto-scale OpenFoodFacts imports to:" , enabled ) ;
610+ setAutoScaleOpenFoodFactsImportsState ( enabled ) ;
611+ saveAllPreferences ( { autoScaleOpenFoodFactsImports : enabled } ) ; // Persist the change
612+ } ;
613+
593614 const saveAllPreferences = async ( newPrefs ?: Partial < PreferencesContextType > ) => {
594615 info ( loggingLevel , "PreferencesProvider: Saving all preferences to backend." ) ;
595616
@@ -608,6 +629,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
608629 language : newPrefs ?. language ?? language ,
609630 calorie_goal_adjustment_mode : newPrefs ?. calorieGoalAdjustmentMode ?? calorieGoalAdjustmentMode , // Include new preference
610631 energy_unit : newPrefs ?. energyUnit ?? energyUnit , // Include energy unit preference
632+ auto_scale_open_food_facts_imports : newPrefs ?. autoScaleOpenFoodFactsImports ?? autoScaleOpenFoodFactsImports , // Include auto-scale preference
611633 bmr_algorithm : newPrefs ?. bmrAlgorithm ?? bmrAlgorithm ,
612634 body_fat_algorithm : newPrefs ?. bodyFatAlgorithm ?? bodyFatAlgorithm ,
613635 include_bmr_in_net_calories : newPrefs ?. includeBmrInNetCalories ?? includeBmrInNetCalories ,
@@ -665,6 +687,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
665687 foodDisplayLimit, // Expose foodDisplayLimit
666688 calorieGoalAdjustmentMode, // Expose new preference
667689 energyUnit, // Expose energyUnit
690+ autoScaleOpenFoodFactsImports, // Expose auto-scale OpenFoodFacts imports
668691 nutrientDisplayPreferences,
669692 water_display_unit : waterDisplayUnit ,
670693 language,
@@ -679,6 +702,7 @@ export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ c
679702 setItemDisplayLimit,
680703 setCalorieGoalAdjustmentMode, // Expose new setter
681704 setEnergyUnit, // Expose setEnergyUnit
705+ setAutoScaleOpenFoodFactsImports, // Expose setAutoScaleOpenFoodFactsImports
682706 loadNutrientDisplayPreferences,
683707 setWaterDisplayUnit : setWaterDisplayUnitState ,
684708 setLanguage : setLanguageState ,
0 commit comments