Skip to content

Commit df7754f

Browse files
authored
Merge pull request #77 from OlegEremenko991/develop
Доработки на экранах с профилем и записями в дневнике
2 parents 660f4ea + 0bb4396 commit df7754f

File tree

9 files changed

+46
-34
lines changed

9 files changed

+46
-34
lines changed

SwiftUI-WorkoutApp.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,7 +1310,7 @@
13101310
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
13111311
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
13121312
CODE_SIGN_STYLE = Automatic;
1313-
CURRENT_PROJECT_VERSION = 5;
1313+
CURRENT_PROJECT_VERSION = 1;
13141314
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
13151315
DEVELOPMENT_TEAM = CR68PP2Z3F;
13161316
ENABLE_PREVIEWS = YES;
@@ -1328,7 +1328,7 @@
13281328
"$(inherited)",
13291329
"@executable_path/Frameworks",
13301330
);
1331-
MARKETING_VERSION = 3.1.5;
1331+
MARKETING_VERSION = 3.1.6;
13321332
PRODUCT_BUNDLE_IDENTIFIER = com.FGU.WorkOut;
13331333
PRODUCT_NAME = WorkoutApp;
13341334
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -1346,7 +1346,7 @@
13461346
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
13471347
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
13481348
CODE_SIGN_STYLE = Automatic;
1349-
CURRENT_PROJECT_VERSION = 5;
1349+
CURRENT_PROJECT_VERSION = 1;
13501350
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
13511351
DEVELOPMENT_TEAM = CR68PP2Z3F;
13521352
ENABLE_PREVIEWS = YES;
@@ -1364,7 +1364,7 @@
13641364
"$(inherited)",
13651365
"@executable_path/Frameworks",
13661366
);
1367-
MARKETING_VERSION = 3.1.5;
1367+
MARKETING_VERSION = 3.1.6;
13681368
PRODUCT_BUNDLE_IDENTIFIER = com.FGU.WorkOut;
13691369
PRODUCT_NAME = WorkoutApp;
13701370
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

SwiftUI-WorkoutApp/Screens/Common/SendMessage/SendMessageView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ struct SendMessageView: View {
5151
.opacity(isLoading ? 1 : 0)
5252
}
5353
.disabled(isLoading)
54+
.interactiveDismissDisabled(isLoading)
5455
.alert(errorTitle, isPresented: $showErrorAlert) {
5556
Button("Ok", action: dismissError)
5657
}

