Delete router style placeholders

This commit is contained in:
Daniel Haight 2021-12-13 23:47:15 +00:00
parent 8ec6494044
commit 8425dd94b1
29 changed files with 3 additions and 1257 deletions

View File

@ -7,27 +7,12 @@
objects = {
/* Begin PBXBuildFile section */
0D170A7226BC802800EB6A46 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D170A7126BC802800EB6A46 /* Router.swift */; };
0D185819272723FF0046B928 /* BlueChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D185818272723FF0046B928 /* BlueChip.swift */; };
0D18581B272728D60046B928 /* PhraseChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D18581A272728D60046B928 /* PhraseChip.swift */; };
0D1922EA26BDD96A00052649 /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922E926BDD96A00052649 /* ViewModel.swift */; };
0D1922ED26BDE0C600052649 /* AppRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922EC26BDE0C600052649 /* AppRouter.swift */; };
0D1922F226BDE29300052649 /* ZcashSDKStubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922F126BDE29300052649 /* ZcashSDKStubs.swift */; };
0D1922F826BDEB3500052649 /* MockServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922F726BDEB3500052649 /* MockServices.swift */; };
0D1C1AA327611EFD0004AF6A /* RecoveryPhraseDisplayReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1C1AA227611EFD0004AF6A /* RecoveryPhraseDisplayReducerTests.swift */; };
0D2ACE8026C2C67100D62E3C /* Zboto.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0D2ACE7F26C2C67100D62E3C /* Zboto.otf */; };
0D32281926C5864B00262533 /* ProfileScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281726C5864B00262533 /* ProfileScreen.swift */; };
0D32281A26C5864B00262533 /* ProfileScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */; };
0D32281E26C5867D00262533 /* ScanQrScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281C26C5867D00262533 /* ScanQrScreen.swift */; };
0D32281F26C5867D00262533 /* ScanQrScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281D26C5867D00262533 /* ScanQrScreenViewModel.swift */; };
0D32282326C586A800262533 /* HistoryScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32282126C586A800262533 /* HistoryScreen.swift */; };
0D32282426C586A800262533 /* HistoryScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32282226C586A800262533 /* HistoryScreenViewModel.swift */; };
0D32282826C586E000262533 /* RequestZcashScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32282626C586E000262533 /* RequestZcashScreen.swift */; };
0D32282926C586E000262533 /* RequestZcashScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32282726C586E000262533 /* RequestZcashScreenViewModel.swift */; };
0D32282D26C5870B00262533 /* SendScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32282B26C5870B00262533 /* SendScreen.swift */; };
0D32282E26C5870B00262533 /* SendScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32282C26C5870B00262533 /* SendScreenViewModel.swift */; };
0D32283226C5877A00262533 /* BalanceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32283026C5877A00262533 /* BalanceScreen.swift */; };
0D32283326C5877A00262533 /* BalanceScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32283126C5877A00262533 /* BalanceScreenViewModel.swift */; };
0D354A0926D5A9D000315F45 /* Services.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D354A0626D5A9D000315F45 /* Services.swift */; };
0D354A0A26D5A9D000315F45 /* KeyStoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D354A0726D5A9D000315F45 /* KeyStoring.swift */; };
0D354A0B26D5A9D000315F45 /* MnemonicSeedPhraseHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D354A0826D5A9D000315F45 /* MnemonicSeedPhraseHandling.swift */; };
@ -44,21 +29,8 @@
0D535FE2271F9476009A9E3E /* EnumeratedChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D535FE1271F9476009A9E3E /* EnumeratedChip.swift */; };
0D5D16F526E24CCF00AD33D1 /* AppError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D5D16F426E24CCF00AD33D1 /* AppError.swift */; };
0D7DF08C271DCC0E00530046 /* ScreenBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D7DF08B271DCC0E00530046 /* ScreenBackground.swift */; };
0D864A0526E1546000A61879 /* LoadingScreenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D864A0426E1546000A61879 /* LoadingScreenTests.swift */; };
0D864A0926E154FD00A61879 /* InitFailedScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D864A0726E154FD00A61879 /* InitFailedScreen.swift */; };
0D864A0A26E154FD00A61879 /* InitFailedScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D864A0826E154FD00A61879 /* InitFailedScreenViewModel.swift */; };
0D864A0E26E1583000A61879 /* LoadingScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D864A0C26E1583000A61879 /* LoadingScreen.swift */; };
0D864A0F26E1583000A61879 /* LoadingScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D864A0D26E1583000A61879 /* LoadingScreenViewModel.swift */; };
0D8A43C4272AEEDE005A6414 /* SecantTextStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D8A43C3272AEEDE005A6414 /* SecantTextStyles.swift */; };
0D8A43C6272B129C005A6414 /* WordChipGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D8A43C5272B129C005A6414 /* WordChipGrid.swift */; };
0DA13C8F26C15D1D00E3B610 /* WelcomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C8D26C15D1D00E3B610 /* WelcomeScreen.swift */; };
0DA13C9026C15D1D00E3B610 /* WelcomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C8E26C15D1D00E3B610 /* WelcomeScreenViewModel.swift */; };
0DA13C9726C186FF00E3B610 /* RestoreWalletScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9526C186FF00E3B610 /* RestoreWalletScreen.swift */; };
0DA13C9826C186FF00E3B610 /* RestoreWalletScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9626C186FF00E3B610 /* RestoreWalletScreenViewModel.swift */; };
0DA13C9C26C1942100E3B610 /* BackupWalletScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9A26C1942100E3B610 /* BackupWalletScreen.swift */; };
0DA13C9D26C1942100E3B610 /* BackupWalletScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9B26C1942100E3B610 /* BackupWalletScreenViewModel.swift */; };
0DA13CA126C1955600E3B610 /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9F26C1955600E3B610 /* HomeScreen.swift */; };
0DA13CA226C1955600E3B610 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */; };
0DA13CA526C1963000E3B610 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13CA426C1963000E3B610 /* Balance.swift */; };
0DACFA7F27208CE00039EEA5 /* Clamped.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DACFA7E27208CE00039EEA5 /* Clamped.swift */; };
0DACFA8127208D940039EEA5 /* UInt+SuperscriptText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DACFA8027208D940039EEA5 /* UInt+SuperscriptText.swift */; };
@ -146,27 +118,12 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
0D170A7126BC802800EB6A46 /* Router.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Router.swift; sourceTree = "<group>"; };
0D185818272723FF0046B928 /* BlueChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlueChip.swift; sourceTree = "<group>"; };
0D18581A272728D60046B928 /* PhraseChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhraseChip.swift; sourceTree = "<group>"; };
0D1922E926BDD96A00052649 /* ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModel.swift; sourceTree = "<group>"; };
0D1922EC26BDE0C600052649 /* AppRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRouter.swift; sourceTree = "<group>"; };
0D1922F126BDE29300052649 /* ZcashSDKStubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZcashSDKStubs.swift; sourceTree = "<group>"; };
0D1922F726BDEB3500052649 /* MockServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockServices.swift; sourceTree = "<group>"; };
0D1C1AA227611EFD0004AF6A /* RecoveryPhraseDisplayReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecoveryPhraseDisplayReducerTests.swift; sourceTree = "<group>"; };
0D2ACE7F26C2C67100D62E3C /* Zboto.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zboto.otf; sourceTree = "<group>"; };
0D32281726C5864B00262533 /* ProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreen.swift; sourceTree = "<group>"; };
0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreenViewModel.swift; sourceTree = "<group>"; };
0D32281C26C5867D00262533 /* ScanQrScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanQrScreen.swift; sourceTree = "<group>"; };
0D32281D26C5867D00262533 /* ScanQrScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanQrScreenViewModel.swift; sourceTree = "<group>"; };
0D32282126C586A800262533 /* HistoryScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryScreen.swift; sourceTree = "<group>"; };
0D32282226C586A800262533 /* HistoryScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryScreenViewModel.swift; sourceTree = "<group>"; };
0D32282626C586E000262533 /* RequestZcashScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestZcashScreen.swift; sourceTree = "<group>"; };
0D32282726C586E000262533 /* RequestZcashScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestZcashScreenViewModel.swift; sourceTree = "<group>"; };
0D32282B26C5870B00262533 /* SendScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendScreen.swift; sourceTree = "<group>"; };
0D32282C26C5870B00262533 /* SendScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendScreenViewModel.swift; sourceTree = "<group>"; };
0D32283026C5877A00262533 /* BalanceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceScreen.swift; sourceTree = "<group>"; };
0D32283126C5877A00262533 /* BalanceScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceScreenViewModel.swift; sourceTree = "<group>"; };
0D354A0626D5A9D000315F45 /* Services.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Services.swift; sourceTree = "<group>"; };
0D354A0726D5A9D000315F45 /* KeyStoring.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyStoring.swift; sourceTree = "<group>"; };
0D354A0826D5A9D000315F45 /* MnemonicSeedPhraseHandling.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MnemonicSeedPhraseHandling.swift; sourceTree = "<group>"; };
@ -189,21 +146,8 @@
0D535FE1271F9476009A9E3E /* EnumeratedChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumeratedChip.swift; sourceTree = "<group>"; };
0D5D16F426E24CCF00AD33D1 /* AppError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppError.swift; sourceTree = "<group>"; };
0D7DF08B271DCC0E00530046 /* ScreenBackground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenBackground.swift; sourceTree = "<group>"; };
0D864A0426E1546000A61879 /* LoadingScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingScreenTests.swift; sourceTree = "<group>"; };
0D864A0726E154FD00A61879 /* InitFailedScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitFailedScreen.swift; sourceTree = "<group>"; };
0D864A0826E154FD00A61879 /* InitFailedScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitFailedScreenViewModel.swift; sourceTree = "<group>"; };
0D864A0C26E1583000A61879 /* LoadingScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingScreen.swift; sourceTree = "<group>"; };
0D864A0D26E1583000A61879 /* LoadingScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingScreenViewModel.swift; sourceTree = "<group>"; };
0D8A43C3272AEEDE005A6414 /* SecantTextStyles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecantTextStyles.swift; sourceTree = "<group>"; };
0D8A43C5272B129C005A6414 /* WordChipGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordChipGrid.swift; sourceTree = "<group>"; };
0DA13C8D26C15D1D00E3B610 /* WelcomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeScreen.swift; sourceTree = "<group>"; };
0DA13C8E26C15D1D00E3B610 /* WelcomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeScreenViewModel.swift; sourceTree = "<group>"; };
0DA13C9526C186FF00E3B610 /* RestoreWalletScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestoreWalletScreen.swift; sourceTree = "<group>"; };
0DA13C9626C186FF00E3B610 /* RestoreWalletScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestoreWalletScreenViewModel.swift; sourceTree = "<group>"; };
0DA13C9A26C1942100E3B610 /* BackupWalletScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackupWalletScreen.swift; sourceTree = "<group>"; };
0DA13C9B26C1942100E3B610 /* BackupWalletScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackupWalletScreenViewModel.swift; sourceTree = "<group>"; };
0DA13C9F26C1955600E3B610 /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = "<group>"; };
0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModel.swift; sourceTree = "<group>"; };
0DA13CA426C1963000E3B610 /* Balance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Balance.swift; sourceTree = "<group>"; };
0DACFA7E27208CE00039EEA5 /* Clamped.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Clamped.swift; sourceTree = "<group>"; };
0DACFA8027208D940039EEA5 /* UInt+SuperscriptText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UInt+SuperscriptText.swift"; sourceTree = "<group>"; };
@ -299,15 +243,7 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0D170A7326BC802E00EB6A46 /* Routers */ = {
isa = PBXGroup;
children = (
0D1922EC26BDE0C600052649 /* AppRouter.swift */,
);
path = Routers;
sourceTree = "<group>";
};
0D170A7426BC9B7500EB6A46 /* MockedDependencies */ = {
0D170A7426BC9B7500EB6A46 /* Mocked Dependencies */ = {
isa = PBXGroup;
children = (
0D354A0726D5A9D000315F45 /* KeyStoring.swift */,
@ -317,31 +253,10 @@
path = MockedDependencies;
sourceTree = "<group>";
};
0D1922E826BDD95000052649 /* Base */ = {
isa = PBXGroup;
children = (
0D170A7126BC802800EB6A46 /* Router.swift */,
0D1922E926BDD96A00052649 /* ViewModel.swift */,
);
path = Base;
sourceTree = "<group>";
};
0D1922EB26BDD9A500052649 /* Screens */ = {
isa = PBXGroup;
children = (
2E5C037F2738C55F008BFFD3 /* Onboarding */,
0D864A0B26E1580700A61879 /* Loading */,
0D864A0626E154D100A61879 /* Error */,
0D32282F26C5874B00262533 /* Balance */,
0D32282A26C586E700262533 /* Send ZEC */,
0D32282526C586C600262533 /* Request ZEC */,
0D32282026C5868F00262533 /* History */,
0D32281B26C5865900262533 /* Scan */,
0D32281526C5862400262533 /* Profile */,
0DA13C9E26C1953F00E3B610 /* Home */,
0DA13C9926C193FE00E3B610 /* Backup Wallet */,
0DA13C9426C186B100E3B610 /* Restore Wallet */,
0DA13C8C26C15CBE00E3B610 /* Welcome Screen */,
);
path = Screens;
sourceTree = "<group>";
@ -365,60 +280,6 @@
path = Fonts;
sourceTree = "<group>";
};
0D32281526C5862400262533 /* Profile */ = {
isa = PBXGroup;
children = (
0D32281726C5864B00262533 /* ProfileScreen.swift */,
0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */,
);
path = Profile;
sourceTree = "<group>";
};
0D32281B26C5865900262533 /* Scan */ = {
isa = PBXGroup;
children = (
0D32281C26C5867D00262533 /* ScanQrScreen.swift */,
0D32281D26C5867D00262533 /* ScanQrScreenViewModel.swift */,
);
path = Scan;
sourceTree = "<group>";
};
0D32282026C5868F00262533 /* History */ = {
isa = PBXGroup;
children = (
0D32282126C586A800262533 /* HistoryScreen.swift */,
0D32282226C586A800262533 /* HistoryScreenViewModel.swift */,
);
path = History;
sourceTree = "<group>";
};
0D32282526C586C600262533 /* Request ZEC */ = {
isa = PBXGroup;
children = (
0D32282626C586E000262533 /* RequestZcashScreen.swift */,
0D32282726C586E000262533 /* RequestZcashScreenViewModel.swift */,
);
path = "Request ZEC";
sourceTree = "<group>";
};
0D32282A26C586E700262533 /* Send ZEC */ = {
isa = PBXGroup;
children = (
0D32282B26C5870B00262533 /* SendScreen.swift */,
0D32282C26C5870B00262533 /* SendScreenViewModel.swift */,
);
path = "Send ZEC";
sourceTree = "<group>";
};
0D32282F26C5874B00262533 /* Balance */ = {
isa = PBXGroup;
children = (
0D32283026C5877A00262533 /* BalanceScreen.swift */,
0D32283126C5877A00262533 /* BalanceScreenViewModel.swift */,
);
path = Balance;
sourceTree = "<group>";
};
0D3D04052728B2D70032ABC1 /* BackupFlow */ = {
isa = PBXGroup;
children = (
@ -470,15 +331,13 @@
0DA13C9126C15E1900E3B610 /* UIComponents */,
0D1922F026BDE27D00052649 /* Stubs */,
0D1922EB26BDD9A500052649 /* Screens */,
0D1922E826BDD95000052649 /* Base */,
0D170A7426BC9B7500EB6A46 /* MockedDependencies */,
0D170A7426BC9B7500EB6A46 /* Mocked Dependencies */,
0D4E7A0826B364170058B01E /* SecantApp.swift */,
0D4E7A0A26B364170058B01E /* ContentView.swift */,
0D4E7A0C26B364180058B01E /* Assets.xcassets */,
660558E8270C7A54009D6954 /* Colors.xcassets */,
0D4E7A1126B364180058B01E /* Info.plist */,
0D4E7A0E26B364180058B01E /* Preview Content */,
0D170A7326BC802E00EB6A46 /* Routers */,
);
path = secant;
sourceTree = "<group>";
@ -498,7 +357,6 @@
6654C7422715A48E00901167 /* OnboardingTests */,
0D4E7A1A26B364180058B01E /* secantTests.swift */,
0D4E7A1C26B364180058B01E /* Info.plist */,
0D864A0426E1546000A61879 /* LoadingScreenTests.swift */,
);
path = secantTests;
sourceTree = "<group>";
@ -540,24 +398,6 @@
path = AppErrors;
sourceTree = "<group>";
};
0D864A0626E154D100A61879 /* Error */ = {
isa = PBXGroup;
children = (
0D864A0726E154FD00A61879 /* InitFailedScreen.swift */,
0D864A0826E154FD00A61879 /* InitFailedScreenViewModel.swift */,
);
path = Error;
sourceTree = "<group>";
};
0D864A0B26E1580700A61879 /* Loading */ = {
isa = PBXGroup;
children = (
0D864A0C26E1583000A61879 /* LoadingScreen.swift */,
0D864A0D26E1583000A61879 /* LoadingScreenViewModel.swift */,
);
path = Loading;
sourceTree = "<group>";
};
0D8A43C2272AEEA7005A6414 /* FontStyles */ = {
isa = PBXGroup;
children = (
@ -566,16 +406,7 @@
path = FontStyles;
sourceTree = "<group>";
};
0DA13C8C26C15CBE00E3B610 /* Welcome Screen */ = {
isa = PBXGroup;
children = (
0DA13C8D26C15D1D00E3B610 /* WelcomeScreen.swift */,
0DA13C8E26C15D1D00E3B610 /* WelcomeScreenViewModel.swift */,
);
path = "Welcome Screen";
sourceTree = "<group>";
};
0DA13C9126C15E1900E3B610 /* UIComponents */ = {
0DA13C9126C15E1900E3B610 /* UI Components */ = {
isa = PBXGroup;
children = (
0D8A43C2272AEEA7005A6414 /* FontStyles */,
@ -590,33 +421,6 @@
path = UIComponents;
sourceTree = "<group>";
};
0DA13C9426C186B100E3B610 /* Restore Wallet */ = {
isa = PBXGroup;
children = (
0DA13C9526C186FF00E3B610 /* RestoreWalletScreen.swift */,
0DA13C9626C186FF00E3B610 /* RestoreWalletScreenViewModel.swift */,
);
path = "Restore Wallet";
sourceTree = "<group>";
};
0DA13C9926C193FE00E3B610 /* Backup Wallet */ = {
isa = PBXGroup;
children = (
0DA13C9A26C1942100E3B610 /* BackupWalletScreen.swift */,
0DA13C9B26C1942100E3B610 /* BackupWalletScreenViewModel.swift */,
);
path = "Backup Wallet";
sourceTree = "<group>";
};
0DA13C9E26C1953F00E3B610 /* Home */ = {
isa = PBXGroup;
children = (
0DA13C9F26C1955600E3B610 /* HomeScreen.swift */,
0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */,
);
path = Home;
sourceTree = "<group>";
};
0DA13CA326C1960A00E3B610 /* Models */ = {
isa = PBXGroup;
children = (
@ -1142,31 +946,21 @@
2EB660E02747EAB900A06A07 /* OnboardingScreen.swift in Sources */,
660558F8270C862F009D6954 /* XCAssets+Generated.swift in Sources */,
F96B41E9273B501F0021B49A /* TransactionHistoryView.swift in Sources */,
0D32281F26C5867D00262533 /* ScanQrScreenViewModel.swift in Sources */,
669FDAE9272C23B3007B9422 /* CircularFrame.swift in Sources */,
0D32282E26C5870B00262533 /* SendScreenViewModel.swift in Sources */,
F96B41E8273B501F0021B49A /* TransactionDetailView.swift in Sources */,
0D32282D26C5870B00262533 /* SendScreen.swift in Sources */,
663FABA2271D876C00E495F8 /* SecondaryButton.swift in Sources */,
0D1922ED26BDE0C600052649 /* AppRouter.swift in Sources */,
0D8A43C4272AEEDE005A6414 /* SecantTextStyles.swift in Sources */,
0D1922F226BDE29300052649 /* ZcashSDKStubs.swift in Sources */,
0DA13C9D26C1942100E3B610 /* BackupWalletScreenViewModel.swift in Sources */,
0DACFA7F27208CE00039EEA5 /* Clamped.swift in Sources */,
0D354A0B26D5A9D000315F45 /* MnemonicSeedPhraseHandling.swift in Sources */,
0D535FE2271F9476009A9E3E /* EnumeratedChip.swift in Sources */,
6654C73E2715A41300901167 /* OnboardingStore.swift in Sources */,
0D32281E26C5867D00262533 /* ScanQrScreen.swift in Sources */,
F9971A5327680DD000A2DB75 /* Profile.swift in Sources */,
F93874F0273C4DE200F0E875 /* HomeStore.swift in Sources */,
669FDAEB272C23C2007B9422 /* CircularFrameBadge.swift in Sources */,
0D864A0E26E1583000A61879 /* LoadingScreen.swift in Sources */,
F9971A6C27680E1000A2DB75 /* WalletInfoView.swift in Sources */,
0DA13C9C26C1942100E3B610 /* BackupWalletScreen.swift in Sources */,
0DA13C9826C186FF00E3B610 /* RestoreWalletScreenViewModel.swift in Sources */,
F9EEB8162742C2210032EEB8 /* WithStateBinding.swift in Sources */,
F93673D62742CB840099C6AF /* Previews.swift in Sources */,
0D32283326C5877A00262533 /* BalanceScreenViewModel.swift in Sources */,
0D5D16F526E24CCF00AD33D1 /* AppError.swift in Sources */,
0D18581B272728D60046B928 /* PhraseChip.swift in Sources */,
665C963F272C26E600BC04FB /* CircularFrameBackground.swift in Sources */,
@ -1174,10 +968,8 @@
F9971A4D27680DC400A2DB75 /* App.swift in Sources */,
F9322DC0273B555C00C105B5 /* NavigationLinks.swift in Sources */,
F93874F1273C4DE200F0E875 /* HomeView.swift in Sources */,
0D32282326C586A800262533 /* HistoryScreen.swift in Sources */,
0D3D04082728B3440032ABC1 /* RecoveryPhraseDisplayView.swift in Sources */,
F9971A5F27680DF600A2DB75 /* ScanView.swift in Sources */,
0D864A0A26E154FD00A61879 /* InitFailedScreenViewModel.swift in Sources */,
F9971A4E27680DC400A2DB75 /* AppView.swift in Sources */,
0DA13CA526C1963000E3B610 /* Balance.swift in Sources */,
2EA11F5B27467EF800709571 /* OnboardingFooterView.swift in Sources */,
@ -1185,52 +977,37 @@
0D1922F826BDEB3500052649 /* MockServices.swift in Sources */,
0D3D040A2728B3A10032ABC1 /* RecoveryPhraseDisplayStore.swift in Sources */,
0D4E7A0B26B364170058B01E /* ContentView.swift in Sources */,
0D170A7226BC802800EB6A46 /* Router.swift in Sources */,
0D354A0926D5A9D000315F45 /* Services.swift in Sources */,
660558F7270C862F009D6954 /* Fonts+Generated.swift in Sources */,
F96B41E7273B501F0021B49A /* TransactionHistoryStore.swift in Sources */,
0DA13C9726C186FF00E3B610 /* RestoreWalletScreen.swift in Sources */,
F9971A5A27680DDE00A2DB75 /* RequestView.swift in Sources */,
0DACFA8127208D940039EEA5 /* UInt+SuperscriptText.swift in Sources */,
0DF2DC51272344E400FA31E2 /* EmptyChip.swift in Sources */,
F9C165BF2740403600592F76 /* SendStore.swift in Sources */,
0D1922EA26BDD96A00052649 /* ViewModel.swift in Sources */,
0D4E7A0926B364170058B01E /* SecantApp.swift in Sources */,
66DC733F271D88CC0053CBB6 /* StandardButtonStyle.swift in Sources */,
0D864A0926E154FD00A61879 /* InitFailedScreen.swift in Sources */,
663FABA0271D876200E495F8 /* PrimaryButton.swift in Sources */,
663FAB9C271D874D00E495F8 /* ActiveButton.swift in Sources */,
F9C165C02740403600592F76 /* ApproveView.swift in Sources */,
0DF2DC5427235E3E00FA31E2 /* View+InnerShadow.swift in Sources */,
0D32281A26C5864B00262533 /* ProfileScreenViewModel.swift in Sources */,
F9971A6B27680E1000A2DB75 /* WalletInfo.swift in Sources */,
0D185819272723FF0046B928 /* BlueChip.swift in Sources */,
0D864A0F26E1583000A61879 /* LoadingScreenViewModel.swift in Sources */,
2EA11F5D27467F7700709571 /* OnboardingContentView.swift in Sources */,
0DA13CA126C1955600E3B610 /* HomeScreen.swift in Sources */,
0DA13C9026C15D1D00E3B610 /* WelcomeScreenViewModel.swift in Sources */,
2E58E73B274679F000B2B84B /* OnboardingHeaderView.swift in Sources */,
0D8A43C6272B129C005A6414 /* WordChipGrid.swift in Sources */,
66A0807B271993C500118B79 /* OnboardingProgressIndicator.swift in Sources */,
663FAB9E271D875700E495F8 /* CreateButton.swift in Sources */,
0D7DF08C271DCC0E00530046 /* ScreenBackground.swift in Sources */,
F9C165C22740403600592F76 /* CreateView.swift in Sources */,
0DA13C8F26C15D1D00E3B610 /* WelcomeScreen.swift in Sources */,
F9C165B4274031F600592F76 /* Bindings.swift in Sources */,
0D32282826C586E000262533 /* RequestZcashScreen.swift in Sources */,
F9971A6627680DFE00A2DB75 /* SettingsView.swift in Sources */,
F96B41EB273B50520021B49A /* Strings.swift in Sources */,
0D32283226C5877A00262533 /* BalanceScreen.swift in Sources */,
0D354A0A26D5A9D000315F45 /* KeyStoring.swift in Sources */,
F9971A5427680DD000A2DB75 /* ProfileView.swift in Sources */,
0DA13CA226C1955600E3B610 /* HomeScreenViewModel.swift in Sources */,
0D32282926C586E000262533 /* RequestZcashScreenViewModel.swift in Sources */,
0D32281926C5864B00262533 /* ProfileScreen.swift in Sources */,
F9971A6027680DF600A2DB75 /* Scan.swift in Sources */,
F9C165CB2741AB5D00592F76 /* SendView.swift in Sources */,
F9971A6527680DFE00A2DB75 /* Settings.swift in Sources */,
6654C7412715A47300901167 /* Onboarding.swift in Sources */,
0D32282426C586A800262533 /* HistoryScreenViewModel.swift in Sources */,
F9C165C42740403600592F76 /* SentView.swift in Sources */,
F9971A5927680DDE00A2DB75 /* Request.swift in Sources */,
);
@ -1241,7 +1018,6 @@
buildActionMask = 2147483647;
files = (
0DFE93DF272C6D4B000FCCA5 /* RecoveryFlowTests.swift in Sources */,
0D864A0526E1546000A61879 /* LoadingScreenTests.swift in Sources */,
6654C7442715A4AC00901167 /* OnboardingStoreTests.swift in Sources */,
0D1C1AA327611EFD0004AF6A /* RecoveryPhraseDisplayReducerTests.swift in Sources */,
0D4E7A1B26B364180058B01E /* secantTests.swift in Sources */,

View File

@ -1,15 +0,0 @@
//
// Router.swift
// secant
//
// Created by Francisco Gindre on 8/5/21.
//
import Foundation
import SwiftUI
public protocol Router: ObservableObject {
associatedtype ViewOutput: View
func rootView() -> ViewOutput
}

View File

@ -1,16 +0,0 @@
//
// ViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/6/21.
//
import Foundation
open class BaseViewModel<S> {
public var services: S
public init(services: S) {
self.services = services
}
}

View File

@ -1,94 +0,0 @@
//
// AppRouterRouter.swift
// secant
//
// Created by Francisco Gindre on 8/6/21.
//
import Foundation
import SwiftUI
enum AppRouterScreen {
case appLoading
case createRestoreWallet
case home
case loadingFailed
case designGuide
}
class AppRouter: Router {
@Published var screen: AppRouterScreen = .appLoading
var services: Services
init(services: Services) {
self.services = services
}
@ViewBuilder func rootView() -> some View {
// Add your content here
NavigationView {
AppRouterView(router: self)
}
.onTapGesture(count: 10) {
self.screen = .designGuide
}
}
@ViewBuilder func createNew() -> some View {
Text("Create New")
}
@ViewBuilder func home() -> some View {
Text("Home Screen")
}
@ViewBuilder func loadingScreen() -> some View {
LoadingScreen(
viewModel: LoadingScreenViewModel(services: self.services),
router: self
)
}
@ViewBuilder func loadingFailedScreen() -> some View {
Text("loading failed")
}
@ViewBuilder func designGuide() -> some View {
DesignGuide()
}
}
struct AppRouterView: View {
@StateObject var router: AppRouter
var body: some View {
viewForScreen(router.screen)
.applyScreenBackground()
}
@ViewBuilder func viewForScreen(_ screen: AppRouterScreen) -> some View {
switch router.screen {
case .appLoading: router.loadingScreen()
case .createRestoreWallet: router.createNew()
case .home: router.home()
case .loadingFailed: router.loadingFailedScreen()
case .designGuide: router.designGuide()
}
}
}
extension AppRouter: LoadingScreenRouter {
func proceedToWelcome() {
self.screen = .createRestoreWallet
}
func proceedToHome() {
self.screen = .home
}
// TODO: handle Errors
func failWithError() {
self.screen = .loadingFailed
}
}

View File

@ -1,26 +0,0 @@
//
// BackupWalletScreen.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import SwiftUI
protocol BackupWalletScreenRouter: AnyObject {}
struct BackupWalletScreen: View {
@ObservedObject var viewModel: BackupWalletScreenViewModel
@State var router: BackupWalletScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct BackupWalletScreenPreviews: PreviewProvider {
static var previews: some View {
BackupWalletScreen(viewModel: BackupWalletScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// BackupWalletScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import Combine
import Foundation
class BackupWalletScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,26 +0,0 @@
//
// BalanceScreenScreen.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import SwiftUI
protocol BalanceScreenRouter: AnyObject {}
struct BalanceScreen: View {
@ObservedObject var viewModel: BalanceScreenViewModel
@State var router: BalanceScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct BalanceScreenPreviews: PreviewProvider {
static var previews: some View {
BalanceScreen(viewModel: BalanceScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// BalanceScreenScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import Combine
import Foundation
class BalanceScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,27 +0,0 @@
//
// InitFailedScreen.swift
// secant-testnet
//
// Created by Francisco Gindre on 9/2/21.
//
import SwiftUI
protocol InitFailedScreenRouter: AnyObject {
}
struct InitFailedScreen: View {
@State var router: InitFailedScreenRouter?
@ObservedObject var viewModel: InitFailedScreenViewModel
var body: some View {
Text("Hello, World!")
}
}
struct InitFailedScreenPreviews: PreviewProvider {
static var previews: some View {
InitFailedScreen(viewModel: InitFailedScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// InitFailedScreenViewModel.swift
// secant-testnet
//
// Created by Francisco Gindre on 9/2/21.
//
import Foundation
import Combine
class InitFailedScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,26 +0,0 @@
//
// HistoryScreen.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import SwiftUI
protocol HistoryScreenRouter: AnyObject {}
struct HistoryScreen: View {
@ObservedObject var viewModel: HistoryScreenViewModel
@State var router: HistoryScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct HistoryScreenPreviews: PreviewProvider {
static var previews: some View {
HistoryScreen(viewModel: HistoryScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// HistoryScreenScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import Combine
import Foundation
class HistoryScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,109 +0,0 @@
//
// HomeScreen.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import SwiftUI
protocol HomeScreenRouter: AnyObject {
func homeScreenScanQrScreen() -> ScanQrScreen
func homeScreenProfileScreen() -> ProfileScreen
func homeScreenHistoryScreen() -> HistoryScreen
func homeScreenBalanceScreen() -> BalanceScreen
func homeScreenRequestScreen() -> RequestZcashScreen
func homeScreenSendScreen() -> SendScreen
}
struct HomeScreen: View {
@ObservedObject var viewModel: HomeScreenViewModel
@State var router: HomeScreenRouter?
var body: some View {
VStack {
Text("Hello, World!")
sendButton
requestButton
historyButton
}
.padding(.horizontal, 30)
.navigationBarTitle("", displayMode: .inline)
.navigationBarItems(
leading: qrCodeButton,
trailing: profileButton
)
}
@ViewBuilder var qrCodeButton: some View {
Button(action: {}, label: {
Image(systemName: "qrcode.viewfinder")
.frame(width: 20, height: 20, alignment: .center)
})
.contentShape(Circle())
}
@ViewBuilder var profileButton: some View {
Button(action: {}, label: {
Image(systemName: "person.crop.circle")
.frame(width: 20, height: 20, alignment: .center)
})
.contentShape(Circle())
}
@ViewBuilder var requestButton: some View {
Button(action: {}, label: {
Text("Request ZEC")
})
.primaryButtonStyle
.frame(height: 50)
}
@ViewBuilder var sendButton: some View {
Button(action: {}, label: {
Text("Send ZEC")
})
.primaryButtonStyle
.frame(height: 50)
}
@ViewBuilder var historyButton: some View {
Button(action: {}, label: {
Text("History")
})
.primaryButtonStyle
.frame(height: 50)
}
}
// MARK: - Previews
struct HomeScreenPreviews: PreviewProvider {
static var previews: some View {
NavigationView {
HomeScreen(
viewModel: HomeScreenViewModel.mockWithValues(
services: MockServices(),
status: .offline,
balance: mockBalance,
fiatConversion: 1.12453
)
)
}
}
static var mockBalance: WalletBalance {
Balance(
transaparent: ZcashFunds.noFunds,
sapling: ZcashFunds(
confirmed: 123456790,
unconfirmed: 0
),
orchard: ZcashFunds(
confirmed: 0,
unconfirmed: 0
)
)
}
}

View File

@ -1,37 +0,0 @@
//
// HomeScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import Combine
import Foundation
class HomeScreenViewModel: BaseViewModel<Services>, ObservableObject {
enum Status {
case syncing(progress: Float)
case offline
case error(error: Error)
}
@Published var balance: WalletBalance = Balance.nullBalance
@Published var fiatConversion: Decimal = 0
@Published var status = Status.offline
}
extension HomeScreenViewModel {
static func mockWithValues(
services: Services,
status: Status,
balance: WalletBalance,
fiatConversion: Decimal
) -> HomeScreenViewModel {
let viewModel = HomeScreenViewModel(services: services)
viewModel.status = status
viewModel.balance = balance
viewModel.fiatConversion = fiatConversion
return viewModel
}
}

View File

@ -1,67 +0,0 @@
//
// LoadingScreen.swift
// secant-testnet
//
// Created by Francisco Gindre on 9/2/21.
//
import SwiftUI
protocol LoadingScreenRouter: AnyObject {
func proceedToHome()
func failWithError()
func proceedToWelcome()
}
struct LoadingScreen: View {
@StateObject var viewModel: LoadingScreenViewModel
@State var router: LoadingScreenRouter?
var body: some View {
Text("Loading")
.onReceive(
viewModel.$loadingResult,
perform: { result in
guard
let loadingResult = result,
let router = self.router
else { return }
viewModel.callRouter(router, with: loadingResult)
}
)
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
viewModel.loadAsync()
}
}
}
}
// MARK: Routing
extension LoadingScreenViewModel {
func callRouter(
_ router: LoadingScreenRouter,
with loadingResult: Result<LoadingScreenViewModel.LoadingResult, Error>
) {
switch loadingResult {
case .success(let result):
switch result {
case .credentialsFound:
router.proceedToHome()
case .newWallet:
router.proceedToWelcome()
}
case .failure:
router.failWithError()
}
}
}
struct LoadingScreenPreviews: PreviewProvider {
static var previews: some View {
LoadingScreen(viewModel: LoadingScreenViewModel(services: MockServices()))
}
}

View File

@ -1,37 +0,0 @@
//
// LoadingScreenViewModel.swift
// secant-testnet
//
// Created by Francisco Gindre on 9/2/21.
//
import Foundation
import Combine
class LoadingScreenViewModel: BaseViewModel<Services>, ObservableObject {
enum LoadingResult {
case newWallet
case credentialsFound
}
@Published var loadingResult: Result<LoadingResult, Error>?
func loadAsync () {
// TODO: Make a special queue for the app
DispatchQueue.global(qos: .userInitiated)
.async { [weak self] in
guard let result = self?.load() else { return }
DispatchQueue.main.async {
self?.loadingResult = result
}
}
}
internal func load() -> Result<LoadingResult, Error> {
do {
return (try services.keyStorage.areKeysPresent()) ? .success(.credentialsFound) : .success(.newWallet)
} catch {
return .failure(error)
}
}
}

View File

@ -1,26 +0,0 @@
//
// ProfileScreenScreen.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import SwiftUI
protocol ProfileScreenRouter: AnyObject {}
struct ProfileScreen: View {
@ObservedObject var viewModel: ProfileScreenViewModel
@State var router: ProfileScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct ProfileScreenPreviews: PreviewProvider {
static var previews: some View {
ProfileScreen(viewModel: ProfileScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// ProfileScreenScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import Combine
import Foundation
class ProfileScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,26 +0,0 @@
//
// RequestZcashScreen.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import SwiftUI
protocol RequestZcashScreenRouter: AnyObject {}
struct RequestZcashScreen: View {
@ObservedObject var viewModel: RequestZcashScreenViewModel
@State var router: RequestZcashScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct RequestZcashScreenPreviews: PreviewProvider {
static var previews: some View {
RequestZcashScreen(viewModel: RequestZcashScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// RequestZcashScreenScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import Combine
import Foundation
class RequestZcashScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,39 +0,0 @@
//
// RestoreWalletScreen.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import SwiftUI
protocol RestoreWalletScreenRouter: AnyObject {}
struct RestoreWalletScreen: View {
@ObservedObject var viewModel: RestoreWalletScreenViewModel
@State var router: RestoreWalletScreenRouter?
var body: some View {
VStack {
Text("Enter Seed Phrase")
TextEditor(text: $viewModel.seedText)
Button(action: {}, label: {
Text("Restore Seed Phrase")
})
.primaryButtonStyle
.frame(height: 50)
}
.padding(.horizontal, 30)
.padding(.vertical)
.navigationBarTitle(Text("Restore Wallet"), displayMode: .inline)
}
}
struct RestoreWalletScreenPreviews: PreviewProvider {
static var previews: some View {
RestoreWalletScreen(viewModel: RestoreWalletScreenViewModel(services: MockServices()))
}
}

View File

@ -1,15 +0,0 @@
//
// RestoreWalletScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import Combine
import Foundation
class RestoreWalletScreenViewModel: BaseViewModel<Services>, ObservableObject {
@Published var seedText: String = ""
func restore() {}
}

View File

@ -1,26 +0,0 @@
//
// ScanQrScreenScreen.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import SwiftUI
protocol ScanQrScreenRouter: AnyObject {}
struct ScanQrScreen: View {
@ObservedObject var viewModel: ScanQrScreenViewModel
@State var router: ScanQrScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct ScanQrScreenScreenPreviews: PreviewProvider {
static var previews: some View {
ScanQrScreen(viewModel: ScanQrScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// ScanQrScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import Combine
import Foundation
class ScanQrScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,26 +0,0 @@
//
// SendScreenScreen.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import SwiftUI
protocol SendScreenRouter: AnyObject {}
struct SendScreen: View {
@ObservedObject var viewModel: SendScreenViewModel
@State var router: SendScreenRouter?
var body: some View {
Text("Hello, World!")
}
}
struct SendScreenScreenPreviews: PreviewProvider {
static var previews: some View {
SendScreen(viewModel: SendScreenViewModel(services: MockServices()))
}
}

View File

@ -1,11 +0,0 @@
//
// SendScreenScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/12/21.
//
import Combine
import Foundation
class SendScreenViewModel: BaseViewModel<Services>, ObservableObject {}

View File

@ -1,51 +0,0 @@
//
// CreateNewWalletScreen.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import SwiftUI
protocol WelcomeScreenRouter: AnyObject {}
struct WelcomeScreen: View {
@ObservedObject var viewModel: WelcomeScreenViewModel
@State var router: WelcomeScreenRouter?
var body: some View {
VStack {
Spacer()
Text("Welcome and Onboarding")
Spacer()
VStack(alignment: .center, spacing: 16) {
Button(action: {
self.viewModel.restoreWallet()
}, label: {
Text("RESTORE WALLET")
})
.primaryButtonStyle
.frame(height: 50)
Button(action: {
self.viewModel.createNew()
}, label: {
Text("CREATE NEW WALLET")
})
.primaryButtonStyle
.frame(height: 50)
}
}
.padding()
}
}
struct CreateNewWalletScreenPreviews: PreviewProvider {
static var previews: some View {
WelcomeScreen(viewModel: WelcomeScreenViewModel(services: MockServices()))
}
}

View File

@ -1,14 +0,0 @@
//
// CreateNewWalletScreenViewModel.swift
// secant
//
// Created by Francisco Gindre on 8/9/21.
//
import Combine
import Foundation
class WelcomeScreenViewModel: BaseViewModel<Services>, ObservableObject {
func createNew() {}
func restoreWallet() {}
}

View File

@ -1,239 +0,0 @@
//
// AppRouterNavigationTests.swift
// secantTests
//
// Created by Francisco Gindre on 9/2/21.
//
import XCTest
@testable import secant_testnet
import Foundation
import Combine
class LoadingScreenTests: XCTestCase {
var cancellables: [AnyCancellable] = []
// MARK: LoadingScreenViewModel Tests
func testCredentialsFoundIsPublishedWhenCredentialsArePresent() throws {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: {
true
})
mockServices.keyStorage = stub
let loadingViewModel = LoadingScreenViewModel(services: mockServices)
// swiftlint:disable:next line_length
let testExpectation = XCTestExpectation(description: "LoadingViewModel Publishes .credentialsFound when credentials are present and there's no failure")
let expected = LoadingScreenViewModel.LoadingResult.credentialsFound
loadingViewModel.$loadingResult
.dropFirst()
.sink { loadingResult in
testExpectation.fulfill()
XCTAssertTrue(stub.called)
switch loadingResult {
case .success(let result):
XCTAssertEqual(result, expected)
case .failure(let error):
XCTFail("found error \(error.localizedDescription)")
case .none:
XCTFail("found None when expected a value")
}
}
.store(in: &cancellables)
loadingViewModel.loadAsync()
wait(for: [testExpectation], timeout: 0.1)
}
func testNewWalletLoadingResultPublishedWhenNoCredentialsFound() throws {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: {
false
})
mockServices.keyStorage = stub
let loadingViewModel = LoadingScreenViewModel(services: mockServices)
let testExpectation = XCTestExpectation(
description: "LoadingViewModel Publishes .newWallet when no credentials are present and there's no failure"
)
let expected = LoadingScreenViewModel.LoadingResult.newWallet
loadingViewModel.$loadingResult
.dropFirst()
.sink { loadingResult in
testExpectation.fulfill()
XCTAssertTrue(stub.called)
switch loadingResult {
case .success(let result):
XCTAssertEqual(result, expected)
case .failure(let error):
XCTFail("found error \(error.localizedDescription)")
case .none:
XCTFail("found None when expected a value")
}
}
.store(in: &cancellables)
loadingViewModel.loadAsync()
wait(for: [testExpectation], timeout: 0.1)
}
func testFailureIsPublishedWhenWalletFailsToInitialize() throws {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: {
throw KeyStoringError.alreadyImported
})
mockServices.keyStorage = stub
let loadingViewModel = LoadingScreenViewModel(services: mockServices)
let testExpectation = XCTestExpectation(description: "LoadingViewModel Publishes .failure when there's a failure")
loadingViewModel.$loadingResult
.dropFirst()
.sink { loadingResult in
testExpectation.fulfill()
XCTAssertTrue(stub.called)
switch loadingResult {
case .success(let result):
XCTFail("found result: \(result) but expected a failure")
case .failure:
XCTAssertTrue(true) // fails when expected
case .none:
XCTFail("found None when expected a failure")
}
}
.store(in: &cancellables)
loadingViewModel.loadAsync()
wait(for: [testExpectation], timeout: 0.1)
}
func testNewWalletLoadingResultReturnedWhenCredentialsAreNotPresent() throws {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: {
false
})
mockServices.keyStorage = stub
let loadingViewModel = LoadingScreenViewModel(services: mockServices)
let expected = LoadingScreenViewModel.LoadingResult.newWallet
let result = loadingViewModel.load()
XCTAssertTrue(stub.called)
switch result {
case .failure(let error):
XCTFail("found error \(error.localizedDescription)")
case .success(let res):
XCTAssertEqual(expected, res)
}
}
func testCredentialsFoundReturnedWhenCredentialsArePresent() throws {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: {
true
})
mockServices.keyStorage = stub
let loadingViewModel = LoadingScreenViewModel(services: mockServices)
let expected = LoadingScreenViewModel.LoadingResult.credentialsFound
let result = loadingViewModel.load()
XCTAssertTrue(stub.called)
switch result {
case .failure(let error):
XCTFail("found error \(error.localizedDescription)")
case .success(let res):
XCTAssertEqual(expected, res)
}
}
func testLoadReturnsErrorWhenLoadingFails() throws {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: {
throw KeyStoringError.uninitializedWallet
})
mockServices.keyStorage = stub
let loadingViewModel = LoadingScreenViewModel(services: mockServices)
let result = loadingViewModel.load()
XCTAssertTrue(stub.called)
switch result {
case .failure:
XCTAssertTrue(true)
case .success(let res):
XCTFail("case succeeded when testing failure - result: \(res)")
}
}
// MARK: LoadingScreen View Tests
func testProceedToHomeIsCalledWhenCredentialsAreFound() throws {
let loadingViewModel = LoadingScreenViewModelHelper.loadingViewModelWith {
true
}
let spyRouter = LoadingScreenRouterSpy(fulfillment: {
})
loadingViewModel.callRouter(spyRouter, with: loadingViewModel.load())
XCTAssertTrue(spyRouter.proceedToHomeCalled)
}
func testProceedToWelcomeIsCalledWhenCredentialsAreNotFound() throws {
let loadingViewModel = LoadingScreenViewModelHelper.loadingViewModelWith {
false
}
let spyRouter = LoadingScreenRouterSpy(fulfillment: {
})
loadingViewModel.callRouter(spyRouter, with: loadingViewModel.load())
XCTAssertTrue(spyRouter.proceedToWelcomeCalled)
}
func testFailWithErrorIsCalledWhenKeyStoringFails() throws {
let loadingViewModel = LoadingScreenViewModelHelper.loadingViewModelWith {
throw KeyStoringError.alreadyImported
}
let spyRouter = LoadingScreenRouterSpy(fulfillment: {
})
loadingViewModel.callRouter(spyRouter, with: loadingViewModel.load())
XCTAssertTrue(spyRouter.failWithErrorCalled)
}
}
class LoadingScreenRouterSpy: LoadingScreenRouter {
var fulfillmentBlock: () -> Void
var proceedToHomeCalled = false
var failWithErrorCalled = false
var proceedToWelcomeCalled = false
init(fulfillment: @escaping () -> Void) {
self.fulfillmentBlock = fulfillment
}
func proceedToHome() {
proceedToHomeCalled = true
fulfillmentBlock()
}
func failWithError() {
failWithErrorCalled = true
fulfillmentBlock()
}
func proceedToWelcome() {
proceedToWelcomeCalled = true
fulfillmentBlock()
}
}
enum LoadingScreenViewModelHelper {
static func loadingViewModelWith(keysPresentStubBlock: @escaping () throws -> Bool) -> LoadingScreenViewModel {
let mockServices = MockServices()
let stub = KeysPresentStub(returnBlock: keysPresentStubBlock)
mockServices.keyStorage = stub
return LoadingScreenViewModel(services: mockServices)
}
}