154 lines
5.9 KiB
Swift
154 lines
5.9 KiB
Swift
|
import SwiftUI
|
||
|
|
||
|
struct AddContactOrChannelScreen: View {
|
||
|
@EnvironmentObject var navigation: NavigationStore
|
||
|
// @EnvironmentObject var store: AppStore
|
||
|
|
||
|
// enum Field {
|
||
|
// case account
|
||
|
// case contact
|
||
|
// }
|
||
|
//
|
||
|
// @FocusState private var focus: Field?
|
||
|
//
|
||
|
// @Binding var isPresented: Bool
|
||
|
// @State private var contactJID: String = ""
|
||
|
// // @State private var ownerAccount: Account?
|
||
|
//
|
||
|
// @State private var isShowingLoader = false
|
||
|
// @State private var isShowingAlert = false
|
||
|
// @State private var errorMsg = ""
|
||
|
|
||
|
var body: some View {
|
||
|
ZStack {
|
||
|
// Background color
|
||
|
Color.Material.Background.light
|
||
|
.ignoresSafeArea()
|
||
|
|
||
|
// Content
|
||
|
VStack(spacing: 0) {
|
||
|
// Header
|
||
|
SharedNavigationBar(
|
||
|
leftButton: .init(
|
||
|
image: Image(systemName: "xmark"),
|
||
|
action: {
|
||
|
withAnimation {
|
||
|
navigation.flow = .main(.contacts(.list))
|
||
|
}
|
||
|
// isPresented = false
|
||
|
}
|
||
|
),
|
||
|
centerText: .init(text: L10n.Contacts.Add.title),
|
||
|
rightButton: .init(
|
||
|
image: Image(systemName: "plus.viewfinder"),
|
||
|
action: {
|
||
|
print("Scan QR-code")
|
||
|
}
|
||
|
)
|
||
|
)
|
||
|
|
||
|
// VStack(spacing: 16) {
|
||
|
// // Explanation text
|
||
|
//
|
||
|
// Text(L10n.Contacts.Add.explanation)
|
||
|
// .font(.body3)
|
||
|
// .foregroundColor(.Material.Shape.separator)
|
||
|
// .multilineTextAlignment(.center)
|
||
|
// .padding(.top, 16)
|
||
|
//
|
||
|
// // Account selector
|
||
|
// HStack(spacing: 0) {
|
||
|
// Text("Use account:")
|
||
|
// .font(.body2)
|
||
|
// .foregroundColor(.Material.Text.main)
|
||
|
// .frame(alignment: .leading)
|
||
|
// Spacer()
|
||
|
// }
|
||
|
// // UniversalInputCollection.DropDownMenu(
|
||
|
// // prompt: "Use account",
|
||
|
// // elements: store.state.accountsState.accounts,
|
||
|
// // selected: $ownerAccount,
|
||
|
// // focus: $focus,
|
||
|
// // fieldType: .account
|
||
|
// // )
|
||
|
//
|
||
|
// // Contact text input
|
||
|
// HStack(spacing: 0) {
|
||
|
// Text("Contact JID:")
|
||
|
// .font(.body2)
|
||
|
// .foregroundColor(.Material.Text.main)
|
||
|
// .frame(alignment: .leading)
|
||
|
// Spacer()
|
||
|
// }
|
||
|
// UniversalInputCollection.TextField(
|
||
|
// prompt: "Contact or channel JID",
|
||
|
// text: $contactJID,
|
||
|
// focus: $focus,
|
||
|
// fieldType: .contact,
|
||
|
// contentType: .emailAddress,
|
||
|
// keyboardType: .emailAddress,
|
||
|
// submitLabel: .done,
|
||
|
// action: {
|
||
|
// focus = .account
|
||
|
// }
|
||
|
// )
|
||
|
//
|
||
|
// // Save button
|
||
|
// Button {
|
||
|
// navigation.flow = .main(.contacts(.list))
|
||
|
// } label: {
|
||
|
// Text(L10n.Global.save)
|
||
|
// }
|
||
|
// .buttonStyle(PrimaryButtonStyle())
|
||
|
// .disabled(!inputValid)
|
||
|
// .padding(.top)
|
||
|
// Spacer()
|
||
|
// }
|
||
|
.padding(.horizontal, 32)
|
||
|
}
|
||
|
}
|
||
|
// .onAppear {
|
||
|
// if let exists = store.state.accountsState.accounts.first, exists.isActive {
|
||
|
// ownerAccount = exists
|
||
|
// }
|
||
|
// }
|
||
|
// .loadingIndicator(isShowingLoader)
|
||
|
// .alert(isPresented: $isShowingAlert) {
|
||
|
// Alert(
|
||
|
// title: Text(L10n.Global.Error.title),
|
||
|
// message: Text(errorMsg),
|
||
|
// dismissButton: .default(Text(L10n.Global.ok))
|
||
|
// )
|
||
|
// }
|
||
|
// .onChange(of: store.state.rostersState.newAddedRosterJid) { jid in
|
||
|
// if jid != nil, isShowingLoader {
|
||
|
// isShowingLoader = false
|
||
|
// isPresented = false
|
||
|
// }
|
||
|
// }
|
||
|
// .onChange(of: store.state.rostersState.newAddedRosterError) { error in
|
||
|
// if let error = error, isShowingLoader {
|
||
|
// isShowingLoader = false
|
||
|
// errorMsg = error
|
||
|
// isShowingAlert = true
|
||
|
// }
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
private var inputValid: Bool {
|
||
|
true
|
||
|
// ownerAccount != nil && !contactJID.isEmpty && UniversalInputCollection.Validators.isEmail(contactJID)
|
||
|
}
|
||
|
|
||
|
// private func save() {
|
||
|
// guard let ownerAccount else { return }
|
||
|
// if let exists = store.state.rostersState.rosters.first(where: { $0.bareJid == ownerAccount.bareJid && $0.contactBareJid == contactJID }), exists.locallyDeleted {
|
||
|
// store.dispatch(.rostersAction(.unmarkRosterAsLocallyDeleted(ownerJID: ownerAccount.bareJid, contactJID: contactJID)))
|
||
|
// isPresented = false
|
||
|
// } else {
|
||
|
// isShowingLoader = true
|
||
|
// store.dispatch(.rostersAction(.addRoster(ownerJID: ownerAccount.bareJid, contactJID: contactJID, name: nil, groups: [])))
|
||
|
// }
|
||
|
// }
|
||
|
}
|