| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //
- // LNAutoReplyItemCell.swift
- // Gami
- //
- // Created by OneeChan on 2026/3/9.
- //
- import Foundation
- import UIKit
- import SnapKit
- class LNAutoReplyItemCell: UITableViewCell {
- private let titleLabel = UILabel()
- private let stateLabel = UILabel()
- private let contentLabel = UILabel()
- private let voiceView = LNVoicePlayView()
-
- private var curNum: Int = 0
- private var curItem: LNAutoReplyVO?
-
- override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
- super.init(style: style, reuseIdentifier: reuseIdentifier)
-
- setupViews()
- }
-
- func update(_ num: Int, item: LNAutoReplyVO) {
- titleLabel.text = .init(key: "B00114", num + 1)
- switch item.status {
- case .reviewing:
- stateLabel.textColor = .init(hex: "#FFB836")
- stateLabel.text = .init(key: "B00003")
- case .pass:
- stateLabel.textColor = .text_5
- stateLabel.text = .init(key: "B00118")
- case .reject:
- stateLabel.textColor = .fill_6
- stateLabel.text = .init(key: "A00140")
- }
-
- contentLabel.isHidden = true
- voiceView.isHidden = true
- switch item.type {
- case .text:
- contentLabel.isHidden = false
- contentLabel.text = item.textContent
- case .voice:
- voiceView.isHidden = false
- voiceView.update(item.voiceUrl, duration: item.voiceDuration)
- }
-
- curNum = num
- curItem = item
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- extension LNAutoReplyItemCell {
- private func setupViews() {
- backgroundColor = .clear
-
- let container = UIView()
- container.layer.cornerRadius = 12
- container.backgroundColor = .fill
- container.onTap { [weak self] in
- guard let self else { return }
- guard let curItem else { return }
- if curItem.status == .reviewing {
- pushToSkillReview()
- } else {
- pushToAutoRelyEdit(num: curNum, item: curItem)
- }
- }
- contentView.addSubview(container)
- container.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.top.equalToSuperview().offset(10)
- make.bottom.equalToSuperview()
- }
-
- let header = buildHeader()
- container.addSubview(header)
- header.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.top.equalToSuperview()
- }
-
- let content = buildContent()
- container.addSubview(content)
- content.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(16)
- make.trailing.equalToSuperview().offset(-9)
- make.top.equalTo(header.snp.bottom).offset(6)
- make.bottom.equalToSuperview().offset(-8)
- }
- }
-
- private func buildHeader() -> UIView {
- let container = UIView()
- container.snp.makeConstraints { make in
- make.height.equalTo(30)
- }
-
- titleLabel.font = .heading_h5
- titleLabel.textColor = .text_5
- container.addSubview(titleLabel)
- titleLabel.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.leading.equalToSuperview().offset(12)
- }
-
- stateLabel.font = .heading_h5
- stateLabel.textColor = .text_5
- container.addSubview(stateLabel)
- stateLabel.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalToSuperview().offset(-12)
- }
-
- return container
- }
-
- private func buildContent() -> UIView {
- let stackView = UIStackView()
- stackView.axis = .horizontal
- stackView.spacing = 30
- stackView.alignment = .center
-
- contentLabel.isHidden = true
- contentLabel.font = .body_s
- contentLabel.textColor = .text_5
- contentLabel.numberOfLines = 2
- stackView.addArrangedSubview(contentLabel)
-
- voiceView.isHidden = true
- voiceView.layer.cornerRadius = 16
- voiceView.playIcon.snp.updateConstraints { make in
- make.width.height.equalTo(22)
- }
- voiceView.waveView.snp.updateConstraints { make in
- make.width.equalTo(19)
- make.height.equalTo(11)
- }
- voiceView.waveView.build()
- voiceView.snp.makeConstraints { make in
- make.width.equalTo(123)
- make.height.equalTo(32)
- }
- stackView.addArrangedSubview(voiceView)
-
- let emptyView = UIView()
- emptyView.snp.makeConstraints { make in
- make.width.equalTo(0).priority(.low)
- make.height.equalTo(0)
- }
- stackView.addArrangedSubview(emptyView)
-
- let arrow = UIImageView.arrowImageView(size: 10)
- arrow.tintColor = .text_2
- arrow.setContentHuggingPriority(.required, for: .horizontal)
- arrow.setContentCompressionResistancePriority(.required, for: .horizontal)
- stackView.addArrangedSubview(arrow)
-
- return stackView
- }
- }
|