diff --git a/SwiftUI-WorkoutApp.xcodeproj/project.pbxproj b/SwiftUI-WorkoutApp.xcodeproj/project.pbxproj index a21469ab..f631221f 100644 --- a/SwiftUI-WorkoutApp.xcodeproj/project.pbxproj +++ b/SwiftUI-WorkoutApp.xcodeproj/project.pbxproj @@ -54,9 +54,7 @@ 6798AA45280AEDCA00DB76F1 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6798AA44280AEDCA00DB76F1 /* Preview Assets.xcassets */; }; 6798AA4C280AF1C200DB76F1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6798AA4B280AF1C200DB76F1 /* LaunchScreen.storyboard */; }; 6798AA53280AF43900DB76F1 /* EventsListScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA52280AF43900DB76F1 /* EventsListScreen.swift */; }; - 6798AA55280AF46300DB76F1 /* DialogsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA54280AF46300DB76F1 /* DialogsScreen.swift */; }; 6798AA59280AF4B100DB76F1 /* ParksMapScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA58280AF4B100DB76F1 /* ParksMapScreen.swift */; }; - 6798AA5B280AF4C700DB76F1 /* ProfileScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA5A280AF4C700DB76F1 /* ProfileScreen.swift */; }; 6798AA66280B232F00DB76F1 /* IncognitoProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA65280B232F00DB76F1 /* IncognitoProfileView.swift */; }; 6798AA68280B23B700DB76F1 /* UserDetailsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA67280B23B700DB76F1 /* UserDetailsScreen.swift */; }; 6798AA73280B43FE00DB76F1 /* LoginScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6798AA72280B43FE00DB76F1 /* LoginScreen.swift */; }; @@ -148,9 +146,7 @@ 6798AA44280AEDCA00DB76F1 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 6798AA4B280AF1C200DB76F1 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 6798AA52280AF43900DB76F1 /* EventsListScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventsListScreen.swift; sourceTree = ""; }; - 6798AA54280AF46300DB76F1 /* DialogsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DialogsScreen.swift; sourceTree = ""; }; 6798AA58280AF4B100DB76F1 /* ParksMapScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParksMapScreen.swift; sourceTree = ""; }; - 6798AA5A280AF4C700DB76F1 /* ProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreen.swift; sourceTree = ""; }; 6798AA65280B232F00DB76F1 /* IncognitoProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncognitoProfileView.swift; sourceTree = ""; }; 6798AA67280B23B700DB76F1 /* UserDetailsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsScreen.swift; sourceTree = ""; }; 6798AA72280B43FE00DB76F1 /* LoginScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginScreen.swift; sourceTree = ""; }; @@ -242,7 +238,6 @@ 67419AD5282E8E7C004F5339 /* Messages */ = { isa = PBXGroup; children = ( - 6798AA54280AF46300DB76F1 /* DialogsScreen.swift */, 67D916802838E2460098D3CB /* DialogsListScreen.swift */, 67D916852838F0DD0098D3CB /* DialogScreen.swift */, ); @@ -418,7 +413,6 @@ children = ( 6765B25A2D455D5C006164AB /* ProfileViews.swift */, 67419AD4282E8E6F004F5339 /* Journals */, - 6798AA5A280AF4C700DB76F1 /* ProfileScreen.swift */, 6770A8352834D7B50006B672 /* EditProfile */, 6798AA67280B23B700DB76F1 /* UserDetailsScreen.swift */, 674D061A28280A63007E75C6 /* FriendRequestsView.swift */, @@ -620,10 +614,8 @@ buildActionMask = 2147483647; files = ( 674023402B0BC01600A7311A /* FeedbackSender.swift in Sources */, - 6798AA5B280AF4C700DB76F1 /* ProfileScreen.swift in Sources */, 674D31592D44103300A2EFE8 /* UserFlagsEnvironmentKey.swift in Sources */, 67A9C90828427DEA005D6A36 /* ParkFilterScreen.swift in Sources */, - 6798AA55280AF46300DB76F1 /* DialogsScreen.swift in Sources */, 6758463F2965B7F2000BA5E0 /* PDFViewRepresentable.swift in Sources */, 67BAF3F428361BC400DB40D9 /* PhotoSectionView.swift in Sources */, 67BAF3F82836245100DB40D9 /* CommentsView.swift in Sources */, diff --git a/SwiftUI-WorkoutApp/Libraries/SWNetwork/Sources/SWNetwork/SWNetwork.swift b/SwiftUI-WorkoutApp/Libraries/SWNetwork/Sources/SWNetwork/SWNetwork.swift index a38e4c53..3454c389 100644 --- a/SwiftUI-WorkoutApp/Libraries/SWNetwork/Sources/SWNetwork/SWNetwork.swift +++ b/SwiftUI-WorkoutApp/Libraries/SWNetwork/Sources/SWNetwork/SWNetwork.swift @@ -163,6 +163,9 @@ private extension SWNetworkService { /// - Returns: Новая ошибка @discardableResult func handleUrlSession(_ error: Error, _ request: URLRequest) -> Error { + if (error as NSError).code == -999 { + assertionFailure("Запрос отменён! Код ошибки: -999") + } logger.error( """ \(error.localizedDescription, privacy: .public) diff --git a/SwiftUI-WorkoutApp/Libraries/SWNetworkClient/Sources/SWNetworkClient/ErrorFilter.swift b/SwiftUI-WorkoutApp/Libraries/SWNetworkClient/Sources/SWNetworkClient/ErrorFilter.swift deleted file mode 100644 index 65fcd6c2..00000000 --- a/SwiftUI-WorkoutApp/Libraries/SWNetworkClient/Sources/SWNetworkClient/ErrorFilter.swift +++ /dev/null @@ -1,19 +0,0 @@ -import Foundation -import OSLog - -private let logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "SWNetworkClient", category: "ErrorFilter") - -/// Фильтрует ошибку с кодом`-999` (отмена таска) -/// -/// Заменяет `catch CancellationError { break }` -public enum ErrorFilter { - public static func message(from error: Error) -> String { - let errorCode = (error as NSError).code - if errorCode == -999 { - logger.debug("Отфильтровали ошибку с кодом -999") - return "" - } else { - return error.localizedDescription - } - } -} diff --git a/SwiftUI-WorkoutApp/Screens/Common/IncognitoProfileView.swift b/SwiftUI-WorkoutApp/Screens/Common/IncognitoProfileView.swift index 39216bdd..2dcee7d4 100644 --- a/SwiftUI-WorkoutApp/Screens/Common/IncognitoProfileView.swift +++ b/SwiftUI-WorkoutApp/Screens/Common/IncognitoProfileView.swift @@ -20,6 +20,13 @@ struct IncognitoProfileView: View { LoginScreen() } } + .navigationBarTitleDisplayMode(.large) + .transition( + .asymmetric( + insertion: .opacity, + removal: .move(edge: .bottom).combined(with: .opacity) + ) + ) } } diff --git a/SwiftUI-WorkoutApp/Screens/Common/TextEntryScreen.swift b/SwiftUI-WorkoutApp/Screens/Common/TextEntryScreen.swift index 5a757b1b..6ee2133a 100644 --- a/SwiftUI-WorkoutApp/Screens/Common/TextEntryScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Common/TextEntryScreen.swift @@ -124,7 +124,7 @@ private extension TextEntryScreen { } if isSuccess { refreshClbk() } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Common/UsersListScreen.swift b/SwiftUI-WorkoutApp/Screens/Common/UsersListScreen.swift index 8d0e081c..60b3eb93 100644 --- a/SwiftUI-WorkoutApp/Screens/Common/UsersListScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Common/UsersListScreen.swift @@ -146,7 +146,7 @@ private extension UsersListScreen { let isSuccess = try await client.sendMessage(messagingModel.message, to: userID) endMessaging(isSuccess: isSuccess) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } messagingModel.isLoading = false } @@ -191,7 +191,7 @@ private extension UsersListScreen { } } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -205,7 +205,7 @@ private extension UsersListScreen { await askForUsers(refresh: true) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Events/EventDetailsScreen.swift b/SwiftUI-WorkoutApp/Screens/Events/EventDetailsScreen.swift index e8bb4d2a..c7d6427c 100644 --- a/SwiftUI-WorkoutApp/Screens/Events/EventDetailsScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Events/EventDetailsScreen.swift @@ -117,7 +117,7 @@ private extension EventDetailsScreen { onDeletion(event.id) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -228,7 +228,7 @@ private extension EventDetailsScreen { event.trainHere = oldValue } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) event.trainHere = oldValue } isLoading = false @@ -343,7 +343,7 @@ private extension EventDetailsScreen { do { event = try await SWClient(with: defaults).getEvent(by: event.id) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -356,7 +356,7 @@ private extension EventDetailsScreen { event.comments.removeAll(where: { $0.id == id }) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -372,7 +372,7 @@ private extension EventDetailsScreen { event.photos = event.removePhotoById(id) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Events/EventFormScreen.swift b/SwiftUI-WorkoutApp/Screens/Events/EventFormScreen.swift index 55f07393..093827b2 100644 --- a/SwiftUI-WorkoutApp/Screens/Events/EventFormScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Events/EventFormScreen.swift @@ -189,7 +189,7 @@ private extension EventFormScreen { dismiss() } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Events/EventsListScreen.swift b/SwiftUI-WorkoutApp/Screens/Events/EventsListScreen.swift index 7e8464ee..c7765377 100644 --- a/SwiftUI-WorkoutApp/Screens/Events/EventsListScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Events/EventsListScreen.swift @@ -188,7 +188,7 @@ private extension EventsListScreen { if selectedEventType == .past { pastEventStorage.loadIfNeeded(&pastEvents) } - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Messages/DialogScreen.swift b/SwiftUI-WorkoutApp/Screens/Messages/DialogScreen.swift index 13f60e43..11127126 100644 --- a/SwiftUI-WorkoutApp/Screens/Messages/DialogScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Messages/DialogScreen.swift @@ -161,7 +161,7 @@ private extension DialogScreen { markedAsReadClbk(dialog) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } } @@ -171,7 +171,7 @@ private extension DialogScreen { do { messages = try await SWClient(with: defaults).getMessages(for: dialog.id).reversed() } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -186,7 +186,7 @@ private extension DialogScreen { await askForMessages(refresh: true) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Messages/DialogsListScreen.swift b/SwiftUI-WorkoutApp/Screens/Messages/DialogsListScreen.swift index 4f4240a5..28e704f7 100644 --- a/SwiftUI-WorkoutApp/Screens/Messages/DialogsListScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Messages/DialogsListScreen.swift @@ -16,8 +16,30 @@ struct DialogsListScreen: View { @State private var showDeleteConfirmation = false @State private var refreshTask: Task? @State private var deleteDialogTask: Task? + private var client: SWClient { SWClient(with: defaults) } var body: some View { + NavigationView { + ZStack { + if defaults.isAuthorized { + authorizedContentView + .navigationBarTitleDisplayMode(.inline) + .transition(.move(edge: .top).combined(with: .opacity)) + } else { + IncognitoProfileView() + } + } + .animation(.spring, value: defaults.isAuthorized) + .background(Color.swBackground) + .navigationTitle("Сообщения") + } + .navigationViewStyle(.stack) + .task { await askForDialogs() } + } +} + +private extension DialogsListScreen { + var authorizedContentView: some View { dialogList .overlay { emptyContentView } .loadingOverlay(if: isLoading) @@ -27,7 +49,6 @@ struct DialogsListScreen: View { isPresented: $showDeleteConfirmation, titleVisibility: .visible ) { deleteDialogButton } - .task { await askForDialogs() } .refreshable { await askForDialogs(refresh: true) } .toolbar { ToolbarItem(placement: .topBarLeading) { @@ -41,9 +62,7 @@ struct DialogsListScreen: View { [refreshTask, deleteDialogTask].forEach { $0?.cancel() } } } -} -private extension DialogsListScreen { var refreshButton: some View { Button { refreshTask = Task { @@ -165,14 +184,15 @@ private extension DialogsListScreen { } func askForDialogs(refresh: Bool = false) async { + guard defaults.isAuthorized else { return } if isLoading || (!dialogs.isEmpty && !refresh) { return } if !refresh { isLoading = true } do { - dialogs = try await SWClient(with: defaults).getDialogs() + dialogs = try await client.getDialogs() let unreadMessagesCount = dialogs.map(\.unreadMessagesCount).reduce(0, +) defaults.saveUnreadMessagesCount(unreadMessagesCount) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -188,11 +208,11 @@ private extension DialogsListScreen { isLoading = true do { let dialogID = dialogs[index].id - if try await SWClient(with: defaults).deleteDialog(dialogID) { + if try await client.deleteDialog(dialogID) { dialogs.remove(at: index) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Messages/DialogsScreen.swift b/SwiftUI-WorkoutApp/Screens/Messages/DialogsScreen.swift deleted file mode 100644 index 1252c121..00000000 --- a/SwiftUI-WorkoutApp/Screens/Messages/DialogsScreen.swift +++ /dev/null @@ -1,32 +0,0 @@ -import SWDesignSystem -import SwiftUI - -/// Экран "Сообщения" -struct DialogsScreen: View { - @Environment(\.userFlags) private var userFlags - - var body: some View { - NavigationView { - ZStack { - if userFlags.isAuthorized { - DialogsListScreen() - .navigationBarTitleDisplayMode(.inline) - } else { - IncognitoProfileView() - .navigationBarTitleDisplayMode(.large) - } - } - .background(Color.swBackground) - .transaction { $0.animation = nil } - .navigationTitle("Сообщения") - } - .navigationViewStyle(.stack) - } -} - -#if DEBUG -#Preview { - DialogsScreen() - .environmentObject(DefaultsService()) -} -#endif diff --git a/SwiftUI-WorkoutApp/Screens/Parks/Map/ParksMapScreen.swift b/SwiftUI-WorkoutApp/Screens/Parks/Map/ParksMapScreen.swift index c9297377..9da1adc4 100644 --- a/SwiftUI-WorkoutApp/Screens/Parks/Map/ParksMapScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Parks/Map/ParksMapScreen.swift @@ -226,7 +226,7 @@ private extension ParksMapScreen { let updatedParks = try await SWClient(with: defaults).getUpdatedParks(from: dateString) try parksManager.updateDefaultList(with: updatedParks) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Parks/ParkDetailScreen.swift b/SwiftUI-WorkoutApp/Screens/Parks/ParkDetailScreen.swift index 3b0b9006..00b0e0b8 100644 --- a/SwiftUI-WorkoutApp/Screens/Parks/ParkDetailScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Parks/ParkDetailScreen.swift @@ -439,7 +439,7 @@ private extension ParkDetailScreen { ) onDeletion(park.id) } else { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } } } diff --git a/SwiftUI-WorkoutApp/Screens/Parks/ParkFormScreen.swift b/SwiftUI-WorkoutApp/Screens/Parks/ParkFormScreen.swift index bdfc30fe..22ddab59 100644 --- a/SwiftUI-WorkoutApp/Screens/Parks/ParkFormScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Parks/ParkFormScreen.swift @@ -153,7 +153,7 @@ private extension ParkFormScreen { refreshClbk() } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Parks/ParksListScreen.swift b/SwiftUI-WorkoutApp/Screens/Parks/ParksListScreen.swift index 1945077a..162f5376 100644 --- a/SwiftUI-WorkoutApp/Screens/Parks/ParksListScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Parks/ParksListScreen.swift @@ -128,7 +128,7 @@ private extension ParksListScreen { parks = list } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/ChangePasswordScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/ChangePasswordScreen.swift index 0311aa69..f7ee8670 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/ChangePasswordScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/ChangePasswordScreen.swift @@ -142,7 +142,7 @@ private extension ChangePasswordScreen { } catch { SWAlert.shared.presentDefaultUIKit( title: "Ошибка".localized, - message: ErrorFilter.message(from: error) + message: error.localizedDescription ) } isLoading.toggle() diff --git a/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/EditProfileScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/EditProfileScreen.swift index 87a8e691..fb33e005 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/EditProfileScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/EditProfile/EditProfileScreen.swift @@ -244,7 +244,7 @@ private extension EditProfileScreen { dismiss() } catch { isLoading = false - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } } } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalEntriesScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalEntriesScreen.swift index ab4dcb33..3f1d5cde 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalEntriesScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalEntriesScreen.swift @@ -152,7 +152,7 @@ private extension JournalEntriesScreen { entries = try await SWClient(with: defaults) .getJournalEntries(for: userID, journalID: currentJournal.id) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -170,7 +170,7 @@ private extension JournalEntriesScreen { entries.removeAll(where: { $0.id == entryID }) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalSettingsScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalSettingsScreen.swift index d19fd59c..d10a579d 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalSettingsScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalSettingsScreen.swift @@ -100,7 +100,7 @@ private extension JournalSettingsScreen { updateOnSuccess(journal) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading.toggle() } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalsListScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalsListScreen.swift index 5ec382fe..3878d6db 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalsListScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/Journals/JournalsListScreen.swift @@ -145,7 +145,7 @@ private extension JournalsListScreen { defaults.setUserNeedUpdate(true) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -173,7 +173,7 @@ private extension JournalsListScreen { do { journals = try await SWClient(with: defaults).getJournals(for: userID) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -193,7 +193,7 @@ private extension JournalsListScreen { await askForJournals(refresh: true) } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/MainUserProfileScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/MainUserProfileScreen.swift index e869e3b4..1524ba43 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/MainUserProfileScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/MainUserProfileScreen.swift @@ -14,6 +14,27 @@ struct MainUserProfileScreen: View { private var client: SWClient { SWClient(with: defaults) } var body: some View { + NavigationView { + ZStack { + if defaults.isAuthorized { + authorizedContentView + .navigationBarTitleDisplayMode(.inline) + .transition(.move(edge: .top).combined(with: .opacity)) + } else { + IncognitoProfileView() + } + } + .animation(.spring, value: defaults.isAuthorized) + .background(Color.swBackground) + .navigationTitle("Профиль") + } + .navigationViewStyle(.stack) + .task { await askForUserInfo() } + } +} + +private extension MainUserProfileScreen { + var authorizedContentView: some View { ScrollView { if let user = defaults.mainUserInfo { makeProfileContent(for: user) @@ -23,7 +44,6 @@ struct MainUserProfileScreen: View { .loadingOverlay(if: isLoading) .background(Color.swBackground) .refreshable { await askForUserInfo(refresh: true) } - .task { await askForUserInfo() } .toolbar { ToolbarItem(placement: .topBarLeading) { refreshButtonIfNeeded @@ -34,9 +54,7 @@ struct MainUserProfileScreen: View { } } } -} -private extension MainUserProfileScreen { @ViewBuilder func makeProfileContent(for user: UserResponse) -> some View { VStack(spacing: 0) { @@ -125,6 +143,7 @@ private extension MainUserProfileScreen { } func askForUserInfo(refresh: Bool = false) async { + guard defaults.isAuthorized else { return } guard !isLoading else { return } if !refresh { isLoading = true } if refresh || defaults.needUpdateUser { @@ -145,7 +164,7 @@ private extension MainUserProfileScreen { try defaults.saveFriendRequests(friendRequests) try defaults.saveBlacklist(blacklist) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } } } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/ProfileScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/ProfileScreen.swift deleted file mode 100644 index 33e290f1..00000000 --- a/SwiftUI-WorkoutApp/Screens/Profile/ProfileScreen.swift +++ /dev/null @@ -1,34 +0,0 @@ -import SWDesignSystem -import SwiftUI - -/// Экран профиля пользователя -struct ProfileScreen: View { - @EnvironmentObject private var defaults: DefaultsService - - var body: some View { - NavigationView { - ZStack { - if defaults.isAuthorized { - MainUserProfileScreen() - .navigationBarTitleDisplayMode(.inline) - .transition(.move(edge: .top).combined(with: .opacity)) - } else { - IncognitoProfileView() - .navigationBarTitleDisplayMode(.large) - .transition(.move(edge: .bottom).combined(with: .opacity)) - } - } - .animation(.spring, value: defaults.isAuthorized) - .background(Color.swBackground) - .navigationTitle("Профиль") - } - .navigationViewStyle(.stack) - } -} - -#if DEBUG -#Preview { - ProfileScreen() - .environmentObject(DefaultsService()) -} -#endif diff --git a/SwiftUI-WorkoutApp/Screens/Profile/SearchUsersScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/SearchUsersScreen.swift index 09019996..fd391558 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/SearchUsersScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/SearchUsersScreen.swift @@ -109,7 +109,7 @@ private extension SearchUsersScreen { let isSuccess = try await SWClient(with: defaults).sendMessage(messagingModel.message, to: userID) endMessaging(isSuccess: isSuccess) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } messagingModel.isLoading = false } @@ -133,7 +133,7 @@ private extension SearchUsersScreen { SWAlert.shared.presentDefaultUIKit(message: "Не удалось найти такого пользователя") } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Profile/UserDetailsScreen.swift b/SwiftUI-WorkoutApp/Screens/Profile/UserDetailsScreen.swift index eb23786f..71dedfc2 100644 --- a/SwiftUI-WorkoutApp/Screens/Profile/UserDetailsScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Profile/UserDetailsScreen.swift @@ -135,7 +135,7 @@ private extension UserDetailsScreen { } } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -166,7 +166,7 @@ private extension UserDetailsScreen { } } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } isLoading = false } @@ -199,7 +199,7 @@ private extension UserDetailsScreen { do { user = try await SWClient(with: defaults).getUserByID(user.id) } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } } @@ -212,7 +212,7 @@ private extension UserDetailsScreen { messagingModel.recipient = nil } } catch { - SWAlert.shared.presentDefaultUIKit(message: ErrorFilter.message(from: error)) + SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription) } messagingModel.isLoading = false } diff --git a/SwiftUI-WorkoutApp/Screens/Root/TabViewModel.swift b/SwiftUI-WorkoutApp/Screens/Root/TabViewModel.swift index 89aac432..1c9a9005 100644 --- a/SwiftUI-WorkoutApp/Screens/Root/TabViewModel.swift +++ b/SwiftUI-WorkoutApp/Screens/Root/TabViewModel.swift @@ -69,9 +69,9 @@ extension TabViewModel { case .events: EventsListScreen() case .messages: - DialogsScreen() + DialogsListScreen() case .profile: - ProfileScreen() + MainUserProfileScreen() case .settings: SettingsScreen() } diff --git a/SwiftUI-WorkoutApp/Screens/Settings/LoginScreen.swift b/SwiftUI-WorkoutApp/Screens/Settings/LoginScreen.swift index 929388de..49a53adb 100644 --- a/SwiftUI-WorkoutApp/Screens/Settings/LoginScreen.swift +++ b/SwiftUI-WorkoutApp/Screens/Settings/LoginScreen.swift @@ -132,7 +132,7 @@ private extension LoginScreen { let userInfo = try await client.getUserByID(userId) try defaults.saveUserInfo(userInfo) } catch { - loginErrorMessage = ErrorFilter.message(from: error) + loginErrorMessage = error.localizedDescription } isLoading.toggle() } @@ -156,7 +156,7 @@ private extension LoginScreen { ) } } catch { - resetErrorMessage = ErrorFilter.message(from: error) + resetErrorMessage = error.localizedDescription } isLoading.toggle() }