Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 9 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

//
//  GridTopicView.swift
//  twogetskills
//
//  Created by Efrain Yanez Recanatini on 1/26/22.
//

import SwiftUI

struct GridTopicView: View {
    @EnvironmentObject private var appNavigation : AppNavigation
    @ObservedObject private var viewModel : TopicGridViewModel = TopicGridViewModel()
    @State private var scrollToIndex : Int = 0
    
    
    private let appData = AppData.sharedInstance
    private let config = [
        GridItem(.flexible()),
        GridItem(.flexible())
    ]



    var body: some View {
        VStack(spacing: 0) {
            HStack {
                Image("logo")
                .resizable()
                .frame(width: 32, height: 32, alignment: .center)
                .aspectRatio(contentMode: .fit)
                .foregroundColor(Color("color_app_bar_foreground"))
                .padding(.leading, 16)
             
                
                Text(Config.LANG_TAB_BAR_BUTTON_TOPICS)
                .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
                .foregroundColor(Color("color_app_bar_foreground"))
                .padding(.leading, 4)
                
                Spacer()
                
                Button(action: {}, label: {
                    Image(uiImage: UIImage(named: "ui_refresh") ?? UIImage())
                    .resizable()
                    .frame(width: 32, height: 32, alignment: .center)
                    .aspectRatio(contentMode: .fit)
                    .foregroundColor(Color("color_app_bar_foreground"))
                    .padding(.trailing, 16)
                })
                
            }
            .background(Color("color_app_bar_background"))
            .edgesIgnoringSafeArea(.top)
            .frame(height: 50)
            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.topics.count) { index in
                            CardTopicView(
                                topicUuid: self.viewModel.topics[index].uuid
                            )
                            .environmentObject(appNavigation)
                            .frame(
                                width: Constants.CARD_WIDTH,
                                height: Constants.CARD_HEIGHT,
                                alignment: .center
                            ).id(index)
                 
                        }.onChange(of:  scrollToIndex, perform: { value in
                            proxy.scrollTo(value, anchor: nil)
                        })
                   })
                }
            }
            .padding(.top, 5)
        }
        .onAppear {
            var i : Int = 0
            while i < self.viewModel.topics.count {
                if appData.topicUuidActive == self.viewModel.topics[i].uuid {
                    self.scrollToIndex = i
                }
                i += 1
                    
            }
        }
    }
}

struct GridTopicView_Previews: PreviewProvider {
    static var previews: some View {
        GridTopicView()
    }
}