Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 1 | Rev 9 | 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
//  MyCapsules.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 7/10/22.
6
//
7
 
8
import Foundation
9
 
10
import SwiftUI
11
 
12
 
13
 
14
struct MyCapsulesView: View {
15
 
8 efrain 16
    @EnvironmentObject private var networkMonitor : NetworkMonitor
17
 
1 efrain 18
    @EnvironmentObject private var appNavigation : AppNavigation
19
    @State private var selectedType: CapsulePickerType = .pending
20
    @State private var search : String = ""
21
    @State private var searching : Bool = false
22
 
23
    @State private var showInProgress : Bool = true
24
 
25
    @StateObject private var listingViewModel : MyCapsulesListingViewModel = MyCapsulesListingViewModel()
26
 
27
    @StateObject private var inprogressViewModel : MyCapsulesInProgressViewModel = MyCapsulesInProgressViewModel()
28
 
29
 
8 efrain 30
 
1 efrain 31
    private let firstName : String
32
    private let appData = AppData.sharedInstance
33
 
34
    init ()
35
    {
36
        let arrayFirstName = appData.firstName.split(separator: " ")
37
 
38
 
39
 
40
        firstName = String(arrayFirstName[0])
41
 
42
 
43
 
44
    }
45
 
46
 
47
    var body: some View {
48
 
49
        VStack(spacing: 0) {
50
            HStack {
8 efrain 51
 
52
 
1 efrain 53
                Image("logo")
54
                .resizable()
55
                .frame(width: 32, height: 32, alignment: .center)
56
                .aspectRatio(contentMode: .fit)
8 efrain 57
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
1 efrain 58
                .padding(.leading, 16)
59
 
60
 
8 efrain 61
                Text(networkMonitor.status == .disconnected ? Config.LANG_ERROR_NETWORK_MESSAGE_SHORT : Config.LANG_TAB_BAR_BUTTON_MY_CAPSULES)
1 efrain 62
                .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
8 efrain 63
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
1 efrain 64
                .padding(.leading, 4)
65
 
66
                Spacer()
67
 
68
            }
69
            .edgesIgnoringSafeArea(.top)
70
            .frame(height: 50)
8 efrain 71
            .background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
72
 
73
            Divider().background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
1 efrain 74
 
75
            MyCapsulesHeaderView(showInProgress: self.$showInProgress, firstName:  self.firstName)
76
 
77
            if self.showInProgress {
78
 
79
                MyCapsuleInProgressView(
80
                    capsuleUuid: self.inprogressViewModel.capsule.uuid
81
                ).frame(height: 170)
82
                    .transition(.scale)
83
                .environmentObject(appNavigation)
84
 
85
                Divider()
86
 
87
            }
88
 
89
            MyCapsulesPickerView (selectedType: self.$selectedType)
90
            .frame(height: 48)
91
 
92
            Divider()
93
 
94
            MyCapsulesFilterView(search: self.$search, searching: self.$searching)
95
            .frame(height: 64)
96
 
97
            Divider()
98
 
99
            Spacer()
100
 
101
            ScrollView {
102
                LazyVStack {
103
 
104
                    ForEach(0..<self.listingViewModel.capsules.count) { index in
105
 
106
                        if self.selectedType == .pending && self.listingViewModel.capsules[index].viewSlides == 0 {
107
 
108
                            if(self.search.isEmpty) {
109
                                MyCapsuleListItemView(capsuleUuid : self.listingViewModel.capsules[index].uuid)
110
 
111
                                .environmentObject(appNavigation)
112
                            } else {
113
                                if self.listingViewModel.capsules[index].name.contains(self.search) {
114
 
115
                                    MyCapsuleListItemView(capsuleUuid : self.listingViewModel.capsules[index].uuid)
116
 
117
                                    .environmentObject(appNavigation)
118
                                }
119
                            }
120
                        }
121
 
122
                        if self.selectedType == .inprogress && self.listingViewModel.capsules[index].viewSlides > 0
123
                            && self.listingViewModel.capsules[index].completed == 0 {
124
 
125
 
126
                            if(self.search.isEmpty) {
127
                                MyCapsuleListItemView(capsuleUuid : self.listingViewModel.capsules[index].uuid)
128
 
129
                                .environmentObject(appNavigation)
130
                            } else {
131
                                if self.listingViewModel.capsules[index].name.contains(self.search) {
132
 
133
                                    MyCapsuleListItemView(capsuleUuid : self.listingViewModel.capsules[index].uuid)
134
 
135
                                    .environmentObject(appNavigation)
136
                                }
137
                            }
138
                        }
139
 
140
                        if self.selectedType == .completed && self.listingViewModel.capsules[index].viewSlides > 0
141
                            && self.listingViewModel.capsules[index].completed == 1 {
142
 
143
                            if(self.search.isEmpty) {
144
                                MyCapsuleListItemView(capsuleUuid : self.listingViewModel.capsules[index].uuid)
145
 
146
                                .environmentObject(appNavigation)
147
                            } else {
148
                                if self.listingViewModel.capsules[index].name.contains(self.search) {
149
 
150
                                    MyCapsuleListItemView(capsuleUuid : self.listingViewModel.capsules[index].uuid)
151
 
152
                                    .environmentObject(appNavigation)
153
                                }
154
                            }
155
 
156
 
157
                        }
158
 
159
 
160
                        //.id(index)
161
 
162
                    }
163
 
164
 
165
                }
166
 
8 efrain 167
            }.onAppear {
168
 
169
 
170
                self.listingViewModel.fetch()
171
                self.inprogressViewModel.fetch()
172
 
1 efrain 173
            }.background(Color("color_capsule_list_item_background"))
174
 
175
 
176
 
177
        }
178
 
179
    }
180
 
181
 
182
}
183
 
184
 
185
 
186
 
187
 
188
struct MyCapsulesView_Previews: PreviewProvider {
189
    static var previews: some View {
190
        MyCapsulesView()
191
    }
192
}