Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 1 | Rev 9 | 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
//  GridCapsuleView.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/17/22.
6
//
7
 
8
import SwiftUI
9
 
10
struct GridCapsuleView: View
11
{
8 efrain 12
    @EnvironmentObject private var networkMonitor : NetworkMonitor
1 efrain 13
    @EnvironmentObject private var appNavigation : AppNavigation
8 efrain 14
 
1 efrain 15
    @State private var scrollToIndex : Int = 0
16
    @ObservedObject private var viewModel : CapsuleGridViewModel = CapsuleGridViewModel()
17
 
18
    private let itemPerRow: CGFloat = 2
19
    private let config = [
20
        GridItem(.flexible()),
21
        GridItem(.flexible())
22
    ]
23
 
24
    private let appData = AppData.sharedInstance
25
    private var topicTitle : String = ""
26
 
27
 
28
    init(preview : Bool = false)
29
    {
30
        let topicDao = TopicDao.sharedInstance
31
        let topicModel = topicDao.selectByUuid(uuid: appData.topicUuidActive)
32
 
33
        viewModel.fetch(topicUuid: appData.topicUuidActive, userUuid: appData.userUuid)
34
 
35
 
36
        if topicModel.name.count > Constants.APP_BAR_TITLE_MAX_LENGTH {
37
            topicTitle = String(Array(topicModel.name)[0...Constants.APP_BAR_TITLE_MAX_LENGTH]) + "..."
38
        } else {
39
            topicTitle = topicModel.name
40
        }
41
    }
42
 
43
    var body: some View {
44
        VStack(spacing: 0) {
45
            HStack {
46
                Button(action: {
47
 
48
                    appData.capsuleUuidActive = ""
49
                    appData.slideUuidActive = ""
8 efrain 50
                    appData.subPageSource = 0
51
                    appData.save()
1 efrain 52
 
8 efrain 53
 
54
 
55
                    withAnimation {
56
                        appNavigation.subpageActive = .topics
1 efrain 57
                    }
58
 
59
 
60
 
61
 
62
 
63
 
64
                }, label: {
65
 
66
 
67
                    Image(systemName: "chevron.backward")
68
                    .frame(width: 32, height: 32, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
69
                    .aspectRatio(contentMode: .fit)
8 efrain 70
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
1 efrain 71
                })
72
                .padding(.leading, 16)
73
 
8 efrain 74
                Text(networkMonitor.status == .disconnected ? Config.LANG_ERROR_NETWORK_MESSAGE_SHORT : topicTitle)
1 efrain 75
                .font(Font.custom(Config.FONT_NAME_REGULAR, size: Config.FONT_SIZE_APP_BAR_HEAD1 ))
8 efrain 76
                    .foregroundColor(networkMonitor.status == .disconnected ? Color("color_network_disconnected_foreground") : Color("color_app_bar_foreground"))
1 efrain 77
                    .padding(.leading, 4)
78
 
79
                Spacer()
80
            }
81
            .edgesIgnoringSafeArea(.top)
82
            .frame(height: 50)
8 efrain 83
            .background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
84
 
85
 
86
            Divider().background(networkMonitor.status == .disconnected ? Color("color_network_disconnected_background") : Color("color_app_bar_background"))
87
 
1 efrain 88
            ScrollView() {
89
                ScrollViewReader { proxy in
90
                    LazyVGrid(columns: config, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/, spacing: /*@START_MENU_TOKEN@*/nil/*@END_MENU_TOKEN@*/, pinnedViews: /*@START_MENU_TOKEN@*/[]/*@END_MENU_TOKEN@*/, content:
91
                    {
92
 
93
 
94
                        ForEach(0..<self.viewModel.capsules.count) { index in
95
 
96
 
97
 
98
 
99
                            CardCapsuleView(
100
                                capsuleUuid: self.viewModel.capsules[index].uuid
101
                            )
102
                            .environmentObject(appNavigation)
103
                            .frame(
104
                                width: Constants.CARD_WIDTH,
105
                                height: Constants.CARD_HEIGHT,
106
                                alignment: .center
107
                            ).id(index)
108
 
109
                        }
110
 
111
                        .onChange(of:  scrollToIndex, perform: { value in
112
                            proxy.scrollTo(value, anchor: nil)
113
                        })
114
                    })
115
                }
116
            }
117
            .padding(.top, 5)
118
 
119
        }
120
 
121
        .onAppear {
122
            var i : Int = 0
123
            while i < self.viewModel.capsules.count {
124
                if appData.capsuleUuidActive == self.viewModel.capsules[i].uuid {
125
                    self.scrollToIndex = i
126
                }
127
                i += 1
128
            }
129
        }
130
 
131
 
132
 
133
 
134
    }
135
}
136
 
137
 
138
struct GridCapsuleView_Previews: PreviewProvider {
139
    static var previews: some View {
140
        GridCapsuleView( preview: true)
141
    }
142
}
143
 
144