taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

Sheet.swift (2431B)


      1 /*
      2  * This file is part of GNU Taler, ©2022-25 Taler Systems S.A.
      3  * See LICENSE.md
      4  */
      5 /**
      6  * @author Marc Stibane
      7  */
      8 import SwiftUI
      9 import SymLog
     10 import os.log
     11 
     12 struct Sheet: View {
     13     private let symLog = SymLogV(0)
     14     let stack: CallStack
     15     var sheetView: AnyView
     16 
     17     @Environment(\.dismiss) var dismiss     // call dismiss() to get rid of the sheet
     18     @EnvironmentObject private var debugViewC: DebugViewC
     19     @EnvironmentObject private var model: WalletModel
     20     @AppStorage("talerFontIndex") var talerFontIndex: Int = 0
     21 #if DEBUG
     22     @AppStorage("developerMode") var developerMode: Bool = true
     23 #else
     24     @AppStorage("developerMode") var developerMode: Bool = false
     25 #endif
     26 
     27     let logger = Logger(subsystem: "net.taler.gnu", category: "Sheet")
     28 
     29     var cancelButton: some View {
     30         Button("Cancel") {
     31             logger.log("Cancel")
     32             dismissTop(stack.push())
     33         }
     34     }
     35 
     36     var body: some View {
     37         let idString = debugViewC.sheetID > 0 ? String(debugViewC.sheetID)
     38                                               : EMPTYSTRING      // show nothing if 0
     39         ZStack {
     40             NavigationView {
     41                 sheetView
     42                     .navigationBarTitleDisplayMode(.automatic)
     43                     .background(WalletColors().backgroundColor.edgesIgnoringSafeArea(.all))
     44             }
     45             .navigationViewStyle(.stack)
     46             .talerNavBar(talerFontIndex: talerFontIndex)
     47             .overlay(alignment: .top) {
     48                 // Show the viewID on top of the sheet's NavigationView
     49                 Text(idString)
     50                     .foregroundColor(.purple)
     51                     .font(.system(size: 11))        // no talerFont
     52                     .monospacedDigit()
     53                     .edgesIgnoringSafeArea(.top)
     54                     .id("sheetID")
     55                     .accessibilityLabel(Text("Sheet.ID.", comment: "a11y"))
     56                     .accessibilityValue(idString)
     57             }
     58             if let error2 = model.error2 {
     59                 ErrorView(data: error2, devMode: developerMode) {
     60                     model.setError(nil)
     61                     logger.log("ErrorSheet dismissTop")
     62                     dismissTop(stack.push())
     63                 }
     64                 .background(WalletColors().backgroundColor.edgesIgnoringSafeArea(.all))
     65             }
     66         }
     67         .onDisappear {
     68             symLog.log("❗️❗️Sheet onDisappear")
     69         }
     70     }
     71 }