Skip to content

Commit 174f46f

Browse files
committed
Add SubscriptionContainerViewModel and
1 parent a19736c commit 174f46f

File tree

6 files changed

+63
-12
lines changed

6 files changed

+63
-12
lines changed

DuckDuckGo.xcodeproj/project.pbxproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,7 @@
845845
D66F683D2BB333C100AE93E2 /* SubscriptionContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D66F683C2BB333C100AE93E2 /* SubscriptionContainerView.swift */; };
846846
D670E5BB2BB6A75300941A42 /* SubscriptionNavigationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D670E5BA2BB6A75200941A42 /* SubscriptionNavigationCoordinator.swift */; };
847847
D670E5BD2BB6AA0000941A42 /* View+AppearModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D670E5BC2BB6AA0000941A42 /* View+AppearModifiers.swift */; };
848+
D67969112BC84CE700BA8B34 /* SubscriptionContainerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D67969102BC84CE700BA8B34 /* SubscriptionContainerViewModel.swift */; };
848849
D68A21442B7EC08500BB372E /* SubscriptionExternalLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68A21432B7EC08500BB372E /* SubscriptionExternalLinkView.swift */; };
849850
D68A21462B7EC16200BB372E /* SubscriptionExternalLinkViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68A21452B7EC16200BB372E /* SubscriptionExternalLinkViewModel.swift */; };
850851
D68DF81C2B58302E0023DBEA /* SubscriptionRestoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68DF81B2B58302E0023DBEA /* SubscriptionRestoreView.swift */; };
@@ -2543,6 +2544,7 @@
25432544
D66F683C2BB333C100AE93E2 /* SubscriptionContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionContainerView.swift; sourceTree = "<group>"; };
25442545
D670E5BA2BB6A75200941A42 /* SubscriptionNavigationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionNavigationCoordinator.swift; sourceTree = "<group>"; };
25452546
D670E5BC2BB6AA0000941A42 /* View+AppearModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+AppearModifiers.swift"; sourceTree = "<group>"; };
2547+
D67969102BC84CE700BA8B34 /* SubscriptionContainerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionContainerViewModel.swift; sourceTree = "<group>"; };
25462548
D68A21432B7EC08500BB372E /* SubscriptionExternalLinkView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscriptionExternalLinkView.swift; sourceTree = "<group>"; };
25472549
D68A21452B7EC16200BB372E /* SubscriptionExternalLinkViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscriptionExternalLinkViewModel.swift; sourceTree = "<group>"; };
25482550
D68DF81B2B58302E0023DBEA /* SubscriptionRestoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionRestoreView.swift; sourceTree = "<group>"; };
@@ -4769,13 +4771,14 @@
47694771
D664C7932B289AA000CBFA76 /* ViewModel */ = {
47704772
isa = PBXGroup;
47714773
children = (
4774+
D68A21452B7EC16200BB372E /* SubscriptionExternalLinkViewModel.swift */,
4775+
D67969102BC84CE700BA8B34 /* SubscriptionContainerViewModel.swift */,
47724776
D664C7942B289AA000CBFA76 /* SubscriptionFlowViewModel.swift */,
47734777
D68DF81D2B5830380023DBEA /* SubscriptionRestoreViewModel.swift */,
47744778
D668D9262B6937D2008E2FF2 /* SubscriptionITPViewModel.swift */,
47754779
D64648AE2B5993890033090B /* SubscriptionEmailViewModel.swift */,
47764780
D652498D2B515A6A0056B0DE /* SubscriptionSettingsViewModel.swift */,
47774781
D6BFCB602B7525160051FF81 /* SubscriptionPIRViewModel.swift */,
4778-
D68A21452B7EC16200BB372E /* SubscriptionExternalLinkViewModel.swift */,
47794782
);
47804783
path = ViewModel;
47814784
sourceTree = "<group>";
@@ -6947,6 +6950,7 @@
69476950
F194FAED1F14E2B3009B4DF8 /* UIFontExtension.swift in Sources */,
69486951
F1CDD3F21F16911700BE0581 /* AboutViewControllerOld.swift in Sources */,
69496952
98F0FC2021FF18E700CE77AB /* AutoClearSettingsViewController.swift in Sources */,
6953+
D67969112BC84CE700BA8B34 /* SubscriptionContainerViewModel.swift in Sources */,
69506954
027F487A2A4B66CD001A1C6C /* AppTPFAQViewModel.swift in Sources */,
69516955
F1E90C201E678E7C005E7E21 /* HomeControllerDelegate.swift in Sources */,
69526956
F17922DE1E7192E6006E3D97 /* SuggestionTableViewCell.swift in Sources */,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
//
2+
// SubscriptionContainerViewModel.swift
3+
// DuckDuckGo
4+
//
5+
// Copyright © 2024 DuckDuckGo. All rights reserved.
6+
//
7+
// Licensed under the Apache License, Version 2.0 (the "License");
8+
// you may not use this file except in compliance with the License.
9+
// You may obtain a copy of the License at
10+
//
11+
// http://www.apache.org/licenses/LICENSE-2.0
12+
//
13+
// Unless required by applicable law or agreed to in writing, software
14+
// distributed under the License is distributed on an "AS IS" BASIS,
15+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
// See the License for the specific language governing permissions and
17+
// limitations under the License.
18+
//
19+
20+
import Foundation
21+
import Combine
22+
23+
#if SUBSCRIPTION
24+
@available(iOS 15.0, *)
25+
final class SubscriptionContainerViewModel: ObservableObject {
26+
27+
let userScript: SubscriptionPagesUserScript
28+
let subFeature: SubscriptionPagesUseSubscriptionFeature
29+
30+
let flow: SubscriptionFlowViewModel
31+
let restore: SubscriptionRestoreViewModel
32+
let email: SubscriptionEmailViewModel
33+
34+
35+
init(userScript: SubscriptionPagesUserScript = SubscriptionPagesUserScript(),
36+
subFeature: SubscriptionPagesUseSubscriptionFeature = SubscriptionPagesUseSubscriptionFeature()) {
37+
self.userScript = userScript
38+
self.subFeature = subFeature
39+
self.flow = SubscriptionFlowViewModel(userScript: userScript, subFeature: subFeature)
40+
self.restore = SubscriptionRestoreViewModel(userScript: userScript, subFeature: subFeature)
41+
self.email = SubscriptionEmailViewModel(userScript: userScript, subFeature: subFeature)
42+
}
43+
44+
deinit {
45+
subFeature.cleanup()
46+
}
47+
}
48+
#endif

DuckDuckGo/Subscription/ViewModel/SubscriptionEmailViewModel.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ final class SubscriptionEmailViewModel: ObservableObject {
116116

117117
private func cleanUp() {
118118
canGoBackCancellable?.cancel()
119-
subFeature.cleanup()
120119
cancellables.removeAll()
121120
}
122121

DuckDuckGo/Subscription/ViewModel/SubscriptionFlowViewModel.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,6 @@ final class SubscriptionFlowViewModel: ObservableObject {
255255
transactionStatusTimer?.invalidate()
256256
canGoBackCancellable?.cancel()
257257
urlCancellable?.cancel()
258-
subFeature.cleanup()
259258
cancellables.removeAll()
260259
}
261260

DuckDuckGo/Subscription/ViewModel/SubscriptionRestoreViewModel.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ final class SubscriptionRestoreViewModel: ObservableObject {
8383
}
8484

8585
private func cleanUp() {
86-
subFeature.cleanup()
8786
cancellables.removeAll()
8887
}
8988

DuckDuckGo/Subscription/Views/SubscriptionContainerView.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,20 @@ struct SubscriptionContainerView: View {
3131
@Environment(\.dismiss) var dismiss
3232
@EnvironmentObject var subscriptionNavigationCoordinator: SubscriptionNavigationCoordinator
3333
@State private var currentViewState: CurrentView
34+
private let viewModel: SubscriptionContainerViewModel
3435
private let flowViewModel: SubscriptionFlowViewModel
3536
private let restoreViewModel: SubscriptionRestoreViewModel
3637
private let emailViewModel: SubscriptionEmailViewModel
37-
38-
init(currentView: CurrentView) {
39-
_currentViewState = State(initialValue: currentView)
4038

41-
let userScript = SubscriptionPagesUserScript()
42-
let subFeature = SubscriptionPagesUseSubscriptionFeature()
43-
flowViewModel = SubscriptionFlowViewModel(userScript: userScript, subFeature: subFeature)
44-
restoreViewModel = SubscriptionRestoreViewModel(userScript: userScript, subFeature: subFeature)
45-
emailViewModel = SubscriptionEmailViewModel(userScript: userScript, subFeature: subFeature)
39+
init(currentView: CurrentView,
40+
viewModel: SubscriptionContainerViewModel = SubscriptionContainerViewModel()) {
41+
_currentViewState = State(initialValue: currentView)
42+
self.viewModel = viewModel
43+
let userScript = viewModel.userScript
44+
let subFeature = viewModel.subFeature
45+
flowViewModel = viewModel.flow
46+
restoreViewModel = viewModel.restore
47+
emailViewModel = viewModel.email
4648
}
4749

4850
var body: some View {

0 commit comments

Comments
 (0)