-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathCollectionView.swift
133 lines (83 loc) · 2.4 KB
/
CollectionView.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//
// CollectionView.swift
// ListableUI
//
// Created by Kyle Van Essen on 11/29/23.
//
import Foundation
final class LSTCollectionView : UIScrollView {
private let queue : ListChangesQueue
private(set) var content : Content
private var reuseCache : ReusableViewCache
private let view : ContentView
// MARK: Initialization
override init(frame: CGRect) {
self.queue = .init()
self.content = .empty
self.reuseCache = .init()
self.view = .init(frame: .init(origin: .zero, size: frame.size))
super.init(frame: frame)
self.addSubview(self.view)
}
// MARK: UIScrollView
override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
super.setContentOffset(contentOffset, animated: animated)
}
// MARK: UIView
override func layoutSubviews() {
super.layoutSubviews()
self.view.frame = bounds
}
required init?(coder: NSCoder) { fatalError() }
func set(
content : Content,
changes: SectionedDiff<Section,
AnyIdentifier,
AnyItem,
AnyIdentifier>,
completion : @escaping () -> ()
) {
queue.add {
}
}
}
extension LSTCollectionView {
final class ContentView : UIScrollView {
}
}
open class LSTCollectionReusableView : UIView {
}
open class LSTCollectionSupplementaryView : LSTCollectionReusableView {
}
open class LSTCollectionItemView : LSTCollectionReusableView {
}
extension LSTCollectionView {
struct Content {
static var empty : Self {
fatalError()
}
var supplementaries : Supplementaries
var sections : [Section]
}
struct Section {
var supplementaries : Supplementaries
var items : [Item]
}
struct Item {
var value : AnyItem
var state : State
final class State {
}
}
struct Supplementaries {
private var byType : [ObjectIdentifier:Supplementary]
}
struct Supplementary {
var value : AnyHeaderFooter
var state : State
final class State {
}
}
}
protocol SupplementaryTypeKey {
}