Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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

//
//  CardTopicView.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 1/26/22.
//

import SwiftUI

struct CardTopicView: View
{
    @EnvironmentObject private var appNavigation : AppNavigation
    @ObservedObject private var viewModel = TopicCardViewModel()
    
    
    
    private var topicName : String = ""
    private var preview : Bool = false
    private var appData = Environment(\.appData).wrappedValue

    private let userUuid : String

    
    init(topicUuid : String)
    {
      
        userUuid = appData.userUuid
        
        self.viewModel.fetch(topicUuid: topicUuid, userUuid: userUuid)
        if viewModel.topic.name.count > Constants.CAPSULE_TITLE_MAX_LENGTH {
            topicName = String(Array(viewModel.topic.name)[0...Constants.CAPSULE_TITLE_MAX_LENGTH]) + "..."
        } else {
            topicName = viewModel.topic.name
        }
    }
    
    var body: some View {

        Button(action: {
            
            
            appData.topicUuidActive = self.viewModel.topic.uuid
            appData.capsuleUuidActive = ""
            appData.slideUuidActive = ""
            appData.save()
            
     
            appNavigation.subPageSource = .topics
            appNavigation.subpageActive = .capsules
     
            
        }) {

            VStack(spacing: 0) {
 
                Text(self.topicName)
                .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 self.viewModel.topic.image.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
                        Image(uiImage: UIImage(named: "logo") ?? UIImage())
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                    } else {
                        CustomAsyncImage(
                            url: URL(string: self.viewModel.topic.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.topic.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.topic.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 {
            self.viewModel.fetchProgress(topicUuid: self.viewModel.topic.uuid, userUuid: self.userUuid)
            
        }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_TOPIC))
        { data in
            if data.userInfo != nil {
                if let topicUuid = data.userInfo?["topicUuid"]! as? String {
                    if !topicUuid.isEmpty && topicUuid == self.viewModel.topic.uuid {
                        self.viewModel.fetchProgress(topicUuid: topicUuid, userUuid: appData.userUuid)
                        
                    }
                }
            }
        }

        .padding(.top, 5)
    }
}



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

        CardTopicView(topicUuid: "T123")
    }
}