@@ -4,7 +4,7 @@ import UIKit
44///
55protocol FilterListViewModel {
66 /// The type of the final value returned to the caller of `FilterListViewController`.
7- associatedtype Criteria
7+ associatedtype Criteria : Equatable
88
99 // Filter Action UI configuration
1010
@@ -82,6 +82,7 @@ final class FilterListViewController<ViewModel: FilterListViewModel>: UIViewCont
8282 @IBOutlet private weak var filterActionContainerView : UIView !
8383
8484 private let viewModel : ViewModel
85+ private let originalCriteria : ViewModel . Criteria
8586 private let listSelectorCommand : FilterListSelectorCommand
8687
8788 private lazy var listSelector : ListSelectorViewController
@@ -108,6 +109,7 @@ final class FilterListViewController<ViewModel: FilterListViewModel>: UIViewCont
108109 /// - onFilterAction: Called when the user taps on the Filter CTA.
109110 init ( viewModel: ViewModel , onFilterAction: @escaping ( ViewModel . Criteria ) -> Void ) {
110111 self . viewModel = viewModel
112+ self . originalCriteria = viewModel. criteria
111113 self . onFilterAction = onFilterAction
112114 self . listSelectorCommand = FilterListSelectorCommand ( data: viewModel. filterTypeViewModels)
113115 super. init ( nibName: " FilterListViewController " , bundle: nil )
@@ -146,6 +148,13 @@ final class FilterListViewController<ViewModel: FilterListViewModel>: UIViewCont
146148 }
147149
148150 @objc func dismissButtonTapped( ) {
151+ if hasFilterChanges ( ) {
152+ UIAlertController . presentDiscardChangesActionSheet ( viewController: self , onDiscard: { [ weak self] in
153+ self ? . dismiss ( animated: true ) { }
154+ } )
155+ return
156+ }
157+
149158 dismiss ( animated: true ) { }
150159 }
151160
@@ -255,6 +264,14 @@ private extension FilterListViewController {
255264 }
256265}
257266
267+ // MARK: Private helpers
268+ //
269+ private extension FilterListViewController {
270+ func hasFilterChanges( ) -> Bool {
271+ return viewModel. criteria != originalCriteria
272+ }
273+ }
274+
258275private extension FilterListViewController {
259276 final class FilterListSelectorCommand : ListSelectorCommand {
260277 typealias Cell = SettingTitleAndValueTableViewCell
0 commit comments