Issue #284: (Non)scrollable Transactions list based on Drawer

This commit is contained in:
Lukas Korba 2022-04-21 19:11:55 +02:00 committed by GitHub
parent 4b114efa8b
commit 557aabdd17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 9 deletions

View File

@ -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):

View File

@ -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,

View File

@ -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()
} }
} }
} }