@@ -8,21 +8,17 @@ struct EventDetailsView: View {
88 @Environment ( \. dismiss) private var dismiss
99 @Environment ( \. networkConnected) private var isNetworkConnected
1010 @EnvironmentObject private var defaults : DefaultsService
11+ @State private var navigationDestination : NavigationDestination ?
12+ @State private var sheetItem : SheetItem ?
1113 @State private var isLoading = false
1214 @State private var showErrorAlert = false
1315 @State private var alertMessage = " "
1416 @State private var showDeleteDialog = false
15- @State private var sheetItem : SheetItem ?
1617 @State private var goingToEventTask : Task < Void , Never > ?
1718 @State private var deleteCommentTask : Task < Void , Never > ?
1819 @State private var deletePhotoTask : Task < Void , Never > ?
1920 @State private var deleteEventTask : Task < Void , Never > ?
2021 @State private var refreshButtonTask : Task < Void , Never > ?
21- /// Мероприятие для редактирования
22- ///
23- /// Задаем при нажатии на кнопку редактирования,
24- /// чтобы в нем были актуальные данные
25- @State private var eventToEdit : EventResponse ?
2622 @State var event : EventResponse
2723 let onDeletion : ( Int ) -> Void
2824
@@ -53,7 +49,7 @@ struct EventDetailsView: View {
5349 . background {
5450 NavigationLink (
5551 destination: lazyDestination,
56- isActive: $eventToEdit . mappedToBool ( )
52+ isActive: $navigationDestination . mappedToBool ( )
5753 )
5854 }
5955 . loadingOverlay ( if: isLoading)
@@ -82,15 +78,21 @@ struct EventDetailsView: View {
8278}
8379
8480private extension EventDetailsView {
85- enum SheetItem : Identifiable , Equatable {
81+ enum NavigationDestination {
82+ case eventAuthor( UserResponse )
83+ case eventParticipants( [ UserResponse ] )
84+ case editEvent( EventResponse )
85+ }
86+
87+ enum SheetItem : Identifiable {
8688 var id : Int {
8789 switch self {
8890 case . newComment: 1
8991 case . editComment: 2
9092 }
9193 }
9294
93- case newComment
95+ case newComment( _ eventId : Int )
9496 case editComment( CommentResponse )
9597 }
9698}
@@ -182,8 +184,8 @@ private extension EventDetailsView {
182184 var participantsSection : some View {
183185 Group {
184186 if event. hasParticipants {
185- NavigationLink {
186- UsersListView ( mode : . eventParticipants( list : event. participants) )
187+ Button {
188+ navigationDestination = . eventParticipants( event. participants)
187189 } label: {
188190 FormRowView (
189191 title: " Участники " ,
@@ -238,25 +240,29 @@ private extension EventDetailsView {
238240 }
239241 }
240242
243+ @ViewBuilder
241244 var authorSection : some View {
242- let user = event. author
243- return SectionView ( headerWithPadding: " Организатор " , mode: . regular) {
244- NavigationLink ( destination: UserDetailsView ( for: user) ) {
245- UserRowView (
246- mode: . regular(
247- . init(
248- imageURL: user? . avatarURL,
249- name: user? . userName ?? " " ,
250- address: SWAddress ( user? . countryID, user? . cityID) ? . address ?? " "
245+ if let user = event. author {
246+ SectionView ( headerWithPadding: " Организатор " , mode: . regular) {
247+ Button {
248+ navigationDestination = . eventAuthor( user)
249+ } label: {
250+ UserRowView (
251+ mode: . regular(
252+ . init(
253+ imageURL: user. avatarURL,
254+ name: user. userName ?? " " ,
255+ address: SWAddress ( user. countryID, user. cityID) ? . address ?? " "
256+ )
251257 )
252258 )
259+ }
260+ . disabled (
261+ !defaults. isAuthorized
262+ || isEventAuthor
263+ || !isNetworkConnected
253264 )
254265 }
255- . disabled (
256- !defaults. isAuthorized
257- || isEventAuthor
258- || !isNetworkConnected
259- )
260266 }
261267 }
262268
@@ -266,12 +272,7 @@ private extension EventDetailsView {
266272 reportClbk: reportComment,
267273 deleteClbk: deleteComment,
268274 editClbk: { sheetItem = . editComment( $0) } ,
269- isCreatingComment: . init(
270- get: { sheetItem == . newComment } ,
271- set: { newValue in
272- sheetItem = newValue ? . newComment : nil
273- }
274- )
275+ createCommentClbk: { sheetItem = . newComment( event. id) }
275276 )
276277 }
277278
@@ -282,15 +283,22 @@ private extension EventDetailsView {
282283 }
283284
284285 var editEventButton : some View {
285- Button { eventToEdit = event } label: {
286+ Button { navigationDestination = . editEvent ( event) } label: {
286287 Label ( " Изменить " , systemImage: Icons . Regular. pencil. rawValue)
287288 }
288289 }
289290
290291 @ViewBuilder
291292 var lazyDestination : some View {
292- if let eventToEdit {
293- EventFormView ( mode: . editExisting( eventToEdit) , refreshClbk: refreshAction)
293+ if let navigationDestination {
294+ switch navigationDestination {
295+ case let . eventAuthor( user) :
296+ UserDetailsView ( for: user)
297+ case let . eventParticipants( users) :
298+ UsersListView ( mode: . eventParticipants( list: users) )
299+ case let . editEvent( eventToEdit) :
300+ EventFormView ( mode: . editExisting( eventToEdit) , refreshClbk: refreshAction)
301+ }
294302 }
295303 }
296304
@@ -319,9 +327,9 @@ private extension EventDetailsView {
319327 ) ,
320328 refreshClbk: refreshAction
321329 )
322- case . newComment:
330+ case let . newComment( eventId ) :
323331 TextEntryView (
324- mode: . newForEvent( id: event . id ) ,
332+ mode: . newForEvent( id: eventId ) ,
325333 refreshClbk: refreshAction
326334 )
327335 }
0 commit comments