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