Skip to content

Commit 4299ece

Browse files
authored
Merge pull request #12 from dydxprotocol/feat/sign-in-button
Adds sign in button in positions when user is not signed in
2 parents 8139998 + 59c55fd commit 4299ece

File tree

10 files changed

+106
-53
lines changed

10 files changed

+106
-53
lines changed

ios/dydx/dydxPresenters/dydxPresenters/_v4/MarketInfo/Components/dydxMarketPositionViewPresenter.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class dydxMarketPositionViewPresenter: HostedViewPresenter<dydxMarketPositionVie
4545
}
4646
}
4747

48+
viewModel?.onboardAction = {
49+
Router.shared?.navigate(to: RoutingRequest(path: "/onboard"), animated: true, completion: { /* [weak self] */ _, _ in
50+
})
51+
}
52+
4853
attachChildren(workers: childPresenters)
4954
}
5055

@@ -77,13 +82,8 @@ class dydxMarketPositionViewPresenter: HostedViewPresenter<dydxMarketPositionVie
7782
.CombineLatest(AbacusStateManager.shared.state.onboarded,
7883
$position.removeDuplicates())
7984
.sink { [weak self] (onboarded, position) in
80-
if !onboarded {
81-
self?.viewModel?.emptyText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_POSITIONS_LOG_IN")
82-
} else if position == nil {
83-
self?.viewModel?.emptyText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_POSITIONS")
84-
} else {
85-
self?.viewModel?.emptyText = nil
86-
}
85+
self?.viewModel?.isSignedIn = onboarded
86+
self?.viewModel?.hasOpenPosition = position != nil
8787
}
8888
.store(in: &subscriptions)
8989

ios/dydx/dydxPresenters/dydxPresenters/_v4/Portfolio/Components/dydxPortfolioFillsViewPresenter.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,19 @@ class dydxPortfolioFillsViewPresenter: HostedViewPresenter<dydxPortfolioFillsVie
2929
super.init()
3030

3131
self.viewModel = viewModel
32+
33+
viewModel?.onboardAction = {
34+
Router.shared?.navigate(to: RoutingRequest(path: "/onboard"), animated: true, completion: { /* [weak self] */ _, _ in
35+
})
36+
}
3237
}
3338

3439
override func start() {
3540
super.start()
3641

3742
AbacusStateManager.shared.state.onboarded
3843
.sink { [weak self] onboarded in
39-
if onboarded {
40-
self?.viewModel?.placeholderText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_TRADES")
41-
} else {
42-
self?.viewModel?.placeholderText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_TRADES_LOG_IN")
43-
}
44+
self?.viewModel?.isSignedIn = onboarded
4445
}
4546
.store(in: &subscriptions)
4647

ios/dydx/dydxPresenters/dydxPresenters/_v4/Portfolio/Components/dydxPortfolioFundingViewPresenter.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,19 @@ class dydxPortfolioFundingViewPresenter: HostedViewPresenter<dydxPortfolioFundin
2929
super.init()
3030

3131
self.viewModel = viewModel
32+
33+
viewModel?.onboardAction = {
34+
Router.shared?.navigate(to: RoutingRequest(path: "/onboard"), animated: true, completion: { /* [weak self] */ _, _ in
35+
})
36+
}
3237
}
3338

3439
override func start() {
3540
super.start()
3641

3742
AbacusStateManager.shared.state.onboarded
3843
.sink { [weak self] onboarded in
39-
if onboarded {
40-
self?.viewModel?.placeholderText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_FUNDING")
41-
} else {
42-
self?.viewModel?.placeholderText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_FUNDING_LOG_IN")
43-
}
44+
self?.viewModel?.isSignedIn = onboarded
4445
}
4546
.store(in: &subscriptions)
4647

ios/dydx/dydxPresenters/dydxPresenters/_v4/Portfolio/Components/dydxPortfolioOrdersViewPresenter.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,19 @@ class dydxPortfolioOrdersViewPresenter: HostedViewPresenter<dydxPortfolioOrdersV
2929
super.init()
3030

3131
self.viewModel = viewModel
32+
33+
viewModel?.onboardAction = {
34+
Router.shared?.navigate(to: RoutingRequest(path: "/onboard"), animated: true, completion: { /* [weak self] */ _, _ in
35+
})
36+
}
3237
}
3338

