90 lines
2.4 KiB
Swift
90 lines
2.4 KiB
Swift
//
|
||
// CalendarListItem.swift
|
||
// Workouts
|
||
//
|
||
// Created by rzen on 7/18/25 at 8:44 AM.
|
||
//
|
||
// Copyright 2025 Rouslan Zenetl. All Rights Reserved.
|
||
//
|
||
|
||
import SwiftUI
|
||
|
||
struct CalendarListItem: View {
|
||
var date: Date
|
||
var title: String
|
||
var subtitle: String?
|
||
var count: Int?
|
||
|
||
var body: some View {
|
||
HStack (alignment: .top) {
|
||
ZStack {
|
||
VStack {
|
||
Text("\(date.abbreviatedWeekday)")
|
||
.font(.caption)
|
||
.foregroundColor(.secondary)
|
||
Text("\(date.dayOfMonth)")
|
||
.font(.headline)
|
||
.foregroundColor(.accentColor)
|
||
Text("\(date.abbreviatedMonth)")
|
||
.font(.caption)
|
||
.foregroundColor(.secondary)
|
||
}
|
||
.padding([.trailing], 10)
|
||
}
|
||
HStack {
|
||
VStack (alignment: .leading) {
|
||
Text("\(title)")
|
||
.font(.headline)
|
||
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())
|
||
}
|
||
}
|
||
|
||
extension Date {
|
||
private static let monthFormatter: DateFormatter = {
|
||
let formatter = DateFormatter()
|
||
formatter.locale = Locale.current
|
||
formatter.dateFormat = "MMM"
|
||
return formatter
|
||
}()
|
||
|
||
private static let dayFormatter: DateFormatter = {
|
||
let formatter = DateFormatter()
|
||
formatter.locale = Locale.current
|
||
formatter.dateFormat = "d"
|
||
return formatter
|
||
}()
|
||
|
||
private static let weekdayFormatter: DateFormatter = {
|
||
let formatter = DateFormatter()
|
||
formatter.locale = Locale.current
|
||
formatter.dateFormat = "E"
|
||
return formatter
|
||
}()
|
||
|
||
var abbreviatedMonth: String {
|
||
Date.monthFormatter.string(from: self)
|
||
}
|
||
|
||
var dayOfMonth: String {
|
||
Date.dayFormatter.string(from: self)
|
||
}
|
||
|
||
var abbreviatedWeekday: String {
|
||
Date.weekdayFormatter.string(from: self)
|
||
}
|
||
}
|