Rev 17 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
//
// GridSlideView.swift
// twogetskills
//
// Created by Efrain Yanez Recanatini on 2/17/22.
//
import SwiftUI
struct GridSlideView: View {
@EnvironmentObject private var networkMonitor : NetworkMonitor
@EnvironmentObject private var appNavigation : AppNavigation
@ObservedObject private var viewModel : SlideGridViewModel = SlideGridViewModel()
@State private var scrollToIndex : Int = 0
private var appData = Environment(\.appData).wrappedValue
private let capsuleDao : CapsuleDao = CapsuleDao()
private var capsuleModel : CapsuleModel = CapsuleModel()
private var capsuleTitle : String = ""
private let config = [
GridItem(.fixed(Constants.CARD_WIDTH)),
GridItem(.fixed(Constants.CARD_WIDTH))
]
init()
{
self.capsuleModel = capsuleDao.selectByUuid(uuid: appData.capsuleUuidActive)
viewModel.fetch(capsuleUuid: self.capsuleModel.uuid, userUuid: appData.userUuid)
if self.capsuleModel.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
capsuleTitle = String(Array(self.capsuleModel.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
} else {
capsuleTitle = self.capsuleModel.name
}
}
var body: some View {
VStack(spacing: 0) {
HStack {
Button(action: {
if appNavigation.subPageSource == .mycapsules {
//appData.topicUuidActive = ""
//appData.capsuleUuidActive = ""
appData.slideUuidActive = ""
appData.save()
withAnimation {
appNavigation.subpageActive = .mycapsules
}
} else {
appData.slideUuidActive = ""
appData.save()
withAnimation {
appNavigation.subpageActive = .capsules
}
}
}, label: {
Image(systemName: "chevron.backward")
.frame(width: 32, height: 32, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
.aspectRatio(contentMode: .fit)
.foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
})
.padding(.leading, 16)
Text(networkMonitor.status == .disconnected ? Config.LANG_ERROR_NETWORK_MESSAGE_SHORT : capsuleTitle)
.font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
.foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
.padding(.leading, 4)
Spacer()
}
.edgesIgnoringSafeArea(.top)
.frame(height: 50)
.background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
Divider().background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
Divider()
ScrollView() {
ScrollViewReader { proxy in
LazyVGrid(columns: config, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: /*@START_MENU_TOKEN@*/nil/*@END_MENU_TOKEN@*/, pinnedViews: /*@START_MENU_TOKEN@*/[]/*@END_MENU_TOKEN@*/, content: {
ForEach(0..<self.viewModel.slides.count) { index in
CardSlideView(
slideUuid: self.viewModel.slides[index].uuid,
position: index
)
.environmentObject(appNavigation)
.frame(
width: Constants.CARD_WIDTH,
height: Constants.CARD_HEIGHT,
alignment: .center
)
.id(index)
}
/*}.onChange(of: scrollToIndex, perform: { value in
//print("onChange")
proxy.scrollTo(value, anchor: nil)
})*/
})
}
}
.onAppear {
var i : Int = 0
while i < self.viewModel.slides.count {
if appData.slideUuidActive == self.viewModel.slides[i].uuid {
self.scrollToIndex = i
}
i += 1
}
}
.padding(.top, 5)
}
}
}
struct GridSlideView_Previews: PreviewProvider {
static var previews: some View {
//GridSlideView(capsuleUuid: "C123")
GridSlideView()
}
}