Impressia/VernissageWidget/Views/MediumWidgetView.swift

57 lines
1.7 KiB
Swift

//
// https://mczachurski.dev
// Copyright © 2023 Marcin Czachurski and the repository contributors.
// Licensed under the Apache License 2.0.
//
import SwiftUI
import WidgetKit
import EnvironmentKit
struct MediumWidgetView: View {
var entry: Provider.Entry
var body: some View {
if let uiImage = entry.image, let uiAvatar = entry.avatar {
self.getWidgetBody(uiImage: Image(uiImage: uiImage), uiAvatar: Image(uiImage: uiAvatar))
} else {
self.getWidgetBody(uiImage: Image("Placeholder"), uiAvatar: Image("Avatar"))
.unredacted()
}
}
@ViewBuilder
private func getWidgetBody(uiImage: Image, uiAvatar: Image) -> some View {
VStack {
Spacer()
HStack {
uiAvatar
.resizable()
.clipShape(Circle())
.aspectRatio(contentMode: .fit)
.frame(width: 24, height: 24)
.overlay(
Circle()
.stroke(Color.white.opacity(0.6), lineWidth: 1)
.frame(width: 24, height: 24)
)
.shadow(color: .black, radius: 2)
Text(entry.displayName ?? "")
.foregroundColor(.white)
.fontWeight(.semibold)
.shadow(color: .black, radius: 2)
Spacer()
}
.padding(.leading, 8)
.padding(.bottom, 8)
}
.background {
uiImage
.resizable()
.aspectRatio(contentMode: .fill)
.widgetURL(URL(string: "\(AppConstants.statusUri)/\(entry.statusId ?? "")"))
}
}
}