-
Notifications
You must be signed in to change notification settings - Fork 1
/
AvailabilityViewModel.swift
64 lines (48 loc) · 1.8 KB
/
AvailabilityViewModel.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
import Foundation
func formatInterval(_ interval: IntervalHour) -> IntervalHour {
let start = interval.start < 0 ? 0 : interval.start
let end = interval.start < 0 ? 0 : interval.end
return start > end ? IntervalHour(start: end, end: start) : IntervalHour(start: start, end: end)
}
struct AvailabilityViewModel {
let hoursArray = Array(8...22)
var showButtonCallback: ((Bool) -> ())!
fileprivate var selectedSequence: Set<IntervalHour> = [] {
didSet {
showButtonCallback?(selectedSequence.count < 1)
}
}
}
extension AvailabilityViewModel {
func hours() -> [Hour] {
return hoursArray.map {Hour(rawValue: String($0))}
}
mutating func resetSelectedSequence() {
selectedSequence = []
}
fileprivate mutating func update(with interval: IntervalHour) {
let formattedInterval = formatInterval(interval)
selectedSequence.update(with: formattedInterval)
}
//TODO: !!! at this point I don't know how to extract better !!!
mutating func extractInterval(_ indexPaths: [IndexPath]) {
resetSelectedSequence()
var startIndex: Int = 0
var nextItem: Int = 0
for (index, obj) in indexPaths.enumerated() {
if index == 0 {
startIndex = obj.row
nextItem = startIndex
}
if nextItem == obj.row - 1 {
nextItem = obj.row
} else if index != 0 {
update(with: IntervalHour(start: startIndex, end: nextItem))
startIndex = obj.row
nextItem = obj.row
}
}
update(with: IntervalHour(start: startIndex, end: nextItem))
print(selectedSequence)
}
}