diff --git a/VDS/Components/DatePicker/DatePicker.swift b/VDS/Components/DatePicker/DatePicker.swift index 3ab83be1..e44c2a76 100644 --- a/VDS/Components/DatePicker/DatePicker.swift +++ b/VDS/Components/DatePicker/DatePicker.swift @@ -31,6 +31,14 @@ open class DatePicker: EntryFieldBase { // MARK: - Private Properties //-------------------------------------------------- internal var minWidthDefault = 186.0 + internal var popoverView: UIView! + internal var popoverVisible = false + internal var outsideTapGesture: UITapGestureRecognizer? + internal var outsidePanGesture: UIPanGestureRecognizer? + internal var overlayView = UIView().with { + $0.backgroundColor = .clear; + $0.isHidden = true + } internal var bottomStackView: UIStackView = { return UIStackView().with { @@ -109,8 +117,8 @@ open class DatePicker: EntryFieldBase { .publisher(for: UITapGestureRecognizer()) .sink { [weak self] _ in guard let self else { return } - if self.isEnabled && !self.isReadOnly { - self.togglePicker() + if isEnabled && !isReadOnly { + showPopover() } } .store(in: &subscribers) @@ -118,9 +126,6 @@ open class DatePicker: EntryFieldBase { NotificationCenter.default .publisher(for: UIDevice.orientationDidChangeNotification).sink { [weak self] _ in guard let self else { return } - popoverController?.dismiss(animated: true){ [weak self] in - guard let self else { return } - } hidePopoverView() } .store(in: &subscribers) @@ -175,49 +180,11 @@ open class DatePicker: EntryFieldBase { popoverController = nil } } - - private var overlayView = UIView().with { - $0.backgroundColor = .clear; - $0.isHidden = true - } - private var popoverView: UIView! - private var popoverVisible = false - private var outsideTapGesture: UITapGestureRecognizer? - private var outsidePanGesture: UIPanGestureRecognizer? - -// internal func togglePicker() { -// calendar.activeDates = calendarModel.activeDates -// calendar.hideContainerBorder = calendarModel.hideContainerBorder -// calendar.hideCurrentDateIndicator = calendarModel.hideCurrentDateIndicator -// calendar.inactiveDates = calendarModel.inactiveDates -// calendar.indicators = calendarModel.indicators -// calendar.maxDate = calendarModel.maxDate -// calendar.minDate = calendarModel.minDate -// calendar.surface = calendarModel.surface -// calendar.setNeedsLayout() -// calendar.layoutIfNeeded() -// calendar.onChange = { [weak self] control in -// guard let self else { return } -// didSelect(control.selectedDate) -// } -// -// popoverController = ClearPopoverViewController(contentView: calendar, -// arrow: .any, -// sourceView: containerView, -// sourceRect: .init(x: 0, y: 0, width: 320, height: 45), -// spacing: VDSLayout.space1X) -// popoverController?.maxWidth = 320 -// if let viewController = UIApplication.topViewController(), let popoverController { -// viewController.present(popoverController, -// animated: true, -// completion: nil) -// } -// } } extension DatePicker { - private func togglePicker() { + private func showPopover() { guard let viewController = UIApplication.topViewController(), let parentView = viewController.view else { return } if popoverVisible { @@ -286,7 +253,12 @@ extension DatePicker { popoverView.isHidden = false popoverVisible = true - UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.2, options: .curveEaseOut, animations: { [weak self] in + UIView.animate(withDuration: 0.3, + delay: 0, + usingSpringWithDamping: 0.8, + initialSpringVelocity: 0.2, + options: .curveEaseOut, + animations: { [weak self] in guard let self else { return } popoverView.alpha = 1 popoverView.transform = CGAffineTransform.identity @@ -301,13 +273,16 @@ extension DatePicker { outsideTapGesture = nil outsidePanGesture = nil - UIView.animate(withDuration: 0.2, animations: { - self.popoverView.alpha = 0 - self.popoverView.transform = CGAffineTransform(scaleX: 0.9, y: 0.9) - }) { _ in - self.popoverView.isHidden = true - self.popoverView.removeFromSuperview() - self.popoverVisible = false + UIView.animate(withDuration: 0.2, + animations: {[weak self] in + guard let self else { return } + popoverView.alpha = 0 + popoverView.transform = CGAffineTransform(scaleX: 0.9, y: 0.9) + }) { [weak self] _ in + guard let self else { return } + popoverView.isHidden = true + popoverView.removeFromSuperview() + popoverVisible = false } }