From d3ab1507a425229d4953bbb39188fffade69e94a Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Mon, 23 Sep 2024 15:19:15 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EC=B1=84=EB=84=90=20-=20=ED=8C=94=EB=A1=9C=EC=9A=B0?= =?UTF-8?q?=EC=99=80=20=EC=95=8C=EB=A6=BC=EC=84=A4=EC=A0=95=20-=20?= =?UTF-8?q?=ED=8C=94=EB=A1=9C=EC=9E=89=20=EC=83=81=ED=83=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=95=8C=EB=A6=BC=20=EC=BC=9C=EA=B8=B0/=EB=81=84?= =?UTF-8?q?=EA=B8=B0=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../btn_follow_big.png | Bin 5188 -> 3590 bytes .../btn_following_big.png | Bin 4644 -> 4743 bytes .../Contents.json | 21 ++++ .../btn_following_no_alarm_big.png | Bin 0 -> 5183 bytes .../ic_avatar_unfollow.imageset/Contents.json | 21 ++++ .../ic_avatar_unfollow.png | Bin 0 -> 502 bytes .../ic_notify_all.imageset/Contents.json | 21 ++++ .../ic_notify_all.imageset/ic_notify_all.png | Bin 0 -> 793 bytes .../ic_notify_none.imageset/Contents.json | 21 ++++ .../ic_notify_none.png | Bin 0 -> 1209 bytes .../Dialog/CreatorFollowNotifyDialog.swift | 107 ++++++++++++++++++ .../Profile/GetCreatorProfileResponse.swift | 2 + .../Profile/UserProfileCreatorView.swift | 16 ++- .../Explorer/Profile/UserProfileView.swift | 20 +++- .../Profile/UserProfileViewModel.swift | 4 +- .../Sources/User/CreatorFollowRequest.swift | 2 + SodaLive/Sources/User/UserRepository.swift | 4 +- 17 files changed, 228 insertions(+), 11 deletions(-) create mode 100644 SodaLive/Resources/Assets.xcassets/btn_following_no_alarm_big.imageset/Contents.json create mode 100644 SodaLive/Resources/Assets.xcassets/btn_following_no_alarm_big.imageset/btn_following_no_alarm_big.png create mode 100644 SodaLive/Resources/Assets.xcassets/ic_avatar_unfollow.imageset/Contents.json create mode 100644 SodaLive/Resources/Assets.xcassets/ic_avatar_unfollow.imageset/ic_avatar_unfollow.png create mode 100644 SodaLive/Resources/Assets.xcassets/ic_notify_all.imageset/Contents.json create mode 100644 SodaLive/Resources/Assets.xcassets/ic_notify_all.imageset/ic_notify_all.png create mode 100644 SodaLive/Resources/Assets.xcassets/ic_notify_none.imageset/Contents.json create mode 100644 SodaLive/Resources/Assets.xcassets/ic_notify_none.imageset/ic_notify_none.png create mode 100644 SodaLive/Sources/Dialog/CreatorFollowNotifyDialog.swift diff --git a/SodaLive/Resources/Assets.xcassets/btn_follow_big.imageset/btn_follow_big.png b/SodaLive/Resources/Assets.xcassets/btn_follow_big.imageset/btn_follow_big.png index da6562c913c62bdcfa10e33b05ce16979f41c21f..f17460308faf53fbb647bbad804a62f67ee73217 100644 GIT binary patch delta 3539 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 Void + let onClickNotifyNone: () -> Void + let onClickUnFollow: () -> Void + + @State private var isShow: Bool = false + + var body: some View { + ZStack { + Color.black.opacity(0.7).ignoresSafeArea() + .onTapGesture { + isShowing = false + } + + VStack(spacing: 0) { + Spacer() + + if isShow { + VStack(alignment: .leading, spacing: 24) { + Text("알림") + .font(.custom(Font.bold.rawValue, size: 18.3)) + .foregroundColor(Color.grayee) + + CreatorFollowNotifyItem( + image: "ic_notify_all", + title: "전체", + onTapGesture: { + isShowing = false + onClickNotifyAll() + } + ) + CreatorFollowNotifyItem( + image: "ic_notify_none", + title: "없음", + onTapGesture: { + isShowing = false + onClickNotifyNone() + } + ) + CreatorFollowNotifyItem( + image: "ic_avatar_unfollow", + title: "팔로우 취소", + onTapGesture: { + isShowing = false + onClickUnFollow() + } + ) + } + .frame(maxWidth:.infinity) + .padding(.horizontal, 16) + .padding(.top, 16) + .padding(.bottom, 32) + .background(Color.gray22) + .cornerRadius(10, corners: [.topLeft, .topRight]) + .transition(.move(edge: .bottom)) + .animation(.easeInOut(duration: 0.5), value: isShow) + } + } + .ignoresSafeArea() + } + .onAppear { + withAnimation { + isShow = true + } + } + } +} + +struct CreatorFollowNotifyItem: View { + + let image: String + let title: String + let onTapGesture: () -> Void + + var body: some View { + HStack(spacing: 16) { + Image(image) + + Text(title) + .font(.custom(Font.medium.rawValue, size: 13.3)) + .foregroundColor(Color.grayee) + + Spacer() + } + .onTapGesture(perform: onTapGesture) + } +} + +#Preview { + CreatorFollowNotifyDialog( + isShowing: .constant(true), + onClickNotifyAll: {}, + onClickNotifyNone: {}, + onClickUnFollow: {} + ) +} diff --git a/SodaLive/Sources/Explorer/Profile/GetCreatorProfileResponse.swift b/SodaLive/Sources/Explorer/Profile/GetCreatorProfileResponse.swift index 632db8d..48f75f3 100644 --- a/SodaLive/Sources/Explorer/Profile/GetCreatorProfileResponse.swift +++ b/SodaLive/Sources/Explorer/Profile/GetCreatorProfileResponse.swift @@ -31,6 +31,8 @@ struct CreatorResponse: Decodable { let youtubeUrl: String? let websiteUrl: String? let blogUrl: String? + let isFollow: Bool + let isNotify: Bool let isNotification: Bool let notificationRecipientCount: Int } diff --git a/SodaLive/Sources/Explorer/Profile/UserProfileCreatorView.swift b/SodaLive/Sources/Explorer/Profile/UserProfileCreatorView.swift index d14793b..e366135 100644 --- a/SodaLive/Sources/Explorer/Profile/UserProfileCreatorView.swift +++ b/SodaLive/Sources/Explorer/Profile/UserProfileCreatorView.swift @@ -13,7 +13,7 @@ struct UserProfileCreatorView: View { let creator: CreatorResponse let creatorFollow: () -> Void - let creatorUnFollow: () -> Void + let showCreatorFollowNotifyDialog: () -> Void let shareChannel: () -> Void var body: some View { @@ -57,12 +57,16 @@ struct UserProfileCreatorView: View { } } else { VStack(alignment: .leading, spacing: 9.3) { - Image(creator.isNotification ? "btn_following_big" : "btn_follow_big") + Image( + creator.isFollow ? + creator.isNotify ? "btn_following_big": "btn_following_no_alarm_big" + : "btn_follow_big" + ) .resizable() .frame(width: 83.3, height: 26.7) .onTapGesture { - if creator.isNotification { - creatorUnFollow() + if creator.isFollow { + showCreatorFollowNotifyDialog() } else { creatorFollow() } @@ -143,11 +147,13 @@ struct UserProfileCreatorView_Previews: PreviewProvider { youtubeUrl: Optional("https://www.youtube.com/watch?v=3x2tfZnfLRo"), websiteUrl: Optional("https://instagram.com/dear.zia"), blogUrl: Optional("dear.zia"), + isFollow: false, + isNotify: false, isNotification: false, notificationRecipientCount: 2 ) ) { - } creatorUnFollow: { + } showCreatorFollowNotifyDialog: { } shareChannel: { } } diff --git a/SodaLive/Sources/Explorer/Profile/UserProfileView.swift b/SodaLive/Sources/Explorer/Profile/UserProfileView.swift index c1b303b..7258be9 100644 --- a/SodaLive/Sources/Explorer/Profile/UserProfileView.swift +++ b/SodaLive/Sources/Explorer/Profile/UserProfileView.swift @@ -14,6 +14,7 @@ struct UserProfileView: View { @State private var memberId: Int = 0 @State private var isShowMemberProfilePopup: Bool = false + @State private var isShowFollowNotifyDialog: Bool = false var body: some View { GeometryReader { proxy in @@ -52,8 +53,8 @@ struct UserProfileView: View { UserProfileCreatorView( creator: creatorProfile.creator) { viewModel.creatorFollow() - } creatorUnFollow: { - viewModel.creatorUnFollow() + } showCreatorFollowNotifyDialog: { + isShowFollowNotifyDialog = true } shareChannel: { viewModel.shareChannel(userId: userId) } @@ -323,6 +324,21 @@ struct UserProfileView: View { MemberProfileDialog(isShowing: $isShowMemberProfilePopup, memberId: memberId) } } + + if isShowFollowNotifyDialog { + CreatorFollowNotifyDialog( + isShowing: $isShowFollowNotifyDialog, + onClickNotifyAll: { + viewModel.creatorFollow(follow: true, notify: true) + }, + onClickNotifyNone: { + viewModel.creatorFollow(follow: true, notify: false) + }, + onClickUnFollow: { + viewModel.creatorFollow(follow: false, notify: false) + } + ) + } } .sheet( isPresented: $viewModel.isShowShareView, diff --git a/SodaLive/Sources/Explorer/Profile/UserProfileViewModel.swift b/SodaLive/Sources/Explorer/Profile/UserProfileViewModel.swift index 9415cbc..ccbf1dc 100644 --- a/SodaLive/Sources/Explorer/Profile/UserProfileViewModel.swift +++ b/SodaLive/Sources/Explorer/Profile/UserProfileViewModel.swift @@ -282,11 +282,11 @@ final class UserProfileViewModel: ObservableObject { .store(in: &subscription) } - func creatorFollow() { + func creatorFollow(follow: Bool = true, notify: Bool = true) { if let creator = creatorProfile { isLoading = true - userRepository.creatorFollow(creatorId: creator.creator.creatorId) + userRepository.creatorFollow(creatorId: creator.creator.creatorId, follow: follow, notify: notify) .sink { result in switch result { case .finished: diff --git a/SodaLive/Sources/User/CreatorFollowRequest.swift b/SodaLive/Sources/User/CreatorFollowRequest.swift index 47cf241..db64873 100644 --- a/SodaLive/Sources/User/CreatorFollowRequest.swift +++ b/SodaLive/Sources/User/CreatorFollowRequest.swift @@ -9,4 +9,6 @@ import Foundation struct CreatorFollowRequest: Encodable { let creatorId: Int + var isNotify: Bool = true + var isActive: Bool = true } diff --git a/SodaLive/Sources/User/UserRepository.swift b/SodaLive/Sources/User/UserRepository.swift index db00866..1ab68b0 100644 --- a/SodaLive/Sources/User/UserRepository.swift +++ b/SodaLive/Sources/User/UserRepository.swift @@ -69,8 +69,8 @@ final class UserRepository { return api.requestPublisher(.updatePushToken(request: PushTokenUpdateRequest(pushToken: pushToken))) } - func creatorFollow(creatorId: Int) -> AnyPublisher { - return api.requestPublisher(.creatorFollow(request: CreatorFollowRequest(creatorId: creatorId))) + func creatorFollow(creatorId: Int, follow: Bool = true, notify: Bool = true) -> AnyPublisher { + return api.requestPublisher(.creatorFollow(request: CreatorFollowRequest(creatorId: creatorId, isNotify: notify, isActive: follow))) } func creatorUnFollow(creatorId: Int) -> AnyPublisher {