metatext/Views/IdentitiesView.swift

80 lines
2.9 KiB
Swift
Raw Normal View History

2020-08-04 20:26:09 +00:00
// Copyright © 2020 Metabolist. All rights reserved.
2020-08-08 07:43:06 +00:00
import KingfisherSwiftUI
2020-09-05 02:31:43 +00:00
import SwiftUI
2020-09-01 07:33:49 +00:00
import ViewModels
2020-08-04 20:26:09 +00:00
struct IdentitiesView: View {
@StateObject var viewModel: IdentitiesViewModel
@EnvironmentObject var rootViewModel: RootViewModel
2020-08-08 07:43:06 +00:00
@Environment(\.displayScale) var displayScale: CGFloat
2020-08-04 20:26:09 +00:00
var body: some View {
Form {
Section {
NavigationLink(
destination: AddIdentityView(viewModel: rootViewModel.addIdentityViewModel()),
label: {
2020-08-29 03:50:58 +00:00
Label("add", systemImage: "plus.circle")
2020-08-04 20:26:09 +00:00
})
}
Section {
2020-08-08 07:43:06 +00:00
List {
ForEach(viewModel.identities) { identity in
Button {
withAnimation {
rootViewModel.newIdentitySelected(id: identity.id)
}
} label: {
HStack {
KFImage(identity.image,
2020-08-08 09:10:05 +00:00
options: .downsampled(dimension: 40, scaleFactor: displayScale))
VStack(alignment: .leading, spacing: 0) {
Spacer()
if let account = identity.account {
CustomEmojiText(
text: account.displayName,
emoji: account.emojis,
textStyle: .headline)
}
Text(identity.handle)
.font(.subheadline)
.foregroundColor(.secondary)
Spacer()
}
2020-08-08 07:43:06 +00:00
Spacer()
if identity.id == viewModel.identity.id {
Image(systemName: "checkmark.circle")
}
}
2020-08-07 01:41:59 +00:00
}
2020-08-08 07:43:06 +00:00
.disabled(identity.id == viewModel.identity.id)
.buttonStyle(PlainButtonStyle())
}
.onDelete {
guard let index = $0.first else { return }
rootViewModel.deleteIdentity(viewModel.identities[index])
2020-08-04 20:26:09 +00:00
}
}
}
}
2020-08-08 07:43:06 +00:00
.toolbar {
ToolbarItem(placement: ToolbarItemPlacement.navigationBarTrailing) {
EditButton()
}
}
2020-08-04 20:26:09 +00:00
}
}
2020-08-12 07:37:14 +00:00
#if DEBUG
2020-09-01 07:33:49 +00:00
import PreviewViewModels
2020-08-04 20:26:09 +00:00
struct IdentitiesView_Previews: PreviewProvider {
static var previews: some View {
2020-09-01 07:33:49 +00:00
IdentitiesView(viewModel: .mock())
.environmentObject(RootViewModel.mock())
2020-08-04 20:26:09 +00:00
}
}
2020-08-12 07:37:14 +00:00
#endif