3439
override func start() {
3540
super.start()
3641

3742
AbacusStateManager.shared.state.onboarded
3843
.sink { [weak self] onboarded in
39-
if onboarded {
40-
self?.viewModel?.placeholderText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_ORDERS")
41-
} else {
42-
self?.viewModel?.placeholderText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_ORDERS_LOG_IN")
43-
}
44+
self?.viewModel?.isSignedIn = onboarded
4445
}
4546
.store(in: &subscriptions)
4647

ios/dydx/dydxPresenters/dydxPresenters/_v4/Portfolio/Components/dydxPortfolioPositionsViewPresenter.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,18 @@ class dydxPortfolioPositionsViewPresenter: HostedViewPresenter<dydxPortfolioPosi
2929
viewModel?.vaultTapAction = {
3030
Router.shared?.navigate(to: RoutingRequest(path: "/vault"), animated: true, completion: nil)
3131
}
32+
viewModel?.onboardAction = {
33+
Router.shared?.navigate(to: RoutingRequest(path: "/onboard"), animated: true, completion: { /* [weak self] */ _, _ in
34+
})
35+
}
3236
}
3337

3438
override func start() {
3539
super.start()
3640

3741
AbacusStateManager.shared.state.onboarded
3842
.sink { [weak self] onboarded in
39-
if onboarded {
40-
self?.viewModel?.emptyText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_POSITIONS")
41-
} else {
42-
self?.viewModel?.emptyText = DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_POSITIONS_LOG_IN")
43-
}
43+
self?.viewModel?.isSignedIn = onboarded
4444
}
4545
.store(in: &subscriptions)
4646

ios/dydx/dydxViews/dydxViews/_v4/MarketInfo/Components/Position/dydxMarketPositionView.swift

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ import PlatformUI
1111
import Utilities
1212

1313
public class dydxMarketPositionViewModel: PlatformViewModel {
14-
@Published public var emptyText: String?
15-
1614
@Published public var closeAction: (() -> Void)?
1715
@Published public var editMarginAction: (() -> Void)?
16+
@Published public var onboardAction: (() -> Void)?
17+
18+
@Published public var isSignedIn: Bool = false
19+
@Published public var hasOpenPosition: Bool = false
20+
1821
@Published public var unrealizedPNLAmount: SignedAmountViewModel?
1922
@Published public var unrealizedPNLPercent: String = ""
2023
@Published public var realizedPNLAmount: SignedAmountViewModel?
@@ -72,18 +75,27 @@ public class dydxMarketPositionViewModel: PlatformViewModel {
7275
public override func createView(parentStyle: ThemeStyle = ThemeStyle.defaultStyle, styleKey: String? = nil) -> PlatformView {
7376
PlatformView(viewModel: self, parentStyle: parentStyle, styleKey: styleKey) { [weak self] style in
7477
guard let self = self else { return AnyView(PlatformView.nilView) }
78+
guard self.isSignedIn else {
79+
return PlatformButtonViewModel(
80+
content: Text(DataLocalizer.localize(path: "APP.GENERAL.SIGN_IN_TO_VIEW")).wrappedViewModel,
81+
action: { self.onboardAction?() }
82+
)
83+
.createView(parentStyle: parentStyle)
84+
.frame(width: UIScreen.main.bounds.width - 16)
85+
.wrappedInAnyView()
86+
}
7587

7688
return AnyView(
7789
VStack(spacing: 24) {
7890
// check size to determine if there is current position data to display
7991
VStack {
80-
if let emptyText = self.emptyText {
81-
PlaceholderViewModel(text: emptyText)
82-
.createView()
83-
} else {
92+
if self.hasOpenPosition {
8493
self.createCollection(parentStyle: style)
8594
self.createButtons(parentStyle: style)
8695
self.createList(parentStyle: style)
96+
} else {
97+
PlaceholderViewModel(text: DataLocalizer.localize(path: "APP.GENERAL.PLACEHOLDER_NO_POSITIONS"))
98+
.createView()
8799
}
88100
}
89101

ios/dydx/dydxViews/dydxViews/_v4/Portfolio/Components/Sections/dydxPortfolioFillsView.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,22 @@ import PlatformUI
1111
import Utilities
1212

1313
public class dydxPortfolioFillsViewModel: PlatformListViewModel {
14-
@Published public var placeholderText: String?
14+
@Published public var isSignedIn: Bool = false
15+
@Published public var onboardAction: (() -> Void)?
1516

1617
public override var placeholder: PlatformViewModel? {
17-
let vm = PlaceholderViewModel()
18-
vm.text = placeholderText
19-
return vm
18+
guard self.isSignedIn else {
19+
return PlatformButtonViewModel(
20+
content: Text(DataLocalizer.localize(path: "APP.GENERAL.SIGN_IN_TO_VIEW")).wrappedViewModel,
21+
action: { self.onboardAction?() }
22+
)
23+
.createView()
24+
.frame(width: UIScreen.main.bounds.width - 16)
25+
.wrappedViewModel
26+
}
27+
return PlaceholderViewModel(
28+
text: DataLocalizer.localize(path: "APP.TRADE.TRADES_EMPTY_STATE")
29+
)
2030
}
2131

2232
public init(items: [PlatformViewModel] = [], contentChanged: (() -> Void)? = nil) {

ios/dydx/dydxViews/dydxViews/_v4/Portfolio/Components/Sections/dydxPortfolioFundingView.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,22 @@ public class dydxPortfolioFundingItemViewModel: PlatformViewModel {
147147
}
148148

149149
public class dydxPortfolioFundingViewModel: PlatformListViewModel {
150-
@Published public var placeholderText: String?
150+
@Published public var isSignedIn: Bool = false
151+
@Published public var onboardAction: (() -> Void)?
151152

152153
public override var placeholder: PlatformViewModel? {
153-
let vm = PlaceholderViewModel()
154-
vm.text = placeholderText
155-
return vm
154+
guard self.isSignedIn else {
155+
return PlatformButtonViewModel(
156+
content: Text(DataLocalizer.localize(path: "APP.GENERAL.SIGN_IN_TO_VIEW")).wrappedViewModel,
157+
action: { self.onboardAction?() }
158+
)
159+
.createView()
160+
.frame(width: UIScreen.main.bounds.width - 16)
161+
.wrappedViewModel
162+
}
163+
return PlaceholderViewModel(
164+
text: DataLocalizer.localize(path: "APP.TRADE.FUNDING_EMPTY_STATE")
165+
)
156166
}
157167

158168
public init(items: [PlatformViewModel] = [], contentChanged: (() -> Void)? = nil) {

ios/dydx/dydxViews/dydxViews/_v4/Portfolio/Components/Sections/dydxPortfolioOrdersView.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,22 @@ public class dydxPortfolioOrderItemViewModel: PlatformViewModel {
183183
}
184184

185185
public class dydxPortfolioOrdersViewModel: PlatformListViewModel {
186-
@Published public var placeholderText: String?
186+
@Published public var isSignedIn: Bool = false
187+
@Published public var onboardAction: (() -> Void)?
187188

188189
public override var placeholder: PlatformViewModel? {
189-
let vm = PlaceholderViewModel()
190-
vm.text = placeholderText
191-
return vm
190+
guard self.isSignedIn else {
191+
return PlatformButtonViewModel(
192+
content: Text(DataLocalizer.localize(path: "APP.GENERAL.SIGN_IN_TO_VIEW")).wrappedViewModel,
193+
action: { self.onboardAction?() }
194+
)
195+
.createView()
196+
.frame(width: UIScreen.main.bounds.width - 16)
197+
.wrappedViewModel
198+
}
199+
return PlaceholderViewModel(
200+
text: DataLocalizer.localize(path: "APP.TRADE.ORDER_EMPTY_STATE")
201+
)
192202
}
193203

194204
public init(items: [PlatformViewModel] = [], contentChanged: (() -> Void)? = nil) {

ios/dydx/dydxViews/dydxViews/_v4/Portfolio/Components/Sections/dydxPortfolioPositionsView.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,6 @@ public class dydxPortfolioPositionItemViewModel: PlatformViewModel {
244244
}
245245

246246
public class dydxPortfolioPositionsViewModel: PlatformViewModel {
247-
@Published public var emptyText: String?
248247
@Published public var positionItems: [dydxPortfolioPositionItemViewModel] {
249248
didSet {
250249
contentChanged?()
@@ -259,19 +258,19 @@ public class dydxPortfolioPositionsViewModel: PlatformViewModel {
259258
@Published public var vaultBalance: String?
260259
@Published public var vaultApy: Double?
261260
@Published public var vaultTapAction: (() -> Void)?
261+
@Published public var isSignedIn: Bool = false
262+
@Published public var onboardAction: (() -> Void)?
262263

263264
public var contentChanged: (() -> Void)?
264265

265266
init(
266267
positionItems: [dydxPortfolioPositionItemViewModel] = [],
267268
pendingPositionItems: [dydxPortfolioPendingPositionsItemViewModel] = [],
268269
vaultBalance: String? = nil,
269-
vaultApy: String? = nil,
270-
emptyText: String? = nil
270+
vaultApy: String? = nil
271271
) {
272272
self.positionItems = positionItems
273273
self.pendingPositionItems = pendingPositionItems
274-
self.emptyText = emptyText
275274
}
276275

277276
public static var previewValue: dydxPortfolioPositionsViewModel {
@@ -283,8 +282,8 @@ public class dydxPortfolioPositionsViewModel: PlatformViewModel {
283282
pendingPositionItems: [
284283
.previewValue
285284
],
286-
vaultBalance: "324.320",
287-
emptyText: "empty")
285+
vaultBalance: "324.320"
286+
)
288287
}
289288

290289
public var pendingPositionsHeader: PlatformViewModel? {
@@ -309,9 +308,9 @@ public class dydxPortfolioPositionsViewModel: PlatformViewModel {
309308

310309
private var openPositionsView: some View {
311310
LazyVStack {
312-
if let emptyText = self.emptyText, positionItems.isEmpty {
311+
if positionItems.isEmpty {
313312
AnyView(
314-
PlaceholderViewModel(text: emptyText)
313+
PlaceholderViewModel(text: DataLocalizer.localize(path: "APP.TRADE.POSITIONS_EMPTY_STATE"))
315314
.createView()
316315
)
317316
} else {
@@ -398,6 +397,15 @@ public class dydxPortfolioPositionsViewModel: PlatformViewModel {
398397
public override func createView(parentStyle: ThemeStyle = ThemeStyle.defaultStyle, styleKey: String? = nil) -> PlatformView {
399398
PlatformView(viewModel: self, parentStyle: parentStyle, styleKey: styleKey) { [weak self] _ in
400399
guard let self = self else { return AnyView(PlatformView.nilView) }
400+
guard self.isSignedIn else {
401+
return PlatformButtonViewModel(
402+
content: Text(DataLocalizer.localize(path: "APP.GENERAL.SIGN_IN_TO_VIEW")).wrappedViewModel,
403+
action: { self.onboardAction?() }
404+
)
405+
.createView(parentStyle: parentStyle)
406+
.frame(width: UIScreen.main.bounds.width - 16)
407+
.wrappedInAnyView()
408+
}
401409

402410
return AnyView(
403411
ScrollView {

0 commit comments

Comments
 (0)