Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 1 | Rev 17 | 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
//  NotificationListView.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 7/31/22.
6
//
7
 
8
import SwiftUI
11 efrain 9
import SafariServices
1 efrain 10
 
11
struct NotificationListView: View {
12
    @EnvironmentObject private var networkMonitor : NetworkMonitor
13
    @EnvironmentObject private var appNavigation : AppNavigation
14
 
15
    @ObservedObject var viewModel :NotificationListViewModel
11 efrain 16
 
17
    @State private var sheetURL: String = ""
18
    @State private var sheetShow = false
19
 
1 efrain 20
    private let appData = AppData.sharedInstance
21
 
22
    init() {
23
 
24
        let userNotificationDao = UserNotificationDao.sharedInstance
25
 
26
        userNotificationDao.removeExpired(userUuid:appData.userUuid)
27
 
28
        viewModel = NotificationListViewModel()
29
    }
30
 
31
    var body: some View {
32
        VStack(spacing: 0) {
33
            HStack {
34
                Image("logo")
35
                .resizable()
36
                .frame(width: 32, height: 32, alignment: .center)
37
                .aspectRatio(contentMode: .fit)
38
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
39
                .padding(.leading, 16)
40
 
41
                Text(networkMonitor.status == .disconnected ? Config.LANG_ERROR_NETWORK_MESSAGE_SHORT : Config.LANG_TAB_BAR_BUTTON_NOTIFICATIONS)
42
                .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
43
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
44
                .padding(.leading, 4)
45
 
46
                Spacer()
47
 
48
 
49
            }
50
            .edgesIgnoringSafeArea(.top)
51
            .frame(height: 50)
52
            .background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
53
 
54
            Divider().background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
55
 
56
            ScrollView {
57
 
58
                if self.viewModel.notifications.count == 0  {
59
                    NotificationListItemEmptyView()
60
 
61
                } else {
62
 
63
 
64
 
65
                    LazyVStack  {
66
 
67
 
68
 
69
 
70
                        ForEach(self.viewModel.notifications) { notificationItem  in
71
 
72
                            //let notificationItem = self.viewModel.notifications[index]
73
 
74
                                NotificationListItemView(notification: notificationItem,onExecute: {
75
 
76
                                    if notificationItem.command == Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT && notificationItem.viewed == 0 {
77
 
78
                                        let notificationDao = UserNotificationDao.sharedInstance
79
                                        notificationDao.markViewedAllPendingByUserUuidAndCommand(userUuid: appData.userUuid, command: Constants.NOTIFICATION_COMMAND_REFRESH_CONTENT)
80
 
81
                                        appData.refreshContentActionRequired = true
82
                                        appData.save()
83
 
84
                                        withAnimation {
85
                                            appNavigation.subpageActive = .topics
86
                                        }
87
 
88
 
89
                                    } else if notificationItem.command == Constants.NOTIFICATION_COMMAND_OPEN_URL &&
90
                                        !notificationItem.url.isEmpty  &&
91
                                        notificationItem.viewed == 0  {
92
 
11 efrain 93
 
1 efrain 94
                                        let notificationDao = UserNotificationDao.sharedInstance
95
                                        notificationDao.markViewed(id: notificationItem.id)
96
 
97
                                        self.viewModel.fetchAll()
98
 
11 efrain 99
                                        self.sheetURL =  notificationItem.url
100
                                        self.sheetShow = true
101
 
1 efrain 102
                                    }
103
 
104
                                }) {
105
 
106
                                    DispatchQueue.main.async {
107
                                        let notificationDao = UserNotificationDao.sharedInstance
108
                                        notificationDao.remove(id: notificationItem.id)
109
 
110
                                        self.viewModel.fetchAll()
111
                                    }
112
                                }
113
 
114
                            }
115
 
116
                    }
117
                }
118
            }.padding(.top, 5)
119
        }.onAppear {
120
            viewModel.fetchAll()
11 efrain 121
        }.popover(isPresented: self.$sheetShow, content: {
122
 
123
 
124
 
125
            SafariView(sURL: self.sheetURL)
126
 
127
 
128
        })    }
1 efrain 129
}
130
 
131
struct NotificationListView_Previews: PreviewProvider {
132
    static var previews: some View {
133
        NotificationListView()
134
    }
135
}