Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
//// GridGalleryView.swift// twogetskills//// Created by Efrain Yanez Recanatini on 3/7/22.//import Foundationimport SwiftUIstruct GridGalleryView: View {let minDragTranslationForSwipe: CGFloat = 50@State var selectTab : Int = 0@State private var positionVisible: Int = 0@EnvironmentObject private var networkMonitor : NetworkMonitor@EnvironmentObject private var appNavigation : AppNavigation@ObservedObject private var viewModel : GalleryGridViewModel = GalleryGridViewModel()private var appData = AppData.sharedInstanceprivate var capsuleTitle : String = ""init(){self.viewModel.fetch(capsuleUuid: appData.capsuleUuidActive, userUuid: appData.userUuid)let capsuleDao = CapsuleDao.sharedInstancelet capsule = capsuleDao.selectByUuid(uuid: appData.capsuleUuidActive)if capsule.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {capsuleTitle = String(Array(capsule.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."} else {capsuleTitle = capsule.name}}@ViewBuildervar body: some View {GeometryReader { geometry inZStack {if self.viewModel.hasPrevious() {Button(action: {self.viewModel.previous()self.completeSlide(position: self.viewModel.slideActiveIndex)appData.slideUuidActive = self.viewModel.slides[self.viewModel.slideActiveIndex].uuidappData.save()self.positionVisible = self.viewModel.slideActiveIndex}, label: {Image(systemName: "arrow.left").frame(width: 40.0, height: 40.0, alignment: .center)}).cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/).background(Color("color_button_gallery_background")).foregroundColor(Color("color_button_gallery_foreground")).offset(x: -1 * ((geometry.size.width / 2) - 30), y : 25).zIndex(10000)}if self.viewModel.hasNext() {Button(action: {self.viewModel.next()self.completeSlide(position: self.viewModel.slideActiveIndex)appData.slideUuidActive = self.viewModel.slides[self.viewModel.slideActiveIndex].uuidappData.save()self.positionVisible = self.viewModel.slideActiveIndex}, label: {Image(systemName: "arrow.right").frame(width: 40.0, height: 40.0, alignment: .center)}).background(Color("color_button_gallery_background")).foregroundColor(Color("color_button_gallery_foreground")).offset(x: ((geometry.size.width / 2) - 30), y : 25).zIndex(10000)}VStack(spacing: 0) {HStack {Button(action: {appNavigation.subpageActive = .slides}, 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"))GeometryReader { geometry2 inTabView(selection: self.$selectTab ) {ForEach(0..<self.viewModel.slides.count ) { index inCardGalleryView(slideUuid: self.viewModel.slides[self.viewModel.slideActiveIndex].uuid).environmentObject(appNavigation).frame(width: geometry2.size.width, height: geometry2.size.height).highPriorityGesture(DragGesture().onEnded({ self.handleSwipe(translation: $0.translation.width)}))}}.onChange(of: self.positionVisible) { id inself.selectTab = positionVisible}.tabViewStyle(PageTabViewStyle())}.onAppear {var position : Int = 0var i : Int = 0while i < self.viewModel.slides.count {if appData.slideUuidActive == self.viewModel.slides[i].uuid {position = i}i += 1}self.viewModel.slideActiveIndex = positioncompleteSlide(position: position)}}}}}func handleSwipe(translation: CGFloat) {if translation > minDragTranslationForSwipe {if self.viewModel.hasPrevious() {self.viewModel.previous()self.completeSlide(position: self.viewModel.slideActiveIndex)appData.slideUuidActive = self.viewModel.slides[self.viewModel.slideActiveIndex].uuidappData.save()self.positionVisible = self.viewModel.slideActiveIndex}} else if translation < -minDragTranslationForSwipe {if self.viewModel.hasNext() {self.viewModel.next()self.completeSlide(position: self.viewModel.slideActiveIndex)appData.slideUuidActive = self.viewModel.slides[self.viewModel.slideActiveIndex].uuidappData.save()self.positionVisible = self.viewModel.slideActiveIndex}}}private func completeSlide(position: Int){if self.viewModel.slides[position].type == Constants.SLIDE_TYPE_IMAGE {let dataService = DataService()dataService.completeSlide(slide: self.viewModel.slides[position])}}}struct GridGalleryView_Previews: PreviewProvider {static var previews: some View {//GridGalleryView(capsuleUuid: "C123", position: 2)GridGalleryView()}}