| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- //
- // LNSkillFieldSelectionEditView.swift
- // Gami
- //
- // Created by OneeChan on 2026/1/20.
- //
- import Foundation
- import UIKit
- import SnapKit
- class LNSkillFieldSelectionEditView: LNSkillFieldBaseEditView {
- private let curValueLabel = UILabel()
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
- }
-
- override func update(_ field: LNSkillEditField) {
- super.update(field)
-
- if case .singleSelection = field.type,
- let text = field.value as? String {
- curValueLabel.text = field.constants.first(where: { $0.key == text })?.value
- } else if case .multiSelection = field.type,
- let texts = field.value as? [String] {
- let values: [String] = field.constants.compactMap {
- if texts.contains($0.key) {
- $0.value
- } else {
- nil
- }
- }
- curValueLabel.text = values.joined(separator: ",")
- }
- if curValueLabel.text?.isEmpty != false {
- curValueLabel.attributedText = .init(string: .init(key: "B00094"), attributes: [
- .font: UIFont.body_m,
- .foregroundColor: UIColor.text_3
- ])
- }
- }
-
- required init(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- extension LNSkillFieldSelectionEditView {
- private func setupViews() {
- container.backgroundColor = .fill_2
- container.layer.cornerRadius = 19
- container.onTap { [weak self] in
- guard let self else { return }
- guard let field else { return }
- guard !field.constants.isEmpty else {
- showToast(.init(key: "B00098"))
- return
- }
-
- switch field.type {
- // case .date:
- // let panel = LNDatePickerPanel()
- // if let numLimit = field.validate.numLimit {
- // panel.datePicker.minimumDate = Date(timeIntervalSince1970: Double(numLimit.min / 1_000))
- // panel.datePicker.maximumDate = Date(timeIntervalSince1970: Double(numLimit.max / 1_000))
- // }
- // panel.handler = { [weak self] date in
- // guard let self else { return }
- // curValueLabel.text = date.formattedFullDate("-")
- // field.value.value = date.formattedFullDate("-", normal: true)
- // }
- // panel.popup()
- case .singleSelection:
- let panel = LNSingleSelectionPanel()
- panel.setTitles(field.fieldName, desc: field.fieldDesc)
-
- let curSelect: String? = if let cur = field.value as? String {
- field.constants.first(where: { $0.key == cur })?.value
- } else {
- nil
- }
- panel.update(field.constants.map({ $0.value }), curSelect: curSelect)
-
- panel.handler = { [weak self] index in
- guard let self else { return }
- curValueLabel.attributedText = nil
- curValueLabel.text = field.constants[index].value
- field.value = field.constants[index].key
- needReview = field.fieldCode != LNSkillEditStaticFieldCode.fieldUnit.rawValue
- delegate?.onSkillFieldBaseEditViewInputChanged(view: self)
- }
- panel.popup()
- case .multiSelection:
- let panel = LNMultiSelectionPanel()
- panel.setTitles(field.fieldName, desc: field.fieldDesc)
-
- let curSelect: [String] = if let cur = field.value as? [String] {
- field.constants.filter({
- cur.contains($0.key)
- }).map({ $0.value })
- } else {
- []
- }
- panel.update(field.constants.map({ $0.value }), curSelected: curSelect)
-
- if let size = field.validate.size {
- panel.setLimie(min: size.min, max: size.max)
- }
-
- panel.handler = { [weak self] indexs in
- guard let self else { return }
- var texts: [String] = []
- var keys: [String] = []
- for index in indexs {
- texts.append(field.constants[index].value)
- keys.append(field.constants[index].key)
- }
- curValueLabel.attributedText = nil
- curValueLabel.text = texts.joined(separator: ",")
- field.value = keys
- needReview = true
- delegate?.onSkillFieldBaseEditViewInputChanged(view: self)
- }
- panel.popup()
- default: break
- }
- }
- container.snp.makeConstraints { make in
- make.height.equalTo(38)
- }
-
- let arrow = UIImageView.arrowImageView(size: 15)
- arrow.tintColor = .text_3
- container.addSubview(arrow)
- arrow.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalToSuperview().offset(-16)
- }
-
- curValueLabel.font = .heading_h4
- curValueLabel.textColor = .text_5
- container.addSubview(curValueLabel)
- curValueLabel.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(16)
- make.centerY.equalToSuperview()
- }
- }
- }
|