Files
damus/damus/Views/Purple/DamusPurpleAccountView.swift
2024-04-25 09:30:27 -04:00

156 lines
5.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// DamusPurpleAccountView.swift
// damus
//
// Created by Daniel DAquino on 2024-01-26.
//
import SwiftUI
struct DamusPurpleAccountView: View {
var colorScheme: ColorScheme = .dark
let damus_state: DamusState
let account: DamusPurple.Account
let pfp_size: CGFloat = 90.0
var body: some View {
VStack {
ProfilePicView(pubkey: account.pubkey, size: pfp_size, highlight: .custom(Color.black.opacity(0.4), 1.0), profiles: damus_state.profiles, disable_animation: damus_state.settings.disable_animation)
.background(Color.black.opacity(0.4).clipShape(Circle()))
.shadow(color: .black, radius: 10, x: 0.0, y: 5)
profile_name
if account.active {
active_account_badge
}
else {
inactive_account_badge
}
// TODO: Generalize this view instead of setting up dividers and paddings manually
VStack {
HStack {
Text("Expiry date", comment: "Label for Purple subscription expiry date")
Spacer()
let formattedDate = DateFormatter.localizedString(from: account.expiry, dateStyle: .short, timeStyle: .none)
Text(formattedDate)
}
.padding(.horizontal)
.padding(.top, 20)
Divider()
.padding(.horizontal)
.padding(.vertical, 10)
HStack {
Text("Account creation", comment: "Label for Purple account creation date")
Spacer()
let formattedDate = DateFormatter.localizedString(from: account.created_at, dateStyle: .short, timeStyle: .none)
Text(formattedDate)
}
.padding(.horizontal)
Divider()
.padding(.horizontal)
.padding(.vertical, 10)
HStack {
Text("Subscriber number", comment: "Label for Purple account subscriber number")
Spacer()
Text(verbatim: "#\(account.subscriber_number)")
}
.padding(.horizontal)
.padding(.bottom, 20)
}
.foregroundColor(.white.opacity(0.8))
.preferredColorScheme(.dark)
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 12, style: .continuous))
.padding()
}
}
var profile_name: some View {
let display_name = self.profile_display_name()
return HStack(alignment: .center, spacing: 5) {
Text(display_name)
.font(.title)
.bold()
.foregroundStyle(.white)
SupporterBadge(
percent: nil,
purple_account: account,
style: .full
)
}
}
var active_account_badge: some View {
HStack(spacing: 3) {
Image("check-circle.fill")
.resizable()
.frame(width: 15, height: 15)
Text("Active account", comment: "Badge indicating user has an active Damus Purple account")
.font(.caption)
.bold()
}
.foregroundColor(Color.white)
.padding(.vertical, 3)
.padding(.horizontal, 8)
.background(PinkGradient)
.cornerRadius(30.0)
}
var inactive_account_badge: some View {
HStack(spacing: 3) {
Image("warning")
.resizable()
.frame(width: 15, height: 15)
Text("Expired account", comment: "Badge indicating user has an expired Damus Purple account")
.font(.caption)
.bold()
}
.foregroundColor(DamusColors.danger)
.padding(.vertical, 3)
.padding(.horizontal, 8)
.background(DamusColors.dangerTertiary)
.cornerRadius(30.0)
}
func profile_display_name() -> String {
let profile_txn: NdbTxn<ProfileRecord?>? = damus_state.profiles.lookup_with_timestamp(account.pubkey)
let profile: NdbProfile? = profile_txn?.unsafeUnownedValue?.profile
let display_name = parse_display_name(profile: profile, pubkey: account.pubkey).displayName
return display_name
}
}
#Preview("Active") {
DamusPurpleAccountView(
damus_state: test_damus_state,
account: DamusPurple.Account(
pubkey: test_pubkey,
created_at: Date.now,
expiry: Date.init(timeIntervalSinceNow: 60 * 60 * 24 * 30),
subscriber_number: 7,
active: true
)
)
}
#Preview("Expired") {
DamusPurpleAccountView(
damus_state: test_damus_state,
account: DamusPurple.Account(
pubkey: test_pubkey,
created_at: Date.init(timeIntervalSinceNow: -60 * 60 * 24 * 37),
expiry: Date.init(timeIntervalSinceNow: -60 * 60 * 24 * 7),
subscriber_number: 7,
active: false
)
)
}