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 |

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

import SwiftUI

struct CardCapsuleView: View {
    
    @EnvironmentObject private var appNavigation : AppNavigation
    @ObservedObject private var viewModel = CapsuleCardViewModel()
    
    
    private let userUuid : String;
    private var capsuleTitle : String = ""
    private var appData = AppData.sharedInstance
    
    
    init(capsuleUuid : String)
    {
        userUuid = appData.userUuid
        viewModel.fetch(capsuleUuid: capsuleUuid, userUuid: appData.userUuid)

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


    }
    
    var body: some View {

        Button(action: {
            appData.topicUuidActive = self.viewModel.capsule.topicUuid
            appData.capsuleUuidActive = self.viewModel.capsule.uuid
            appData.slideUuidActive = ""
            appData.save()

            appNavigation.subpageActive = .slides

        }) {
            VStack {
                Text(self.capsuleTitle)
                .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@*/)
    
                HStack {
                    if self.viewModel.capsule.image.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
                        Image(uiImage: UIImage(named: "logo") ?? UIImage())
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                    } else {
                        CustomAsyncImage(
                            url: URL(string: self.viewModel.capsule.image.trimmingCharacters(in: .whitespacesAndNewlines))!,
                            placeholder: { Text(Config.LANG_COMMON_LOADING).font(.footnote).foregroundColor(.black)},
                            image: {
                                Image(uiImage: $0).resizable()
                            }
                        )
                    }
                }.padding(.horizontal, 5)
                
   
                Spacer()
             
                Group() {
                    HStack {
                        ProgressBar(
                            value: self.viewModel.capsule.progress,
                            maxValue: 100,
                            backgroundColor: Color("color_card_view_progress_background"),
                            foregroundColor: Color("color_card_view_progress_foreground")
                            
                        )
                        .frame(height: 6)
                        .padding(10)
                        
                        Text( String(format: "%.1f", self.viewModel.capsule.progress) + "%")
                            .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_CARD_VIEW_FOOTER ))
                            .foregroundColor(Color("color_textview_foreground"))
                            .padding(5)
                    }
                }
                .background(Color("color_card_view_background_footer"))
                        
            }
            .background(Color("color_card_view_background"))
            .cornerRadius(16)
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(Color("color_card_view_border"), lineWidth:1)
            )
            .padding(.horizontal, 5)
        }.onAppear {
            viewModel.fetchProgress(capsuleUuid: self.viewModel.capsule.uuid, userUuid: self.userUuid)
        }
        .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_CAPSULE))
        { data in
            if data.userInfo != nil {
                if let capsuleUuid = data.userInfo?["capsuleUuid"]! as? String {
                    if !capsuleUuid.isEmpty && capsuleUuid == self.viewModel.capsule.uuid {
                      
                        self.viewModel.fetchProgress(capsuleUuid: capsuleUuid, userUuid: appData.userUuid)
                        
                    }
                }
            }
        }
        .padding(.top, 5)
    }
    

    
 

}

struct CardCapsuleView_Previews: PreviewProvider {
    static var previews: some View {
       CardCapsuleView(capsuleUuid: "C123")
    }
}