@@ -3,75 +3,108 @@ import SwiftUI
33
44struct NewEventDetailView : View {
55 @Environment ( \. presentationMode) var presentationMode
6+ @EnvironmentObject var loginViewModel : LoginViewModel
7+
68 @ObservedObject var viewModel = NewEventViewModel ( )
9+
10+ @State private var isLoginRequiredPopupVisible : Bool = false
11+ @State private var isPopupVisible : Bool = false
12+ @State private var showLoginView : Bool = false
13+ @State private var selectedCoupon : CouponBasicModel = CouponBasicModel ( couponId: 0 , couponName: " " , marketId: 0 , marketName: " " , address: " " , thumbnail: " " , isAvailable: false , isMemberIssued: false , couponType: " " )
14+
715 var currentMonth : String
816
917 var body : some View {
10- VStack ( spacing: 0 ) {
11- Divider ( )
12- . background ( Color . gray. opacity ( 0.5 ) )
13- ScrollView {
14- LazyVStack ( spacing: 16 ) {
15- ForEach ( Array ( viewModel. newCoupons. enumerated ( ) ) , id: \. offset) { index, coupon in
16- NavigationLink ( destination:
17- MarketDetailView ( marketId: coupon. marketId)
18- ) {
19- let coupon = CouponBasicModel (
20- couponId: coupon. couponId,
21- couponName: coupon. couponName,
22- marketId: coupon. marketId,
23- marketName: coupon. marketName,
24- address: coupon. address,
25- thumbnail: coupon. thumbnail,
26- isAvailable: coupon. isAvailable,
27- isMemberIssued: coupon. isMemberIssued
28- )
29-
30- VStack {
31- CouponInfoCell (
32- viewModel: CouponInfoCellViewModel ( coupon: coupon)
18+ ZStack {
19+ VStack ( spacing: 0 ) {
20+ Divider ( )
21+ . background ( Color . gray. opacity ( 0.5 ) )
22+ ScrollView {
23+ LazyVStack ( spacing: 16 ) {
24+ ForEach ( Array ( viewModel. newCoupons. enumerated ( ) ) , id: \. offset) { index, coupon in
25+ NavigationLink ( destination:
26+ MarketDetailView ( marketId: coupon. marketId)
27+ ) {
28+ let coupon = CouponBasicModel (
29+ couponId: coupon. couponId,
30+ couponName: coupon. couponName,
31+ marketId: coupon. marketId,
32+ marketName: coupon. marketName,
33+ address: coupon. address,
34+ thumbnail: coupon. thumbnail,
35+ isAvailable: coupon. isAvailable,
36+ isMemberIssued: coupon. isMemberIssued,
37+ couponType: coupon. couponType
3338 )
39+
40+ VStack {
41+ CouponInfoCell (
42+ viewModel: CouponInfoCellViewModel ( coupon: coupon) ,
43+ isLoginRequiredPopupVisible: $isLoginRequiredPopupVisible,
44+ isPopupVisible: $isPopupVisible,
45+ coupon: $selectedCoupon
46+ )
47+
48+ Divider ( )
49+ . background ( Color . gray. opacity ( 0.5 ) )
50+ . padding ( . horizontal, - 20 )
51+ }
52+ } . onAppear {
53+ guard index == viewModel. newCoupons. count - 1 ,
54+ let lastId = viewModel. lastCouponId,
55+ let lastCreated = viewModel. lastCreatedAt,
56+ let lastCouponType = viewModel. lastCouponType
57+ else { return }
3458
35- Divider ( )
36- . background ( Color . gray. opacity ( 0.5 ) )
37- . padding ( . horizontal, - 20 )
38- }
39- } . onAppear {
40- guard index == viewModel. newCoupons. count - 1 ,
41- let lastId = viewModel. lastCouponId,
42- let lastCreated = viewModel. lastCreatedAt,
43- let lastCouponType = viewModel. lastCouponType
44- else { return }
45-
46- Task {
47- await viewModel. fetchLatestCoupons (
48- lastCreatedAt: lastCreated,
49- lastCouponId: lastId,
50- couponType: lastCouponType
51- )
59+ Task {
60+ await viewModel. fetchLatestCoupons (
61+ lastCreatedAt: lastCreated,
62+ lastCouponId: lastId,
63+ couponType: lastCouponType
64+ )
65+ }
5266 }
5367 }
5468 }
5569 }
5670 }
57- }
58- . onAppear {
59- Task {
60- await viewModel . fetchLatestCoupons ( )
71+ . onAppear {
72+ Task {
73+ await viewModel . fetchLatestCoupons ( )
74+ }
6175 }
62- }
63- . navigationTitle ( " \( currentMonth ) 신규 | 멤버십 혜택 " )
64- . navigationBarTitleDisplayMode ( . inline )
65- . navigationBarBackButtonHidden ( true )
66- . toolbar {
67- ToolbarItem ( placement : . navigationBarLeading ) {
68- Button ( action : {
69- presentationMode . wrappedValue . dismiss ( )
70- } ) {
71- Image ( systemName : " chevron.backward " )
72- . foregroundColor ( . black )
76+ . navigationTitle ( " \( currentMonth ) 신규 | 멤버십 혜택 " )
77+ . navigationBarTitleDisplayMode ( . inline )
78+ . navigationBarBackButtonHidden ( true )
79+ . toolbar {
80+ ToolbarItem ( placement : . navigationBarLeading ) {
81+ Button ( action : {
82+ presentationMode . wrappedValue . dismiss ( )
83+ } ) {
84+ Image ( systemName : " chevron.backward " )
85+ . foregroundColor ( . black )
86+ }
7387 }
7488 }
89+
90+ if !loginViewModel. isLoggedIn && isLoginRequiredPopupVisible {
91+ LoginRequriedPopup (
92+ isPopupVisible: $isLoginRequiredPopupVisible,
93+ showLogin: $showLoginView
94+ ) . transition ( . scale)
95+ }
96+
97+ if isPopupVisible {
98+ CouponGetPopupView (
99+ isPopupVisible: $isPopupVisible,
100+ couponId: $selectedCoupon. couponId,
101+ couponType: $selectedCoupon. couponType,
102+ isMemberIssued: $selectedCoupon. isMemberIssued
103+ ) . transition ( . scale)
104+ }
105+ }
106+ . fullScreenCover ( isPresented: $showLoginView) {
107+ LoginView ( )
75108 }
76109 }
77110}
0 commit comments