Profile: Show about fields inline

This commit is contained in:
Thomas Ricouard 2023-02-19 11:35:46 +01:00
parent 65e63c4586
commit 6a03e06d3a
2 changed files with 45 additions and 63 deletions

View file

@ -162,6 +162,8 @@ struct AccountDetailHeaderView: View {
.environment(\.openURL, OpenURLAction { url in
routerPath.handle(url: url)
})
fieldsView
}
.padding(.horizontal, .layoutPadding)
.offset(y: -40)
@ -216,6 +218,47 @@ struct AccountDetailHeaderView: View {
)
}
}
@ViewBuilder
private var fieldsView: some View {
if !viewModel.fields.isEmpty {
VStack(alignment: .leading) {
ForEach(viewModel.fields) { field in
HStack {
VStack(alignment: .leading, spacing: 2) {
Text(field.name)
.font(.scaledHeadline)
HStack {
if field.verifiedAt != nil {
Image(systemName: "checkmark.seal")
.foregroundColor(Color.green.opacity(0.80))
}
EmojiTextApp(field.value, emojis: viewModel.account?.emojis ?? [])
.foregroundColor(theme.tintColor)
.environment(\.openURL, OpenURLAction { url in
UIApplication.shared.open(url)
return .handled
})
}
.font(.scaledBody)
if viewModel.fields.last != field {
Divider()
.padding(.vertical, 4)
}
}
Spacer()
}
}
}
.padding(8)
.background(theme.secondaryBackgroundColor)
.cornerRadius(4)
.overlay(
RoundedRectangle(cornerRadius: 4)
.stroke(.gray.opacity(0.35), lineWidth: 1)
)
}
}
}
struct AccountDetailHeaderView_Previews: PreviewProvider {

View file

@ -19,7 +19,6 @@ public struct AccountDetailView: View {
@EnvironmentObject private var routerPath: RouterPath
@StateObject private var viewModel: AccountDetailViewModel
@State private var isFieldsSheetDisplayed: Bool = false
@State private var isCurrentUser: Bool = false
@State private var isCreateListAlertPresented: Bool = false
@State private var createListTitle: String = ""
@ -43,6 +42,7 @@ public struct AccountDetailView: View {
List {
Group {
makeHeaderView(proxy: proxy)
.padding(.bottom, -20)
familiarFollowers
featuredTagsView
}
@ -156,25 +156,9 @@ public struct AccountDetailView: View {
@ViewBuilder
private var featuredTagsView: some View {
if !viewModel.featuredTags.isEmpty || !viewModel.fields.isEmpty {
if !viewModel.featuredTags.isEmpty {
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 4) {
if !viewModel.fields.isEmpty {
Button {
isFieldsSheetDisplayed.toggle()
} label: {
VStack(alignment: .leading, spacing: 0) {
Text("account.detail.about")
.font(.scaledCallout)
Text("account.detail.n-fields \(viewModel.fields.count)")
.font(.caption2)
}
}
.buttonStyle(.bordered)
.sheet(isPresented: $isFieldsSheetDisplayed) {
fieldSheetView
}
}
if !viewModel.featuredTags.isEmpty {
ForEach(viewModel.featuredTags) { tag in
Button {
@ -220,51 +204,6 @@ public struct AccountDetailView: View {
}
}
private var fieldSheetView: some View {
NavigationStack {
List {
ForEach(viewModel.fields) { field in
VStack(alignment: .leading, spacing: 2) {
Text(field.name)
.font(.scaledHeadline)
HStack {
if field.verifiedAt != nil {
Image(systemName: "checkmark.seal")
.foregroundColor(Color.green.opacity(0.80))
}
EmojiTextApp(field.value, emojis: viewModel.account?.emojis ?? [])
.foregroundColor(theme.tintColor)
.environment(\.openURL, OpenURLAction { url in
UIApplication.shared.open(url)
return .handled
})
}
.font(.scaledBody)
}
.listRowBackground(field.verifiedAt != nil ? Color.green.opacity(0.15) : theme.primaryBackgroundColor)
}
}
.scrollContentBackground(.hidden)
.background(theme.secondaryBackgroundColor)
.navigationTitle("account.detail.about")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button {
isFieldsSheetDisplayed = false
} label: {
Image(systemName: "xmark")
.imageScale(.small)
.font(.body.weight(.semibold))
.frame(width: 30, height: 30)
.background(theme.primaryBackgroundColor.opacity(0.5))
.clipShape(Circle())
}
.foregroundColor(theme.tintColor)
}
}
}
}
private var tagsListView: some View {
Group {
ForEach(currentAccount.sortedTags) { tag in