44 lines
1.4 KiB
Swift
44 lines
1.4 KiB
Swift
//
|
|
// AccountButton.swift
|
|
// meterios
|
|
//
|
|
// (c) 2025 Martin "maride" Dessauer
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
/// **AccountButton** creates a button showing all relevant information of a Mete user account: profile picture, name, and balance
|
|
struct AccountButton : View {
|
|
@Bindable private var account: Account
|
|
private let action: () -> Void
|
|
|
|
init(account: Account, action: @escaping () -> Void = {}) {
|
|
self.account = account
|
|
self.action = action
|
|
}
|
|
|
|
var body: some View {
|
|
Button(action: action) {
|
|
HStack {
|
|
// Profile Image
|
|
AsyncImageWithPlaceholder(url: account.displayImageURL, width: 64, height: 64).clipShape(Circle()).fixedSize()
|
|
Spacer(minLength: 16.0)
|
|
|
|
// Account, Address & Balance
|
|
VStack(alignment: .leading) {
|
|
HStack {
|
|
if account.displayName != nil {
|
|
Text(account.displayName!).fontWeight(.bold)
|
|
}
|
|
Divider()
|
|
if account.balance != nil {
|
|
Text(account.balance!.formatted(.currency(code: "EUR"))).foregroundStyle(account.balance! > 0 ? .green : .red)
|
|
}
|
|
}.fixedSize()
|
|
Text("\(account.address)").fontWeight(.thin)
|
|
}.fixedSize()
|
|
}.fixedSize()
|
|
}
|
|
}
|
|
}
|