feat: 팔로워 리스트
- 프로필 이미지를 터치하면 프로필 다이얼로그 표시
This commit is contained in:
@@ -14,6 +14,7 @@ struct MemberProfileDialog: View {
|
||||
|
||||
@Binding var isShowing: Bool
|
||||
let memberId: Int
|
||||
var onBlockComplete: () -> Void = {}
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
@@ -147,6 +148,7 @@ struct MemberProfileDialog: View {
|
||||
nickname: viewModel.nickname,
|
||||
confirmAction: {
|
||||
viewModel.memberBlock()
|
||||
onBlockComplete()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import Kingfisher
|
||||
struct FollowerListItemView: View {
|
||||
|
||||
let item: GetFollowerListResponseItem
|
||||
let clickProfile: (Int) -> Void
|
||||
let creatorFollow: (Int) -> Void
|
||||
let showCreatorFollowNotifyDialog: (Int) -> Void
|
||||
|
||||
@@ -28,6 +29,9 @@ struct FollowerListItemView: View {
|
||||
.resizable()
|
||||
.frame(width: 60, height: 60)
|
||||
.clipShape(Circle())
|
||||
.onTapGesture {
|
||||
clickProfile(item.userId)
|
||||
}
|
||||
|
||||
Text(item.nickname)
|
||||
.font(.custom(Font.medium.rawValue, size: 16.7))
|
||||
@@ -70,6 +74,7 @@ struct FollowerListItemView_Previews: PreviewProvider {
|
||||
nickname: "상남자",
|
||||
isFollow: false
|
||||
),
|
||||
clickProfile: { _ in },
|
||||
creatorFollow: { _ in },
|
||||
showCreatorFollowNotifyDialog: { _ in }
|
||||
)
|
||||
|
||||
@@ -16,6 +16,9 @@ struct FollowerListView: View {
|
||||
@State private var creatorId: Int = 0
|
||||
@State private var selectedItemIndex: Int = 0
|
||||
|
||||
@State private var selectedMemberId: Int = 0
|
||||
@State private var isShowMemberProfilePopup: Bool = false
|
||||
|
||||
var body: some View {
|
||||
BaseView(isLoading: $viewModel.isLoading) {
|
||||
VStack(spacing: 0) {
|
||||
@@ -41,6 +44,10 @@ struct FollowerListView: View {
|
||||
let item = viewModel.followerListItems[index]
|
||||
FollowerListItemView(
|
||||
item: item,
|
||||
clickProfile: {
|
||||
selectedMemberId = $0
|
||||
isShowMemberProfilePopup = true
|
||||
},
|
||||
creatorFollow: {
|
||||
viewModel.creatorFollow(creatorId: $0, index: index)
|
||||
},
|
||||
@@ -62,6 +69,17 @@ struct FollowerListView: View {
|
||||
}
|
||||
}
|
||||
|
||||
if isShowMemberProfilePopup {
|
||||
MemberProfileDialog(
|
||||
isShowing: $isShowMemberProfilePopup,
|
||||
memberId: selectedMemberId,
|
||||
onBlockComplete: {
|
||||
viewModel.removeMember(memberId: selectedMemberId)
|
||||
selectedMemberId = 0
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
if isShowFollowNotifyDialog {
|
||||
CreatorFollowNotifyDialog(
|
||||
isShowing: $isShowFollowNotifyDialog,
|
||||
|
||||
@@ -117,4 +117,9 @@ final class FollowerListViewModel: ObservableObject {
|
||||
}
|
||||
.store(in: &subscription)
|
||||
}
|
||||
|
||||
func removeMember(memberId: Int) {
|
||||
totalCount -= 1
|
||||
followerListItems.removeAll { $0.userId == memberId }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user