From 11e8f1b3f8510bd39593bde6b8386abe5c71c486 Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Sat, 29 Aug 2020 23:02:00 -0700 Subject: [PATCH] Refactoring --- View Models/StatusListViewModel.swift | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/View Models/StatusListViewModel.swift b/View Models/StatusListViewModel.swift index bc0b366..6609410 100644 --- a/View Models/StatusListViewModel.swift +++ b/View Models/StatusListViewModel.swift @@ -9,7 +9,6 @@ class StatusListViewModel: ObservableObject { @Published private(set) var loading = false private(set) var maintainScrollPositionOfStatusID: String? - @Published private var filterRegularExpression: String? private var statuses = [String: Status]() private let statusListService: StatusListService private var statusViewModelCache = [Status: (StatusViewModel, AnyCancellable)]() @@ -18,22 +17,9 @@ class StatusListViewModel: ObservableObject { init(statusListService: StatusListService) { self.statusListService = statusListService - statusListService.filters - .assignErrorsToAlertItem(to: \.alertItem, on: self) - .map { $0.regularExpression() } - .assign(to: &$filterRegularExpression) - statusListService.statusSections - .map { - $0.map { - $0.filter { [weak self] in - guard let filterRegularExpression = self?.filterRegularExpression else { return true } - - return $0.filterableContent.range(of: filterRegularExpression, - options: [.regularExpression, .caseInsensitive]) == nil - } - } - } + .combineLatest(statusListService.filters.map { $0.regularExpression() }) + .map(Self.filter(statusSections:regularExpression:)) .handleEvents(receiveOutput: { [weak self] in self?.determineIfScrollPositionShouldBeMaintained(newStatusSections: $0) self?.cleanViewModelCache(newStatusSections: $0) @@ -91,6 +77,14 @@ extension StatusListViewModel { } private extension StatusListViewModel { + static func filter(statusSections: [[Status]], regularExpression: String?) -> [[Status]] { + guard let regEx = regularExpression else { return statusSections } + + return statusSections.map { + $0.filter { $0.filterableContent.range(of: regEx, options: [.regularExpression, .caseInsensitive]) == nil } + } + } + func determineIfScrollPositionShouldBeMaintained(newStatusSections: [[Status]]) { maintainScrollPositionOfStatusID = nil // clear old value