@@ -9,10 +9,15 @@ import Foundation
99
1010final class PushNotificationSettingsViewModel : Store {
1111 struct State {
12- var pushNotificationEnable = false
13- var pushNotificationTime = Date ( )
14- var showTimePicker = false
15- var sheetHeight = CGFloat . pi
12+ var pushNotificationEnable : Bool = false
13+ var pushNotificationTime : Date = . init( )
14+ var showTimePicker : Bool = false
15+ var isLoading : Bool = false
16+ var sheetHeight : CGFloat = . pi
17+ var showSheet : Bool = false
18+ var showAlert : Bool = false
19+ var alertTitle : String = " "
20+ var alertMessage : String = " "
1621 var pushNotificationHour : Int {
1722 Calendar . current. component ( . hour, from: pushNotificationTime)
1823 }
@@ -23,6 +28,8 @@ final class PushNotificationSettingsViewModel: Store {
2328
2429 enum Action {
2530 case onAppear
31+ case setAlert( Bool )
32+ case setLoading( Bool )
2633 case setPushNotificationEnable( Bool )
2734 case setPushNotificationHour( Int )
2835 case setPushNotificationTime( Date )
@@ -53,6 +60,10 @@ final class PushNotificationSettingsViewModel: Store {
5360 switch action {
5461 case . onAppear:
5562 return [ . fetchPushNotificationSettings]
63+ case . setAlert( let isPresented) :
64+ setAlert ( & state, isPresented: isPresented)
65+ case . setLoading( let value) :
66+ state. isLoading = value
5667 case . setPushNotificationEnable( let value) :
5768 self . state. pushNotificationEnable = value
5869 return [ . updatePushNotificationSettings]
@@ -82,24 +93,46 @@ final class PushNotificationSettingsViewModel: Store {
8293 switch effect {
8394 case . fetchPushNotificationSettings:
8495 Task {
85- let settings = try await fetchPushSettingsUseCase. execute ( )
86- self . send ( . setPushNotificationEnable( settings. isEnabled) )
87- if let hour = settings. scheduledTime. hour,
88- let minute = settings. scheduledTime. minute,
89- let date = calendar. date ( bySettingHour: hour, minute: minute, second: 0 , of: Date ( ) ) {
90- self . send ( . setPushNotificationTime( date) )
96+ do {
97+ defer { send ( . setLoading( false ) ) }
98+ send ( . setLoading( true ) )
99+ let settings = try await fetchPushSettingsUseCase. execute ( )
100+ self . send ( . setPushNotificationEnable( settings. isEnabled) )
101+ if let hour = settings. scheduledTime. hour,
102+ let minute = settings. scheduledTime. minute,
103+ let date = calendar. date ( bySettingHour: hour, minute: minute, second: 0 , of: Date ( ) ) {
104+ self . send ( . setPushNotificationTime( date) )
105+ }
106+ } catch {
107+ send ( . setAlert( true ) )
91108 }
92109 }
93110 case . updatePushNotificationSettings:
94111 Task {
95- let dateComponents = calendar. dateComponents ( [ . hour, . minute] , from: state. pushNotificationTime)
96- let settings = PushNotificationSettings (
97- isEnabled: state. pushNotificationEnable,
98- scheduledTime: dateComponents
99- )
100-
101- try await updatePushSettingsUseCase. execute ( settings)
112+ do {
113+ defer { send ( . setLoading( false ) ) }
114+ send ( . setLoading( true ) )
115+ let dateComponents = calendar. dateComponents ( [ . hour, . minute] , from: state. pushNotificationTime)
116+ let settings = PushNotificationSettings (
117+ isEnabled: state. pushNotificationEnable,
118+ scheduledTime: dateComponents
119+ )
120+ try await updatePushSettingsUseCase. execute ( settings)
121+ } catch {
122+ send ( . setAlert( true ) )
123+ }
102124 }
103125 }
104126 }
105127}
128+
129+ extension PushNotificationSettingsViewModel {
130+ func setAlert(
131+ _ state: inout State ,
132+ isPresented: Bool
133+ ) {
134+ state. alertTitle = " 오류 "
135+ state. alertMessage = " 문제가 발생했습니다. 잠시 후 다시 시도해주세요. "
136+ state. showAlert = isPresented
137+ }
138+ }
0 commit comments