Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 19 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  CardGalleryView.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 3/6/22.
6
//
7
 
8
import Foundation
9
import SwiftUI
10
import AVKit
11
import Network
12
import Alamofire
13
import SwiftyJSON
14
import TTGSnackbar
15
 
16
struct CardGalleryView: View {
17
 
18
    @EnvironmentObject private var networkMonitor : NetworkMonitor
19
    @EnvironmentObject private var appNavigation : AppNavigation
20
    @ObservedObject private var viewModel = GalleryCardViewModel()
21
 
22
 
23
 
24
    @State private var showGlobalAlert : Bool = false
25
    @State private var titleGlobalAlert : String = ""
26
    @State private var messageGlobalAlert : String = ""
27
 
28
 
29
 
30
 
31
 
32
    private var buttonShow : Bool = false
33
    private var buttonTitle : String = ""
34
 
35
 
36
    private let userUuid : String
21 efrain 37
    private var appData = Environment(\.appData).wrappedValue
1 efrain 38
 
39
 
40
    init (slideUuid : String) {
41
        userUuid = appData.userUuid
42
        viewModel.fetch(slideUuid: slideUuid, userUuid: userUuid)
43
 
44
        self.buttonShow = false
45
        if self.viewModel.slide.type == Constants.SLIDE_TYPE_QUIZ  {
46
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_QUIZ
47
            self.buttonShow = true
48
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_VIDEO {
49
            self.buttonTitle =  Config.LANG_BUTTON_LAUNCH_VIDEO_PLAYER
50
            self.buttonShow = true
51
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_AUDIO   {
52
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_AUDIO_PLAYER
53
            self.buttonShow = true
54
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_DOCUMENT {
55
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_VIEW_PDF
56
            self.buttonShow = true
57
 
58
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_TEXT {
59
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_VIEW_TEXT
60
            self.buttonShow = true
61
        } else {
62
            self.buttonShow = false
63
        }
64
 
65
    }
66
 
67
 
68
 
69
    @ViewBuilder
70
    var body: some View {
71
        GeometryReader { geometry in
72
            let checkMarkX = (geometry.size.width - 50) / 2
73
            let checkMarkY = -1 * ((geometry.size.height - 50) / 2)
74
 
75
            let buttonX = (geometry.size.width - 180) / 2
76
           // let buttonY = (geometry.size.height - 80) / 2
77
 
78
            let buttonY = (geometry.size.height - 100) / 2
79
 
80
            ZStack {
81
 
82
 
83
                if self.viewModel.slide.completed == 1  {
84
                    Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage()).offset(x: checkMarkX, y: checkMarkY).zIndex(10000)
85
                }
86
 
87
                if self.buttonShow {
88
 
89
                    Button(action: {
90
                        btnPlay()
91
                    }, label: {
92
                        Text(self.buttonTitle)
93
                            .font(Font.custom(Config.FONT_NAME_BOLD, size: Config.FONT_SIZE_BUTTONS))
94
                        .foregroundColor(Color("color_button_gallery_foreground"))
95
 
96
                    })
97
 
98
                    .padding(.vertical, 15)
99
                    .padding(.horizontal, 10)
100
                    .background(Color("color_button_gallery_background"))
101
                    .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
102
                    .offset(x: buttonX, y: buttonY)
103
                    .zIndex(10000)
104
                }
105
 
106
                if (self.viewModel.progressCapsule >= 100 && self.viewModel.completedCapsule == 0)
107
                    || (self.viewModel.progressTopic >= 100 && self.viewModel.completedTopic == 0) {
108
                    Button(action: {
109
                        if self.viewModel.progressTopic >= 100 && self.viewModel.completedTopic == 0 {
110
 
111
                            appNavigation.subpageActive = .finishtopic
112
 
113
                        } else {
114
                            if self.viewModel.progressCapsule >= 100 && self.viewModel.completedCapsule == 0 {
115
                                appNavigation.subpageActive = .finishcapsule
116
                            }
117
                        }
118
                    }, label: {
119
                        Text(Config.LANG_BUTTON_FINISH_CAPSULE_OR_TOPIC)
120
                        .font(.callout)
121
                        .foregroundColor(.black)
122
                    })
123
                    .padding()
124
                    .background(Color("color_button_gallery_background"))
125
                    .cornerRadius(/*@START_MENU_TOKEN@*/3.0/*@END_MENU_TOKEN@*/)
126
                    .zIndex(10000)
127
                }
128
 
129
                VStack {
130
 
131
 
132
 
133
                    Spacer()
134
                    HStack {
19 efrain 135
                        if viewModel.slide.background.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && viewModel.slide.file.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
1 efrain 136
                            Image(uiImage: UIImage(named: "logo") ?? UIImage())
137
                            .resizable()
138
                            .aspectRatio(contentMode: .fit)
139
                        } else {
140
                            CustomAsyncImage(
19 efrain 141
                                url: URL(string: self.viewModel.slide.type == Constants.SLIDE_TYPE_IMAGE
142
                                         ? self.viewModel.slide.file.trimmingCharacters(in: .whitespacesAndNewlines)
143
                                         : self.viewModel.slide.background.trimmingCharacters(in: .whitespacesAndNewlines))!,
1 efrain 144
                                placeholder: {
145
                                    Spacer()
146
                                    Text(Config.LANG_COMMON_LOADING).font(.footnote).foregroundColor(.black)
147
                                    Spacer()
148
                                },
149
                                image: {
150
                                    Image(uiImage: $0).resizable()
151
                                }
152
                            )
153
                        }
154
                    }.padding(.horizontal, 5)
155
 
156
                    Spacer()
157
                }
158
               // .zIndex(500)
159
 
160
            }.onAppear {
161
                /*
162
                if self.viewModel.slide.type  == Constants.SLIDE_TYPE_IMAGE
163
                {
164
 
165
                    let dataService = DataService()
166
                    dataService.completeSlide(slide: self.viewModel.slide)
167
                }*/
168
                self.viewModel.fetchProgress(slideUuid: self.viewModel.slide.uuid, userUuid: self.userUuid)
169
            }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMPLETED_SLIDE))
170
            { data in
171
               // print("CardGalleryView  Receive " )
172
                if data.userInfo != nil {
173
                    if let slideUuid = data.userInfo?["slideUuid"]! as? String {
174
                        if !slideUuid.isEmpty && slideUuid == self.viewModel.slide.uuid {
175
                            self.viewModel.fetchProgress(slideUuid: slideUuid, userUuid: appData.userUuid)
176
                        }
177
                    }
178
                }
179
             }
180
             .alert(isPresented: $showGlobalAlert) {
181
                Alert(
182
                    title: Text(self.titleGlobalAlert),
183
                    message: Text(self.messageGlobalAlert),
184
                    dismissButton: .default(Text(Config.LANG_COMMON_OK))
185
                )
186
            }
187
        }
188
    }
189
 
190
    private func btnPlay()
191
    {
192
 
193
        switch self.viewModel.slide.type
194
        {
195
            case Constants.SLIDE_TYPE_TEXT :
196
                appNavigation.pageActive = .webviewer
197
                break;
198
 
199
            case Constants.SLIDE_TYPE_QUIZ :
200
                let snackbar = TTGSnackbar(message: "Por implementar", duration: .long)
201
                snackbar.show()
202
                break;
203
 
204
            default :
205
                appNavigation.pageActive = .download
206
                break;
207
        }
208
 
209
 
210
 
211
    }
212
 
213
 
214
}
215
 
216
struct CardGalleryView_Previews: PreviewProvider {
217
    static var previews: some View {
218
        CardGalleryView(slideUuid: "S123")
219
    }
220
 
221
}
222