IceCubesApp/Packages/Account/Sources/Account/AccountsLIst/AccountsListRow.swift

65 lines
1.9 KiB
Swift
Raw Normal View History

import DesignSystem
import EmojiText
2023-01-17 10:36:01 +00:00
import Env
import Models
import Network
import SwiftUI
@MainActor
2022-12-23 17:47:19 +00:00
public class AccountsListRowViewModel: ObservableObject {
var client: Client?
2023-01-17 10:36:01 +00:00
@Published var account: Account
@Published var relationShip: Relationshionship
2023-01-17 10:36:01 +00:00
2022-12-23 17:47:19 +00:00
public init(account: Account, relationShip: Relationshionship) {
self.account = account
self.relationShip = relationShip
}
}
2022-12-23 17:47:19 +00:00
public struct AccountsListRow: View {
2022-12-27 09:04:39 +00:00
@EnvironmentObject private var currentAccount: CurrentAccount
@EnvironmentObject private var routeurPath: RouterPath
@EnvironmentObject private var client: Client
2023-01-17 10:36:01 +00:00
2022-12-23 17:47:19 +00:00
@StateObject var viewModel: AccountsListRowViewModel
2023-01-17 10:36:01 +00:00
2022-12-23 17:47:19 +00:00
public init(viewModel: AccountsListRowViewModel) {
_viewModel = StateObject(wrappedValue: viewModel)
}
2023-01-17 10:36:01 +00:00
2022-12-23 17:47:19 +00:00
public var body: some View {
HStack(alignment: .top) {
AvatarView(url: viewModel.account.avatar, size: .status)
VStack(alignment: .leading, spacing: 2) {
EmojiTextApp(viewModel.account.safeDisplayName.asMarkdown, emojis: viewModel.account.emojis)
.font(.subheadline)
.fontWeight(.semibold)
Text("@\(viewModel.account.acct)")
.font(.footnote)
.foregroundColor(.gray)
EmojiTextApp(viewModel.account.note.asMarkdown, emojis: viewModel.account.emojis)
2022-12-24 12:41:25 +00:00
.font(.footnote)
.lineLimit(3)
.environment(\.openURL, OpenURLAction { url in
routeurPath.handle(url: url)
})
}
Spacer()
2022-12-27 09:04:39 +00:00
if currentAccount.account?.id != viewModel.account.id {
FollowButton(viewModel: .init(accountId: viewModel.account.id,
relationship: viewModel.relationShip,
shouldDisplayNotify: false))
2022-12-27 09:04:39 +00:00
}
}
.onAppear {
viewModel.client = client
}
.contentShape(Rectangle())
.onTapGesture {
routeurPath.navigate(to: .accountDetailWithAccount(account: viewModel.account))
}
}
}