Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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