diff --git a/SodaLive/Sources/Content/Detail/ContentDetailCreatorProfileView.swift b/SodaLive/Sources/Content/Detail/ContentDetailCreatorProfileView.swift index 60922af..ff8f30c 100644 --- a/SodaLive/Sources/Content/Detail/ContentDetailCreatorProfileView.swift +++ b/SodaLive/Sources/Content/Detail/ContentDetailCreatorProfileView.swift @@ -12,7 +12,7 @@ struct ContentDetailCreatorProfileView: View { let creator: AudioContentCreator let onClickFollow: (Int) -> Void - let onClickUnFollow: (Int) -> Void + let showCreatorFollowNotifyDialog: (Int) -> Void var body: some View { HStack(spacing: 0) { @@ -29,14 +29,19 @@ struct ContentDetailCreatorProfileView: View { Spacer() if creator.creatorId != UserDefaults.int(forKey: .userId) { - Image(creator.isFollowing ? "btn_following_big" : "btn_follow_big") - .onTapGesture { - if creator.isFollowing { - onClickUnFollow(creator.creatorId) - } else { - onClickFollow(creator.creatorId) - } + Image(creator.isFollow ? + creator.isNotify ? + "btn_following_big" : + "btn_following_no_alarm_big" : + "btn_follow_big" + ) + .onTapGesture { + if creator.isFollowing { + showCreatorFollowNotifyDialog(creator.creatorId) + } else { + onClickFollow(creator.creatorId) } + } } } } diff --git a/SodaLive/Sources/Content/Detail/ContentDetailView.swift b/SodaLive/Sources/Content/Detail/ContentDetailView.swift index a6787de..c18c379 100644 --- a/SodaLive/Sources/Content/Detail/ContentDetailView.swift +++ b/SodaLive/Sources/Content/Detail/ContentDetailView.swift @@ -19,6 +19,15 @@ struct ContentDetailView: View { @State private var isShowOrderView = false @State private var isShowOrderConfirmView = false @State private var isShowCommentListView = false + @State private var isShowFollowNotifyDialog: Bool = false { + didSet { + if !isShowFollowNotifyDialog { + creatorId = 0 + } + } + } + + @State private var creatorId: Int = 0 var body: some View { GeometryReader { proxy in @@ -55,8 +64,11 @@ struct ContentDetailView: View { if let audioContent = viewModel.audioContent { ContentDetailCreatorProfileView( creator: audioContent.creator, - onClickFollow: { viewModel.creatorFollow(userId: $0) }, - onClickUnFollow: { viewModel.creatorUnFollow(userId: $0) } + onClickFollow: { viewModel.creatorFollow(creatorId: $0) }, + showCreatorFollowNotifyDialog: { + creatorId = $0 + isShowFollowNotifyDialog = true + } ) .padding(.horizontal, 13.3) .padding(.top, 5.3) @@ -347,6 +359,21 @@ struct ContentDetailView: View { ) } } + + if isShowFollowNotifyDialog { + CreatorFollowNotifyDialog( + isShowing: $isShowFollowNotifyDialog, + onClickNotifyAll: { + viewModel.creatorFollow(creatorId: creatorId, follow: true, notify: true) + }, + onClickNotifyNone: { + viewModel.creatorFollow(creatorId: creatorId, follow: true, notify: false) + }, + onClickUnFollow: { + viewModel.creatorFollow(creatorId: creatorId, follow: false, notify: false) + } + ) + } } .sheet( isPresented: $viewModel.isShowShareView, diff --git a/SodaLive/Sources/Content/Detail/ContentDetailViewModel.swift b/SodaLive/Sources/Content/Detail/ContentDetailViewModel.swift index 5ef8374..89f1fa8 100644 --- a/SodaLive/Sources/Content/Detail/ContentDetailViewModel.swift +++ b/SodaLive/Sources/Content/Detail/ContentDetailViewModel.swift @@ -87,10 +87,10 @@ final class ContentDetailViewModel: ObservableObject { .store(in: &subscription) } - func creatorFollow(userId: Int) { + func creatorFollow(creatorId: Int, follow: Bool = true, notify: Bool = true) { isLoading = true - userRepository.creatorFollow(creatorId: userId) + userRepository.creatorFollow(creatorId: creatorId, follow: follow, notify: notify) .sink { result in switch result { case .finished: diff --git a/SodaLive/Sources/Content/Detail/GetAudioContentDetailResponse.swift b/SodaLive/Sources/Content/Detail/GetAudioContentDetailResponse.swift index 7fe75f6..36c2e8a 100644 --- a/SodaLive/Sources/Content/Detail/GetAudioContentDetailResponse.swift +++ b/SodaLive/Sources/Content/Detail/GetAudioContentDetailResponse.swift @@ -55,4 +55,6 @@ struct AudioContentCreator: Decodable { let nickname: String let profileImageUrl: String let isFollowing: Bool + let isFollow: Bool + let isNotify: Bool }