WidgetKind.swift 1.27 KB
//
//  WidgetKind.swift
//  hippo-watch Watch App
//
//  Created by 权海 on 2026/6/22.
//

import WidgetKit

enum HippoWidgetKind: String{
    case hrv    =   "HRVWidget"
    case mySummary = "MyStatusSummaryWidget"
    case heartBeatCircle = "HeartBeatCircleWidget"
    case activityCircle = "ActivityCircleWidget"
    case stepCountCircle = "StepCountCircleWidget"
}

/// Keeps HealthKit-to-widget refresh mappings in one place so a data change
/// only invalidates the timelines that actually consume it.
enum WatchWidgetReloader {
    static func reloadHRV() {
        reload(.hrv, .mySummary, .heartBeatCircle)
    }

    static func reloadHeartRate() {
        reload(.mySummary, .heartBeatCircle)
    }

    static func reloadSteps() {
        reload(.mySummary, .stepCountCircle)
    }

    static func reloadActivity() {
        reload(.mySummary, .activityCircle)
    }

    static func reloadActivityTarget() {
        reload(.mySummary, .activityCircle, .stepCountCircle)
    }

    static func reloadAllDynamicWidgets() {
        reload(.hrv, .mySummary, .heartBeatCircle, .activityCircle, .stepCountCircle)
    }

    private static func reload(_ kinds: HippoWidgetKind...) {
        kinds.forEach {
            WidgetCenter.shared.reloadTimelines(ofKind: $0.rawValue)
        }
    }
}