Drawer + transactions history clean up Profile button on home screen QR, Send and Request buttons cleanup conflicts resolved + cleanup
This commit is contained in:
parent
1a16282899
commit
bab53181aa
|
@ -127,12 +127,12 @@
|
||||||
F96B41EB273B50520021B49A /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96B41EA273B50520021B49A /* Strings.swift */; };
|
F96B41EB273B50520021B49A /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96B41EA273B50520021B49A /* Strings.swift */; };
|
||||||
F9971A4D27680DC400A2DB75 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A4A27680DC400A2DB75 /* App.swift */; };
|
F9971A4D27680DC400A2DB75 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A4A27680DC400A2DB75 /* App.swift */; };
|
||||||
F9971A4E27680DC400A2DB75 /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A4C27680DC400A2DB75 /* AppView.swift */; };
|
F9971A4E27680DC400A2DB75 /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A4C27680DC400A2DB75 /* AppView.swift */; };
|
||||||
F9971A5327680DD000A2DB75 /* Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5027680DD000A2DB75 /* Profile.swift */; };
|
F9971A5327680DD000A2DB75 /* ProfileStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5027680DD000A2DB75 /* ProfileStore.swift */; };
|
||||||
F9971A5427680DD000A2DB75 /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5227680DD000A2DB75 /* ProfileView.swift */; };
|
F9971A5427680DD000A2DB75 /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5227680DD000A2DB75 /* ProfileView.swift */; };
|
||||||
F9971A5927680DDE00A2DB75 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5627680DDE00A2DB75 /* Request.swift */; };
|
F9971A5927680DDE00A2DB75 /* RequestStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5627680DDE00A2DB75 /* RequestStore.swift */; };
|
||||||
F9971A5A27680DDE00A2DB75 /* RequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5827680DDE00A2DB75 /* RequestView.swift */; };
|
F9971A5A27680DDE00A2DB75 /* RequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5827680DDE00A2DB75 /* RequestView.swift */; };
|
||||||
F9971A5F27680DF600A2DB75 /* ScanView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5D27680DF600A2DB75 /* ScanView.swift */; };
|
F9971A5F27680DF600A2DB75 /* ScanView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5D27680DF600A2DB75 /* ScanView.swift */; };
|
||||||
F9971A6027680DF600A2DB75 /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5E27680DF600A2DB75 /* Scan.swift */; };
|
F9971A6027680DF600A2DB75 /* ScanStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A5E27680DF600A2DB75 /* ScanStore.swift */; };
|
||||||
F9971A6527680DFE00A2DB75 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A6227680DFE00A2DB75 /* Settings.swift */; };
|
F9971A6527680DFE00A2DB75 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A6227680DFE00A2DB75 /* Settings.swift */; };
|
||||||
F9971A6627680DFE00A2DB75 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A6427680DFE00A2DB75 /* SettingsView.swift */; };
|
F9971A6627680DFE00A2DB75 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A6427680DFE00A2DB75 /* SettingsView.swift */; };
|
||||||
F9971A6B27680E1000A2DB75 /* WalletInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A6827680E1000A2DB75 /* WalletInfo.swift */; };
|
F9971A6B27680E1000A2DB75 /* WalletInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9971A6827680E1000A2DB75 /* WalletInfo.swift */; };
|
||||||
|
@ -288,12 +288,12 @@
|
||||||
F96B41EA273B50520021B49A /* Strings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = "<group>"; };
|
F96B41EA273B50520021B49A /* Strings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = "<group>"; };
|
||||||
F9971A4A27680DC400A2DB75 /* App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
|
F9971A4A27680DC400A2DB75 /* App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };
|
||||||
F9971A4C27680DC400A2DB75 /* AppView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = "<group>"; };
|
F9971A4C27680DC400A2DB75 /* AppView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = "<group>"; };
|
||||||
F9971A5027680DD000A2DB75 /* Profile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Profile.swift; sourceTree = "<group>"; };
|
F9971A5027680DD000A2DB75 /* ProfileStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileStore.swift; sourceTree = "<group>"; };
|
||||||
F9971A5227680DD000A2DB75 /* ProfileView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = "<group>"; };
|
F9971A5227680DD000A2DB75 /* ProfileView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = "<group>"; };
|
||||||
F9971A5627680DDE00A2DB75 /* Request.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Request.swift; sourceTree = "<group>"; };
|
F9971A5627680DDE00A2DB75 /* RequestStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestStore.swift; sourceTree = "<group>"; };
|
||||||
F9971A5827680DDE00A2DB75 /* RequestView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestView.swift; sourceTree = "<group>"; };
|
F9971A5827680DDE00A2DB75 /* RequestView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestView.swift; sourceTree = "<group>"; };
|
||||||
F9971A5D27680DF600A2DB75 /* ScanView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanView.swift; sourceTree = "<group>"; };
|
F9971A5D27680DF600A2DB75 /* ScanView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanView.swift; sourceTree = "<group>"; };
|
||||||
F9971A5E27680DF600A2DB75 /* Scan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scan.swift; sourceTree = "<group>"; };
|
F9971A5E27680DF600A2DB75 /* ScanStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanStore.swift; sourceTree = "<group>"; };
|
||||||
F9971A6227680DFE00A2DB75 /* Settings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
|
F9971A6227680DFE00A2DB75 /* Settings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
|
||||||
F9971A6427680DFE00A2DB75 /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
F9971A6427680DFE00A2DB75 /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
||||||
F9971A6827680E1000A2DB75 /* WalletInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletInfo.swift; sourceTree = "<group>"; };
|
F9971A6827680E1000A2DB75 /* WalletInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletInfo.swift; sourceTree = "<group>"; };
|
||||||
|
@ -876,7 +876,7 @@
|
||||||
F9971A4F27680DD000A2DB75 /* Profile */ = {
|
F9971A4F27680DD000A2DB75 /* Profile */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
F9971A5027680DD000A2DB75 /* Profile.swift */,
|
F9971A5027680DD000A2DB75 /* ProfileStore.swift */,
|
||||||
F9971A5127680DD000A2DB75 /* Views */,
|
F9971A5127680DD000A2DB75 /* Views */,
|
||||||
);
|
);
|
||||||
path = Profile;
|
path = Profile;
|
||||||
|
@ -893,7 +893,7 @@
|
||||||
F9971A5527680DDE00A2DB75 /* Request */ = {
|
F9971A5527680DDE00A2DB75 /* Request */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
F9971A5627680DDE00A2DB75 /* Request.swift */,
|
F9971A5627680DDE00A2DB75 /* RequestStore.swift */,
|
||||||
F9971A5727680DDE00A2DB75 /* Views */,
|
F9971A5727680DDE00A2DB75 /* Views */,
|
||||||
);
|
);
|
||||||
path = Request;
|
path = Request;
|
||||||
|
@ -910,8 +910,8 @@
|
||||||
F9971A5B27680DF600A2DB75 /* Scan */ = {
|
F9971A5B27680DF600A2DB75 /* Scan */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F9971A5E27680DF600A2DB75 /* ScanStore.swift */,
|
||||||
F9971A5C27680DF600A2DB75 /* Views */,
|
F9971A5C27680DF600A2DB75 /* Views */,
|
||||||
F9971A5E27680DF600A2DB75 /* Scan.swift */,
|
|
||||||
);
|
);
|
||||||
path = Scan;
|
path = Scan;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1210,7 +1210,7 @@
|
||||||
0DDB6A5127737D4A0012A410 /* ValidationFailedView.swift in Sources */,
|
0DDB6A5127737D4A0012A410 /* ValidationFailedView.swift in Sources */,
|
||||||
0D6D628B276A528E002FB4CC /* DropDelegate.swift in Sources */,
|
0D6D628B276A528E002FB4CC /* DropDelegate.swift in Sources */,
|
||||||
9E2DF99D27CF704D00649636 /* ImportSeedEditor.swift in Sources */,
|
9E2DF99D27CF704D00649636 /* ImportSeedEditor.swift in Sources */,
|
||||||
F9971A5327680DD000A2DB75 /* Profile.swift in Sources */,
|
F9971A5327680DD000A2DB75 /* ProfileStore.swift in Sources */,
|
||||||
669FDAEB272C23C2007B9422 /* CircularFrameBadge.swift in Sources */,
|
669FDAEB272C23C2007B9422 /* CircularFrameBadge.swift in Sources */,
|
||||||
2E8719CD27FB0D3B0082C926 /* TransactionCurrencySelector.swift in Sources */,
|
2E8719CD27FB0D3B0082C926 /* TransactionCurrencySelector.swift in Sources */,
|
||||||
F9971A6C27680E1000A2DB75 /* WalletInfoView.swift in Sources */,
|
F9971A6C27680E1000A2DB75 /* WalletInfoView.swift in Sources */,
|
||||||
|
@ -1271,7 +1271,7 @@
|
||||||
F96B41EB273B50520021B49A /* Strings.swift in Sources */,
|
F96B41EB273B50520021B49A /* Strings.swift in Sources */,
|
||||||
2EDA07A227EDE1AE00D6F09B /* TextFieldFooter.swift in Sources */,
|
2EDA07A227EDE1AE00D6F09B /* TextFieldFooter.swift in Sources */,
|
||||||
F9971A5427680DD000A2DB75 /* ProfileView.swift in Sources */,
|
F9971A5427680DD000A2DB75 /* ProfileView.swift in Sources */,
|
||||||
F9971A6027680DF600A2DB75 /* Scan.swift in Sources */,
|
F9971A6027680DF600A2DB75 /* ScanStore.swift in Sources */,
|
||||||
9EF8139127F191BF0075AF48 /* WalletStorageInteractor.swift in Sources */,
|
9EF8139127F191BF0075AF48 /* WalletStorageInteractor.swift in Sources */,
|
||||||
0DFE93E1272C9ECB000FCCA5 /* RecoveryPhraseBackupValidationView.swift in Sources */,
|
0DFE93E1272C9ECB000FCCA5 /* RecoveryPhraseBackupValidationView.swift in Sources */,
|
||||||
9E69A24D27FB002800A55317 /* Welcome.swift in Sources */,
|
9E69A24D27FB002800A55317 /* Welcome.swift in Sources */,
|
||||||
|
@ -1283,7 +1283,7 @@
|
||||||
2E8719CB27FB09990082C926 /* TransactionTextField.swift in Sources */,
|
2E8719CB27FB09990082C926 /* TransactionTextField.swift in Sources */,
|
||||||
6654C7412715A47300901167 /* Onboarding.swift in Sources */,
|
6654C7412715A47300901167 /* Onboarding.swift in Sources */,
|
||||||
F9C165C42740403600592F76 /* SentView.swift in Sources */,
|
F9C165C42740403600592F76 /* SentView.swift in Sources */,
|
||||||
F9971A5927680DDE00A2DB75 /* Request.swift in Sources */,
|
F9971A5927680DDE00A2DB75 /* RequestStore.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,9 +2,21 @@ import ComposableArchitecture
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct HomeState: Equatable {
|
struct HomeState: Equatable {
|
||||||
|
enum Route: Equatable {
|
||||||
|
case profile
|
||||||
|
case request
|
||||||
|
case send
|
||||||
|
case scan
|
||||||
|
}
|
||||||
|
|
||||||
var arePublishersPrepared = false
|
var arePublishersPrepared = false
|
||||||
|
var route: Route?
|
||||||
|
|
||||||
var drawerOverlay: DrawerOverlay
|
var drawerOverlay: DrawerOverlay
|
||||||
|
var profileState: ProfileState
|
||||||
|
var requestState: RequestState
|
||||||
|
var sendState: SendState
|
||||||
|
var scanState: ScanState
|
||||||
var totalBalance: Double
|
var totalBalance: Double
|
||||||
var transactionHistoryState: TransactionHistoryState
|
var transactionHistoryState: TransactionHistoryState
|
||||||
var verifiedBalance: Double
|
var verifiedBalance: Double
|
||||||
|
@ -13,9 +25,14 @@ struct HomeState: Equatable {
|
||||||
enum HomeAction: Equatable {
|
enum HomeAction: Equatable {
|
||||||
case debugMenuStartup
|
case debugMenuStartup
|
||||||
case preparePublishers
|
case preparePublishers
|
||||||
|
case profile(ProfileAction)
|
||||||
|
case request(RequestAction)
|
||||||
|
case send(SendAction)
|
||||||
|
case scan(ScanAction)
|
||||||
case transactionHistory(TransactionHistoryAction)
|
case transactionHistory(TransactionHistoryAction)
|
||||||
case updateBalance(Balance)
|
case updateBalance(Balance)
|
||||||
case updateDrawer(DrawerOverlay)
|
case updateDrawer(DrawerOverlay)
|
||||||
|
case updateRoute(HomeState.Route?)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HomeEnvironment {
|
struct HomeEnvironment {
|
||||||
|
@ -58,10 +75,48 @@ extension HomeReducer {
|
||||||
.default
|
.default
|
||||||
.run(&state.transactionHistoryState, historyAction, ())
|
.run(&state.transactionHistoryState, historyAction, ())
|
||||||
.map(HomeAction.transactionHistory)
|
.map(HomeAction.transactionHistory)
|
||||||
|
|
||||||
|
case .updateRoute(let route):
|
||||||
|
state.route = route
|
||||||
|
return .none
|
||||||
|
|
||||||
|
case .profile(let action):
|
||||||
|
return .none
|
||||||
|
|
||||||
|
case .request(let action):
|
||||||
|
return .none
|
||||||
|
|
||||||
|
case .send(let action):
|
||||||
|
return .none
|
||||||
|
|
||||||
|
case .scan(let action):
|
||||||
|
return .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - HomeViewStore
|
||||||
|
|
||||||
|
typealias HomeViewStore = ViewStore<HomeState, HomeAction>
|
||||||
|
|
||||||
|
extension HomeViewStore {
|
||||||
|
func bindingForRoute(_ route: HomeState.Route) -> Binding<Bool> {
|
||||||
|
self.binding(
|
||||||
|
get: { $0.route == route },
|
||||||
|
send: { isActive in
|
||||||
|
return .updateRoute(isActive ? route : nil)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func bindingForDrawer() -> Binding<DrawerOverlay> {
|
||||||
|
self.binding(
|
||||||
|
get: { $0.drawerOverlay },
|
||||||
|
send: { .updateDrawer($0) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - HomeStore
|
// MARK: - HomeStore
|
||||||
|
|
||||||
typealias HomeStore = Store<HomeState, HomeAction>
|
typealias HomeStore = Store<HomeState, HomeAction>
|
||||||
|
@ -73,17 +128,32 @@ extension HomeStore {
|
||||||
action: HomeAction.transactionHistory
|
action: HomeAction.transactionHistory
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
func profileStore() -> ProfileStore {
|
||||||
|
self.scope(
|
||||||
|
state: \.profileState,
|
||||||
|
action: HomeAction.profile
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - HomeViewStore
|
func requestStore() -> RequestStore {
|
||||||
|
self.scope(
|
||||||
|
state: \.requestState,
|
||||||
|
action: HomeAction.request
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
typealias HomeViewStore = ViewStore<HomeState, HomeAction>
|
func sendStore() -> SendStore {
|
||||||
|
self.scope(
|
||||||
|
state: \.sendState,
|
||||||
|
action: HomeAction.send
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
extension HomeViewStore {
|
func scanStore() -> ScanStore {
|
||||||
func bindingForDrawer() -> Binding<DrawerOverlay> {
|
self.scope(
|
||||||
self.binding(
|
state: \.scanState,
|
||||||
get: { $0.drawerOverlay },
|
action: HomeAction.scan
|
||||||
send: { .updateDrawer($0) }
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,6 +164,10 @@ extension HomeState {
|
||||||
static var placeholder: Self {
|
static var placeholder: Self {
|
||||||
.init(
|
.init(
|
||||||
drawerOverlay: .partial,
|
drawerOverlay: .partial,
|
||||||
|
profileState: .placeholder,
|
||||||
|
requestState: .placeholder,
|
||||||
|
sendState: .placeholder,
|
||||||
|
scanState: .placeholder,
|
||||||
totalBalance: 0.0,
|
totalBalance: 0.0,
|
||||||
transactionHistoryState: .placeHolder,
|
transactionHistoryState: .placeHolder,
|
||||||
verifiedBalance: 0.0
|
verifiedBalance: 0.0
|
||||||
|
|
|
@ -8,12 +8,21 @@ struct HomeView: View {
|
||||||
WithViewStore(store) { viewStore in
|
WithViewStore(store) { viewStore in
|
||||||
GeometryReader { proxy in
|
GeometryReader { proxy in
|
||||||
ZStack {
|
ZStack {
|
||||||
|
scanButton(viewStore)
|
||||||
|
|
||||||
|
profileButton(viewStore)
|
||||||
|
|
||||||
|
sendButton(viewStore)
|
||||||
|
|
||||||
|
requestButton(viewStore)
|
||||||
|
.padding(.top, 140)
|
||||||
|
|
||||||
VStack {
|
VStack {
|
||||||
Text("totalBalance \(viewStore.totalBalance)")
|
Text("balance: \(viewStore.totalBalance)")
|
||||||
Text("verifiedBalance \(viewStore.verifiedBalance)")
|
|
||||||
.accessDebugMenuWithHiddenGesture {
|
.accessDebugMenuWithHiddenGesture {
|
||||||
viewStore.send(.debugMenuStartup)
|
viewStore.send(.debugMenuStartup)
|
||||||
}
|
}
|
||||||
|
.padding(.top, 180)
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
|
@ -29,8 +38,115 @@ struct HomeView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.applyScreenBackground()
|
.applyScreenBackground()
|
||||||
|
.navigationBarHidden(true)
|
||||||
|
.applyScreenBackground()
|
||||||
|
.onAppear(perform: { viewStore.send(.preparePublishers) })
|
||||||
}
|
}
|
||||||
.onAppear(perform: { viewStore.send(.preparePublishers) })
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Buttons
|
||||||
|
|
||||||
|
extension HomeView {
|
||||||
|
func profileButton(_ viewStore: HomeViewStore) -> some View {
|
||||||
|
VStack {
|
||||||
|
HStack {
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
Image(Asset.Assets.Icons.profile.name)
|
||||||
|
.resizable()
|
||||||
|
.frame(width: 60, height: 60)
|
||||||
|
.padding(.trailing, 15)
|
||||||
|
.navigationLink(
|
||||||
|
isActive: viewStore.bindingForRoute(.profile),
|
||||||
|
destination: {
|
||||||
|
ProfileView(store: store.profileStore())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func requestButton(_ viewStore: HomeViewStore) -> some View {
|
||||||
|
VStack {
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
Text("home.request")
|
||||||
|
.shadow(color: Asset.Colors.Buttons.buttonsTitleShadow.color, radius: 2, x: 0, y: 2)
|
||||||
|
.frame(
|
||||||
|
minWidth: 0,
|
||||||
|
maxWidth: .infinity,
|
||||||
|
minHeight: 0,
|
||||||
|
maxHeight: .infinity
|
||||||
|
)
|
||||||
|
.foregroundColor(Asset.Colors.Text.secondaryButtonText.color)
|
||||||
|
.background(Asset.Colors.Buttons.secondaryButton.color)
|
||||||
|
.cornerRadius(12)
|
||||||
|
.frame(height: 60)
|
||||||
|
.padding(.horizontal, 50)
|
||||||
|
.neumorphicButton()
|
||||||
|
.navigationLink(
|
||||||
|
isActive: viewStore.bindingForRoute(.request),
|
||||||
|
destination: {
|
||||||
|
RequestView(store: store.requestStore())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendButton(_ viewStore: HomeViewStore) -> some View {
|
||||||
|
VStack {
|
||||||
|
Spacer()
|
||||||
|
|
||||||
|
Text("Send")
|
||||||
|
.shadow(color: Asset.Colors.Buttons.buttonsTitleShadow.color, radius: 2, x: 0, y: 2)
|
||||||
|
.frame(
|
||||||
|
minWidth: 0,
|
||||||
|
maxWidth: .infinity,
|
||||||
|
minHeight: 0,
|
||||||
|
maxHeight: .infinity
|
||||||
|
)
|
||||||
|
.foregroundColor(Asset.Colors.Text.activeButtonText.color)
|
||||||
|
.background(Asset.Colors.Buttons.activeButton.color)
|
||||||
|
.cornerRadius(12)
|
||||||
|
.frame(height: 60)
|
||||||
|
.padding(.horizontal, 50)
|
||||||
|
.neumorphicButton()
|
||||||
|
.navigationLink(
|
||||||
|
isActive: viewStore.bindingForRoute(.send),
|
||||||
|
destination: {
|
||||||
|
SendView(store: store.sendStore())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func scanButton(_ viewStore: HomeViewStore) -> some View {
|
||||||
|
VStack {
|
||||||
|
HStack {
|
||||||
|
Image(Asset.Assets.Icons.qrCode.name)
|
||||||
|
.resizable()
|
||||||
|
.frame(width: 40, height: 40)
|
||||||
|
.padding(.top, 7)
|
||||||
|
.padding(.leading, 22)
|
||||||
|
.navigationLink(
|
||||||
|
isActive: viewStore.bindingForRoute(.scan),
|
||||||
|
destination: {
|
||||||
|
ScanView(store: store.scanStore())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,5 +170,10 @@ struct HomeView_Previews: PreviewProvider {
|
||||||
NavigationView {
|
NavigationView {
|
||||||
HomeView(store: .placeholder)
|
HomeView(store: .placeholder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NavigationView {
|
||||||
|
HomeView(store: .placeholder)
|
||||||
|
.preferredColorScheme(.dark)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ enum RequestAction: Equatable {
|
||||||
case noOp
|
case noOp
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RequestEnvironment: Equatable {
|
struct RequestEnvironment {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - RequestReducer
|
// MARK: - RequestReducer
|
||||||
|
@ -28,6 +28,11 @@ extension RequestReducer {
|
||||||
typealias RequestStore = Store<RequestState, RequestAction>
|
typealias RequestStore = Store<RequestState, RequestAction>
|
||||||
|
|
||||||
extension RequestStore {
|
extension RequestStore {
|
||||||
|
static let placeholder = RequestStore(
|
||||||
|
initialState: .placeholder,
|
||||||
|
reducer: .default,
|
||||||
|
environment: RequestEnvironment()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - RequestViewStore
|
// MARK: - RequestViewStore
|
||||||
|
@ -36,3 +41,11 @@ typealias RequestViewStore = ViewStore<RequestState, RequestAction>
|
||||||
|
|
||||||
extension RequestViewStore {
|
extension RequestViewStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: PlaceHolders
|
||||||
|
|
||||||
|
extension RequestState {
|
||||||
|
static var placeholder: Self {
|
||||||
|
.init()
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,13 +1,18 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
import ComposableArchitecture
|
||||||
|
|
||||||
struct RequestView: View {
|
struct RequestView: View {
|
||||||
|
let store: RequestStore
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Text("\(String(describing: Self.self)) PlaceHolder")
|
WithViewStore(store) { _ in
|
||||||
|
Text("\(String(describing: Self.self)) PlaceHolder")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RequestView_Previews: PreviewProvider {
|
struct RequestView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
RequestView()
|
RequestView(store: .placeholder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,11 +32,11 @@ struct SandboxView: View {
|
||||||
case .recoveryPhraseDisplay:
|
case .recoveryPhraseDisplay:
|
||||||
RecoveryPhraseDisplayView(store: .demo)
|
RecoveryPhraseDisplayView(store: .demo)
|
||||||
case .scan:
|
case .scan:
|
||||||
ScanView()
|
ScanView(store: .placeholder)
|
||||||
case .profile:
|
case .profile:
|
||||||
ProfileView(store: store.profileStore())
|
ProfileView(store: store.profileStore())
|
||||||
case .request:
|
case .request:
|
||||||
RequestView()
|
RequestView(store: .placeholder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ enum ScanAction: Equatable {
|
||||||
case noOp
|
case noOp
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ScanEnvironment: Equatable {
|
struct ScanEnvironment {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - ScanReducer
|
// MARK: - ScanReducer
|
||||||
|
@ -28,6 +28,11 @@ extension ScanReducer {
|
||||||
typealias ScanStore = Store<ScanState, ScanAction>
|
typealias ScanStore = Store<ScanState, ScanAction>
|
||||||
|
|
||||||
extension ScanStore {
|
extension ScanStore {
|
||||||
|
static let placeholder = ScanStore(
|
||||||
|
initialState: .placeholder,
|
||||||
|
reducer: .default,
|
||||||
|
environment: ScanEnvironment()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - ScanViewStore
|
// MARK: - ScanViewStore
|
||||||
|
@ -36,3 +41,11 @@ typealias ScanViewStore = ViewStore<ScanState, ScanAction>
|
||||||
|
|
||||||
extension ScanViewStore {
|
extension ScanViewStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: PlaceHolders
|
||||||
|
|
||||||
|
extension ScanState {
|
||||||
|
static var placeholder: Self {
|
||||||
|
.init()
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,13 +1,18 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
import ComposableArchitecture
|
||||||
|
|
||||||
struct ScanView: View {
|
struct ScanView: View {
|
||||||
|
let store: ScanStore
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Text("\(String(describing: Self.self)) PlaceHolder")
|
WithViewStore(store) { _ in
|
||||||
|
Text("\(String(describing: Self.self)) PlaceHolder")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ScanView_Previews: PreviewProvider {
|
struct ScanView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
ScanView()
|
ScanView(store: .placeholder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,11 @@
|
||||||
"importWallet.button.importPhrase" = "Import Recovery Phrase";
|
"importWallet.button.importPhrase" = "Import Recovery Phrase";
|
||||||
"importWallet.button.importPrivateKey" = "Import a private or viewing key";
|
"importWallet.button.importPrivateKey" = "Import a private or viewing key";
|
||||||
|
|
||||||
|
// MARK: - Home Screen
|
||||||
|
"home.request" = "Request ZEC";
|
||||||
|
|
||||||
// MARK: - Common & Shared
|
// MARK: - Common & Shared
|
||||||
"Back" = "Back";
|
"Back" = "Back";
|
||||||
"Skip" = "Skip";
|
"Skip" = "Skip";
|
||||||
"Next" = "Next";
|
"Next" = "Next";
|
||||||
|
"Send" = "Send";
|
||||||
|
|
Loading…
Reference in New Issue