Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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

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

import SwiftUI


struct GridSlideView: View {

    @EnvironmentObject private var networkMonitor : NetworkMonitor
    @EnvironmentObject private var appNavigation : AppNavigation
    @ObservedObject  private var viewModel : SlideGridViewModel = SlideGridViewModel()
    
    @State private var scrollToIndex : Int = 0
    
    private var appData = AppData.sharedInstance
    private let capsuleDao : CapsuleDao = CapsuleDao()
    private var capsuleModel : CapsuleModel = CapsuleModel()
   
   
    private var capsuleTitle : String = ""
    
    private let config = [
        GridItem(.fixed(Constants.CARD_WIDTH)),
        GridItem(.fixed(Constants.CARD_WIDTH))
    ]


    init()
    {
        self.capsuleModel = capsuleDao.selectByUuid(uuid: appData.capsuleUuidActive)
        viewModel.fetch(capsuleUuid: self.capsuleModel.uuid, userUuid: appData.userUuid)
       
        if self.capsuleModel.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
            capsuleTitle = String(Array(self.capsuleModel.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
        } else {
            capsuleTitle = self.capsuleModel.name
        }
    }
    
    var body: some View {

            VStack(spacing: 0) {
                HStack {
                    Button(action: {
       
                      
                        if appNavigation.subPageSource == .mycapsules {
                            //appData.topicUuidActive = ""
                            //appData.capsuleUuidActive = ""
                            appData.slideUuidActive = ""
                            appData.save()
                            
                            withAnimation {
                                appNavigation.subpageActive = .mycapsules
                            }
                        } else {
                            appData.slideUuidActive = ""
                            appData.save()
                            
                            withAnimation {
                                appNavigation.subpageActive = .capsules
                            }
                        }
                        
                        
                    }, 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"))
        
                
                Divider()
               
                ScrollView() {
                    ScrollViewReader { proxy in
                        LazyVGrid(columns: config, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: /*@START_MENU_TOKEN@*/nil/*@END_MENU_TOKEN@*/, pinnedViews: /*@START_MENU_TOKEN@*/[]/*@END_MENU_TOKEN@*/, content: {
           
                            ForEach(0..<self.viewModel.slides.count) { index in
                                CardSlideView(
                                    slideUuid: self.viewModel.slides[index].uuid,
                                    position: index
                                )
                                .environmentObject(appNavigation)
                                .frame(
                                    width: Constants.CARD_WIDTH,
                                    height: Constants.CARD_HEIGHT,
                                    alignment: .center
                                )
                                .id(index)
                               
                            }
                            /*}.onChange(of:  scrollToIndex, perform: { value in
                                //print("onChange")
                                proxy.scrollTo(value, anchor: nil)
                            })*/
                        })
                    }
        
                }
                .onAppear {
                    var i : Int = 0
                    while i < self.viewModel.slides.count {
                        if appData.slideUuidActive == self.viewModel.slides[i].uuid {
                            self.scrollToIndex = i
                        }
                        i += 1
                    }
                }
                .padding(.top, 5)
                

       
       
        }
    }
}

struct GridSlideView_Previews: PreviewProvider {
    static var previews: some View {
        //GridSlideView(capsuleUuid: "C123")
        GridSlideView()
    }
}