콘텐츠 상세 - 크리에이터 팔로우와 알림설정

- 팔로잉 상태에서 알림 켜기/끄기 상태 추가
This commit is contained in:
Yu Sung 2024-09-23 16:39:18 +09:00
parent d3ab1507a4
commit ed4729ac11
4 changed files with 46 additions and 12 deletions

View File

@ -12,7 +12,7 @@ struct ContentDetailCreatorProfileView: View {
let creator: AudioContentCreator let creator: AudioContentCreator
let onClickFollow: (Int) -> Void let onClickFollow: (Int) -> Void
let onClickUnFollow: (Int) -> Void let showCreatorFollowNotifyDialog: (Int) -> Void
var body: some View { var body: some View {
HStack(spacing: 0) { HStack(spacing: 0) {
@ -29,10 +29,15 @@ struct ContentDetailCreatorProfileView: View {
Spacer() Spacer()
if creator.creatorId != UserDefaults.int(forKey: .userId) { if creator.creatorId != UserDefaults.int(forKey: .userId) {
Image(creator.isFollowing ? "btn_following_big" : "btn_follow_big") Image(creator.isFollow ?
creator.isNotify ?
"btn_following_big" :
"btn_following_no_alarm_big" :
"btn_follow_big"
)
.onTapGesture { .onTapGesture {
if creator.isFollowing { if creator.isFollowing {
onClickUnFollow(creator.creatorId) showCreatorFollowNotifyDialog(creator.creatorId)
} else { } else {
onClickFollow(creator.creatorId) onClickFollow(creator.creatorId)
} }

View File

@ -19,6 +19,15 @@ struct ContentDetailView: View {
@State private var isShowOrderView = false @State private var isShowOrderView = false
@State private var isShowOrderConfirmView = false @State private var isShowOrderConfirmView = false
@State private var isShowCommentListView = 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 { var body: some View {
GeometryReader { proxy in GeometryReader { proxy in
@ -55,8 +64,11 @@ struct ContentDetailView: View {
if let audioContent = viewModel.audioContent { if let audioContent = viewModel.audioContent {
ContentDetailCreatorProfileView( ContentDetailCreatorProfileView(
creator: audioContent.creator, creator: audioContent.creator,
onClickFollow: { viewModel.creatorFollow(userId: $0) }, onClickFollow: { viewModel.creatorFollow(creatorId: $0) },
onClickUnFollow: { viewModel.creatorUnFollow(userId: $0) } showCreatorFollowNotifyDialog: {
creatorId = $0
isShowFollowNotifyDialog = true
}
) )
.padding(.horizontal, 13.3) .padding(.horizontal, 13.3)
.padding(.top, 5.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( .sheet(
isPresented: $viewModel.isShowShareView, isPresented: $viewModel.isShowShareView,

View File

@ -87,10 +87,10 @@ final class ContentDetailViewModel: ObservableObject {
.store(in: &subscription) .store(in: &subscription)
} }
func creatorFollow(userId: Int) { func creatorFollow(creatorId: Int, follow: Bool = true, notify: Bool = true) {
isLoading = true isLoading = true
userRepository.creatorFollow(creatorId: userId) userRepository.creatorFollow(creatorId: creatorId, follow: follow, notify: notify)
.sink { result in .sink { result in
switch result { switch result {
case .finished: case .finished:

View File

@ -55,4 +55,6 @@ struct AudioContentCreator: Decodable {
let nickname: String let nickname: String
let profileImageUrl: String let profileImageUrl: String
let isFollowing: Bool let isFollowing: Bool
let isFollow: Bool
let isNotify: Bool
} }