Skip to content

Commit

Permalink
✨ :: [#361] WithdrawUserListFeature / 탈퇴 예정자 명단 디자인 변경 사항 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
uuuunseo committed Jul 11, 2024
1 parent 6a02707 commit 405d079
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 85 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,10 @@ struct RequestUserSignupView: View {
set: { isSelected in
if isSelected {
viewModel.insertAllUserList()
viewModel.updateIsSelectedUserList(isSelected: isSelected)
} else {
viewModel.removeAllUserList()
viewModel.updateIsSelectedUserList(isSelected: isSelected)
}
viewModel.updateIsSelectedUserList(isSelected: isSelected)
}
)
)
Expand All @@ -57,7 +56,7 @@ struct RequestUserSignupView: View {
ForEach(viewModel.userList, id: \.userID) { userInfo in
UserInfoListRow(
name: userInfo.name,
authoruty: userInfo.authority.display(),
authority: userInfo.authority.display(),
phoneNumber: userInfo.phoneNumber,
email: userInfo.email,
hasCheckButton: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ struct UserListView: View {
ForEach(viewModel.userList, id: \.userID) { userInfo in
UserInfoListRow(
name: userInfo.name,
authoruty: userInfo.authority.display(),
authority: userInfo.authority.display(),
phoneNumber: userInfo.phoneNumber.withHypen,
email: userInfo.email
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,43 +35,16 @@ struct WithdrawUserListView: View {
set: { isSelected in
if isSelected {
viewModel.insertAllUserList()
viewModel.updateIsShowingWithdrawAlert(isShowing: isSelected)
} else {
viewModel.removeAllUserList()
viewModel.updateIsShowingWithdrawAlert(isShowing: isSelected)
}
viewModel.updateIsSelectedUserList(isSelected: isSelected)
}
)
)
}

Spacer()
}

Divider()

HStack(spacing: 10) {
optionButton(
buttonText: "선택 탈퇴",
textColor: .bitgouel(.error(.e5)),
strokeColor: .bitgouel(.error(.e5)),
backgroundColor: .bitgouel(.greyscale(.g10))
) {
viewModel.isShowingWithdrawAlert = true
}

optionButton(
buttonText: "전체 탈퇴",
textColor: .bitgouel(.greyscale(.g10)),
strokeColor: .bitgouel(.error(.e5)),
backgroundColor: .bitgouel(.error(.e5))
) {
if viewModel.isShowingWithdrawAlert {
viewModel.isShowingWithdrawAlert = false
} else {
viewModel.isShowingWithdrawAlert = true
}
}

HStack {
BitgouelAsset.Icons.filter.swiftUIImage
Expand All @@ -82,42 +55,36 @@ struct WithdrawUserListView: View {
)
}
.foregroundColor(.bitgouel(.greyscale(.g4)))
.padding(.horizontal, 20)
.padding(.vertical, 9)
.overlay {
RoundedRectangle(cornerRadius: 8)
.strokeBorder(Color.bitgouel(.greyscale(.g4)))
}
.onTapGesture {
viewModel.updateIsPresentedCohortBottomSheet(isPresented: true)
}
}
.padding(.top, 24)

Divider()

ScrollView {
if viewModel.userList.isEmpty {
NoInfoView(text: "탈퇴 예정자가 없어요")
} else {
LazyVStack(alignment: .leading, spacing: 0) {
ForEach(viewModel.userList, id: \.userID) { userInfo in
HStack(spacing: 8) {
CheckButton(
isSelected: Binding(
get: { viewModel.selectedWithdrawUserList.contains(userInfo.userID) },
set: { isSelected in
UserInfoListRow(
name: userInfo.name,
authority: "",
phoneNumber: userInfo.phoneNumber,
email: userInfo.email,
hasCheckButton: true,
isSelected: Binding(
get: { viewModel.selectedWithdrawUserList.contains(userInfo.userID) },
set: { isSelected in
if isSelected {
viewModel.insertUserList(userID: userInfo.userID)
if !isSelected {
viewModel.removeUserList(userID: userInfo.userID)
}
} else {
viewModel.removeUserList(userID: userInfo.userID)
}
)
}
)

BitgouelText(
text: userInfo.name,
font: .text1
)
}
)

Divider()
.frame(height: 1)
Expand All @@ -126,7 +93,6 @@ struct WithdrawUserListView: View {
}
}
}
.padding(.top, 24)

Spacer()
}
Expand All @@ -135,6 +101,9 @@ struct WithdrawUserListView: View {
.onAppear {
viewModel.onAppear()
}
.refreshable {
viewModel.onAppear()
}
.navigationTitle("탈퇴 예정자 명단")
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Expand All @@ -157,18 +126,25 @@ struct WithdrawUserListView: View {
}
}
}
.overlay(alignment: .bottom) {
DeactivateButton(
text: "선택한 사용자 계정 탈퇴") {
viewModel.updateIsShowingWithdrawAlert(isShowing: true)
}
}
.bitgouelAlert(
title: "선택한 사용자의 탈퇴를 \n승인 하시겠습니까?",
description: "",
isShowing: $viewModel.isShowingWithdrawAlert,
alertActions: [
.init(text: "취소", style: .cancel) {
viewModel.isShowingWithdrawAlert = false
viewModel.removeAllUserList()
viewModel.updateIsShowingWithdrawAlert(isShowing: false)
},
.init(text: "승인", style: .error) {
viewModel.withdrawUser()
viewModel.isShowingWithdrawAlert = false
viewModel.withdrawUser {
viewModel.updateIsShowingWithdrawAlert(isShowing: false)
viewModel.onAppear()
}
}
]
)
Expand Down Expand Up @@ -204,28 +180,4 @@ struct WithdrawUserListView: View {
)
}
}

@ViewBuilder
func optionButton(
buttonText: String,
textColor: Color,
strokeColor: Color,
backgroundColor: Color,
action: @escaping () -> Void = {}
) -> some View {
BitgouelText(
text: buttonText,
font: .text3
)
.foregroundColor(textColor)
.padding(.horizontal, 20)
.padding(.vertical, 9)
.overlay {
RoundedRectangle(cornerRadius: 8)
.strokeBorder(strokeColor)
}
.buttonWrapper(action)
.background(backgroundColor)
.cornerRadius(8)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Service
final class WithdrawUserListViewModel: BaseViewModel {
@Published var isShowingWithdrawAlert: Bool = false
@Published var isSelectedUserList = false
@Published var isPresentedUserCohortBottomSheet: Bool = false
@Published var isPresentedUserCohortBottomSheet: Bool = true
@Published var isNavigateUserListDidTap = false
@Published var isNavigateRequestSignUpDidTap = false
@Published var userList: [WithdrawUserInfoEntity] = []
Expand Down Expand Up @@ -53,10 +53,16 @@ final class WithdrawUserListViewModel: BaseViewModel {
isShowingWithdrawAlert = isShowing
}

func withdrawUser() {
func updateIsSelectedUserList(isSelected: Bool) {
isSelectedUserList = isSelected
}

func withdrawUser(_ success: @escaping () -> Void) {
Task {
do {
try await withdrawUserUseCase(userID: selectedWithdrawUserList.joined(separator: ","))

success()
} catch {
errorMessage = error.adminDomainErrorMessage()
isErrorOccurred = true
Expand Down

0 comments on commit 405d079

Please sign in to comment.