Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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