Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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

//
//  GridGalleryView.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 3/7/22.
//

import Foundation

import SwiftUI


class GridGalleryTabController: ObservableObject {
    @Published var activeTab : Int = 0

    func open( tab: Int) {
        activeTab = tab
    }
}

struct GridGalleryView: View {

    @EnvironmentObject private var networkMonitor : NetworkMonitor
    @EnvironmentObject private var appNavigation : AppNavigation
    
    @State private var selectedTab : Int = 0


    private var appData = AppData.sharedInstance
    private var capsuleTitle : String = ""
    private var viewModel : GalleryGridViewModel = GalleryGridViewModel()
    
    
  
    
    init()
    {
        self.viewModel.fetch(capsuleUuid: appData.capsuleUuidActive, userUuid: appData.userUuid)
        
        let capsuleDao = CapsuleDao.sharedInstance
        let capsule = capsuleDao.selectByUuid(uuid: appData.capsuleUuidActive)
       
        if capsule.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
            capsuleTitle = String(Array(capsule.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
        } else {
            capsuleTitle = capsule.name
        }
    }

    

    var body: some View {
        GeometryReader { geometry in
        ZStack {
            
            if self.selectedTab > 0 {
                Button(action: {
                    appData.slideUuidActive = self.viewModel.slides[self.selectedTab - 1].uuid
                    appData.save()
                    
                    self.selectedTab = self.selectedTab - 1
                }, label: {
                    Image(systemName: "arrow.left")
                })
                
                .frame(width: 40.0, height: 40.0, alignment: .center)
                     .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
                .background(Color("color_button_gallery_background"))
                .foregroundColor(Color("color_button_gallery_foreground"))
                    .offset(x: -1 * ((geometry.size.width / 2) - 30), y :  25).zIndex(10000)
            }
            
            if self.selectedTab < (self.viewModel.slides.count - 1) {
                Button(action: {
                    appData.slideUuidActive = self.viewModel.slides[self.selectedTab + 1].uuid
                    appData.save()
                    
                    self.selectedTab = self.selectedTab + 1
                }, label: {
                    Image(systemName: "arrow.right")
                })
                .frame(width: 40.0, height: 40.0, alignment: .center)
                .background(Color("color_button_gallery_background"))
                .foregroundColor(Color("color_button_gallery_foreground"))
                .offset(x: ((geometry.size.width  / 2) - 30), y :  25).zIndex(10000)
            }
            
            VStack(spacing: 0) {
                HStack {
                    Button(action: {
                        
                       
                        appNavigation.subpageActive = .slides
                        
                        
                    }, label: {

                        
                        Image(systemName: "chevron.backward")
                        .frame(width: 32, height: 32, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
                        .aspectRatio(contentMode: .fit)
                            .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
                    })
                    .padding(.leading, 16)
                    
                    Text(networkMonitor.status == .disconnected ? Config.LANG_ERROR_NETWORK_MESSAGE_SHORT :  capsuleTitle)
                    .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
                        .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
                        .padding(.leading, 4)
                    
                    Spacer()
                }
                .edgesIgnoringSafeArea(.top)
                .frame(height: 50)
                .background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
        
        
                Divider().background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
                
                
                TabView(selection: self.$selectedTab) {
                    ForEach(0..<self.viewModel.slides.count) { index in
                        CardGalleryView(
                            slideUuid:  self.viewModel.slides[index].uuid
                        )
                        .environmentObject(appNavigation)
                        .tag(index)
                        .transition(.slide)
                            
                    }
                }
                .tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
                //.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))

                .onChange(of: self.selectedTab) { selectedTab in
                    appData.slideUuidActive = self.viewModel.slides[selectedTab].uuid
                    appData.save()
                    
                    completeSlide(position: self.selectedTab)
                }.onAppear {
 
                    var position : Int = 0
                    var i : Int = 0
                    while i < self.viewModel.slides.count {
                        if appData.slideUuidActive == self.viewModel.slides[i].uuid {
                            position = i
                        }
                        i += 1
                    }
                    
                    self.selectedTab =  position
                    completeSlide(position: self.selectedTab)
                }
       
            }

            }
        }
    }
    
    private func completeSlide(position: Int)
    {

        if self.viewModel.slides[position].type == Constants.SLIDE_TYPE_IMAGE {
            
            let dataService = DataService()
            dataService.completeSlide(slide: self.viewModel.slides[position])
        }
    }
    
    

 

}





struct GridGalleryView_Previews: PreviewProvider {
    static var previews: some View {
        //GridGalleryView(capsuleUuid: "C123", position: 2)
        
        GridGalleryView()
    }
}