From dfecd093e8214f65e7d51a32edae4aee068cf4b1 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 25 Oct 2020 19:40:46 +0200 Subject: [PATCH] Categories --- .../expense_category_selectors.dart | 20 +++++++++++++++++++ .../view/expense_category_view.dart | 14 ++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/redux/expense_category/expense_category_selectors.dart b/lib/redux/expense_category/expense_category_selectors.dart index ac85a625a..305bee9b8 100644 --- a/lib/redux/expense_category/expense_category_selectors.dart +++ b/lib/redux/expense_category/expense_category_selectors.dart @@ -72,6 +72,26 @@ List filteredExpenseCategoriesSelector( return list; } +var memoizedCalculateExpenseCategoryAmount = memo2( + (String categoryId, BuiltMap expenseMap) => + calculateExpenseCategoryAmount( + categoryId: categoryId, expenseMap: expenseMap)); + +double calculateExpenseCategoryAmount({ + String categoryId, + BuiltMap expenseMap, +}) { + double total = 0; + + expenseMap.forEach((expenseId, expense) { + if (expense.categoryId == categoryId) { + total += expense.amount; + } + }); + + return total; +} + bool hasExpenseCategoryChanges(ExpenseCategoryEntity expenseCategory, BuiltMap expenseCategoryMap) => expenseCategory.isNew diff --git a/lib/ui/expense_category/view/expense_category_view.dart b/lib/ui/expense_category/view/expense_category_view.dart index e6178fb92..924e9a086 100644 --- a/lib/ui/expense_category/view/expense_category_view.dart +++ b/lib/ui/expense_category/view/expense_category_view.dart @@ -1,7 +1,11 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/redux/expense_category/expense_category_selectors.dart'; +import 'package:invoiceninja_flutter/ui/app/entity_header.dart'; import 'package:invoiceninja_flutter/ui/expense_category/view/expense_category_view_vm.dart'; import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart'; +import 'package:invoiceninja_flutter/utils/formatting.dart'; +import 'package:invoiceninja_flutter/utils/localization.dart'; class ExpenseCategoryView extends StatefulWidget { const ExpenseCategoryView({ @@ -22,13 +26,21 @@ class _ExpenseCategoryViewState extends State { Widget build(BuildContext context) { final viewModel = widget.viewModel; final expenseCategory = viewModel.expenseCategory; + final localization = AppLocalization.of(context); + final amount = memoizedCalculateExpenseCategoryAmount( + expenseCategory.id, viewModel.state.expenseState.map); return ViewScaffold( isFilter: widget.isFilter, entity: expenseCategory, onBackPressed: () => viewModel.onBackPressed(), body: ListView( - children: [], + children: [ + EntityHeader( + entity: expenseCategory, + label: localization.total, + value: formatNumber(amount, context)), + ], ), ); }