Skip to content

aries framework swift sample 코드 분석 #40

@yangbongsoo

Description

@yangbongsoo
//
//  WalletMainView.swift
//  wallet-app-ios
//

import SwiftUI

enum MainMenu: Identifiable {
    case qrcode, list, loading
    var id: Int {
        hashValue
    }
}

struct WalletMainView: View {
    @State var invitation: String = ""
    @StateObject var credentialHandler = CredentialHandler.shared

    var body: some View {
        ZStack {
            NavigationView {
                VStack {
                    List {
                        Button(action: {
                            credentialHandler.menu = .qrcode
                        }) {
                            Text("Connect")
                        }

                        Button(action: {
                            credentialHandler.menu = .list
                        }) {
                            Text("Credentials")
                        }
                    }
                    .navigationTitle("Wallet App")
                    .listStyle(.plain)

                    Spacer()

                    HStack {
                        TextField("invitation url", text: $invitation)
                            .textFieldStyle(.roundedBorder)

                        Button("Clear", action: {
                            invitation = ""
                        })
                        .buttonStyle(.bordered)
                        Button("Connect", action: {
                            QRCodeHandler().receiveInvitation(url: invitation)
                        })
                        .buttonStyle(.bordered)
                    }
                    .padding()
                }
            }
            .sheet(item: $credentialHandler.menu) { item in
                switch item {
                case .qrcode:
                    QRScanView(handler: QRCodeHandler())
                case .list:
                    CredentialListView()
                case .loading:
                    Text("Processing ...")
                }
            }
            .alert(item: $credentialHandler.actionType) { item in
                switch item {
                case .credOffer:
                    return Alert(title: Text("Credential"), message: Text(credentialHandler.confirmMessage), primaryButton: .default(Text("OK"), action: {
                        credentialHandler.getCredential()
                    }), secondaryButton: .cancel())
                case .proofRequest:
                    return Alert(title: Text("Proof"), message: Text(credentialHandler.confirmMessage), primaryButton: .default(Text("OK"), action: {
                        credentialHandler.sendProof()
                    }), secondaryButton: .cancel())
                }
            }
            .alert(credentialHandler.alertMessage, isPresented: $credentialHandler.showAlert) {}
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        WalletMainView()
    }
}

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions