Skip to content

Commit 9b31812

Browse files
committed
Доработки
+ доработал цвета в таббаре и навбаре
1 parent c510c33 commit 9b31812

File tree

5 files changed

+42
-21
lines changed

5 files changed

+42
-21
lines changed

SwiftUI-WorkoutApp.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,7 @@
856856
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
857857
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
858858
CODE_SIGN_STYLE = Automatic;
859-
CURRENT_PROJECT_VERSION = 7;
859+
CURRENT_PROJECT_VERSION = 8;
860860
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
861861
DEVELOPMENT_TEAM = CR68PP2Z3F;
862862
ENABLE_PREVIEWS = YES;
@@ -907,7 +907,7 @@
907907
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
908908
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
909909
CODE_SIGN_STYLE = Automatic;
910-
CURRENT_PROJECT_VERSION = 7;
910+
CURRENT_PROJECT_VERSION = 8;
911911
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
912912
DEVELOPMENT_TEAM = CR68PP2Z3F;
913913
ENABLE_PREVIEWS = YES;

SwiftUI-WorkoutApp/Libraries/SWNetworkClient/Sources/SWNetworkClient/SWClient.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ public struct SWClient: Sendable {
6262
/// - Parameters:
6363
/// - userID: `id` пользователя
6464
/// - Returns: вся информация о пользователе
65-
@discardableResult
6665
public func getUserByID(_ userID: Int) async throws -> UserResponse {
6766
let endpoint = Endpoint.getUser(id: userID)
6867
return try await makeResult(for: endpoint)

SwiftUI-WorkoutApp/Screens/Messages/DialogsListScreen.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ struct DialogsListScreen: View {
3333
.navigationTitle("Сообщения")
3434
}
3535
.navigationViewStyle(.stack)
36-
.task { await askForDialogs() }
36+
.onChange(of: defaults.isAuthorized, perform: viewModel.clearDialogsOnLogout)
37+
.task(id: defaults.isAuthorized) { await askForDialogs() }
3738
}
3839
}
3940

@@ -48,7 +49,6 @@ private extension DialogsListScreen {
4849
isPresented: $showDeleteConfirmation,
4950
titleVisibility: .visible
5051
) { deleteDialogButton }
51-
.refreshable { await askForDialogs(refresh: true) }
5252
.toolbar {
5353
ToolbarItem(placement: .topBarLeading) {
5454
refreshButton
@@ -67,8 +67,8 @@ private extension DialogsListScreen {
6767
} label: {
6868
Icons.Regular.refresh.view
6969
}
70-
.opacity(viewModel.showRefreshButton ? 1 : 0)
71-
.disabled(viewModel.isLoading)
70+
.opacity(viewModel.showEmptyView ? 1 : 0)
71+
.disabled(viewModel.isLoading || !isNetworkConnected)
7272
}
7373

7474
var friendListButton: some View {
@@ -109,6 +109,7 @@ private extension DialogsListScreen {
109109
}
110110
.listStyle(.plain)
111111
.opacity(viewModel.hasDialogs ? 1 : 0)
112+
.refreshable { await askForDialogs(refresh: true) }
112113
}
113114
.animation(.default, value: viewModel.dialogs.count)
114115
.background(

SwiftUI-WorkoutApp/Screens/Messages/DialogsViewModel.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ final class DialogsViewModel: ObservableObject {
88
@Published private(set) var isLoading = false
99
var hasDialogs: Bool { !dialogs.isEmpty }
1010
var showEmptyView: Bool { !hasDialogs && !isLoading }
11-
var showRefreshButton: Bool {
12-
showEmptyView || !DeviceOSVersionChecker.iOS16Available
13-
}
1411

1512
@MainActor
1613
func askForDialogs(
@@ -54,4 +51,10 @@ final class DialogsViewModel: ObservableObject {
5451
let newValue = defaults.unreadMessagesCount - dialog.unreadMessagesCount
5552
defaults.saveUnreadMessagesCount(newValue)
5653
}
54+
55+
@MainActor
56+
func clearDialogsOnLogout(isAuthorized: Bool) {
57+
guard !isAuthorized else { return }
58+
dialogs.removeAll()
59+
}
5760
}

SwiftUI-WorkoutApp/SwiftUI_WorkoutAppApp.swift

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ struct SwiftUI_WorkoutAppApp: App {
1111
@StateObject private var defaults = DefaultsService()
1212
@StateObject private var network = NetworkStatus()
1313
@StateObject private var parksManager = ParksManager()
14+
@StateObject private var dialogsViewModel = DialogsViewModel()
1415
@State private var countriesUpdateTask: Task<Void, Never>?
1516
@State private var socialUpdateTask: Task<Void, Never>?
17+
@State private var dialogsUpdateTask: Task<Void, Never>?
1618
private let countriesStorage = SWAddress()
1719
private var client: SWClient { SWClient(with: defaults) }
1820
private var colorScheme: ColorScheme? {
@@ -38,6 +40,7 @@ struct SwiftUI_WorkoutAppApp: App {
3840
.environmentObject(network)
3941
.environmentObject(defaults)
4042
.environmentObject(parksManager)
43+
.environmentObject(dialogsViewModel)
4144
.preferredColorScheme(colorScheme)
4245
.environment(\.isNetworkConnected, network.isConnected)
4346
.environment(\.userFlags, defaults.userFlags)
@@ -67,18 +70,15 @@ struct SwiftUI_WorkoutAppApp: App {
6770
private func updateSocialInfoIfNeeded() {
6871
guard let mainUserId = defaults.mainUserInfo?.id else { return }
6972
socialUpdateTask = Task {
70-
async let socialUpdatesTask = client.getSocialUpdates(userID: mainUserId)
71-
async let unreadCountTask = UnreadCountService(client: client).getUnreadCount()
72-
let (socialUpdates, unreadCount) = await (socialUpdatesTask, unreadCountTask)
73-
if let socialUpdates {
74-
try? defaults.saveFriendsIds(socialUpdates.friends.map(\.id))
75-
try? defaults.saveFriendRequests(socialUpdates.friendRequests)
76-
try? defaults.saveBlacklist(socialUpdates.blacklist)
73+
if let result = await client.getSocialUpdates(userID: mainUserId) {
74+
try? defaults.saveFriendsIds(result.friends.map(\.id))
75+
try? defaults.saveFriendRequests(result.friendRequests)
76+
try? defaults.saveBlacklist(result.blacklist)
7777
defaults.setUserNeedUpdate(false)
7878
}
79-
if let unreadCount {
80-
defaults.saveUnreadMessagesCount(unreadCount)
81-
}
79+
}
80+
dialogsUpdateTask = Task {
81+
try? await dialogsViewModel.askForDialogs(refresh: true, defaults: defaults)
8282
}
8383
}
8484
}
@@ -93,7 +93,13 @@ private extension SwiftUI_WorkoutAppApp {
9393
$0.backgroundColor = .init(Color.swBackground)
9494
$0.shadowColor = nil
9595
}
96+
let tabBarItemAppearance = makeTabBarItemAppearance()
97+
tabBarAppearance.inlineLayoutAppearance = tabBarItemAppearance
98+
tabBarAppearance.stackedLayoutAppearance = tabBarItemAppearance
99+
tabBarAppearance.compactInlineLayoutAppearance = tabBarItemAppearance
100+
UITabBar.appearance().standardAppearance = tabBarAppearance
96101
UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance
102+
UINavigationBar.appearance().standardAppearance = navBarAppearance
97103
UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
98104
fixAlertAccentColor()
99105
if !DeviceOSVersionChecker.iOS16Available {
@@ -104,15 +110,27 @@ private extension SwiftUI_WorkoutAppApp {
104110
/// Исправляет баг с accentColor у алертов, [обсуждение](https://developer.apple.com/forums/thread/673147)
105111
///
106112
/// Без этой настройки у всех алертов при первом появлении стандартный tintColor (синий),
107-
/// а при нажатии он меняется на `AccentColor` в проекте
113+
/// а при нажатии он меняется на AccentColor в проекте
108114
func fixAlertAccentColor() {
109115
UIView.appearance().tintColor = .accent
110116
}
111117

118+
/// Настройки цветовых параметров для табов в таббаре
119+
func makeTabBarItemAppearance() -> UITabBarItemAppearance {
120+
let tabBarItemAppearance = UITabBarItemAppearance()
121+
tabBarItemAppearance.normal.iconColor = .init(.swSmallElements)
122+
tabBarItemAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor(.swSmallElements)]
123+
tabBarItemAppearance.normal.badgeBackgroundColor = .accent
124+
tabBarItemAppearance.normal.badgeTextAttributes = [.foregroundColor: UIColor(.swBackground)]
125+
return tabBarItemAppearance
126+
}
127+
128+
#if DEBUG
112129
func prepareForUITestIfNeeded() {
113130
if ProcessInfo.processInfo.arguments.contains("UITest") {
114131
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
115132
UIView.setAnimationsEnabled(false)
116133
}
117134
}
135+
#endif
118136
}

0 commit comments

Comments
 (0)