Skip to content
Snippets Groups Projects
Select Git revision
  • 2c5a20131b1b6446eb7ef25dfc306e2358c23443
  • release default protected
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • hotfix/TestHostPool_UpdateNdf_AddFilter
  • XX-4719/announcementChannels
  • xx-4717/logLevel
  • jonah/noob-channel
  • master protected
  • XX-4707/tagDiskJson
  • xx-4698/notification-retry
  • hotfix/notifylockup
  • syncNodes
  • hotfix/localCB
  • XX-4677/NewChanManagerMobile
  • XX-4689/DmSync
  • duplicatePrefix
  • XX-4601/HavenInvites
  • finalizedUICallbacks
  • XX-4673/AdminKeySync
  • debugNotifID
  • anne/test
  • v4.7.5
  • v4.7.4
  • v4.7.3
  • v4.7.2
  • v4.7.1
  • v4.6.3
  • v4.6.1
  • v4.5.0
  • v4.4.4
  • v4.3.11
  • v4.3.8
  • v4.3.7
  • v4.3.6
  • v4.3.5
  • v4.2.0
  • v4.3.0
  • v4.3.4
  • v4.3.3
  • v4.3.2
  • v4.3.1
41 results

client.go

Blame
  • ContactView.swift 5.06 KiB
    import AppCore
    import ComposableArchitecture
    import ComposablePresentation
    import SendRequestFeature
    import SwiftUI
    import XXClient
    import XXModels
    
    public struct ContactView: View {
      public init(store: Store<ContactState, ContactAction>) {
        self.store = store
      }
    
      let store: Store<ContactState, ContactAction>
    
      struct ViewState: Equatable {
        var dbContact: XXModels.Contact?
        var xxContact: XXClient.Contact?
    
        init(state: ContactState) {
          dbContact = state.dbContact
          xxContact = state.xxContact
        }
      }
    
      public var body: some View {
        WithViewStore(store.scope(state: ViewState.init)) { viewStore in
          Form {
            if let xxContact = viewStore.xxContact {
              Section {
                Label(xxContact.username ?? "", systemImage: "person")
                Label(xxContact.email ?? "", systemImage: "envelope")
                Label(xxContact.phone ?? "", systemImage: "phone")
                Button {
                  viewStore.send(.saveFactsTapped)
                } label: {
                  if viewStore.dbContact == nil {
                    Text("Save contact")
                  } else {
                    Text("Update contact")
                  }
                }
              } header: {
                Text("Facts")
              }
            }
    
            if let dbContact = viewStore.dbContact {
              Section {
                Label(dbContact.username ?? "", systemImage: "person")
                Label(dbContact.email ?? "", systemImage: "envelope")
                Label(dbContact.phone ?? "", systemImage: "phone")
              } header: {
                Text("Contact")
              }
    
              Section {
                switch dbContact.authStatus {
                case .stranger:
                  HStack {
                    Text("Stranger")
                    Spacer()
                    Image(systemName: "person.fill.questionmark")
                  }
                  Button {
                    viewStore.send(.sendRequestTapped)
                  } label: {
                    HStack {
                      Text("Send request")
                      Spacer()
                      Image(systemName: "chevron.forward")
                    }
                  }
    
                case .requesting:
                  HStack {
                    Text("Sending auth request")
                    Spacer()
                    ProgressView()
                  }
    
                case .requested:
                  HStack {
                    Text("Request sent")
                    Spacer()
                    Image(systemName: "chevron.forward")
                  }
    
                case .requestFailed:
                  HStack {
                    Text("Sending request failed")
                    Spacer()
                    Image(systemName: "xmark.diamond.fill")
                      .foregroundColor(.red)
                  }
                  Button {
                    viewStore.send(.sendRequestTapped)
                  } label: {
                    HStack {
                      Text("Resend request")
                      Spacer()
                      Image(systemName: "paperplane")
                    }
                  }
    
                case .verificationInProgress:
                  HStack {
                    Text("Verification is progress")
                    Spacer()
                    ProgressView()
                  }
    
                case .verified:
                  HStack {
                    Text("Verified")
                    Spacer()
                    Image(systemName: "person.fill.checkmark")
                  }
    
                case .verificationFailed:
                  HStack {
                    Text("Verification failed")
                    Spacer()
                    Image(systemName: "xmark.diamond.fill")
                      .foregroundColor(.red)
                  }
    
                case .confirming:
                  HStack {
                    Text("Confirming auth request")
                    Spacer()
                    ProgressView()
                  }
    
                case .confirmationFailed:
                  HStack {
                    Text("Confirmation failed")
                    Spacer()
                    Image(systemName: "xmark.diamond.fill")
                      .foregroundColor(.red)
                  }
    
                case .friend:
                  HStack {
                    Text("Friend")
                    Spacer()
                    Image(systemName: "person.fill.checkmark")
                  }
    
                case .hidden:
                  HStack {
                    Text("Hidden")
                    Spacer()
                    Image(systemName: "eye.slash")
                  }
                }
              } header: {
                Text("Auth status")
              }
              .animation(.default, value: viewStore.dbContact?.authStatus)
            }
          }
          .navigationTitle("Contact")
          .task { viewStore.send(.start) }
          .background(NavigationLinkWithStore(
            store.scope(
              state: \.sendRequest,
              action: ContactAction.sendRequest
            ),
            onDeactivate: { viewStore.send(.sendRequestDismissed) },
            destination: SendRequestView.init(store:)
          ))
        }
      }
    }
    
    #if DEBUG
    public struct ContactView_Previews: PreviewProvider {
      public static var previews: some View {
        ContactView(store: Store(
          initialState: ContactState(
            id: "contact-id".data(using: .utf8)!
          ),
          reducer: .empty,
          environment: ()
        ))
      }
    }
    #endif