Files
raspberry/iOS/Wallet/Sources/Common/Menu/CommonMenuAutocomplete.swift
T

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) }
}