Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 30 | Rev 36 | 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
//  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
17 efrain 11
import Network
12
import Alamofire
13
import SwiftyJSON
14
import TTGSnackbar
1 efrain 15
 
16
struct CardGalleryView: View {
17
 
8 efrain 18
    @EnvironmentObject private var networkMonitor : NetworkMonitor
1 efrain 19
    @EnvironmentObject private var appNavigation : AppNavigation
20
    @ObservedObject private var viewModel = GalleryCardViewModel()
21
 
17 efrain 22
 
8 efrain 23
 
24
    @State private var showGlobalAlert : Bool = false
25
    @State private var titleGlobalAlert : String = ""
26
    @State private var messageGlobalAlert : String = ""
27
 
28
 
14 efrain 29
 
19 efrain 30
 
1 efrain 31
 
32
    private var buttonShow : Bool = false
33
    private var buttonTitle : String = ""
34
 
8 efrain 35
 
14 efrain 36
    private let userUuid : String
17 efrain 37
    private var appData = AppData.sharedInstance
1 efrain 38
 
39
 
40
    init (slideUuid : String) {
14 efrain 41
        userUuid = appData.userUuid
42
        viewModel.fetch(slideUuid: slideUuid, userUuid: userUuid)
1 efrain 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
8 efrain 57
 
58
        } else if self.viewModel.slide.type == Constants.SLIDE_TYPE_TEXT {
14 efrain 59
            self.buttonTitle = Config.LANG_BUTTON_LAUNCH_VIEW_TEXT
8 efrain 60
            self.buttonShow = true
1 efrain 61
        } else {
62
            self.buttonShow = false
63
        }
64
 
65
    }
66
 
67
 
68
 
33 efrain 69
    @ViewBuilder
1 efrain 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
17 efrain 76
           // let buttonY = (geometry.size.height - 80) / 2
77
 
78
            let buttonY = (geometry.size.height - 100) / 2
1 efrain 79
 
80
            ZStack {
19 efrain 81
 
17 efrain 82
 
1 efrain 83
                if self.viewModel.slide.completed == 1  {
8 efrain 84
                    Image(uiImage: UIImage(named: "ic_slide_completado_checkmark") ?? UIImage()).offset(x: checkMarkX, y: checkMarkY).zIndex(10000)
1 efrain 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 {
8 efrain 130
 
131
 
132
 
1 efrain 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
 
14 efrain 158
            }.onAppear {
159
                self.viewModel.fetchProgress(slideUuid: self.viewModel.slide.uuid, userUuid: self.userUuid)
30 efrain 160
            }.onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_COMPLETED_SLIDE))
161
            { data in
162
               // print("CardGalleryView  Receive " )
163
                if data.userInfo != nil {
164
                    if let slideUuid = data.userInfo?["slideUuid"]! as? String {
165
                        if !slideUuid.isEmpty && slideUuid == self.viewModel.slide.uuid {
166
                            self.viewModel.fetchProgress(slideUuid: slideUuid, userUuid: appData.userUuid)
167
                        }
168
                    }
169
                }
170
             }
14 efrain 171
             .alert(isPresented: $showGlobalAlert) {
8 efrain 172
                Alert(
173
                    title: Text(self.titleGlobalAlert),
174
                    message: Text(self.messageGlobalAlert),
175
                    dismissButton: .default(Text(Config.LANG_COMMON_OK))
176
                )
1 efrain 177
            }
178
        }
179
    }
180
 
181
    private func btnPlay()
182
    {
183
 
17 efrain 184
        switch self.viewModel.slide.type
185
        {
186
            case Constants.SLIDE_TYPE_TEXT :
187
                appNavigation.pageActive = .webviewer
188
                break;
189
 
190
            case Constants.SLIDE_TYPE_QUIZ :
191
                let snackbar = TTGSnackbar(message: "Por implementar", duration: .long)
192
                snackbar.show()
193
                break;
194
 
195
            default :
19 efrain 196
                appNavigation.pageActive = .download
17 efrain 197
                break;
198
        }
199
 
200
 
201
 
202
    }
203
 
19 efrain 204
 
1 efrain 205
}
206
 
207
struct CardGalleryView_Previews: PreviewProvider {
208
    static var previews: some View {
209
        CardGalleryView(slideUuid: "S123")
210
    }
211
 
212
}
213