-
Notifications
You must be signed in to change notification settings - Fork 61
/
Copy pathQuerySuggestionsDemoViewController.swift
91 lines (71 loc) · 3.19 KB
/
QuerySuggestionsDemoViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//
// QuerySuggestionsDemoViewController.swift
// Guides
//
// Created by Vladislav Fitc on 31.03.2022.
//
import Foundation
import InstantSearch
import UIKit
public class QuerySuggestionsDemoViewController: UIViewController {
let searchController: UISearchController
let searcher: MultiSearcher
let searchBoxConnector: SearchBoxConnector
let textFieldController: TextFieldController
let suggestionsHitsConnector: HitsConnector<QuerySuggestion>
let suggestionsViewController: SuggestionsTableViewController
let resultsHitsConnector: HitsConnector<Hit<StoreItem>>
let resultsViewController: StoreItemsTableViewController
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
searcher = .init(client: .ecommerce)
let suggestionsSearcher = searcher.addHitsSearcher(indexName: .ecommerceSuggestions)
suggestionsViewController = .init(style: .plain)
suggestionsHitsConnector = HitsConnector(searcher: suggestionsSearcher,
interactor: .init(infiniteScrolling: .off),
controller: suggestionsViewController)
let resultsSearcher = searcher.addHitsSearcher(indexName: .ecommerceProducts)
resultsViewController = .init(style: .plain)
resultsHitsConnector = HitsConnector(searcher: resultsSearcher,
interactor: .init(),
controller: resultsViewController)
searchController = .init(searchResultsController: suggestionsViewController)
textFieldController = .init(searchBar: searchController.searchBar)
searchBoxConnector = .init(searcher: searcher,
controller: textFieldController)
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
setup()
}
@available(*, unavailable)
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override public func viewDidLoad() {
super.viewDidLoad()
configureUI()
}
private func setup() {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
searchController.showsSearchResultsController = true
addChild(resultsViewController)
resultsViewController.didMove(toParent: self)
searchBoxConnector.connectController(suggestionsViewController)
searchBoxConnector.interactor.onQuerySubmitted.subscribe(with: searchController) { searchController, _ in
searchController.dismiss(animated: true, completion: .none)
}
searcher.search()
}
private func configureUI() {
title = "Query Suggestions"
view.backgroundColor = .systemBackground
let resultsView = resultsViewController.view!
resultsView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(resultsView)
NSLayoutConstraint.activate([
resultsView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
resultsView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
resultsView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
resultsView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
}
}