Skip to content

Commit aca6600

Browse files
authored
이메일 미인증시 CTA 개선 (2) (#208)
* refactor error alert logic * show email verify alert on lecture detail page
1 parent 3bd0096 commit aca6600

File tree

4 files changed

+39
-12
lines changed

4 files changed

+39
-12
lines changed

SNUTT-2022/SNUTT/ViewModels/LectureDetailViewModel.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ extension LectureDetailScene {
1313
class ViewModel: BaseViewModel, ObservableObject {
1414
@Published var isErrorAlertPresented = false
1515
@Published var isLectureOverlapped: Bool = false
16+
@Published var isEmailVerifyAlertPresented = false
1617
var errorTitle: String = ""
1718
var errorMessage: String = ""
1819

1920
override init(container: DIContainer) {
2021
super.init(container: container)
22+
appState.system.$selectedTab.assign(to: &$_selectedTab)
2123
}
2224

2325
var lectureService: LectureServiceProtocol {
@@ -27,6 +29,21 @@ extension LectureDetailScene {
2729
var currentTimetable: Timetable? {
2830
appState.timetable.current
2931
}
32+
33+
@Published private var _selectedTab: TabType = .review
34+
var selectedTab: TabType {
35+
get { _selectedTab }
36+
set { services.globalUIService.setSelectedTab(newValue) }
37+
}
38+
39+
func presentEmailVerifyAlert() {
40+
let emailVerifyError = STError(.EMAIL_NOT_VERIFIED)
41+
errorTitle = emailVerifyError.title
42+
errorMessage = emailVerifyError.content
43+
DispatchQueue.main.async {
44+
self.isEmailVerifyAlertPresented = true
45+
}
46+
}
3047

3148
func addCustomLecture(lecture: Lecture, isForced: Bool = false) async -> Bool {
3249
do {

SNUTT-2022/SNUTT/ViewModels/SearchSceneViewModel.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ class SearchSceneViewModel: BaseViewModel, ObservableObject {
1919
@Published var selectedTagList: [SearchTag] = []
2020
@Published var isLoading: Bool = false
2121
@Published var isLectureOverlapped: Bool = false
22-
23-
@Published var emailVerifyError: STError? = nil
24-
@Published var presentEmailVerifyAlert = false
22+
@Published var isEmailVerifyAlertPresented = false
2523

2624
var errorTitle: String = ""
2725
var errorMessage: String = ""
@@ -140,8 +138,11 @@ class SearchSceneViewModel: BaseViewModel, ObservableObject {
140138
do {
141139
return try await services.lectureService.fetchReviewId(courseNumber: lecture.courseNumber, instructor: lecture.instructor)
142140
} catch let error as STError where error.code == .EMAIL_NOT_VERIFIED {
143-
emailVerifyError = error
144-
presentEmailVerifyAlert = true
141+
await MainActor.run {
142+
errorTitle = error.title
143+
errorMessage = error.content
144+
isEmailVerifyAlertPresented = true
145+
}
145146
} catch {
146147
services.globalUIService.presentErrorAlert(error: error)
147148
}

SNUTT-2022/SNUTT/Views/Scenes/LectureDetailScene.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,20 @@ struct LectureDetailScene: View {
195195
}
196196

197197
DetailButton(text: "강의평") {
198-
showReviewWebView = true
198+
if reviewId == nil {
199+
viewModel.presentEmailVerifyAlert()
200+
} else {
201+
showReviewWebView = true
202+
}
199203
}
204+
.alert(viewModel.errorTitle, isPresented: $viewModel.isEmailVerifyAlertPresented, actions: {
205+
Button("확인") {
206+
viewModel.selectedTab = .review
207+
}
208+
Button("취소", role: .cancel) {}
209+
}, message: {
210+
Text(viewModel.errorMessage)
211+
})
200212
.onAppear {
201213
Task {
202214
reviewId = await viewModel.fetchReviewId(of: lecture)

SNUTT-2022/SNUTT/Views/Scenes/SearchLectureScene.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,13 @@ struct SearchLectureScene: View {
8282
.task {
8383
await viewModel.fetchTags()
8484
}
85-
.alert(viewModel.emailVerifyError?.title ?? "", isPresented: $viewModel.presentEmailVerifyAlert, actions: {
85+
.alert(viewModel.errorTitle, isPresented: $viewModel.isEmailVerifyAlertPresented, actions: {
8686
Button("확인") {
87-
viewModel.emailVerifyError = nil
8887
viewModel.selectedTab = .review
8988
}
90-
Button("취소", role: .cancel) {
91-
viewModel.emailVerifyError = nil
92-
}
89+
Button("취소", role: .cancel) {}
9390
}, message: {
94-
Text(viewModel.emailVerifyError?.content ?? "")
91+
Text(viewModel.errorMessage)
9592
})
9693
.navigationBarHidden(true)
9794
.animation(.customSpring, value: viewModel.searchResult?.count)

0 commit comments

Comments
 (0)