diff --git a/ios/App/App/CoachWidgetBridge.swift b/ios/App/App/CoachWidgetBridge.swift index 017c000..611c193 100644 --- a/ios/App/App/CoachWidgetBridge.swift +++ b/ios/App/App/CoachWidgetBridge.swift @@ -45,7 +45,25 @@ public class CoachWidgetBridgePlugin: CAPPlugin, CAPBridgedPlugin { label: f["label"] as? String ) } - let snapshot = CoachWidgetSnapshot(updatedAt: Date(), today: today, forme: forme) + /* Les champs de nutrition sont FACULTATIFS dans l'appel : le pont web + peut les omettre (objectifs indisponibles, appel partiel). Dans ce + cas on conserve ceux du snapshot existant plutôt que de les effacer. + + C'est le bug qui faisait retomber le total du widget à zéro : le + snapshot était reconstruit de zéro à chaque chargement de page, avec + `today` et `forme` seulement, et l'hydratation créditée quelques + instants plus tôt disparaissait. */ + let previous = CoachWidgetStore.load() + func number(_ key: String) -> Double? { + (call.getValue(key) as? NSNumber)?.doubleValue + } + + var snapshot = CoachWidgetSnapshot(updatedAt: Date(), today: today, forme: forme) + snapshot.waterMlToday = number("waterMlToday") ?? previous?.waterMlToday + snapshot.coffeeCountToday = + (call.getValue("coffeeCountToday") as? NSNumber)?.intValue ?? previous?.coffeeCountToday + snapshot.kcalToday = number("kcalToday") ?? previous?.kcalToday + snapshot.kcalGoal = number("kcalGoal") ?? previous?.kcalGoal guard CoachWidgetStore.save(snapshot) else { call.reject("Échec de sauvegarde du snapshot widget (App Group indisponible ?)") return