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

- 팔로잉 상태에서 알림 켜기/끄기 상태 추가
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 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)
}
}
}
}
}

View File

@ -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,

View File

@ -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:

View File

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