Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 17 | | Comparar con el anterior | Ultima modificación | Ver Log |

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