Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 19 | Rev 25 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

//
//  MainView.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 2/17/22.
//

import SwiftUI
import TTGSnackbar

struct MainView: View {
    
   
    
    @StateObject private var appNavigation = AppNavigation()
    @StateObject private var networkMonitor = NetworkMonitor()
    @State private var showToast : Bool = true
    
    private var appData = AppData.sharedInstance
    private var localNotification = LocalNotificationManager()

    var body: some View {
        ZStack {
            Color("color_window_background").ignoresSafeArea(.all)
            
           VStack(spacing: 0) {
                switch appNavigation.pageActive
                {
                    case AppMainPage.intro1 :
                        IntroStep1View()
                        .environmentObject(appNavigation)
                        .environmentObject(networkMonitor)
                        .transition(.scale)
                      
                case AppMainPage.intro2 :
                        IntroStep2View()
                        .environmentObject(appNavigation)
                        .environmentObject(networkMonitor)
                        .transition(.scale)
                     
                case AppMainPage.intro3 :
                        IntroStep3View()
                        .environmentObject(appNavigation)
                        .environmentObject(networkMonitor)
                        .transition(.scale)
                        
                case  AppMainPage.signin :
                        SigninView()
                        .environmentObject(appNavigation)
                        .environmentObject(networkMonitor)
                        .transition(.scale)
                       
                case AppMainPage.splash :
                    SplashScreenView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)
                    
                case AppMainPage.goodbye :
                    GoodByeView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)

                case AppMainPage.videoplayer :
                    VideoPlayerView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)
                    
                case AppMainPage.pdfviewer :
                    PdfViewerView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)
                    
                case AppMainPage.webviewer :
                    WebViewerView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)
                    
                case AppMainPage.download :
                    DownloadFileView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)
                    
                default :
                    HomeView()
                    .environmentObject(appNavigation)
                    .environmentObject(networkMonitor)
                    .transition(.scale)
                        
                }

                    //Spacer()
                    /*
                    if(self.networkMonitor.status == .disconnected) {
                        Text("The popup")
                        .frame(width: UIScreen.main.bounds.width, height: 60)
                        .background(Color("color_error_background"))
                        .foregroundColor(Color("color_error_foreground"))
                        .font(.callout)
                    }*/
            }
        }
        .onAppear {
            if appData.refreshContentPending {
                let snackbar = TTGSnackbar(message:  appData.refreshContentMessage, duration: .long)
                snackbar.show()
                
                appData.refreshContentMessage = ""
                appData.refreshContentPending = false
                appData.save()
            }
        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_REFRESH_CONTENT))
        { data in
            if data.userInfo != nil {
                let newCapsules = Int(data.userInfo?["new_capsules"]! as? String ?? "0") ?? 0
                let isForeground = (Int(data.userInfo?["is_foreground"]! as? String ?? "0") ?? 0) == 1
                
                if newCapsules > 0 {
                
                    let message = newCapsules == 1 ? Config.LANG_MESSAGE_NEW_CONTENT_THERE_IS_ONE_CAPSULE : Config.LANG_MESSAGE_NEW_CONTENT_THERE_ARE_MULTIPLE_CAPSULES.replacingOccurrences(of: "%s", with: String(newCapsules))
                    
                    if isForeground {
                        let snackbar = TTGSnackbar(message:  message, duration: .long)
                        snackbar.show()
                    }  else {
                        appData.refreshContentMessage = message
                        appData.refreshContentPending = true
                        appData.save()
                    }
                }
            }

        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMMAND_EXIT))
       { data in
            
           appData.userUuid = ""
           appData.userFirstname = ""
           appData.userLastname = ""
           appData.userEmail = ""
           appData.userImage = ""
           appData.save()
           
           appNavigation.pageActive = .goodbye

       }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_PUSH))
        { data in
            
            let title = data.userInfo?["title"]! as? String ?? ""
            let body = data.userInfo?["body"]! as? String ?? ""
            let url = data.userInfo?["url"]! as? String ?? ""
            
            if !title.isEmpty && !body.isEmpty {
                let now = Date()
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
                
                let timeFormatter = DateFormatter()
                timeFormatter.dateFormat = Constants.FORMAT_TIME_12
                
                let dateOn = dateFormatter.string(from: now)
                let timeOn = dateFormatter.string(from: now)
                
                let userNotificationDao = UserNotificationDao.sharedInstance
                var userNotification : UserNotificationModel  = UserNotificationModel(userUuid: appData.userUuid, title: title, body: body, viewed: 0, url: url, dateOn: dateOn, timeOn: timeOn)
                
                

                userNotificationDao.insert(userNotification: userNotification)
                

            }
        }
        
        
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        MainView()
    }
}