1 contributor
80 lines | 1.966kb
//
//  ChevronView.swift
//  USB Meter
//
//  Created by Bogdan Timofte on 02/05/2020.
//  Copyright © 2020 Bogdan Timofte. All rights reserved.
//

import SwiftUI

struct ChevronView: View {

    @Binding var rotate: Bool

    var body: some View {
        Button(action: {
            self.rotate.toggle()
        }) {
            Image(systemName: "chevron.right.circle")
                .imageScale(.large)
                .rotationEffect(.degrees(rotate ? 270 : 90))
                .animation(.easeInOut, value: rotate)
                .padding(.vertical)
        }
    }
}

struct ContextInfoButton: View {
    let title: String
    let message: String
    let popoverWidth: CGFloat

    @State private var showsPopover = false

    init(
        title: String,
        message: String,
        popoverWidth: CGFloat = 280
    ) {
        self.title = title
        self.message = message
        self.popoverWidth = popoverWidth
    }

    var body: some View {
        Button {
            showsPopover.toggle()
        } label: {
            Image(systemName: "info.circle")
                .font(.body.weight(.semibold))
                .foregroundColor(.secondary)
        }
        .buttonStyle(.plain)
        .accessibilityLabel("\(title) info")
        .popover(isPresented: $showsPopover, arrowEdge: .top) {
            VStack(alignment: .leading, spacing: 10) {
                Text(title)
                    .font(.headline)
                Text(message)
                    .font(.body)
                    .fixedSize(horizontal: false, vertical: true)
            }
            .padding(16)
            .frame(width: popoverWidth, alignment: .leading)
        }
    }
}

struct ContextInfoHeader: View {
    let title: String
    let message: String

    var body: some View {
        HStack(spacing: 8) {
            Text(title)
            Spacer(minLength: 0)
            ContextInfoButton(title: title, message: message)
        }
    }
}