Skip to content

Commit b8e6dde

Browse files
authored
Доработки (#302)
1. Скрываем клавиатуру на экранах с формой площадки и мероприятия при скролле 2. Увеличил максимальное количество строк для названия площадки/мероприятия до трех 3. Авторизованный пользователь может перейти в профиль автора комментария для площадки/мероприятия
1 parent dfae46a commit b8e6dde

File tree

8 files changed

+104
-50
lines changed

8 files changed

+104
-50
lines changed

SwiftUI-WorkoutApp.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -879,7 +879,7 @@
879879
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
880880
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
881881
CODE_SIGN_STYLE = Automatic;
882-
CURRENT_PROJECT_VERSION = 3;
882+
CURRENT_PROJECT_VERSION = 4;
883883
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
884884
DEVELOPMENT_TEAM = CR68PP2Z3F;
885885
ENABLE_PREVIEWS = YES;
@@ -932,7 +932,7 @@
932932
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
933933
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
934934
CODE_SIGN_STYLE = Automatic;
935-
CURRENT_PROJECT_VERSION = 3;
935+
CURRENT_PROJECT_VERSION = 4;
936936
DEVELOPMENT_ASSET_PATHS = "SwiftUI-WorkoutApp/Preview\\ Content/PreviewContent.swift SwiftUI-WorkoutApp/Preview\\ Content";
937937
DEVELOPMENT_TEAM = CR68PP2Z3F;
938938
ENABLE_PREVIEWS = YES;
@@ -1017,7 +1017,7 @@
10171017
repositoryURL = "https://github.com/OlegEremenko991/SWDesignSystem";
10181018
requirement = {
10191019
kind = upToNextMajorVersion;
1020-
minimumVersion = 1.9.0;
1020+
minimumVersion = 1.10.0;
10211021
};
10221022
};
10231023
67F9534D2964A5700077DFDC /* XCRemoteSwiftPackageReference "ImagePicker" */ = {

SwiftUI-WorkoutApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SwiftUI-WorkoutApp/Screens/Common/CommentsView.swift

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ struct CommentsView: View {
1212
let deleteClbk: (Int) -> Void
1313
let editClbk: (CommentResponse) -> Void
1414
let createCommentClbk: () -> Void
15+
let openProfile: (UserResponse) -> Void
1516

1617
var body: some View {
1718
VStack(spacing: 16) {
@@ -26,9 +27,20 @@ struct CommentsView: View {
2627
bodyText: comment.formattedBody,
2728
isCommentByMainUser: comment.user?.id == mainUserId,
2829
isNetworkConnected: isNetworkConnected,
29-
reportAction: { reportClbk(comment) },
30-
editAction: { editClbk(comment) },
31-
deleteAction: { deleteClbk(comment.id) }
30+
action: { option in
31+
switch option {
32+
case .report:
33+
reportClbk(comment)
34+
case .edit:
35+
editClbk(comment)
36+
case .delete:
37+
deleteClbk(comment.id)
38+
case .openProfile:
39+
if let user = comment.user {
40+
openProfile(user)
41+
}
42+
}
43+
}
3244
)
3345
.withDivider(if: index != items.endIndex - 1)
3446
}
@@ -51,7 +63,8 @@ struct CommentsView: View {
5163
reportClbk: { _ in },
5264
deleteClbk: { _ in },
5365
editClbk: { _ in },
54-
createCommentClbk: {}
66+
createCommentClbk: {},
67+
openProfile: { _ in }
5568
)
5669
.padding(.horizontal)
5770
}
@@ -63,7 +76,8 @@ struct CommentsView: View {
6376
reportClbk: { _ in },
6477
deleteClbk: { _ in },
6578
editClbk: { _ in },
66-
createCommentClbk: {}
79+
createCommentClbk: {},
80+
openProfile: { _ in }
6781
)
6882
.padding(.horizontal)
6983
}

SwiftUI-WorkoutApp/Screens/Events/EventDetailsScreen.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ private extension EventDetailsScreen {
7979
case eventAuthor(UserResponse)
8080
case eventParticipants([UserResponse])
8181
case editEvent(EventResponse)
82+
case commentAuthor(UserResponse)
8283
}
8384

8485
enum SheetItem: Identifiable {
@@ -124,7 +125,7 @@ private extension EventDetailsScreen {
124125
}
125126
}
126127
}
127-
.disabled(isLoading || !isNetworkConnected)
128+
.opacity(isLoading ? 0 : 1)
128129
}
129130

