import UIKit import Shared import InputField final class SearchView: UIView { private enum Constants { static let phone = Localized.ContactSearch.Filter.phone static let email = Localized.ContactSearch.Filter.email static let username = Localized.ContactSearch.Filter.username } let input = InputField() let stack = UIStackView() let filters = UIStackView() let email = FilterItemView() let phone = FilterItemView() let empty = SearchEmptyView() let phoneInput = InputField() let username = FilterItemView() lazy var placeholder = SearchPlaceholderView { self.didTapInfo() } let didTapInfo: () -> Void init(didTapInfo: @escaping () -> Void) { self.didTapInfo = didTapInfo super.init(frame: .zero) setup() } required init?(coder: NSCoder) { nil } func alternateFieldsOver(filter: SelectedFilter) { switch filter { case .username, .email: input.isHidden = false phoneInput.isHidden = true case .phone: input.isHidden = true phoneInput.isHidden = false } } func select(filter: SelectedFilter) { [username, email, phone].forEach { $0.style = .unselected } switch filter { case .username: username.style = .selected empty.set(filter: Constants.username.lowercased()) input.makeFirstResponder() case .email: email.style = .selected empty.set(filter: Constants.email.lowercased()) input.makeFirstResponder() case .phone: phone.style = .selected empty.set(filter: Constants.phone.lowercased()) phoneInput.makeFirstResponder() } } // MARK: Private private func setup() { backgroundColor = Asset.neutralWhite.color input.setup( placeholder: Localized.ContactSearch.title, leftView: .image(Asset.lens.image.withTintColor(Asset.neutralDisabled.color)), accessibility: Localized.Accessibility.Search.input, allowsEmptySpace: false, autocapitalization: .none, returnKeyType: .search, clearable: true ) phoneInput.setup( style: .phone, placeholder: "1509192596", rightView: .image(Asset.searchLens.image), accessibility: Localized.Accessibility.Search.phoneInput, keyboardType: .numberPad, contentType: .telephoneNumber, returnKeyType: .search, toolbarButtonTitle: Localized.Shared.Search.placeholder, codeAccessibility: Localized.Accessibility.Search.countryCode ) email.set(title: Constants.email, icon: Asset.searchEmail.image) phone.set(title: Constants.phone, icon: Asset.searchPhone.image) username.set(title: Constants.username, icon: Asset.searchUsername.image, style: .selected) email.accessibilityIdentifier = Localized.Accessibility.Search.email phone.accessibilityIdentifier = Localized.Accessibility.Search.phone username.accessibilityIdentifier = Localized.Accessibility.Search.username filters.addArrangedSubview(username) filters.addArrangedSubview(email) filters.addArrangedSubview(phone) filters.distribution = .fillEqually filters.spacing = 20 stack.axis = .vertical stack.addArrangedSubview(filters) stack.addArrangedSubview(input) stack.addArrangedSubview(phoneInput) addSubview(stack) addSubview(empty) addSubview(placeholder) stack.snp.makeConstraints { make in make.top.equalToSuperview().offset(14) make.left.equalToSuperview().offset(17) make.right.equalToSuperview().offset(-17) } placeholder.snp.makeConstraints { make in make.top.equalTo(stack.snp.bottom) make.left.bottom.right.equalToSuperview() } empty.snp.makeConstraints { make in make.top.equalTo(stack.snp.bottom) make.left.bottom.right.equalToSuperview() } } }