Files
timetracker/ios/TimeTracker/TimeTracker/Shared/Components/LoadingView.swift
2026-02-18 21:35:32 +01:00

68 lines
1.8 KiB
Swift

import SwiftUI
struct LoadingView: View {
var message: String = "Loading..."
var body: some View {
VStack(spacing: 16) {
ProgressView()
.scaleEffect(1.2)
Text(message)
.font(.subheadline)
.foregroundStyle(.secondary)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct ErrorView: View {
let message: String
var retryAction: (() -> Void)?
var body: some View {
VStack(spacing: 16) {
Image(systemName: "exclamationmark.triangle")
.font(.largeTitle)
.foregroundStyle(.red)
Text(message)
.font(.subheadline)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
if let retryAction = retryAction {
Button("Retry", action: retryAction)
.buttonStyle(.borderedProminent)
}
}
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct EmptyView: View {
let icon: String
let title: String
var message: String? = nil
var body: some View {
VStack(spacing: 16) {
Image(systemName: icon)
.font(.system(size: 48))
.foregroundStyle(.secondary)
Text(title)
.font(.headline)
if let message = message {
Text(message)
.font(.subheadline)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
}
}
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}