Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  GridCapsuleView.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/17/22.
6
//
7
 
8
import SwiftUI
9
 
10
struct GridCapsuleView: View
11
{
12
    @EnvironmentObject private var networkMonitor : NetworkMonitor
13
    @EnvironmentObject private var appNavigation : AppNavigation
14
 
15
    @State private var scrollToIndex : Int = 0
16
    @ObservedObject private var viewModel : CapsuleGridViewModel = CapsuleGridViewModel()
17
 
18
    private let itemPerRow: CGFloat = 2
19
    private let config = [
20
        GridItem(.flexible()),
21
        GridItem(.flexible())
22
    ]
23
 
24
    private var appData = AppData.sharedInstance
25
    private var topicTitle : String = ""
26
    private let capsuleUuidActive  : String
27
 
28
 
29
    init(preview : Bool = false)
30
    {
31
        self.capsuleUuidActive  = appData.capsuleUuidActive
32
 
17 efrain 33
        let topicDao = TopicDao()
1 efrain 34
        let topicModel = topicDao.selectByUuid(uuid: appData.topicUuidActive)
35
 
36
        viewModel.fetch(topicUuid: appData.topicUuidActive, userUuid: appData.userUuid)
37
 
38
 
39
        if topicModel.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
40
            topicTitle = String(Array(topicModel.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
41
        } else {
42
            topicTitle = topicModel.name
43
        }
44
    }
45
 
46
    var body: some View {
47
        VStack(spacing: 0) {
48
            HStack {
49
                Button(action: {
50
                    appData.capsuleUuidActive = ""
51
                    appData.slideUuidActive = ""
52
                    appData.save()
53
 
54
                    withAnimation {
55
                        appNavigation.subpageActive = .topics
56
                    }
57
 
58
                }, label: {
59
 
60
 
61
                    Image(systemName: "chevron.backward")
62
                    .frame(width: 32, height: 32, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
63
                    .aspectRatio(contentMode: .fit)
64
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
65
                })
66
                .padding(.leading, 16)
67
 
68
                Text(networkMonitor.status == .disconnected ? Config.LANG_ERROR_NETWORK_MESSAGE_SHORT : topicTitle)
69
                .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
70
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
71
                    .padding(.leading, 4)
72
 
73
                Spacer()
74
            }
75
            .edgesIgnoringSafeArea(.top)
76
            .frame(height: 50)
77
            .background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
78
 
79
 
80
            Divider().background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
81
 
82
            ScrollView() {
83
                ScrollViewReader { proxy in
84
                    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:
85
                    {
86
 
87
 
88
                        ForEach(0..<self.viewModel.capsules.count) { index in
89
 
90
 
91
 
92
 
93
                            CardCapsuleView(
94
                                capsuleUuid: self.viewModel.capsules[index].uuid
95
                            )
96
                            .environmentObject(appNavigation)
97
                            .frame(
98
                                width: Constants.CARD_WIDTH,
99
                                height: Constants.CARD_HEIGHT,
100
                                alignment: .center
101
                            ).id(index)
102
 
103
                        }
104
 
105
                        .onChange(of:  scrollToIndex, perform: { value in
106
                            proxy.scrollTo(value, anchor: nil)
107
                        })
108
                    })
109
                }
110
            }
111
            .padding(.top, 5)
112
 
113
        }
114
 
115
        .onAppear {
116
            var i : Int = 0
117
            while i < self.viewModel.capsules.count {
118
                if self.capsuleUuidActive == self.viewModel.capsules[i].uuid {
119
                    self.scrollToIndex = i
120
                }
121
                i += 1
122
            }
123
        }
124
 
125
 
126
 
127
 
128
    }
129
}
130
 
131
 
132
struct GridCapsuleView_Previews: PreviewProvider {
133
    static var previews: some View {
134
        GridCapsuleView( preview: true)
135
    }
136
}
137
 
138