damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

DamusPurpleAccountView.swift (5323B)


      1 //
      2 //  DamusPurpleAccountView.swift
      3 //  damus
      4 //
      5 //  Created by Daniel D’Aquino on 2024-01-26.
      6 //
      7 
      8 import SwiftUI
      9 
     10 struct DamusPurpleAccountView: View {
     11     var colorScheme: ColorScheme = .dark
     12     let damus_state: DamusState
     13     let account: DamusPurple.Account
     14     let pfp_size: CGFloat = 90.0
     15     
     16     var body: some View {
     17         VStack {
     18             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)
     19                 .background(Color.black.opacity(0.4).clipShape(Circle()))
     20                 .shadow(color: .black, radius: 10, x: 0.0, y: 5)
     21             
     22             profile_name
     23             
     24             if account.active {
     25                 active_account_badge
     26             }
     27             else {
     28                 inactive_account_badge
     29             }
     30             
     31             // TODO: Generalize this view instead of setting up dividers and paddings manually
     32             VStack {
     33                 HStack {
     34                     Text("Expiry date", comment: "Label for Purple subscription expiry date")
     35                     Spacer()
     36                     let formattedDate = DateFormatter.localizedString(from: account.expiry, dateStyle: .short, timeStyle: .none)
     37                     Text(formattedDate)
     38                 }
     39                 .padding(.horizontal)
     40                 .padding(.top, 20)
     41                 
     42                 Divider()
     43                     .padding(.horizontal)
     44                     .padding(.vertical, 10)
     45                 
     46                 HStack {
     47                     Text("Account creation", comment: "Label for Purple account creation date")
     48                     Spacer()
     49                     let formattedDate = DateFormatter.localizedString(from: account.created_at, dateStyle: .short, timeStyle: .none)
     50                     Text(formattedDate)
     51                 }
     52                 .padding(.horizontal)
     53                 
     54                 Divider()
     55                     .padding(.horizontal)
     56                     .padding(.vertical, 10)
     57                 
     58                 HStack {
     59                     Text("Subscriber number", comment: "Label for Purple account subscriber number")
     60                     Spacer()
     61                     Text(verbatim: "#\(account.subscriber_number)")
     62                 }
     63                 .padding(.horizontal)
     64                 .padding(.bottom, 20)
     65             }
     66             .foregroundColor(.white.opacity(0.8))
     67             .preferredColorScheme(.dark)
     68             .background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 12, style: .continuous))
     69             .padding()
     70         }
     71     }
     72     
     73     var profile_name: some View {
     74         let display_name = self.profile_display_name()
     75         return HStack(alignment: .center, spacing: 5) {
     76             Text(display_name)
     77                 .font(.title)
     78                 .bold()
     79                 .foregroundStyle(.white)
     80             
     81             SupporterBadge(
     82                 percent: nil,
     83                 purple_account: account,
     84                 style: .full
     85             )
     86         }
     87     }
     88     
     89     var active_account_badge: some View {
     90         HStack(spacing: 3) {
     91             Image("check-circle.fill")
     92                 .resizable()
     93                 .frame(width: 15, height: 15)
     94             
     95             Text("Active account", comment: "Badge indicating user has an active Damus Purple account")
     96                 .font(.caption)
     97                 .bold()
     98         }
     99         .foregroundColor(Color.white)
    100         .padding(.vertical, 3)
    101         .padding(.horizontal, 8)
    102         .background(PinkGradient)
    103         .cornerRadius(30.0)
    104     }
    105     
    106     var inactive_account_badge: some View {
    107         HStack(spacing: 3) {
    108             Image("warning")
    109                 .resizable()
    110                 .frame(width: 15, height: 15)
    111             
    112             Text("Expired account", comment: "Badge indicating user has an expired Damus Purple account")
    113                 .font(.caption)
    114                 .bold()
    115         }
    116         .foregroundColor(DamusColors.danger)
    117         .padding(.vertical, 3)
    118         .padding(.horizontal, 8)
    119         .background(DamusColors.dangerTertiary)
    120         .cornerRadius(30.0)
    121     }
    122     
    123     func profile_display_name() -> String {
    124         let profile_txn: NdbTxn<ProfileRecord?>? = damus_state.profiles.lookup_with_timestamp(account.pubkey)
    125         let profile: NdbProfile? = profile_txn?.unsafeUnownedValue?.profile
    126         let display_name = parse_display_name(profile: profile, pubkey: account.pubkey).displayName
    127         return display_name
    128     }
    129 }
    130 
    131 #Preview("Active") {
    132     DamusPurpleAccountView(
    133         damus_state: test_damus_state,
    134         account: DamusPurple.Account(
    135             pubkey: test_pubkey,
    136             created_at: Date.now,
    137             expiry: Date.init(timeIntervalSinceNow: 60 * 60 * 24 * 30),
    138             subscriber_number: 7,
    139             active: true
    140         )
    141     )
    142 }
    143 
    144 #Preview("Expired") {
    145     DamusPurpleAccountView(
    146         damus_state: test_damus_state,
    147         account: DamusPurple.Account(
    148             pubkey: test_pubkey,
    149             created_at: Date.init(timeIntervalSinceNow: -60 * 60 * 24 * 37),
    150             expiry: Date.init(timeIntervalSinceNow: -60 * 60 * 24 * 7),
    151             subscriber_number: 7,
    152             active: false
    153         )
    154     )
    155 }