mirror of
https://github.com/Dimillian/IceCubesApp.git
synced 2024-09-27 06:00:05 +00:00
102 lines
3.4 KiB
Swift
102 lines
3.4 KiB
Swift
import DesignSystem
|
|
import Env
|
|
import Models
|
|
import SwiftUI
|
|
import Network
|
|
|
|
@MainActor
|
|
struct StatusRowHeaderView: View {
|
|
@Environment(\.isInCaptureMode) private var isInCaptureMode: Bool
|
|
@Environment(\.isStatusFocused) private var isFocused
|
|
@Environment(\.redactionReasons) private var redactionReasons
|
|
|
|
@Environment(Theme.self) private var theme
|
|
|
|
let viewModel: StatusRowViewModel
|
|
var body: some View {
|
|
HStack(alignment: theme.avatarPosition == .top ? .center : .top) {
|
|
Button {
|
|
viewModel.navigateToAccountDetail(account: viewModel.finalStatus.account)
|
|
} label: {
|
|
accountView
|
|
}
|
|
.buttonStyle(.plain)
|
|
Spacer()
|
|
if !redactionReasons.contains(.placeholder) {
|
|
dateView
|
|
}
|
|
}
|
|
.accessibilityElement(children: .combine)
|
|
.accessibilityLabel(Text("\(viewModel.finalStatus.account.safeDisplayName)") + Text(", ") + Text(viewModel.finalStatus.createdAt.relativeFormatted))
|
|
.accessibilityAction {
|
|
viewModel.navigateToAccountDetail(account: viewModel.finalStatus.account)
|
|
}
|
|
}
|
|
|
|
@ViewBuilder
|
|
private var accountView: some View {
|
|
HStack(alignment: .center) {
|
|
if theme.avatarPosition == .top {
|
|
AvatarView(viewModel.finalStatus.account.avatar)
|
|
#if targetEnvironment(macCatalyst)
|
|
.accountPopover(viewModel.finalStatus.account)
|
|
#endif
|
|
}
|
|
VStack(alignment: .leading, spacing: 2) {
|
|
HStack(alignment: .firstTextBaseline, spacing: 2) {
|
|
Group {
|
|
EmojiTextApp(viewModel.finalStatus.account.cachedDisplayName,
|
|
emojis: viewModel.finalStatus.account.emojis)
|
|
.font(.scaledSubheadline)
|
|
.foregroundColor(theme.labelColor)
|
|
.emojiText.size(Font.scaledSubheadlineFont.emojiSize)
|
|
.emojiText.baselineOffset(Font.scaledSubheadlineFont.emojiBaselineOffset)
|
|
.fontWeight(.semibold)
|
|
.lineLimit(1)
|
|
#if targetEnvironment(macCatalyst)
|
|
.accountPopover(viewModel.finalStatus.account)
|
|
#endif
|
|
|
|
if !redactionReasons.contains(.placeholder) {
|
|
accountBadgeView
|
|
.font(.footnote)
|
|
}
|
|
}
|
|
.layoutPriority(1)
|
|
}
|
|
if !redactionReasons.contains(.placeholder) {
|
|
if (theme.displayFullUsername && theme.avatarPosition == .leading) ||
|
|
theme.avatarPosition == .top {
|
|
Text("@\(theme.displayFullUsername ? viewModel.finalStatus.account.acct : viewModel.finalStatus.account.username)")
|
|
.font(.scaledFootnote)
|
|
.foregroundStyle(.secondary)
|
|
.lineLimit(1)
|
|
#if targetEnvironment(macCatalyst)
|
|
.accountPopover(viewModel.finalStatus.account)
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private var accountBadgeView: Text {
|
|
if (viewModel.status.reblogAsAsStatus ?? viewModel.status).account.bot {
|
|
return Text(Image(systemName: "poweroutlet.type.b.fill")) + Text(" ")
|
|
} else if (viewModel.status.reblogAsAsStatus ?? viewModel.status).account.locked {
|
|
return Text(Image(systemName: "lock.fill")) + Text(" ")
|
|
}
|
|
return Text("")
|
|
}
|
|
|
|
private var dateView: some View {
|
|
Group {
|
|
Text(Image(systemName: viewModel.finalStatus.visibility.iconName)) +
|
|
Text(" ⸱ ") +
|
|
Text(viewModel.finalStatus.createdAt.relativeFormatted)
|
|
}
|
|
.font(.scaledFootnote)
|
|
.foregroundStyle(.secondary)
|
|
.lineLimit(1)
|
|
}
|
|
}
|