// // DatePickerPopoverViewController.swift // VDS // // Created by Matt Bruce on 5/14/24. // import Foundation import UIKit protocol DatePickerViewControllerDelegate: NSObject { func didSelectDate(_ controller: DatePicker.DatePickerViewController, date: Date) } extension DatePicker { class DatePickerViewController: UIViewController { private var padding: CGFloat = 15 private var topPadding: CGFloat { 10 + padding } private var calendarModel: CalendarModel private let picker = CalendarBase() weak var delegate: DatePickerViewControllerDelegate? init(_ calendarModel: CalendarModel, delegate: DatePickerViewControllerDelegate?) { self.delegate = delegate self.calendarModel = calendarModel super.init(nibName: nil, bundle: nil) self.picker.onChange = { [weak self] control in guard let self else { return } self.delegate?.didSelectDate(self, date: control.selectedDate) } } var selectedDate: Date = Date() { didSet { picker.selectedDate = selectedDate } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() view.addSubview(picker) picker.surface = calendarModel.surface picker.hideContainerBorder = calendarModel.hideContainerBorder picker.hideCurrentDateIndicator = calendarModel.hideCurrentDateIndicator picker.indicators = calendarModel.indicators picker.activeDates = calendarModel.activeDates picker.inactiveDates = calendarModel.inactiveDates picker.selectedDate = calendarModel.selectedDate picker.minDate = calendarModel.minDate picker.maxDate = calendarModel.maxDate picker.pinToSuperView(.init(top: topPadding, left: padding, bottom: padding, right: padding)) view.backgroundColor = picker.backgroundColor } override var preferredContentSize: CGSize { get { var size = picker.frame.size size.height += 40 size.width += 30 return size } set { super.preferredContentSize = newValue } } } }