-
Notifications
You must be signed in to change notification settings - Fork 52
/
HitsCollectionController.swift
53 lines (41 loc) · 1.52 KB
/
HitsCollectionController.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
//
// HitsCollectionController.swift
// InstantSearchCore
//
// Created by Vladislav Fitc on 21/03/2019.
// Copyright © 2019 Algolia. All rights reserved.
//
import Foundation
import InstantSearchCore
import UIKit
public typealias HitViewConfigurator<HitsView, SingleHitView, Hit> = (HitsView, Hit, IndexPath) -> SingleHitView
public typealias HitClickHandler<HitsView, Hit> = (HitsView, Hit, IndexPath) -> Void
public typealias CollectionViewCellConfigurator<Item> = HitViewConfigurator<UICollectionView, UICollectionViewCell, Item>
public typealias CollectionViewClickHandler<Item> = HitClickHandler<UICollectionView, Item>
public class HitsCollectionController<Source: HitsSource>: NSObject, HitsController {
public let collectionView: UICollectionView
public weak var hitsSource: Source?
public var dataSource: HitsCollectionViewDataSource<Source>? {
didSet {
dataSource?.hitsSource = hitsSource
collectionView.dataSource = dataSource
}
}
public var delegate: HitsCollectionViewDelegate<Source>? {
didSet {
delegate?.hitsSource = hitsSource
collectionView.delegate = delegate
}
}
public init(collectionView: UICollectionView) {
self.collectionView = collectionView
}
public func reload() {
collectionView.reloadData()
}
public func scrollToTop() {
guard collectionView.numberOfItems(inSection: 0) != 0 else { return }
let indexPath = IndexPath(item: 0, section: 0)
collectionView.scrollToItem(at: indexPath, at: .top, animated: false)
}
}