Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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