72 lines
1.7 KiB
Swift
72 lines
1.7 KiB
Swift
//
|
||
// ListItem.swift
|
||
// Workouts
|
||
//
|
||
// Created by rzen on 7/13/25 at 10:42 AM.
|
||
//
|
||
// Copyright 2025 Rouslan Zenetl. All Rights Reserved.
|
||
//
|
||
|
||
import SwiftUI
|
||
|
||
enum CheckboxStatus {
|
||
case checked
|
||
case unchecked
|
||
case intermediate
|
||
case cancelled
|
||
|
||
var color: Color {
|
||
switch (self) {
|
||
case .checked: .green
|
||
case .unchecked: .gray
|
||
case .intermediate: .yellow
|
||
case .cancelled: .red
|
||
}
|
||
}
|
||
|
||
var systemName: String {
|
||
switch (self) {
|
||
case .checked: "checkmark.circle.fill"
|
||
case .unchecked: "circle"
|
||
case .intermediate: "ellipsis.circle"
|
||
case .cancelled: "cross.circle"
|
||
}
|
||
}
|
||
}
|
||
|
||
struct CheckboxListItem: View {
|
||
var status: CheckboxStatus
|
||
var title: String
|
||
var subtitle: String?
|
||
var count: Int?
|
||
|
||
var body: some View {
|
||
HStack (alignment: .top) {
|
||
Image(systemName: status.systemName)
|
||
.resizable()
|
||
.scaledToFit()
|
||
.frame(width: 30)
|
||
.foregroundStyle(status.color)
|
||
VStack (alignment: .leading) {
|
||
Text("\(title)")
|
||
.font(.headline)
|
||
HStack (alignment: .bottom) {
|
||
if let subtitle = subtitle {
|
||
Text("\(subtitle)")
|
||
.font(.footnote)
|
||
}
|
||
}
|
||
}
|
||
if let count = count {
|
||
Spacer()
|
||
Text("\(count)")
|
||
.font(.caption)
|
||
.foregroundColor(.gray)
|
||
}
|
||
}
|
||
.frame(maxWidth: .infinity, alignment: .leading)
|
||
.contentShape(Rectangle())
|
||
}
|
||
}
|
||
|