From 533bcd2dea378885ef951d05b5ea5f33a8370a0e Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 22 Aug 2024 13:30:13 -0500 Subject: [PATCH] added isEqual to CalendarView Signed-off-by: Matt Bruce --- .../Atoms/Views/CalendarViewModel.swift | 36 +++++++++++++++++++ .../Atomic/Extensions/VDS-Enums+Codable.swift | 15 +++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/CalendarViewModel.swift b/MVMCoreUI/Atomic/Atoms/Views/CalendarViewModel.swift index 16e9b425..0e888659 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CalendarViewModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CalendarViewModel.swift @@ -113,6 +113,42 @@ open class CalendarViewModel: MoleculeModelProtocol { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(id, forKey: .id) try container.encode(inverted, forKey: .inverted) + try container.encode(dateFormat, forKey: .dateFormat) + try container.encode(hideContainerBorder, forKey: .hideContainerBorder) + try container.encode(hideCurrentDateIndicator, forKey: .hideCurrentDateIndicator) + try container.encode(activeDates, forKey: .activeDates) + try container.encode(selectedDate, forKey: .selectedDate) + try container.encode(minDate, forKey: .minDate) + try container.encode(maxDate, forKey: .maxDate) + try container.encode(indicators, forKey: .indicators) + } + + open func isEqual(to model: any ModelComparisonProtocol) -> Bool { + guard let model = model as? Self else { return false } + return inverted == model.inverted + && dateFormat == model.dateFormat + && hideContainerBorder == model.hideContainerBorder + && hideCurrentDateIndicator == model.hideCurrentDateIndicator + && activeDates == model.activeDates + && inactiveDates == model.inactiveDates + && selectedDate == model.selectedDate + && minDate == model.minDate + && maxDate == model.maxDate + && indicators == model.indicators + } + + open func isVisuallyEquivalent(to model: any MoleculeModelComparisonProtocol) -> Bool { + guard let model = model as? Self else { return false } + return inverted == model.inverted + && dateFormat == model.dateFormat + && hideContainerBorder == model.hideContainerBorder + && hideCurrentDateIndicator == model.hideCurrentDateIndicator + && activeDates == model.activeDates + && inactiveDates == model.inactiveDates + && selectedDate == model.selectedDate + && minDate == model.minDate + && maxDate == model.maxDate + && indicators == model.indicators } } diff --git a/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift b/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift index fa95360e..6c6ae71f 100644 --- a/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift +++ b/MVMCoreUI/Atomic/Extensions/VDS-Enums+Codable.swift @@ -9,6 +9,7 @@ import Foundation import VDS import VDSCoreTokens +import MVMCore //-------------------------------------------------- // MARK: - Codable Extensions @@ -57,7 +58,7 @@ extension VDS.Button.Size: RawRepresentableCodable { public static var defaultValue: VDS.Button.Size? { nil } } -extension VDS.CalendarBase.CalendarIndicatorModel: Codable { +extension VDS.CalendarBase.CalendarIndicatorModel: Codable, ModelComparisonProtocol, MoleculeModelComparisonProtocol { enum CodingKeys: String, CodingKey { case label @@ -89,6 +90,18 @@ extension VDS.CalendarBase.CalendarIndicatorModel: Codable { formatter.formatterBehavior = .default return formatter } + + public func isEqual(to model: any ModelComparisonProtocol) -> Bool { + guard let model = model as? Self else { return false } + return label == model.label + && date == model.date + } + + public func isVisuallyEquivalent(to model: any MoleculeModelComparisonProtocol) -> Bool { + guard let model = model as? Self else { return false } + return label == model.label + && date == model.date + } } //--------------------------------------------------