Skip to content

Commit c5e26b4

Browse files
committed
Fix feature visible_roles won’t work when no status data
To prevent user update it after login, TicketView will now try fetch data to bridge new data structure.
1 parent 6f74244 commit c5e26b4

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

OPass/OPassAPI/ViewModels/EventAPIViewModel.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// 2022 OPass.
77
//
88

9+
import SwiftUI
910
import Foundation
1011
import KeychainAccess
1112
import OSLog
@@ -26,6 +27,7 @@ class EventAPIViewModel: ObservableObject {
2627
self.eventLogo = eventLogo
2728
self.saveData = saveData
2829
self.eventAPITemporaryData = tmpData
30+
self._user_role = AppStorage(wrappedValue: "nil", "\(eventSettings.event_id)_user_role")
2931
}
3032

3133
var saveData: () async -> Void
@@ -38,6 +40,7 @@ class EventAPIViewModel: ObservableObject {
3840
@Published var eventAnnouncements: [AnnouncementModel]? = nil
3941
@Published var eventScenarioStatus: ScenarioStatusModel? = nil
4042
private var eventAPITemporaryData: CodableEventAPIVM? = nil
43+
@AppStorage var user_role: String
4144

4245
private let logger = Logger(subsystem: "app.opass.ccip", category: "EventAPI")
4346
private let keychain = Keychain(service: "app.opass.ccip-token")//Service key value match App Bundle ID + "-token"
@@ -125,6 +128,7 @@ extension EventAPIViewModel {
125128
DispatchQueue.main.async {
126129
self.eventScenarioStatus = eventScenarioStatus
127130
self.accessToken = token
131+
self.user_role = eventScenarioStatus.role
128132
Task{ await self.saveData() }
129133
}
130134
return true
@@ -149,6 +153,7 @@ extension EventAPIViewModel {
149153
let eventScenarioStatus = try await APIRepo.load(scenarioStatusFrom: fastpassFeature, token: token)
150154
DispatchQueue.main.async {
151155
self.eventScenarioStatus = eventScenarioStatus
156+
self.user_role = eventScenarioStatus.role
152157
Task{ await self.saveData() }
153158
}
154159
} catch APIRepo.LoadError.http403Forbidden {
@@ -159,6 +164,7 @@ extension EventAPIViewModel {
159164
}
160165
self.eventAPITemporaryData?.eventScenarioStatus = nil
161166
DispatchQueue.main.async {
167+
self.user_role = scenarioStatus.role
162168
self.eventScenarioStatus = scenarioStatus
163169
}
164170
}
@@ -252,6 +258,7 @@ extension EventAPIViewModel {
252258
if let scenarioStatus = eventScenarioStatus {
253259
Constants.sendTag("\(scenarioStatus.event_id)\(scenarioStatus.role)", value: "")
254260
self.eventScenarioStatus = nil
261+
self.user_role = "nil"
255262
}
256263
self.accessToken = nil
257264
}

OPass/Views/MainView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ struct MainView: View {
110110
}
111111
private func FeatureIsVisible(_ visible_roles: [String]?) -> Bool {
112112
guard let visible_roles = visible_roles else { return true }
113-
guard let user_role = eventAPI.eventScenarioStatus?.role else { return false }
114-
return visible_roles.contains(user_role)
113+
guard eventAPI.user_role != "nil" else { return false }
114+
return visible_roles.contains(eventAPI.user_role)
115115
}
116116
}
117117

OPass/Views/Tabs/TicketView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ struct TicketView: View {
9393
.padding([.bottom, .top], 10)
9494
.background(Color("SectionBackgroundColor"))
9595
}
96+
.task { try? await eventAPI.loadScenarioStatus() }
9697
} else {
9798
RedeemTokenView(eventAPI: eventAPI)
9899
}

0 commit comments

Comments
 (0)