Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 19 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

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

import SwiftUI

struct CardSlideView: View {
    
    private let userUuid : String
    private let positionInitial : Int
    private var viewModel = SlideCardViewModel()
    private var appData = Environment(\.appData).wrappedValue
    
    @EnvironmentObject private var appNavigation : AppNavigation

    
    init(slideUuid : String, position : Int)
    {
        positionInitial = position
        userUuid = appData.userUuid
        
        viewModel.fetch(slideUuid: slideUuid, userUuid: userUuid)
        
        
        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 {
 
        Button(action: {
            appData.topicUuidActive = self.viewModel.slide.topicUuid
            appData.capsuleUuidActive = self.viewModel.slide.capsuleUuid
            appData.slideUuidActive = self.viewModel.slide.uuid
            appData.save()
              
            appNavigation.subpageActive = .gallery

        }) {

                
            ZStack {
                if self.viewModel.slide.completed == 1 {
                    Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage())
                        /*
                        .alignmentGuide(.top, computeValue: { dimension in
                                           10
                    })*/
                    .offset(x: (Constants.CARD_WIDTH - 40) / 2, y: (-1 * ((Constants.CARD_HEIGHT - 50) / 2)))
                    .zIndex(10000)
                    .scaleEffect(0.8)
                }
                                    
                VStack {
                    Text( self.viewModel.slide.name)
                    .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_CARD_VIEW_TITLE))
                    .foregroundColor(Color("color_textview_foreground"))
                    .padding(.horizontal, 5)
                    .padding(.top, 5)
                    .multilineTextAlignment(/*@START_MENU_TOKEN@*/.leading/*@END_MENU_TOKEN@*/)
                             
                    Spacer()
                    
                    HStack {
                                
                        if viewModel.slide.background.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && viewModel.slide.file.trimmingCharacters(in: .whitespacesAndNewlines).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.trimmingCharacters(in: .whitespacesAndNewlines) :
                                        self.viewModel.slide.background.trimmingCharacters(in: .whitespacesAndNewlines))!,
                                placeholder: { Text(Config.LANG_COMMON_LOADING).font(.footnote).foregroundColor(.black)},
                                image: {
                                    Image(uiImage: $0).resizable()
                                }
                            )
                        }
                    }.padding(.horizontal, 5)
                    //.zIndex(500)
                                                
                    Spacer()
                    Group() {
                        HStack {
                            Spacer()
                        }
                    }
                    .background(Color("color_window_background"))
                                                        
                }
                .background(Color("color_card_view_background"))
                .cornerRadius(16)
                .overlay(
                    RoundedRectangle(cornerRadius: 16)
                        .stroke(Color("color_card_view_border"), lineWidth: 1)
                )
                .padding(.horizontal, 5)
            }
            .onAppear {
                self.viewModel.fetchProgress(slideUuid: self.viewModel.slide.uuid, userUuid: self.userUuid)
            }.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 {
                            self.viewModel.fetchProgress(slideUuid: notificationSlideUuid, userUuid: appData.userUuid)
                        }
                    }
                }
            }
           
           
        } .padding(.top, 5)
    }

}

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

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