Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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