Skip to content

Commit

Permalink
✨ :: [#237] DesignSystem / AppliedStudentCardView에 이미지 처리 코드 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
junseopark0331 authored and uuuunseo committed Apr 21, 2024
1 parent 66b5ba8 commit 947c333
Showing 1 changed file with 46 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Combine
import MSGLayout
import Nuke
import UIKit

public struct AppliedStudentViewModel: Equatable {
Expand All @@ -8,18 +9,27 @@ public struct AppliedStudentViewModel: Equatable {
public let gender: Gender
public let stuNum: String
public let isChecked: Bool
public let profileImage: String?

public enum Gender {
case man
case woman
}

public init(rank: Int, name: String, gender: Gender, stuNum: String, isChecked: Bool) {
public init(
rank: Int,
name: String,
gender: Gender,
stuNum: String,
isChecked: Bool,
profileImage: String
) {
self.rank = rank
self.name = name
self.gender = gender
self.stuNum = stuNum
self.isChecked = isChecked
self.profileImage = profileImage
}
}

Expand All @@ -28,12 +38,12 @@ public protocol AppliedStudentCardViewActionProtocol {
}

public final class AppliedStudentCardView: UIView {
private var imageTask: Task<Void, Error>?
private let rankLabel = DotoriLabel(textColor: .neutral(.n20), font: .caption)
private let attendanceCheckBox = DotoriCheckBox()
.set(\.isHidden, true)
private let userImageView = DotoriIconView(
size: .custom(.init(width: 64, height: 64)),
image: .Dotori.personRectangle
size: .custom(.init(width: 64, height: 64))
)
private let nameLabel = DotoriLabel(textColor: .neutral(.n10), font: .body1)
private let genderImageView = DotoriIconView(
Expand Down Expand Up @@ -67,17 +77,43 @@ public final class AppliedStudentCardView: UIView {
public func updateContent(
with viewModel: AppliedStudentViewModel
) {
rankLabel.text = "\(viewModel.rank)"
nameLabel.text = viewModel.name
genderImageView.image = (viewModel.gender == .man ? UIImage.Dotori.men : .Dotori.women)
self.rankLabel.text = "\(viewModel.rank)"
self.nameLabel.text = viewModel.name
self.genderImageView.image = (viewModel.gender == .man ? UIImage.Dotori.men : .Dotori.women)
.withTintColor(.dotori(.neutral(.n10)), renderingMode: .alwaysOriginal)
stuNumLabel.text = viewModel.stuNum
attendanceCheckBox.isChecked = viewModel.isChecked
self.stuNumLabel.text = viewModel.stuNum
self.attendanceCheckBox.isChecked = viewModel.isChecked

guard let profileImageURL = viewModel.profileImage,
let imageURL = URL(string: profileImageURL)
else {
self.userImageView.image = .Dotori.personRectangle
return
}

let request = ImageRequest(
url: imageURL,
priority: .high,
options: [.reloadIgnoringCachedData]
)

imageTask = Task {
let image = try await ImagePipeline.shared.image(for: request)
guard !Task.isCancelled else { return }
DispatchQueue.main.async {
self.userImageView.image = image
}
}
}

public func setIsHiddenAttendanceCheckBox(_ isHidden: Bool) {
attendanceCheckBox.isHidden = isHidden
}

public func cancelImageDownload() {
imageTask?.cancel()
imageTask = nil
}
}

private extension AppliedStudentCardView {
Expand All @@ -103,7 +139,8 @@ private extension AppliedStudentCardView {
.top(.toSuperview(), .equal(28))
.bottom(.toSuperview(), .equal(-28))
}

userImageView.cornerRadius = 8
userImageView.clipsToBounds = true
self.backgroundColor = .dotori(.background(.card))
self.cornerRadius = 16
DotoriShadow.cardShadow(card: self)
Expand Down

0 comments on commit 947c333

Please sign in to comment.