79 lines
2.4 KiB
Swift
79 lines
2.4 KiB
Swift
//
|
|
// 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) }
|
|
}
|