130131
var headerAndMapSection: some View {
@@ -294,7 +295,11 @@ private extension EventDetailsScreen {
294295
reportClbk: reportComment,
295296
deleteClbk: deleteComment,
296297
editClbk: { sheetItem = .editComment($0) },
297-
createCommentClbk: { sheetItem = .newComment(event.id) }
298+
createCommentClbk: { sheetItem = .newComment(event.id) },
299+
openProfile: {
300+
guard defaults.isAuthorized else { return }
301+
navigationDestination = .commentAuthor($0)
302+
}
298303
)
299304
}
300305

@@ -314,7 +319,7 @@ private extension EventDetailsScreen {
314319
var lazyDestination: some View {
315320
if let navigationDestination {
316321
switch navigationDestination {
317-
case let .eventAuthor(user):
322+
case let .eventAuthor(user), let .commentAuthor(user):
318323
UserDetailsScreen(for: user)
319324
case let .eventParticipants(users):
320325
ParticipantsScreen(mode: .event(list: users))

SwiftUI-WorkoutApp/Screens/Events/EventFormScreen.swift

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,17 @@ struct EventFormScreen: View {
3838
}
3939

4040
var body: some View {
41-
ScrollView {
42-
VStack(spacing: 16) {
43-
eventNameSection
44-
descriptionSection
45-
parkSection
46-
datePickerSection
47-
pickedImagesGrid
48-
saveButton
49-
}
50-
.padding()
41+
if #available(iOS 16.0, *) {
42+
scrollView
43+
.scrollDismissesKeyboard(.immediately)
44+
} else {
45+
scrollView
46+
.simultaneousGesture(
47+
DragGesture().onChanged { _ in
48+
focus = nil
49+
}
50+
)
5151
}
52-
.loadingOverlay(if: isLoading)
53-
.background(Color.swBackground)
54-
.onDisappear { saveEventTask?.cancel() }
55-
.navigationTitle(mode.title)
56-
.navigationBarTitleDisplayMode(.inline)
57-
.interactiveDismissDisabled(isLoading)
5852
}
5953
}
6054

@@ -89,11 +83,32 @@ private extension EventFormScreen {
8983
case eventName, eventDescription
9084
}
9185

86+
var scrollView: some View {
87+
ScrollView {
88+
VStack(spacing: 16) {
89+
eventNameSection
90+
descriptionSection
91+
parkSection
92+
datePickerSection
93+
pickedImagesGrid
94+
saveButton
95+
}
96+
.padding()
97+
}
98+
.loadingOverlay(if: isLoading)
99+
.background(Color.swBackground)
100+
.onDisappear { saveEventTask?.cancel() }
101+
.navigationTitle(mode.title)
102+
.navigationBarTitleDisplayMode(.inline)
103+
.interactiveDismissDisabled(isLoading)
104+
}
105+
92106
var eventNameSection: some View {
93107
SectionView(header: "Название", mode: .regular) {
94108
SWTextField(
95109
placeholder: "Название мероприятия",
96110
text: $eventForm.title,
111+
lineLimit: 3,
97112
isFocused: focus == .eventName
98113
)
99114
.focused($focus, equals: .eventName)

SwiftUI-WorkoutApp/Screens/Messages/DialogScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private extension DialogScreen {
8383
openAnotherUserProfile.toggle()
8484
}
8585
)
86-
.borderedClipshape()
86+
.borderedCircleClipShape()
8787
}
8888
)
8989
.disabled(isToolbarItemDisabled)

SwiftUI-WorkoutApp/Screens/Parks/ParkDetailScreen.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ private extension ParkDetailScreen {
8383
case parkParticipants([UserResponse])
8484
case editPark(Park)
8585
case createEvent(_ parkId: Int, _ parkLongTitle: String)
86+
case commentAuthor(UserResponse)
8687
}
8788

8889
enum SheetItem: Identifiable {
@@ -129,7 +130,7 @@ private extension ParkDetailScreen {
129130
}
130131
}
131132
}
132-
.disabled(isLoading || !isNetworkConnected)
133+
.opacity(isLoading ? 0 : 1)
133134
}
134135

