Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 19 | Ir a la última revisión | | 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
37
    private var appData = AppData.sharedInstance
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 {
135
                        if viewModel.slide.background.isEmpty && viewModel.slide.file.isEmpty {
136
                            Image(uiImage: UIImage(named: "logo") ?? UIImage())
137
                            .resizable()
138
                            .aspectRatio(contentMode: .fit)
139
                        } else {
140
                            CustomAsyncImage(
141
                                url: URL(string: self.viewModel.slide.type == Constants.SLIDE_TYPE_IMAGE ? self.viewModel.slide.file : self.viewModel.slide.background)!,
142
                                placeholder: {
143
                                    Spacer()
144
                                    Text(Config.LANG_COMMON_LOADING).font(.footnote).foregroundColor(.black)
145
                                    Spacer()
146
                                },
147
                                image: {
148
                                    Image(uiImage: $0).resizable()
149
                                }
150
                            )
151
                        }
152
                    }.padding(.horizontal, 5)
153
 
154
                    Spacer()
155
                }
156
               // .zIndex(500)
157
 
158
            }.onAppear {
159
                /*
160
                if self.viewModel.slide.type  == Constants.SLIDE_TYPE_IMAGE
161
                {
162
 
163
                    let dataService = DataService()
164
                    dataService.completeSlide(slide: self.viewModel.slide)
165
                }*/
166
                self.viewModel.fetchProgress(slideUuid: self.viewModel.slide.uuid, userUuid: self.userUuid)
167
            }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMPLETED_SLIDE))
168
            { data in
169
               // print("CardGalleryView  Receive " )
170
                if data.userInfo != nil {
171
                    if let slideUuid = data.userInfo?["slideUuid"]! as? String {
172
                        if !slideUuid.isEmpty && slideUuid == self.viewModel.slide.uuid {
173
                            self.viewModel.fetchProgress(slideUuid: slideUuid, userUuid: appData.userUuid)
174
                        }
175
                    }
176
                }
177
             }
178
             .alert(isPresented: $showGlobalAlert) {
179
                Alert(
180
                    title: Text(self.titleGlobalAlert),
181
                    message: Text(self.messageGlobalAlert),
182
                    dismissButton: .default(Text(Config.LANG_COMMON_OK))
183
                )
184
            }
185
        }
186
    }
187
 
188
    private func btnPlay()
189
    {
190
 
191
        switch self.viewModel.slide.type
192
        {
193
            case Constants.SLIDE_TYPE_TEXT :
194
                appNavigation.pageActive = .webviewer
195
                break;
196
 
197
            case Constants.SLIDE_TYPE_QUIZ :
198
                let snackbar = TTGSnackbar(message: "Por implementar", duration: .long)
199
                snackbar.show()
200
                break;
201
 
202
            default :
203
                appNavigation.pageActive = .download
204
                break;
205
        }
206
 
207
 
208
 
209
    }
210
 
211
 
212
}
213
 
214
struct CardGalleryView_Previews: PreviewProvider {
215
    static var previews: some View {
216
        CardGalleryView(slideUuid: "S123")
217
    }
218
 
219
}
220