@@ -14,6 +14,8 @@ struct ThirdStepViewModel {
15class ThirdStepView: UIView {
15class ThirdStepView: UIView {
17+ // MARK: - IBAOutlets
17 @IBOutlet weak var totalLabel: UILabel!
19 @IBOutlet weak var totalLabel: UILabel!
19 @IBOutlet weak var infoLabel: UILabel!
21 @IBOutlet weak var infoLabel: UILabel!
@@ -27,7 +29,34 @@ class ThirdStepView: UIView {
28 @IBOutlet weak var timeInterval: UIView!
30 @IBOutlet weak var timeInterval: UIView!
32+ @IBOutlet weak var stackView: UIStackView!
34+ @IBOutlet weak var scrollView: UIScrollView!
36+ // MARK: - Properties
38+ /// Время начала вертелки.
41+ // констрейнты начала и конца интервала
42+ var startLeadingConstraint: NSLayoutConstraint!
43+ var endLeadingConstraint: NSLayoutConstraint!
45+ var reservation: Reservation? {
48+ let isAdmin = DataStorage.standard.getUserModel()?.isAdmin ?? false
49+ startDate = reservation?.startTime.addHours(-1)
51+ setupStackView(isAdmin)
30 func bind(withModel model: Reservation) {
58 func bind(withModel model: Reservation) {
31 let date = format(model.startTime, model.endTime)
60 let date = format(model.startTime, model.endTime)
33 totalLabel.text = "Забронирован \(model.reservedTable) столик на \(model.numberOfGuests)-х\n \(date)"
62 totalLabel.text = "Забронирован \(model.reservedTable) столик на \(model.numberOfGuests)-х\n \(date)"
@@ -53,4 +82,96 @@ class ThirdStepView: UIView {
53 let num = people > 6 ? 2 : 1
82 let num = people > 6 ? 2 : 1
54 return num
83 return num
86+ var startPoint: UIView = {
88+ view.backgroundColor = #colorLiteral(red: 0.2901960784, green: 0.5647058824, blue: 0.8862745098, alpha: 1)
89+ view.translatesAutoresizingMaskIntoConstraints = false
93+ var endPoint: UIView = {
95+ view.backgroundColor = #colorLiteral(red: 0.2901960784, green: 0.5647058824, blue: 0.8862745098, alpha: 1)
96+ view.translatesAutoresizingMaskIntoConstraints = false
101+ var fillInterval: UIView = {
103+ view.backgroundColor = #colorLiteral(red: 0, green: 0.5921568627, blue: 1, alpha: 0.3426262843)
104+ view.translatesAutoresizingMaskIntoConstraints = false
108+ func setupStackView(_ isAdmin: Bool) {
109+ guard let startPoint = startDate else { return }
111+ let startingPoint = startPoint.getAdminsStartingPoint()
112+ let endingPoint = startingPoint + (isAdmin ? Constants.adminDuration : Constants.clientDuration)
114+ for period in startingPoint...endingPoint {
115+ let timePointView = TimePointView.loadFromNib()
116+ timePointView?.setUp(withTimePoint: period)
117+ let view = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 106))
118+ view.addSubviewThatFills(timePointView)
119+ stackView.addArrangedSubview(view)
123+ func setUpBookingPeriod() {
124+ self.scrollView.addSubview(startPoint)
125+ self.scrollView.addSubview(endPoint)
126+ self.scrollView.addSubview(fillInterval)
129+ let startDate = startDate,
130+ let startTime = reservation?.startTime,
131+ let endTime = reservation?.endTime else { return }
133+ let startConstr = CGFloat(startTime.getMinutesPeriods(fromStart: startDate) * Constants.widthTimePoint) + 3
134+ startLeadingConstraint = startPoint.leftAnchor.constraint(equalTo: scrollView.leftAnchor,
135+ constant: startConstr)
137+ let endConstr = CGFloat(endTime.getMinutesPeriods(fromStart: startDate) * Constants.widthTimePoint) + 3
138+ endLeadingConstraint = endPoint.leftAnchor.constraint(equalTo: scrollView.leftAnchor,
139+ constant: endConstr)
141+ scrollView.setContentOffset(CGPoint(x: startConstr - 50, y: 0), animated: true)
143+ NSLayoutConstraint.activate([
145+ startPoint.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
146+ endPoint.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
148+ startPoint.widthAnchor.constraint(equalToConstant: Constants.pointWidth),
149+ endPoint.widthAnchor.constraint(equalToConstant: Constants.pointWidth),
151+ startPoint.heightAnchor.constraint(equalToConstant: Constants.pointHeight),
152+ endPoint.heightAnchor.constraint(equalToConstant: Constants.pointHeight),
154+ startLeadingConstraint,
155+ endLeadingConstraint,
157+ fillInterval.leftAnchor.constraint(equalTo: startPoint.rightAnchor, constant: 0),
158+ fillInterval.rightAnchor.constraint(equalTo: endPoint.leftAnchor, constant: 0),
160+ fillInterval.heightAnchor.constraint(equalToConstant: Constants.pointHeight),
161+ fillInterval.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0)
166+extension ThirdStepView {
168+ static let widthTimePoint = 11
169+ static let pointWidth: CGFloat = 5
170+ static let pointHeight: CGFloat = 85
172+ static let adminDuration = 288
173+ static let clientDuration = 90
175+ static let clientStartingPoint = 72