Issue #284: (Non)scrollable Transactions list based on Drawer
This commit is contained in:
parent
4b114efa8b
commit
557aabdd17
|
@ -68,6 +68,7 @@ extension HomeReducer {
|
||||||
|
|
||||||
case .updateDrawer(let drawerOverlay):
|
case .updateDrawer(let drawerOverlay):
|
||||||
state.drawerOverlay = drawerOverlay
|
state.drawerOverlay = drawerOverlay
|
||||||
|
state.transactionHistoryState.isScrollable = drawerOverlay == .full ? true : false
|
||||||
return .none
|
return .none
|
||||||
|
|
||||||
case .transactionHistory(let historyAction):
|
case .transactionHistory(let historyAction):
|
||||||
|
|
|
@ -14,8 +14,10 @@ struct TransactionHistoryState: Equatable {
|
||||||
case showTransaction(Transaction)
|
case showTransaction(Transaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
var transactions: IdentifiedArrayOf<Transaction>
|
|
||||||
var route: Route?
|
var route: Route?
|
||||||
|
|
||||||
|
var isScrollable = false
|
||||||
|
var transactions: IdentifiedArrayOf<Transaction>
|
||||||
}
|
}
|
||||||
|
|
||||||
enum TransactionHistoryAction: Equatable {
|
enum TransactionHistoryAction: Equatable {
|
||||||
|
@ -73,7 +75,7 @@ extension Transaction {
|
||||||
|
|
||||||
extension TransactionHistoryState {
|
extension TransactionHistoryState {
|
||||||
static var placeHolder: Self {
|
static var placeHolder: Self {
|
||||||
.init(transactions: .placeholder, route: nil)
|
.init(transactions: .placeholder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,8 +92,8 @@ extension TransactionHistoryStore {
|
||||||
let transactions = IdentifiedArrayOf<Transaction>.placeholder
|
let transactions = IdentifiedArrayOf<Transaction>.placeholder
|
||||||
return Store(
|
return Store(
|
||||||
initialState: TransactionHistoryState(
|
initialState: TransactionHistoryState(
|
||||||
transactions: transactions,
|
route: .showTransaction(transactions[3]),
|
||||||
route: .showTransaction(transactions[3])
|
transactions: transactions
|
||||||
),
|
),
|
||||||
reducer: .default.debug(),
|
reducer: .default.debug(),
|
||||||
environment: ()
|
environment: ()
|
||||||
|
@ -102,7 +104,7 @@ extension TransactionHistoryStore {
|
||||||
extension IdentifiedArrayOf where Element == Transaction {
|
extension IdentifiedArrayOf where Element == Transaction {
|
||||||
static var placeholder: IdentifiedArrayOf<Transaction> {
|
static var placeholder: IdentifiedArrayOf<Transaction> {
|
||||||
return .init(
|
return .init(
|
||||||
uniqueElements: (0..<10).map {
|
uniqueElements: (0..<30).map {
|
||||||
Transaction(
|
Transaction(
|
||||||
id: $0,
|
id: $0,
|
||||||
amount: 25,
|
amount: 25,
|
||||||
|
|
|
@ -5,14 +5,37 @@ struct TransactionHistoryView: View {
|
||||||
let store: Store<TransactionHistoryState, TransactionHistoryAction>
|
let store: Store<TransactionHistoryState, TransactionHistoryAction>
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
WithViewStore(store) { viewStore in
|
UITableView.appearance().backgroundColor = .clear
|
||||||
ForEach(viewStore.transactions) { transaction in
|
UITableViewCell.appearance().backgroundColor = .clear
|
||||||
WithStateBinding(binding: viewStore.bindingForSelectingTransaction(transaction)) {
|
|
||||||
|
return WithViewStore(store) { viewStore in
|
||||||
|
if viewStore.isScrollable {
|
||||||
|
List {
|
||||||
|
transactionsList(with: viewStore)
|
||||||
|
}
|
||||||
|
.listStyle(.sidebar)
|
||||||
|
} else {
|
||||||
|
transactionsList(with: viewStore)
|
||||||
|
.padding(.leading, 32)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension TransactionHistoryView {
|
||||||
|
func transactionsList(with viewStore: TransactionHistoryViewStore) -> some View {
|
||||||
|
ForEach(viewStore.transactions) { transaction in
|
||||||
|
WithStateBinding(binding: viewStore.bindingForSelectingTransaction(transaction)) { active in
|
||||||
|
HStack {
|
||||||
Text("Show Transaction \(transaction.id)")
|
Text("Show Transaction \(transaction.id)")
|
||||||
.navigationLink(
|
.navigationLink(
|
||||||
isActive: $0,
|
isActive: active,
|
||||||
destination: { TransactionDetailView(transaction: transaction) }
|
destination: { TransactionDetailView(transaction: transaction) }
|
||||||
)
|
)
|
||||||
|
.foregroundColor(Asset.Colors.Text.body.color)
|
||||||
|
.listRowBackground(Color.clear)
|
||||||
|
|
||||||
|
Spacer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue