Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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