76 lines
1.8 KiB
Swift
76 lines
1.8 KiB
Swift
//
|
|
// SearchPanelPresenter.swift
|
|
// PrivadoVPN
|
|
//
|
|
// Created by Zhandos Bolatbekov on 25.05.2021.
|
|
// Copyright © 2021 Privado LLC. All rights reserved.
|
|
//
|
|
|
|
protocol SearchPanelOutput: AnyObject {
|
|
func sortPanelDidSelect(order: SortPanelOrder)
|
|
func sortPanelSearch(query: String)
|
|
func sortPanelSearchCancel()
|
|
}
|
|
|
|
enum SortPanelOrder {
|
|
case `default`
|
|
case nameASC
|
|
case nameDESC
|
|
case latencyASC
|
|
case latencyDESC
|
|
|
|
var localizedSting: String {
|
|
get {
|
|
switch self {
|
|
case .latencyASC:
|
|
return "serverlist.panelSort.latencyASC"
|
|
case .latencyDESC:
|
|
return "serverlist.panelSort.latencyDESC"
|
|
case .nameASC:
|
|
return "serverlist.panelSort.nameASC"
|
|
case .nameDESC:
|
|
return "serverlist.panelSort.nameDESC"
|
|
case .default:
|
|
return "default"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
final class SearchPanelPresenter {
|
|
|
|
private weak var output: SearchPanelOutput?
|
|
weak var viewInput: SearchPanelViewInput?
|
|
private var order: SortPanelOrder {
|
|
didSet {
|
|
self.output?.sortPanelDidSelect(order: self.order)
|
|
}
|
|
}
|
|
|
|
private let sortOptions: [SortPanelOrder] = [
|
|
.latencyASC, .latencyDESC, .nameASC, .nameDESC
|
|
]
|
|
|
|
// MARK: - Init
|
|
|
|
init(order: SortPanelOrder = .default, output: SearchPanelOutput?) {
|
|
self.order = order
|
|
self.output = output
|
|
}
|
|
}
|
|
|
|
// MARK: - SortPanelViewOutput
|
|
|
|
extension SearchPanelPresenter: SearchPanelViewOutput {
|
|
|
|
func viewIsReady() { }
|
|
|
|
func search(query: String) {
|
|
self.output?.sortPanelSearch(query: query.trimmingCharacters(in: .whitespacesAndNewlines))
|
|
}
|
|
|
|
func searchCancel() {
|
|
self.output?.sortPanelSearchCancel()
|
|
}
|
|
}
|