SwiftUI-WorkoutApp/Screens/Common/UsersList/UsersListViewModel.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ final class UsersListViewModel: ObservableObject {
2626
do {
2727
if try await APIService(with: defaults).respondToFriendRequest(from: userID, accept: accept) {
2828
friendRequests = defaults.friendRequestsList.map(UserModel.init)
29+
defaults.setUserNeedUpdate(true)
2930
}
3031
} catch {
3132
errorMessage = ErrorFilterService.message(from: error)
@@ -62,8 +63,10 @@ private extension UsersListViewModel {
6263
func makeBlacklist(refresh: Bool, with defaults: DefaultsProtocol) async {
6364
if !refresh { isLoading.toggle() }
6465
do {
65-
let blacklist = try await APIService(with: defaults).getBlacklist()
66-
users = blacklist.map(UserModel.init)
66+
if defaults.blacklistedUsers.isEmpty {
67+
try await APIService(with: defaults).getBlacklist()
68+
}
69+
users = defaults.blacklistedUsers.map(UserModel.init)
6770
} catch {
6871
errorMessage = ErrorFilterService.message(from: error)
6972
}

SwiftUI-WorkoutApp/Screens/Journals/EntriesList/JournalEntriesList.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ struct JournalEntriesList: View {
3232
JournalEntryCell(
3333
model: $0,
3434
reportClbk: { viewModel.reportEntry($0) },
35+
canDelete: viewModel.checkIfCanDelete(entry: $0),
3536
deleteClbk: initiateDeletion,
3637
editClbk: setupEntryToEdit
3738
)

SwiftUI-WorkoutApp/Screens/Journals/EntriesList/JournalEntriesListViewModel.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ final class JournalEntriesListViewModel: ObservableObject {
3232
if !refresh { isLoading.toggle() }
3333
}
3434

35+
/// Проверяем возможность удаления указанной записи
36+
///
37+
/// Сервер не дает удалить самую первую запись в дневнике
38+
func checkIfCanDelete(entry: JournalEntryResponse) -> Bool {
39+
entry.id != list.map(\.id).min()
40+
}
41+
3542
func delete(_ entryID: Int?, with defaults: DefaultsProtocol) async {
3643
guard let entryID, !isLoading else { return }
3744
isLoading.toggle()

SwiftUI-WorkoutApp/Screens/Journals/EntriesList/JournalEntryCell.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ struct JournalEntryCell: View {
77
@EnvironmentObject private var defaults: DefaultsService
88
let model: JournalEntryResponse
99
let reportClbk: (JournalEntryResponse) -> Void
10+
let canDelete: Bool
1011
let deleteClbk: (Int) -> Void
1112
let editClbk: (JournalEntryResponse) -> Void
1213

@@ -46,10 +47,12 @@ private extension JournalEntryCell {
4647
} label: {
4748
Label("Изменить", systemImage: "rectangle.and.pencil.and.ellipsis")
4849
}
49-
Button(role: .destructive) {
50-
deleteClbk(model.id)
51-
} label: {
52-
Label("Удалить", systemImage: "trash")
50+
if canDelete {
51+
Button(role: .destructive) {
52+
deleteClbk(model.id)
53+
} label: {
54+
Label("Удалить", systemImage: "trash")
55+
}
5356
}
5457
} else {
5558
Button(role: .destructive) {
@@ -78,6 +81,7 @@ struct JournalEntryCell_Previews: PreviewProvider {
7881
JournalEntryCell(
7982
model: .preview,
8083
reportClbk: { _ in },
84+
canDelete: true,
8185
deleteClbk: { _ in },
8286
editClbk: { _ in }
8387
)

SwiftUI-WorkoutApp/Screens/Profile/Detail/UserDetailsView.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,18 @@ private extension UserDetailsView {
193193

194194
var friendsButton: some View {
195195
NavigationLink(destination: UsersListView(mode: .friends(userID: viewModel.user.id))) {
196-
HStack {
196+
HStack(spacing: 8) {
197197
Label("Друзья", systemImage: "person.3.sequence.fill")
198198
Spacer()
199199
if friendRequestsCount > .zero, isMainUser {
200200
Image(systemName: "\(friendRequestsCount).circle.fill")
201201
.foregroundColor(.red)
202-
.padding(.trailing, 8)
202+
}
203+
if viewModel.user.friendsCount > .zero {
204+
Text(viewModel.user.friendsCount.description)
205+
.foregroundColor(.secondary)
203206
}
204207
}
205-
.badge(viewModel.user.friendsCount.description)
206208
}
207209
}
208210

@@ -240,10 +242,6 @@ private extension UserDetailsView {
240242

241243
func askForUserInfo(refresh: Bool = false) async {
242244
await viewModel.makeUserInfo(refresh: refresh, with: defaults)
243-
if isMainUser {
244-
await viewModel.checkFriendRequests(with: defaults)
245-
await viewModel.checkBlacklist(with: defaults)
246-
}
247245
}
248246

249247
var messageSheet: some View {

SwiftUI-WorkoutApp/Screens/Profile/Detail/UserDetailsViewModel.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,30 +32,22 @@ final class UserDetailsViewModel: ObservableObject {
3232
} else {
3333
await makeUserInfo(for: user.id, with: defaults)
3434
}
35+
await checkFriendRequests(with: defaults)
36+
await checkBlacklist(with: defaults)
3537
} else {
3638
if user.isFull, !refresh {
3739
isLoading.toggle()
3840
return
3941
}
4042
await makeUserInfo(for: user.id, with: defaults)
41-
friendActionOption = defaults.friendsIdsList.contains(user.id)
42-
? .removeFriend
43-
: .sendFriendRequest
44-
blacklistActionOption = defaults.blacklistedUsers.compactMap(\.userID).contains(user.id)
45-
? .remove
46-
: .add
43+
let isPersonInFriendList = defaults.friendsIdsList.contains(user.id)
44+
friendActionOption = isPersonInFriendList ? .removeFriend : .sendFriendRequest
45+
let isPersonBlocked = defaults.blacklistedUsers.compactMap(\.userID).contains(user.id)
46+
blacklistActionOption = isPersonBlocked ? .remove : .add
4747
}
4848
if !refresh { isLoading.toggle() }
4949
}
5050

51-
func checkFriendRequests(with defaults: DefaultsProtocol) async {
52-
try? await APIService(with: defaults).getFriendRequests()
53-
}
54-
55-
func checkBlacklist(with defaults: DefaultsProtocol) async {
56-
_ = try? await APIService(with: defaults).getBlacklist()
57-
}
58-
5951
func blacklistUser(with defaults: DefaultsProtocol) async {
6052
guard user.id != defaults.mainUserInfo?.userID else { return }
6153
if isLoading { return }
@@ -109,4 +101,12 @@ private extension UserDetailsViewModel {
109101
responseMessage = ErrorFilterService.message(from: error)
110102
}
111103
}
104+
105+
func checkFriendRequests(with defaults: DefaultsProtocol) async {
106+
try? await APIService(with: defaults).getFriendRequests()
107+
}
108+
109+
func checkBlacklist(with defaults: DefaultsProtocol) async {
110+
try? await APIService(with: defaults).getBlacklist()
111+
}
112112
}

SwiftUI-WorkoutApp/Services/APIService.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,10 @@ struct APIService {
142142
}
143143

144144
/// Загружает черный список пользователей, в случае успеха сохраняет в `defaults`
145-
@discardableResult
146-
func getBlacklist() async throws -> [UserResponse] {
145+
func getBlacklist() async throws {
147146
let endpoint = Endpoint.getBlacklist
148147
let result = try await makeResult([UserResponse].self, for: endpoint.urlRequest(with: baseUrlString))
149148
try await defaults.saveBlacklist(result)
150-
return result
151149
}
152150

153151
/// Отвечает на заявку для добавления в друзья

0 commit comments

Comments
 (0)