1 contributor
127 lines | 4.517kb
//
//  ChargeRecordSheetView.swift
//  USB Meter
//
//  Created by Bogdan Timofte on 09/03/2020.
//  Copyright © 2020 Bogdan Timofte. All rights reserved.
//

import SwiftUI

struct ChargeRecordSheetView: View {
    @Binding var visibility: Bool
    @EnvironmentObject private var appData: AppData

    @State private var chargedDeviceLibraryVisibility = false
    @State private var chargerLibraryVisibility = false
    @State private var deviceLibraryMACAddress = ""
    @State private var chargerLibraryMACAddress = ""
    @State private var chargedDeviceLibraryTint: Color = .orange
    @State private var chargerLibraryTint: Color = .pink

    var body: some View {
        NavigationView {
            MeterChargeRecordContentView(
                onSelectDevice: { mac, tint in
                    deviceLibraryMACAddress = mac
                    chargedDeviceLibraryTint = tint
                    chargedDeviceLibraryVisibility = true
                },
                onSelectCharger: { mac, tint in
                    chargerLibraryMACAddress = mac
                    chargerLibraryTint = tint
                    chargerLibraryVisibility = true
                }
            )
            .navigationTitle("Charge Record")
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .cancellationAction) {
                    Button("Done") {
                        visibility = false
                    }
                }
            }
            .background(
                Group {
                    NavigationLink(isActive: $chargedDeviceLibraryVisibility) {
                        ChargedDeviceLibrarySheetView(
                            meterMACAddress: deviceLibraryMACAddress,
                            meterTint: chargedDeviceLibraryTint,
                            mode: .device,
                            standalone: false
                        )
                        .environmentObject(appData)
                    } label: { EmptyView() }

                    NavigationLink(isActive: $chargerLibraryVisibility) {
                        ChargedDeviceLibrarySheetView(
                            meterMACAddress: chargerLibraryMACAddress,
                            meterTint: chargerLibraryTint,
                            mode: .charger,
                            standalone: false
                        )
                        .environmentObject(appData)
                    } label: { EmptyView() }
                }
            )
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}

struct BatteryTargetNotificationEditorSheetView: View {
    @Environment(\.dismiss) private var dismiss
    @EnvironmentObject private var appData: AppData

    let sessionID: UUID
    let initialTargetPercent: Double?

    @State private var targetPercent: Double

    init(sessionID: UUID, initialTargetPercent: Double?) {
        self.sessionID = sessionID
        self.initialTargetPercent = initialTargetPercent
        _targetPercent = State(initialValue: initialTargetPercent ?? 80)
    }

    var body: some View {
        NavigationView {
            Form {
                Section(
                    header: ContextInfoHeader(
                        title: "Target Level",
                        message: "A local notification will be generated on synced devices when the estimated battery level reaches this target."
                    )
                ) {
                    VStack(alignment: .leading, spacing: 12) {
                        Text("\(targetPercent.format(decimalDigits: 0))%")
                            .font(.title3.weight(.bold))
                        Slider(value: $targetPercent, in: 20...100, step: 1)
                    }
                }
            }
            .navigationTitle("Battery Target")
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .cancellationAction) {
                    Button("Cancel") {
                        dismiss()
                    }
                }

                ToolbarItem(placement: .confirmationAction) {
                    Button("Save") {
                        if appData.setTargetBatteryPercent(targetPercent, for: sessionID) {
                            dismiss()
                        }
                    }
                }
            }
        }
    }
}

#Preview {
    ChargeRecordSheetView(visibility: .constant(true))
}