Proyectos de Subversion Iphone Microlearning

Rev

Autoría | Ultima modificación | Ver Log |

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

import SwiftUI

struct CardSlideView: View {
    
    
    
    
    private let colorCardViewBackground = UIColor(hex: Config.COLOR_WINDOW_BACKGROUND)
    private let colorWindowBackground = UIColor(hex: Config.COLOR_WINDOW_BACKGROUND)
    private let colorCardViewBorder = UIColor(hex: Config.COLOR_CARD_VIEW_BORDER)
    private let colorBackgroundTopicFooter = UIColor(hex: Config.COLOR_BACKGROUND_TOPIC_FOOTER)
    private let colorForegroundTopicProgressBar = UIColor(hex: Config.COLOR_FOREGROUND_TOPIC_PROGRESS_BAR)
    
    private let colorTitle = UIColor(hex: Config.COLOR_TEXT_VIEW_TITLE);
    
    private var position : Int
    private var viewModel = SlideCardViewModel()
    
    @State private var goToGallery : Bool = false
    
    init(slideUuid : String, position : Int)
    {
        
        print("CardSlideView slideUuid : \(slideUuid)")
        
        let preference = Preference.sharedInstance
        self.viewModel.fetch(slideUuid: slideUuid, userUuid: preference.userUuid)
        

        self.position = position
        
        if self.viewModel.slide.name.count > Constants.CAPSULE_TITLE_MAX_LENGTH {
            self.viewModel.slide.name = String(Array(self.viewModel.slide.name)[0...Constants.CAPSULE_TITLE_MAX_LENGTH]) + "..."
        }
        

    }
    
    

    var body: some View {
        GeometryReader { geometry in
            //let cardProportional = 1.1 * (geometry.size.height / (geometry.size.width - 20))
            //let cardWidht = (geometry.size.width - 20) / 2
            //let cardHeigh = cardWidht * cardProportional
            
            
            let checkMarkX = (geometry.size.width - 40) / 2
            let checkMarkY = -1 * ((geometry.size.height - 50) / 2)
            
            Button(action: {
                let preference = Preference.sharedInstance
                preference.topicUuidActive = self.viewModel.slide.topicUuid
                preference.capsuleUuidActive = self.viewModel.slide.capsuleUuid
                preference.slideUuidActive = self.viewModel.slide.uuid
                preference.save()
                
                self.goToGallery = true
            }) {
                NavigationLink("", destination: GridGalleryView(capsuleUuid: self.viewModel.slide.capsuleUuid, position: position), isActive: self.$goToGallery).frame( height: 0)
                
                
                ZStack {
                    if self.viewModel.slide.completed == 1 {
                        Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage()).alignmentGuide(.top, computeValue: { dimension in
                                           10
                    }).offset(x: checkMarkX, y: checkMarkY)
                        .zIndex(10000)
                        .scaleEffect(0.8)
                    }
                                    
                        VStack {
                            Text( self.viewModel.slide.name)
                            .fontWeight(/*@START_MENU_TOKEN@*/.bold/*@END_MENU_TOKEN@*/)
                            .font(.system(size: 11.0))
                            .foregroundColor(Color(colorTitle ?? .red))
                            .padding(.horizontal, 5)
                            .padding(.top, 5)
                             
                            Spacer()
                            HStack {
                                
                                if viewModel.slide.background.isEmpty && viewModel.slide.file.isEmpty {
                                    
                                    
                                    Image(uiImage: UIImage(named: "logo") ?? UIImage())
                                        .resizable()
                                        .aspectRatio(contentMode: .fit)
                                       
                                    
                                } else {
                                
                                    CustomAsyncImage(
                                        url: URL(string:
                                                    self.viewModel.slide.type == Constants.SLIDE_TYPE_IMAGE ?  self.viewModel.slide.file :  self.viewModel.slide.background)!,
                                        placeholder: { Text("Cargando...").font(.footnote).foregroundColor(.black)},
                                        image: {
                                            Image(uiImage: $0).resizable()
                                        }
                                     )
                                }
                            }.padding(.horizontal, 5)
                            .zIndex(500)
                                                
                            Spacer()
                              
                            Group() {
                                HStack {
                                    Spacer()
                                }
                            }
                            .background(Color(colorBackgroundTopicFooter ?? .red))
                                                        
                        }.background(Color(colorCardViewBackground ?? .red))
                        .cornerRadius(16)
                        .overlay(
                            RoundedRectangle(cornerRadius: 16)
                            .stroke(Color(colorCardViewBorder ?? .red), lineWidth: 1)
                        )
                        .padding(.horizontal, 5)
                    } .onAppear {
                         print("CardSlideView")
                    } .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMPLETED_SLIDE))
                    { data in
                        if data.userInfo != nil {
                            if let notificationSlideUuid = data.userInfo?["slideUuid"]! as? String {
                                if !notificationSlideUuid.isEmpty && notificationSlideUuid == self.viewModel.slide.uuid {
                                    
                                    let preference = Preference.sharedInstance
                                    
                                    self.viewModel.fetch(slideUuid: notificationSlideUuid, userUuid: preference.userUuid)
                                    
                                }
                            }
                        }
                    }
                    .padding(.top, 5)

            }

        }
    }

}

struct CardSlideView_Previews: PreviewProvider {
    static var previews: some View {

        
        CardSlideView(slideUuid: "S123", position : 0)
    }
}