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