135136
var headerAndMapSection: some View {
@@ -194,7 +195,7 @@ private extension ParkDetailScreen {
194195
var lazyDestination: some View {
195196
if let navigationDestination {
196197
switch navigationDestination {
197-
case let .parkAuthor(user):
198+
case let .parkAuthor(user), let .commentAuthor(user):
198199
UserDetailsScreen(for: user)
199200
case let .parkParticipants(users):
200201
ParticipantsScreen(mode: .park(list: users))
@@ -294,7 +295,11 @@ private extension ParkDetailScreen {
294295
editClbk: {
295296
sheetItem = .editComment(park.id, $0.id, $0.formattedBody)
296297
},
297-
createCommentClbk: { sheetItem = .createComment(park.id) }
298+
createCommentClbk: { sheetItem = .createComment(park.id) },
299+
openProfile: {
300+
guard defaults.isAuthorized else { return }
301+
navigationDestination = .commentAuthor($0)
302+
}
298303
)
299304
}
300305

SwiftUI-WorkoutApp/Screens/Parks/ParkFormScreen.swift

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,17 @@ struct ParkFormScreen: View {
4040
}
4141

4242
var body: some View {
43-
ScrollView {
44-
VStack(spacing: 0) {
45-
VStack(spacing: 12) {
46-
addressSection
47-
typePicker
48-
sizePicker
49-
}
50-
pickedImagesGrid
51-
saveButton
52-
}
53-
.padding([.horizontal, .bottom])
43+
if #available(iOS 16.0, *) {
44+
scrollView
45+
.scrollDismissesKeyboard(.immediately)
46+
} else {
47+
scrollView
48+
.simultaneousGesture(
49+
DragGesture().onChanged { _ in
50+
isFocused = false
51+
}
52+
)
5453
}
55-
.loadingOverlay(if: isLoading)
56-
.background(Color.swBackground)
57-
.onDisappear { saveParkTask?.cancel() }
58-
.navigationTitle("Площадка")
59-
.navigationBarTitleDisplayMode(.inline)
60-
.interactiveDismissDisabled(isLoading)
6154
}
6255
}
6356

@@ -80,11 +73,33 @@ extension ParkFormScreen {
8073
}
8174

8275
private extension ParkFormScreen {
76+
var scrollView: some View {
77+
ScrollView {
78+
VStack(spacing: 0) {
79+
VStack(spacing: 12) {
80+
addressSection
81+
typePicker
82+
sizePicker
83+
}
84+
pickedImagesGrid
85+
saveButton
86+
}
87+
.padding([.horizontal, .bottom])
88+
}
89+
.loadingOverlay(if: isLoading)
90+
.background(Color.swBackground)
91+
.onDisappear { saveParkTask?.cancel() }
92+
.navigationTitle("Площадка")
93+
.navigationBarTitleDisplayMode(.inline)
94+
.interactiveDismissDisabled(isLoading)
95+
}
96+
8397
var addressSection: some View {
8498
SectionView(header: "Адрес", mode: .regular) {
8599
SWTextField(
86100
placeholder: "Адрес площадки",
87101
text: $parkForm.address,
102+
lineLimit: 3,
88103
isFocused: isFocused
89104
)
90105
.focused($isFocused)

0 commit comments

Comments
 (0)