// // CommonMenuAutocomplete.swift // Wallet // // Created by Igor on 27.02.2021. // Copyright © 2021 AM. All rights reserved. // import UIKit protocol CommonMenuAutocompleteService: AnyObject { var collection: [Common.Model.Menu] { get } var didUpdate: (() -> Void)? { get set } func apply(filter: String?) } class CommonMenuAutocomplete: CommonMenuAction { private let title: String? private let text: String? private let image: UIImage? private let placeholder: String? private let service: CommonMenuAutocompleteService private let completion: ((Common.Model.Menu) -> Void)? private var isPresenting = false init( icon: UIImage? = nil, title: String? = nil, text: String? = nil, image: UIImage? = nil, placeholder: String? = L10n.Common.placeholder, service: CommonMenuAutocompleteService, empty: Common.Model.Menu? = nil, completion: ((Common.Model.Menu) -> Void)? = nil ) { self.title = title self.text = text self.image = image self.placeholder = placeholder self.service = service self.completion = completion super.init(icon: icon, empty: empty) } override func perform(sender: CommonMenuSender?) { guard !isPresenting else { return } isPresenting = true Popup.show(content: CommonControllerAutocomplete( image: image, title: title, text: text, placeholder: placeholder, service: service, selected: sender?.action?.selected ) { (object) in sender?.action?.selected = object sender?.update(animated: true) self.completion?(object) }) { self.isPresenting = false } } } extension CommonMenuAction { static func autocomplete( icon: UIImage? = Asset.commonArrowDown.image, title: String? = nil, text: String? = nil, image: UIImage? = nil, placeholder: String? = L10n.Common.placeholder, service: CommonMenuAutocompleteService, empty: Common.Model.Menu? = nil, completion: ((Common.Model.Menu) -> Void)? = nil ) -> CommonMenuAutocomplete { .init(icon: icon, title: title, placeholder: placeholder, service: service, empty: empty, completion: completion) } }