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")
}
}