Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 8 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  CardTopicView.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 1/26/22.
6
//
7
 
8
import SwiftUI
9
 
10
struct CardTopicView: View
11
{
12
    @EnvironmentObject private var appNavigation : AppNavigation
13
    @ObservedObject private var viewModel = TopicCardViewModel()
14
 
15
 
16
    private let appData = AppData.sharedInstance
17
    private var topicName : String = ""
18
    private var preview : Bool = false
19
 
20
 
21
 
22
    init(topicUuid : String, preview : Bool = false)
23
    {
24
        self.preview = preview
25
        if(preview) {
26
            viewModel.topic.companyUuid = "C123"
27
            viewModel.topic.uuid = "T123"
28
            viewModel.topic.name = "Topic 123"
29
            viewModel.topic.description = "Description Topic 123"
30
            viewModel.topic.position = 0
31
            viewModel.topic.progress = 50
32
            viewModel.topic.totalSlides = 10
33
            viewModel.topic.viewSlides = 5
34
            viewModel.topic.image = Config.URL_IMAGE_TESTING
35
            viewModel.topic.completed = 0
36
        } else {
37
            viewModel.fetch(topicUuid:topicUuid, userUuid: appData.userUuid)
38
        }
39
 
40
 
41
 
42
 
43
        if viewModel.topic.name.count > Constants.CAPSULE_TITLE_MAX_LENGTH {
44
            topicName = String(Array(viewModel.topic.name)[0...Constants.CAPSULE_TITLE_MAX_LENGTH]) + "..."
45
        } else {
46
            topicName = viewModel.topic.name
47
        }
48
 
49
 
50
    }
51
 
52
 
53
 
54
    var body: some View {
55
 
56
        Button(action: {
57
 
58
            appData.topicUuidActive = self.viewModel.topic.uuid
59
            appData.capsuleUuidActive = ""
60
            appData.slideUuidActive = ""
61
            appData.subPageSource = AppData.SUB_PAGE_SOURCE_TOPICS
62
            appData.save()
63
 
64
 
65
            appNavigation.subpageActive = .capsules
66
 
67
 
68
        }) {
69
 
70
            VStack(spacing: 0) {
71
 
72
                Text(self.topicName)
73
                .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_CARD_VIEW_TITLE))
74
                .foregroundColor(Color("color_textview"))
75
                .padding(.horizontal, 5)
76
                .padding(.top, 5)
77
                .multilineTextAlignment(/*@START_MENU_TOKEN@*/.leading/*@END_MENU_TOKEN@*/)
78
 
79
                Spacer()
80
 
81
 
82
                CardTopicImageGroup(requestImage: preview ? "": self.viewModel.topic.image )
83
                .padding(.horizontal, 5)
84
 
85
                Spacer()
86
 
87
                Group() {
88
                    HStack {
89
                        ProgressBar(
90
                            value: self.viewModel.topic.progress,
91
                            maxValue: 100,
92
                            backgroundColor: Color("color_card_view_progress_background"),
93
                            foregroundColor: Color("color_card_view_progress_foreground")
94
 
95
                        )
96
                        .frame(height: 6)
97
                        .padding(10)
98
 
99
                        Text( String(format: "%.1f", self.viewModel.topic.progress) + "%")
100
                            .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_CARD_VIEW_FOOTER ))
101
                        .foregroundColor(Color("color_textview"))
102
                        .padding(5)
103
                    }
104
                }
105
                .background(Color("color_card_view_background_footer"))
106
 
107
            }
108
            .background(Color("color_card_view_background"))
109
            .cornerRadius(16)
110
            .overlay(
111
                RoundedRectangle(cornerRadius: 16)
112
                    .stroke(Color("color_card_view_border"), lineWidth:1)
113
            )
114
            .padding(.horizontal, 5)
115
        } .onReceive(NotificationCenter.default.publisher(for: Constants.NOTIFICATION_NAME_CHANGE_PERCENTAJE_COMPLETED_TOPIC))
116
        { data in
117
            if data.userInfo != nil {
118
                if let topicUuid = data.userInfo?["topicUuid"]! as? String {
119
                    if !topicUuid.isEmpty && topicUuid == self.viewModel.topic.uuid {
120
                        self.viewModel.fetchProgress(topicUuid: topicUuid, userUuid: appData.userUuid)
121
 
122
                    }
123
                }
124
            }
125
        } .padding(.top, 5)
126
    }
127
}
128
 
129
 
130
 
131
struct CardTopicView_Previews: PreviewProvider {
132
    static var previews: some View {
133
 
134
        CardTopicView(topicUuid: "T123", preview: true)
135
    }
136
}
137
 
138
struct CardTopicImageGroup : View {
139
 
140
    var requestImage : String
141
 
142
    var body: some View {
143
        HStack {
144
            if requestImage.isEmpty {
145
 
146
 
147
                Image(uiImage: UIImage(named: "logo") ?? UIImage())
148
                    .resizable()
149
                    .aspectRatio(contentMode: .fit)
150
 
151
 
152
            } else {
153
                CustomAsyncImage(
154
                    url: URL(string: requestImage)!,
155
                    placeholder: { Text(Config.LANG_COMMON_LOADING).font(.footnote).foregroundColor(.black)},
156
                    image: {
157
                        Image(uiImage: $0).resizable()
158
                    }
159
                )
160
            }
161
        }
162
    }
163
}
164