diff --git a/lib/data/models/client_model.dart b/lib/data/models/client_model.dart index 692c4bea7..89e470d64 100644 --- a/lib/data/models/client_model.dart +++ b/lib/data/models/client_model.dart @@ -104,6 +104,7 @@ abstract class ClientEntity extends Object ClientEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false); @nullable diff --git a/lib/data/models/credit_model.dart b/lib/data/models/credit_model.dart index 2c375fcce..b1c2cf4c3 100644 --- a/lib/data/models/credit_model.dart +++ b/lib/data/models/credit_model.dart @@ -71,6 +71,7 @@ abstract class CreditEntity extends Object CreditEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false); @override diff --git a/lib/data/models/document_model.dart b/lib/data/models/document_model.dart index ad20ffd6f..8bbd0a275 100644 --- a/lib/data/models/document_model.dart +++ b/lib/data/models/document_model.dart @@ -92,6 +92,7 @@ abstract class DocumentEntity extends Object DocumentEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false); @override diff --git a/lib/data/models/expense_model.dart b/lib/data/models/expense_model.dart index 1a406d3cf..4fd1b3b84 100644 --- a/lib/data/models/expense_model.dart +++ b/lib/data/models/expense_model.dart @@ -114,6 +114,7 @@ abstract class ExpenseEntity extends Object ExpenseEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false ..invoiceId = null ..expenseDate = convertDateTimeToSqlDate() diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index 0dcd90870..d83927b1f 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -124,6 +124,7 @@ abstract class InvoiceEntity extends Object InvoiceEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false ..statusId = kInvoiceStatusDraft ..quoteInvoiceId = null diff --git a/lib/data/models/product_model.dart b/lib/data/models/product_model.dart index 56f8970a2..6b68a840e 100644 --- a/lib/data/models/product_model.dart +++ b/lib/data/models/product_model.dart @@ -74,6 +74,7 @@ abstract class ProductEntity extends Object ProductEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false); @override diff --git a/lib/data/models/project_model.dart b/lib/data/models/project_model.dart index f995a45ff..ed4b415fa 100644 --- a/lib/data/models/project_model.dart +++ b/lib/data/models/project_model.dart @@ -73,6 +73,7 @@ abstract class ProjectEntity extends Object ProjectEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false); @override diff --git a/lib/data/models/quote_model.dart b/lib/data/models/quote_model.dart index 19ead921c..f87e06bcd 100644 --- a/lib/data/models/quote_model.dart +++ b/lib/data/models/quote_model.dart @@ -120,6 +120,7 @@ abstract class QuoteEntity extends Object QuoteEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false ..quoteInvoiceId = null ..invoiceNumber = '' diff --git a/lib/data/models/task_model.dart b/lib/data/models/task_model.dart index 8b7c9d338..bc2b5f8f4 100644 --- a/lib/data/models/task_model.dart +++ b/lib/data/models/task_model.dart @@ -152,6 +152,7 @@ abstract class TaskEntity extends Object TaskEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false ..invoiceId = null ..isRunning = false diff --git a/lib/data/models/vendor_model.dart b/lib/data/models/vendor_model.dart index eb4151b70..5ad789443 100644 --- a/lib/data/models/vendor_model.dart +++ b/lib/data/models/vendor_model.dart @@ -98,6 +98,7 @@ abstract class VendorEntity extends Object VendorEntity get clone => rebuild((b) => b ..id = BaseEntity.nextId + ..isChanged = true ..isDeleted = false); @override diff --git a/lib/redux/ui/ui_reducer.dart b/lib/redux/ui/ui_reducer.dart index 64d453a62..293ed4d7d 100644 --- a/lib/redux/ui/ui_reducer.dart +++ b/lib/redux/ui/ui_reducer.dart @@ -187,6 +187,11 @@ Reducer> historyReducer = combineReducers([ BuiltList _addToHistory( BuiltList list, HistoryRecord record) { + // don't track new records + if (record.id.startsWith('-')) { + return list; + } + final old = list.firstWhere((item) => item.matchesRecord(record), orElse: () => null); if (old != null) { diff --git a/lib/ui/app/entities/entity_actions_dialog.dart b/lib/ui/app/entities/entity_actions_dialog.dart index 3e5afcb70..813b9eea2 100644 --- a/lib/ui/app/entities/entity_actions_dialog.dart +++ b/lib/ui/app/entities/entity_actions_dialog.dart @@ -1,18 +1,26 @@ import 'package:flutter/material.dart'; -import 'package:invoiceninja_flutter/data/models/company_model.dart'; +import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; +import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; +import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_actions.dart'; +import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart'; +import 'package:invoiceninja_flutter/redux/group/group_actions.dart'; +import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; +import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart'; +import 'package:invoiceninja_flutter/redux/product/product_actions.dart'; +import 'package:invoiceninja_flutter/redux/project/project_actions.dart'; +import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart'; +import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; +import 'package:invoiceninja_flutter/redux/tax_rate/tax_rate_actions.dart'; +import 'package:invoiceninja_flutter/redux/user/user_actions.dart'; +import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart'; import 'package:invoiceninja_flutter/utils/icons.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; Future showEntityActionsDialog( - {@required - BuildContext context, - @required - List entities, - @required - UserCompanyEntity userCompany, - @required - Function(BuildContext, List, EntityAction) onEntityAction, + {@required BuildContext context, + @required List entities, ClientEntity client, bool multiselect = false}) async { if (entities == null) { @@ -22,10 +30,12 @@ Future showEntityActionsDialog( showDialog( context: context, builder: (BuildContext dialogContext) { + final state = StoreProvider.of(context).state; final actions = []; + actions.addAll(entities[0] .getActions( - userCompany: userCompany, + userCompany: state.userCompany, includeEdit: true, client: client, multiselect: multiselect) @@ -35,9 +45,8 @@ Future showEntityActionsDialog( } else { return EntityActionListTile( entities: entities, - entityAction: entityAction, + action: entityAction, mainContext: mainContext, - onEntityAction: onEntityAction, ); } }).toList()); @@ -48,13 +57,10 @@ Future showEntityActionsDialog( class EntityActionListTile extends StatelessWidget { const EntityActionListTile( - {this.entities, - this.entityAction, - this.onEntityAction, - this.mainContext}); + {this.entities, this.action, this.onEntityAction, this.mainContext}); final List entities; - final EntityAction entityAction; + final EntityAction action; final BuildContext mainContext; final Function(BuildContext, List, EntityAction) onEntityAction; @@ -63,11 +69,52 @@ class EntityActionListTile extends StatelessWidget { final localization = AppLocalization.of(context); return ListTile( - leading: Icon(getEntityActionIcon(entityAction)), - title: Text(localization.lookup(entityAction.toString())), + leading: Icon(getEntityActionIcon(action)), + title: Text(localization.lookup(action.toString())), onTap: () { Navigator.of(context).pop(); - onEntityAction(context, entities, entityAction); + final first = entities.first; + switch (first.entityType) { + case EntityType.client: + handleClientAction(context, entities, action); + break; + case EntityType.product: + handleProductAction(context, entities, action); + break; + case EntityType.invoice: + handleInvoiceAction(context, entities, action); + break; + case EntityType.payment: + handlePaymentAction(context, entities, action); + break; + case EntityType.quote: + handleQuoteAction(context, entities, action); + break; + case EntityType.task: + handleTaskAction(context, entities, action); + break; + case EntityType.project: + handleProjectAction(context, entities, action); + break; + case EntityType.vendor: + handleVendorAction(context, entities, action); + break; + case EntityType.expense: + handleExpenseAction(context, entities, action); + break; + case EntityType.companyGateway: + handleCompanyGatewayAction(context, entities, action); + break; + case EntityType.group: + handleGroupAction(context, entities, action); + break; + case EntityType.taxRate: + handleTaxRateAction(context, entities, action); + break; + case EntityType.user: + handleUserAction(context, entities, action); + break; + } }, ); } diff --git a/lib/ui/app/history_drawer.dart b/lib/ui/app/history_drawer.dart index 533b32270..a282994d8 100644 --- a/lib/ui/app/history_drawer.dart +++ b/lib/ui/app/history_drawer.dart @@ -1,7 +1,9 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_state.dart'; +import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:timeago/timeago.dart' as timeago; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; @@ -29,9 +31,10 @@ class HistoryDrawer extends StatelessWidget { break; } - final entity = state.getEntityMap(history.entityType)[history.id]; + final entity = + state.getEntityMap(history.entityType)[history.id] as BaseEntity; - if (entity == null) { + if (entity == null || entity.isDeleted) { continue; } @@ -46,10 +49,10 @@ class HistoryDrawer extends StatelessWidget { context: context, entityId: history.id, entityType: history.entityType), - onLongPress: () => editEntityById( + onLongPress: () => showEntityActionsDialog( context: context, - entityId: history.id, - entityType: history.entityType), + entities: [entity], + ), )); } diff --git a/lib/ui/client/client_list.dart b/lib/ui/client/client_list.dart index 666b3d035..30b7fa330 100644 --- a/lib/ui/client/client_list.dart +++ b/lib/ui/client/client_list.dart @@ -53,13 +53,11 @@ class ClientList extends StatelessWidget { final isInMultiselect = state.clientListState.isInMultiselect(); - final userCompany = viewModel.state.userCompany; void showDialog() => showEntityActionsDialog( - entities: [client], - context: context, - userCompany: userCompany, - onEntityAction: viewModel.onEntityAction); + entities: [client], + context: context, + ); return ClientListItem( user: viewModel.state.user, diff --git a/lib/ui/client/client_screen.dart b/lib/ui/client/client_screen.dart index 12316698a..141a59548 100644 --- a/lib/ui/client/client_screen.dart +++ b/lib/ui/client/client_screen.dart @@ -45,8 +45,7 @@ class ClientScreen extends StatelessWidget { .where((client) => value != listUIState.isSelected(client.id)) .toList(); - viewModel.onEntityAction( - context, clients, EntityAction.toggleMultiselect); + handleClientAction(context, clients, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.clients, @@ -92,9 +91,7 @@ class ClientScreen extends StatelessWidget { await showEntityActionsDialog( entities: clients, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearClientMultiselect(context: context)); }, diff --git a/lib/ui/client/client_screen_vm.dart b/lib/ui/client/client_screen_vm.dart index 95528031d..1a1bae862 100644 --- a/lib/ui/client/client_screen_vm.dart +++ b/lib/ui/client/client_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; import 'package:invoiceninja_flutter/redux/client/client_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class ClientScreenVM { @required this.isInMultiselect, @required this.clientList, @required this.userCompany, - @required this.onEntityAction, @required this.clientMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List clientList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap clientMap; static ClientScreenVM fromStore(Store store) { @@ -52,9 +49,6 @@ class ClientScreenVM { state.clientState.list, state.groupState.map, state.clientListState), userCompany: state.userCompany, isInMultiselect: state.clientListState.isInMultiselect(), - onEntityAction: (BuildContext context, List clients, - EntityAction action) => - handleClientAction(context, clients, action), ); } } diff --git a/lib/ui/company_gateway/company_gateway_list.dart b/lib/ui/company_gateway/company_gateway_list.dart index ca23fb347..588119e60 100644 --- a/lib/ui/company_gateway/company_gateway_list.dart +++ b/lib/ui/company_gateway/company_gateway_list.dart @@ -4,6 +4,7 @@ import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/company_gateway_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; @@ -24,14 +25,12 @@ class CompanyGatewayList extends StatelessWidget { final store = StoreProvider.of(context); final listUIState = store.state.uiState.companyGatewayUIState.listUIState; final isInMultiselect = listUIState.isInMultiselect(); - final userCompany = viewModel.userCompany; void showDialog(CompanyGatewayEntity companyGateway) => showEntityActionsDialog( - userCompany: userCompany, - entities: [companyGateway], - context: context, - onEntityAction: viewModel.onEntityAction); + entities: [companyGateway], + context: context, + ); return Column( children: [ @@ -71,13 +70,14 @@ class CompanyGatewayList extends StatelessWidget { context, companyGateway), onRemovePressed: viewModel.state.settingsUIState.isFiltered - ? () => viewModel.onRemovePressed(companyGatewayId) + ? () => viewModel + .onRemovePressed(companyGatewayId) : null, onEntityAction: (EntityAction action) { if (action == EntityAction.more) { showDialog(companyGateway); } else { - viewModel.onEntityAction( + handleCompanyGatewayAction( context, [companyGateway], action); } }, diff --git a/lib/ui/company_gateway/company_gateway_list_vm.dart b/lib/ui/company_gateway/company_gateway_list_vm.dart index 148848621..87608496a 100644 --- a/lib/ui/company_gateway/company_gateway_list_vm.dart +++ b/lib/ui/company_gateway/company_gateway_list_vm.dart @@ -45,7 +45,6 @@ class CompanyGatewayListVM { @required this.onCompanyGatewayTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, @required this.onSortChanged, @@ -92,9 +91,6 @@ class CompanyGatewayListVM { store.dispatch(ViewCompanyGateway( companyGatewayId: companyGateway.id, context: context)); }, - onEntityAction: (BuildContext context, List companyGateway, - EntityAction action) => - handleCompanyGatewayAction(context, companyGateway, action), onRefreshed: (context) => _handleRefresh(context), onRemovePressed: (gatewayId) { gatewayIds.remove(gatewayId); @@ -124,7 +120,6 @@ class CompanyGatewayListVM { final bool isLoaded; final Function(BuildContext, CompanyGatewayEntity) onCompanyGatewayTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; final Function(int, int) onSortChanged; diff --git a/lib/ui/company_gateway/company_gateway_screen.dart b/lib/ui/company_gateway/company_gateway_screen.dart index 7f910984f..231838443 100644 --- a/lib/ui/company_gateway/company_gateway_screen.dart +++ b/lib/ui/company_gateway/company_gateway_screen.dart @@ -28,7 +28,6 @@ class CompanyGatewayScreen extends StatelessWidget { Widget build(BuildContext context) { final store = StoreProvider.of(context); final state = store.state; - final userCompany = state.userCompany; final localization = AppLocalization.of(context); final listUIState = state.uiState.companyGatewayUIState.listUIState; final isInMultiselect = listUIState.isInMultiselect(); @@ -47,7 +46,7 @@ class CompanyGatewayScreen extends StatelessWidget { value != listUIState.isSelected(companyGateway.id)) .toList(); - viewModel.onEntityAction( + handleCompanyGatewayAction( context, companyGateways, EntityAction.toggleMultiselect); }, isSettings: true, @@ -66,9 +65,7 @@ class CompanyGatewayScreen extends StatelessWidget { await showEntityActionsDialog( entities: companyGateways, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch( @@ -96,22 +93,21 @@ class CompanyGatewayScreen extends StatelessWidget { }, ), floatingActionButton: FloatingActionButton( - heroTag: 'company_gateway_fab', - backgroundColor: Theme.of(context).primaryColorDark, - onPressed: () { - if (state.settingsUIState.isFiltered) { - - } else { - store.dispatch(EditCompanyGateway( - companyGateway: CompanyGatewayEntity(), context: context)); - } - }, - child: Icon( - Icons.add, - color: Colors.white, - ), - tooltip: localization.newCompanyGateway, - ), + heroTag: 'company_gateway_fab', + backgroundColor: Theme.of(context).primaryColorDark, + onPressed: () { + if (state.settingsUIState.isFiltered) { + } else { + store.dispatch(EditCompanyGateway( + companyGateway: CompanyGatewayEntity(), context: context)); + } + }, + child: Icon( + Icons.add, + color: Colors.white, + ), + tooltip: localization.newCompanyGateway, + ), ); } } diff --git a/lib/ui/company_gateway/company_gateway_screen_vm.dart b/lib/ui/company_gateway/company_gateway_screen_vm.dart index 550456e43..a4ee7b4f6 100644 --- a/lib/ui/company_gateway/company_gateway_screen_vm.dart +++ b/lib/ui/company_gateway/company_gateway_screen_vm.dart @@ -8,7 +8,6 @@ import 'package:invoiceninja_flutter/data/models/group_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; -import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_actions.dart'; import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_selectors.dart'; import 'package:invoiceninja_flutter/redux/group/group_actions.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; @@ -39,7 +38,6 @@ class CompanyGatewayScreenVM { @required this.isInMultiselect, @required this.companyGatewayList, @required this.userCompany, - @required this.onEntityAction, @required this.companyGatewayMap, @required this.onSavePressed, @required this.onCancelPressed, @@ -48,7 +46,6 @@ class CompanyGatewayScreenVM { final bool isInMultiselect; final UserCompanyEntity userCompany; final List companyGatewayList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap companyGatewayMap; final Function(BuildContext) onSavePressed; final Function(BuildContext) onCancelPressed; @@ -67,9 +64,6 @@ class CompanyGatewayScreenVM { ), userCompany: state.userCompany, isInMultiselect: state.companyGatewayListState.isInMultiselect(), - onEntityAction: (BuildContext context, List companyGateways, - EntityAction action) => - handleCompanyGatewayAction(context, companyGateways, action), onCancelPressed: (context) => store.dispatch(ResetSettings()), onSavePressed: (context) { final settingsUIState = state.uiState.settingsUIState; diff --git a/lib/ui/document/document_list.dart b/lib/ui/document/document_list.dart index da2c3d79a..55e81a8d6 100644 --- a/lib/ui/document/document_list.dart +++ b/lib/ui/document/document_list.dart @@ -52,10 +52,9 @@ class DocumentList extends StatelessWidget { final document = viewModel.documentMap[documentId]; void showDialog() => showEntityActionsDialog( - entities: [document], - context: context, - userCompany: userCompany, - onEntityAction: viewModel.onEntityAction); + entities: [document], + context: context, + ); return DocumentListItem( userCompany: userCompany, diff --git a/lib/ui/document/document_screen.dart b/lib/ui/document/document_screen.dart index d6cbbaf75..d0440471c 100644 --- a/lib/ui/document/document_screen.dart +++ b/lib/ui/document/document_screen.dart @@ -45,7 +45,7 @@ class DocumentScreen extends StatelessWidget { .where((document) => value != listUIState.isSelected(document.id)) .toList(); - viewModel.onEntityAction( + handleDocumentAction( context, documents, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( @@ -93,9 +93,7 @@ class DocumentScreen extends StatelessWidget { await showEntityActionsDialog( entities: documents, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearDocumentMultiselect(context: context)); }, diff --git a/lib/ui/document/document_screen_vm.dart b/lib/ui/document/document_screen_vm.dart index 5c7a72057..c2107d26e 100644 --- a/lib/ui/document/document_screen_vm.dart +++ b/lib/ui/document/document_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/document/document_actions.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class DocumentScreenVM { @required this.isInMultiselect, @required this.documentList, @required this.userCompany, - @required this.onEntityAction, @required this.documentMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List documentList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap documentMap; static DocumentScreenVM fromStore(Store store) { @@ -52,9 +49,6 @@ class DocumentScreenVM { state.documentState.list, state.documentListState), userCompany: state.userCompany, isInMultiselect: state.documentListState.isInMultiselect(), - onEntityAction: (BuildContext context, List documents, - EntityAction action) => - handleDocumentAction(context, documents, action), ); } } diff --git a/lib/ui/expense/expense_list.dart b/lib/ui/expense/expense_list.dart index 7818c5bf9..47db2acb4 100644 --- a/lib/ui/expense/expense_list.dart +++ b/lib/ui/expense/expense_list.dart @@ -4,6 +4,7 @@ import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; +import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -62,11 +63,10 @@ class ExpenseList extends StatelessWidget { viewModel.state.vendorState.map[expense.vendorId]; void showDialog() => showEntityActionsDialog( - entities: [expense], - context: context, - userCompany: state.userCompany, - client: client, - onEntityAction: viewModel.onEntityAction); + entities: [expense], + context: context, + client: client, + ); return ExpenseListItem( userCompany: viewModel.state.userCompany, @@ -80,8 +80,7 @@ class ExpenseList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( - context, [expense], action); + handleExpenseAction(context, [expense], action); } }, onLongPress: () async { @@ -89,7 +88,7 @@ class ExpenseList extends StatelessWidget { .longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [expense], + handleExpenseAction(context, [expense], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/expense/expense_list_vm.dart b/lib/ui/expense/expense_list_vm.dart index db860c0b9..7c640eb24 100644 --- a/lib/ui/expense/expense_list_vm.dart +++ b/lib/ui/expense/expense_list_vm.dart @@ -43,7 +43,6 @@ class ExpenseListVM { @required this.onExpenseTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -84,9 +83,6 @@ class ExpenseListVM { onExpenseTap: (context, expense) { store.dispatch(ViewExpense(expenseId: expense.id, context: context)); }, - onEntityAction: (BuildContext context, List expenses, - EntityAction action) => - handleExpenseAction(context, expenses, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -101,8 +97,6 @@ class ExpenseListVM { final bool isLoaded; final Function(BuildContext, ExpenseEntity) onExpenseTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) - onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/expense/expense_screen.dart b/lib/ui/expense/expense_screen.dart index 8af566eb6..dfd15873a 100644 --- a/lib/ui/expense/expense_screen.dart +++ b/lib/ui/expense/expense_screen.dart @@ -46,8 +46,7 @@ class ExpenseScreen extends StatelessWidget { .where((expense) => value != listUIState.isSelected(expense.id)) .toList(); - viewModel.onEntityAction( - context, expenses, EntityAction.toggleMultiselect); + handleExpenseAction(context, expenses, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.expenses, @@ -94,9 +93,7 @@ class ExpenseScreen extends StatelessWidget { await showEntityActionsDialog( entities: expenses, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearExpenseMultiselect(context: context)); }, diff --git a/lib/ui/expense/expense_screen_vm.dart b/lib/ui/expense/expense_screen_vm.dart index 87c33e3f8..c6f7e14df 100644 --- a/lib/ui/expense/expense_screen_vm.dart +++ b/lib/ui/expense/expense_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart'; import 'package:invoiceninja_flutter/redux/expense/expense_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class ExpenseScreenVM { @required this.isInMultiselect, @required this.expenseList, @required this.userCompany, - @required this.onEntityAction, @required this.expenseMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List expenseList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap expenseMap; static ExpenseScreenVM fromStore(Store store) { @@ -56,9 +53,6 @@ class ExpenseScreenVM { state.expenseListState), userCompany: state.userCompany, isInMultiselect: state.expenseListState.isInMultiselect(), - onEntityAction: (BuildContext context, List expenses, - EntityAction action) => - handleExpenseAction(context, expenses, action), ); } } diff --git a/lib/ui/expense/view/expense_view_vm.dart b/lib/ui/expense/view/expense_view_vm.dart index b93d80c1a..93859eef0 100644 --- a/lib/ui/expense/view/expense_view_vm.dart +++ b/lib/ui/expense/view/expense_view_vm.dart @@ -59,7 +59,6 @@ class ExpenseViewVM { factory ExpenseViewVM.fromStore(Store store) { final state = store.state; - final userCompany = state.userCompany; final expense = state.expenseState.map[state.expenseUIState.selectedId] ?? ExpenseEntity(id: state.expenseUIState.selectedId); final vendor = state.vendorState.map[expense.vendorId]; @@ -103,12 +102,9 @@ class ExpenseViewVM { case EntityType.vendor: if (longPress) { showEntityActionsDialog( - userCompany: userCompany, - context: context, - entities: [vendor], - onEntityAction: (BuildContext context, - List vendors, EntityAction action) => - handleVendorAction(context, vendors, action)); + context: context, + entities: [vendor], + ); } else { store.dispatch( ViewVendor(vendorId: vendor.id, context: context)); @@ -116,13 +112,7 @@ class ExpenseViewVM { break; case EntityType.client: if (longPress) { - showEntityActionsDialog( - userCompany: userCompany, - context: context, - entities: [client], - onEntityAction: (BuildContext context, - List clients, EntityAction action) => - handleClientAction(context, clients, action)); + showEntityActionsDialog(context: context, entities: [client]); } else { store.dispatch( ViewClient(clientId: client.id, context: context)); @@ -131,13 +121,7 @@ class ExpenseViewVM { case EntityType.invoice: if (longPress) { showEntityActionsDialog( - userCompany: userCompany, - context: context, - entities: [invoice], - client: client, - onEntityAction: (BuildContext context, - List invoices, EntityAction action) => - handleInvoiceAction(context, invoices, action)); + context: context, entities: [invoice], client: client); } else { store.dispatch( ViewInvoice(invoiceId: invoice.id, context: context)); diff --git a/lib/ui/group/group_list.dart b/lib/ui/group/group_list.dart index 466d35bc9..43c638c60 100644 --- a/lib/ui/group/group_list.dart +++ b/lib/ui/group/group_list.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/group/group_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -48,13 +49,11 @@ class GroupList extends StatelessWidget { itemBuilder: (BuildContext context, index) { final groupId = viewModel.groupList[index]; final group = viewModel.groupMap[groupId]; - final userCompany = viewModel.userCompany; void showDialog() => showEntityActionsDialog( - userCompany: userCompany, - entities: [group], - context: context, - onEntityAction: viewModel.onEntityAction); + entities: [group], + context: context, + ); return GroupListItem( user: viewModel.userCompany.user, @@ -65,8 +64,7 @@ class GroupList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( - context, [group], action); + handleGroupAction(context, [group], action); } }, onLongPress: () async { @@ -74,7 +72,7 @@ class GroupList extends StatelessWidget { .longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [group], + handleGroupAction(context, [group], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/group/group_list_vm.dart b/lib/ui/group/group_list_vm.dart index 1632eb4b6..2b7a67a04 100644 --- a/lib/ui/group/group_list_vm.dart +++ b/lib/ui/group/group_list_vm.dart @@ -44,7 +44,6 @@ class GroupListVM { @required this.onGroupTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -79,9 +78,6 @@ class GroupListVM { onGroupTap: (context, group) { store.dispatch(ViewGroup(groupId: group.id, context: context)); }, - onEntityAction: (BuildContext context, List groups, - EntityAction action) => - handleGroupAction(context, groups, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -95,7 +91,6 @@ class GroupListVM { final bool isLoaded; final Function(BuildContext, GroupEntity) onGroupTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/group/group_screen.dart b/lib/ui/group/group_screen.dart index 6f64f7248..8601d5132 100644 --- a/lib/ui/group/group_screen.dart +++ b/lib/ui/group/group_screen.dart @@ -30,7 +30,6 @@ class GroupSettingsScreen extends StatelessWidget { final store = StoreProvider.of(context); final state = store.state; final company = state.selectedCompany; - final userCompany = state.userCompany; final localization = AppLocalization.of(context); final listUIState = state.uiState.groupUIState.listUIState; final isInMultiselect = listUIState.isInMultiselect(); @@ -47,8 +46,7 @@ class GroupSettingsScreen extends StatelessWidget { .where((group) => value != listUIState.isSelected(group.id)) .toList(); - viewModel.onEntityAction( - context, groups, EntityAction.toggleMultiselect); + handleGroupAction(context, groups, EntityAction.toggleMultiselect); }, isSettings: true, appBarTitle: ListFilter( @@ -96,9 +94,7 @@ class GroupSettingsScreen extends StatelessWidget { await showEntityActionsDialog( entities: groups, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearGroupMultiselect(context: context)); }, diff --git a/lib/ui/group/group_screen_vm.dart b/lib/ui/group/group_screen_vm.dart index aee2d1cd3..81f0d7060 100644 --- a/lib/ui/group/group_screen_vm.dart +++ b/lib/ui/group/group_screen_vm.dart @@ -6,7 +6,6 @@ import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/group_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/group/group_actions.dart'; import 'package:invoiceninja_flutter/redux/group/group_selectors.dart'; import 'package:redux/redux.dart'; @@ -34,14 +33,12 @@ class GroupScreenVM { @required this.isInMultiselect, @required this.groupList, @required this.userCompany, - @required this.onEntityAction, @required this.groupMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List groupList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap groupMap; static GroupScreenVM fromStore(Store store) { @@ -53,9 +50,6 @@ class GroupScreenVM { state.groupState.map, state.groupState.list, state.groupListState), userCompany: state.userCompany, isInMultiselect: state.groupListState.isInMultiselect(), - onEntityAction: (BuildContext context, List groups, - EntityAction action) => - handleGroupAction(context, groups, action), ); } } diff --git a/lib/ui/invoice/invoice_list.dart b/lib/ui/invoice/invoice_list.dart index 971c4d35a..7124c573d 100644 --- a/lib/ui/invoice/invoice_list.dart +++ b/lib/ui/invoice/invoice_list.dart @@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/document/document_selectors.dart'; +import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -56,11 +57,10 @@ class InvoiceList extends StatelessWidget { ClientEntity(); void showDialog() => showEntityActionsDialog( - entities: [invoice], - context: context, - userCompany: state.userCompany, - client: client, - onEntityAction: viewModel.onEntityAction); + entities: [invoice], + context: context, + client: client, + ); return InvoiceListItem( user: viewModel.user, @@ -75,7 +75,7 @@ class InvoiceList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( + handleInvoiceAction( context, [invoice], action); } }, @@ -84,7 +84,7 @@ class InvoiceList extends StatelessWidget { state.uiState.longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [invoice], + handleInvoiceAction(context, [invoice], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/invoice/invoice_list_vm.dart b/lib/ui/invoice/invoice_list_vm.dart index 222466ab7..72b589e21 100644 --- a/lib/ui/invoice/invoice_list_vm.dart +++ b/lib/ui/invoice/invoice_list_vm.dart @@ -48,7 +48,6 @@ class EntityListVM { @required this.onRefreshed, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, - @required this.onEntityAction, }); final AppState state; @@ -64,8 +63,6 @@ class EntityListVM { final Function(BuildContext) onRefreshed; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; - final Function(BuildContext, List, EntityAction) - onEntityAction; } class InvoiceListVM extends EntityListVM { @@ -98,7 +95,6 @@ class InvoiceListVM extends EntityListVM { onRefreshed: onRefreshed, onClearEntityFilterPressed: onClearEntityFilterPressed, onViewEntityFilterPressed: onViewEntityFilterPressed, - onEntityAction: onEntityAction, ); static InvoiceListVM fromStore(Store store) { diff --git a/lib/ui/invoice/invoice_screen.dart b/lib/ui/invoice/invoice_screen.dart index 74a810d36..114ddef65 100644 --- a/lib/ui/invoice/invoice_screen.dart +++ b/lib/ui/invoice/invoice_screen.dart @@ -46,8 +46,7 @@ class InvoiceScreen extends StatelessWidget { .where((invoice) => value != listUIState.isSelected(invoice.id)) .toList(); - viewModel.onEntityAction( - context, invoices, EntityAction.toggleMultiselect); + handleInvoiceAction(context, invoices, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.invoices, @@ -94,9 +93,7 @@ class InvoiceScreen extends StatelessWidget { await showEntityActionsDialog( entities: invoices, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearInvoiceMultiselect(context: context)); }, diff --git a/lib/ui/invoice/invoice_screen_vm.dart b/lib/ui/invoice/invoice_screen_vm.dart index 23e5b4f99..edcaac1db 100644 --- a/lib/ui/invoice/invoice_screen_vm.dart +++ b/lib/ui/invoice/invoice_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; import 'package:invoiceninja_flutter/redux/invoice/invoice_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class InvoiceScreenVM { @required this.isInMultiselect, @required this.invoiceList, @required this.userCompany, - @required this.onEntityAction, @required this.invoiceMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List invoiceList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap invoiceMap; static InvoiceScreenVM fromStore(Store store) { @@ -55,9 +52,6 @@ class InvoiceScreenVM { state.invoiceListState), userCompany: state.userCompany, isInMultiselect: state.invoiceListState.isInMultiselect(), - onEntityAction: (BuildContext context, List invoices, - EntityAction action) => - handleInvoiceAction(context, invoices, action), ); } } diff --git a/lib/ui/invoice/view/invoice_view_vm.dart b/lib/ui/invoice/view/invoice_view_vm.dart index 3314cf679..6c7793c75 100644 --- a/lib/ui/invoice/view/invoice_view_vm.dart +++ b/lib/ui/invoice/view/invoice_view_vm.dart @@ -157,12 +157,9 @@ class InvoiceViewVM extends EntityViewVM { onClientPressed: (BuildContext context, [bool longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [client], - onEntityAction: (BuildContext context, List clients, - EntityAction action) => - handleClientAction(context, clients, action)); + context: context, + entities: [client], + ); } else { store.dispatch(ViewClient(clientId: client.id, context: context)); } @@ -171,13 +168,10 @@ class InvoiceViewVM extends EntityViewVM { [bool longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - client: client, - entities: [payment], - onEntityAction: (BuildContext context, List payments, - EntityAction action) => - handlePaymentAction(context, payments, action)); + context: context, + client: client, + entities: [payment], + ); } else { store.dispatch(ViewPayment(paymentId: payment.id, context: context)); } diff --git a/lib/ui/payment/payment_list.dart b/lib/ui/payment/payment_list.dart index 2773e2471..380e45c47 100644 --- a/lib/ui/payment/payment_list.dart +++ b/lib/ui/payment/payment_list.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; @@ -55,11 +56,10 @@ class PaymentList extends StatelessWidget { paymentClientSelector(paymentId, state); void showDialog() => showEntityActionsDialog( - entities: [payment], - context: context, - userCompany: state.userCompany, - client: client, - onEntityAction: viewModel.onEntityAction); + entities: [payment], + context: context, + client: client, + ); return PaymentListItem( user: viewModel.user, @@ -71,7 +71,7 @@ class PaymentList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( + handlePaymentAction( context, [payment], action); } }, @@ -80,7 +80,7 @@ class PaymentList extends StatelessWidget { state.uiState.longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [payment], + handlePaymentAction(context, [payment], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/payment/payment_list_vm.dart b/lib/ui/payment/payment_list_vm.dart index 2a3b46511..90c0f54f3 100644 --- a/lib/ui/payment/payment_list_vm.dart +++ b/lib/ui/payment/payment_list_vm.dart @@ -43,7 +43,6 @@ class PaymentListVM { @required this.isLoaded, @required this.onPaymentTap, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, @required this.listState, @@ -79,9 +78,6 @@ class PaymentListVM { onPaymentTap: (context, payment) { store.dispatch(ViewPayment(paymentId: payment.id, context: context)); }, - onEntityAction: (BuildContext context, List payments, - EntityAction action) => - handlePaymentAction(context, payments, action), onClearEntityFilterPressed: () => store.dispatch(FilterPaymentsByEntity()), onViewEntityFilterPressed: (BuildContext context) => viewEntityById( @@ -104,6 +100,4 @@ class PaymentListVM { final Function(BuildContext) onRefreshed; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; - final Function(BuildContext, List, EntityAction) - onEntityAction; } diff --git a/lib/ui/payment/payment_screen.dart b/lib/ui/payment/payment_screen.dart index c3be3ff79..9256b7a52 100644 --- a/lib/ui/payment/payment_screen.dart +++ b/lib/ui/payment/payment_screen.dart @@ -42,8 +42,7 @@ class PaymentScreen extends StatelessWidget { .where((payment) => value != listUIState.isSelected(payment.id)) .toList(); - viewModel.onEntityAction( - context, payments, EntityAction.toggleMultiselect); + handlePaymentAction(context, payments, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.payments, @@ -90,9 +89,7 @@ class PaymentScreen extends StatelessWidget { await showEntityActionsDialog( entities: payments, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearPaymentMultiselect(context: context)); }, diff --git a/lib/ui/payment/payment_screen_vm.dart b/lib/ui/payment/payment_screen_vm.dart index 5174a01d1..723632a16 100644 --- a/lib/ui/payment/payment_screen_vm.dart +++ b/lib/ui/payment/payment_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class PaymentScreenVM { @required this.isInMultiselect, @required this.paymentList, @required this.userCompany, - @required this.onEntityAction, @required this.paymentMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List paymentList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap paymentMap; static PaymentScreenVM fromStore(Store store) { @@ -56,9 +53,6 @@ class PaymentScreenVM { state.paymentListState), userCompany: state.userCompany, isInMultiselect: state.paymentListState.isInMultiselect(), - onEntityAction: (BuildContext context, List payments, - EntityAction action) => - handlePaymentAction(context, payments, action), ); } } diff --git a/lib/ui/payment/view/payment_view_vm.dart b/lib/ui/payment/view/payment_view_vm.dart index 427ee62bf..3ef97e238 100644 --- a/lib/ui/payment/view/payment_view_vm.dart +++ b/lib/ui/payment/view/payment_view_vm.dart @@ -66,13 +66,7 @@ class PaymentViewVM { }, onClientPressed: (context, [bool longPress = false]) { if (longPress) { - showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [client], - onEntityAction: (BuildContext context, List clients, - EntityAction action) => - handleClientAction(context, clients, action)); + showEntityActionsDialog(context: context, entities: [client]); } else { store.dispatch(ViewClient(clientId: client.id, context: context)); } @@ -80,13 +74,10 @@ class PaymentViewVM { onInvoicePressed: (context, [bool longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [invoice], - client: client, - onEntityAction: (BuildContext context, List invoice, - EntityAction action) => - handleInvoiceAction(context, invoice, action)); + context: context, + entities: [invoice], + client: client, + ); } else { store.dispatch(ViewInvoice(invoiceId: invoice.id, context: context)); } diff --git a/lib/ui/product/product_list.dart b/lib/ui/product/product_list.dart index e26834b9a..3d5400417 100644 --- a/lib/ui/product/product_list.dart +++ b/lib/ui/product/product_list.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/product/product_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -45,10 +46,9 @@ class ProductList extends StatelessWidget { final product = viewModel.productMap[productId]; void showDialog() => showEntityActionsDialog( - entities: [product], - context: context, - userCompany: viewModel.state.userCompany, - onEntityAction: viewModel.onEntityAction); + entities: [product], + context: context, + ); return ProductListItem( userCompany: viewModel.state.userCompany, @@ -58,7 +58,7 @@ class ProductList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction(context, [product], action); + handleProductAction(context, [product], action); } }, onTap: () => viewModel.onProductTap(context, product), @@ -66,7 +66,7 @@ class ProductList extends StatelessWidget { final longPressIsSelection = store.state.uiState.longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction( + handleProductAction( context, [product], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/product/product_list_vm.dart b/lib/ui/product/product_list_vm.dart index e1c026fde..ab6bb8d95 100644 --- a/lib/ui/product/product_list_vm.dart +++ b/lib/ui/product/product_list_vm.dart @@ -40,7 +40,6 @@ class ProductListVM { @required this.isLoaded, @required this.onProductTap, @required this.onRefreshed, - @required this.onEntityAction, }); static ProductListVM fromStore(Store store) { @@ -67,9 +66,6 @@ class ProductListVM { onProductTap: (context, product) { store.dispatch(ViewProduct(productId: product.id, context: context)); }, - onEntityAction: (BuildContext context, List products, - EntityAction action) => - handleProductAction(context, products, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -82,5 +78,4 @@ class ProductListVM { final bool isLoaded; final Function(BuildContext, ProductEntity) onProductTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) onEntityAction; } diff --git a/lib/ui/product/product_screen.dart b/lib/ui/product/product_screen.dart index 2c6648354..8bc766145 100644 --- a/lib/ui/product/product_screen.dart +++ b/lib/ui/product/product_screen.dart @@ -44,8 +44,7 @@ class ProductScreen extends StatelessWidget { .where((product) => value != listUIState.isSelected(product.id)) .toList(); - viewModel.onEntityAction( - context, products, EntityAction.toggleMultiselect); + handleProductAction(context, products, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.products, @@ -92,9 +91,7 @@ class ProductScreen extends StatelessWidget { await showEntityActionsDialog( entities: products, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearProductMultiselect(context: context)); }, diff --git a/lib/ui/product/product_screen_vm.dart b/lib/ui/product/product_screen_vm.dart index f9f9e828e..38527b818 100644 --- a/lib/ui/product/product_screen_vm.dart +++ b/lib/ui/product/product_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/product/product_actions.dart'; import 'package:invoiceninja_flutter/redux/product/product_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class ProductScreenVM { @required this.isInMultiselect, @required this.productList, @required this.userCompany, - @required this.onEntityAction, @required this.productMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List productList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap productMap; static ProductScreenVM fromStore(Store store) { @@ -52,9 +49,6 @@ class ProductScreenVM { state.productState.list, state.productListState), userCompany: state.userCompany, isInMultiselect: state.productListState.isInMultiselect(), - onEntityAction: (BuildContext context, List products, - EntityAction action) => - handleProductAction(context, products, action), ); } } diff --git a/lib/ui/project/project_list.dart b/lib/ui/project/project_list.dart index fb341a87a..cb2d89fa3 100644 --- a/lib/ui/project/project_list.dart +++ b/lib/ui/project/project_list.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/project/project_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -54,11 +55,10 @@ class ProjectList extends StatelessWidget { ClientEntity(id: project.clientId); void showDialog() => showEntityActionsDialog( - entities: [project], - context: context, - userCompany: viewModel.state.userCompany, - client: client, - onEntityAction: viewModel.onEntityAction); + entities: [project], + context: context, + client: client, + ); return ProjectListItem( userCompany: viewModel.state.userCompany, @@ -72,7 +72,7 @@ class ProjectList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( + handleProjectAction( context, [project], action); } }, @@ -81,7 +81,7 @@ class ProjectList extends StatelessWidget { .longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [project], + handleProjectAction(context, [project], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/project/project_list_vm.dart b/lib/ui/project/project_list_vm.dart index 053c33010..e29e4d5c2 100644 --- a/lib/ui/project/project_list_vm.dart +++ b/lib/ui/project/project_list_vm.dart @@ -44,7 +44,6 @@ class ProjectListVM { @required this.isLoaded, @required this.onProjectTap, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -84,9 +83,6 @@ class ProjectListVM { onProjectTap: (context, project) { store.dispatch(ViewProject(projectId: project.id, context: context)); }, - onEntityAction: (BuildContext context, List projects, - EntityAction action) => - handleProjectAction(context, projects, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -101,8 +97,6 @@ class ProjectListVM { final bool isLoaded; final Function(BuildContext, ProjectEntity) onProjectTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) - onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/project/project_screen.dart b/lib/ui/project/project_screen.dart index 44052d9e5..f1fe68a18 100644 --- a/lib/ui/project/project_screen.dart +++ b/lib/ui/project/project_screen.dart @@ -44,8 +44,7 @@ class ProjectScreen extends StatelessWidget { .where((project) => value != listUIState.isSelected(project.id)) .toList(); - viewModel.onEntityAction( - context, projects, EntityAction.toggleMultiselect); + handleProjectAction(context, projects, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.projects, @@ -92,9 +91,7 @@ class ProjectScreen extends StatelessWidget { await showEntityActionsDialog( entities: projects, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearProjectMultiselect(context: context)); }, diff --git a/lib/ui/project/project_screen_vm.dart b/lib/ui/project/project_screen_vm.dart index 4c1a05070..719142b88 100644 --- a/lib/ui/project/project_screen_vm.dart +++ b/lib/ui/project/project_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/project/project_actions.dart'; import 'package:invoiceninja_flutter/redux/project/project_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class ProjectScreenVM { @required this.isInMultiselect, @required this.projectList, @required this.userCompany, - @required this.onEntityAction, @required this.projectMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List projectList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap projectMap; static ProjectScreenVM fromStore(Store store) { @@ -55,9 +52,6 @@ class ProjectScreenVM { state.clientState.map), userCompany: state.userCompany, isInMultiselect: state.projectListState.isInMultiselect(), - onEntityAction: (BuildContext context, List projects, - EntityAction action) => - handleProjectAction(context, projects, action), ); } } diff --git a/lib/ui/project/view/project_view_vm.dart b/lib/ui/project/view/project_view_vm.dart index 851100e69..e0ffefada 100644 --- a/lib/ui/project/view/project_view_vm.dart +++ b/lib/ui/project/view/project_view_vm.dart @@ -81,12 +81,8 @@ class ProjectViewVM { onClientPressed: (BuildContext context, [bool longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, context: context, - entities: [client], - onEntityAction: (BuildContext context, List clients, - EntityAction action) => - handleClientAction(context, clients, action)); + entities: [client],); } else { store.dispatch(ViewClient(clientId: client.id, context: context)); } diff --git a/lib/ui/quote/quote_list_vm.dart b/lib/ui/quote/quote_list_vm.dart index e2bb26fcc..c67adbec0 100644 --- a/lib/ui/quote/quote_list_vm.dart +++ b/lib/ui/quote/quote_list_vm.dart @@ -64,7 +64,6 @@ class QuoteListVM extends EntityListVM { onRefreshed: onRefreshed, onClearEntityFilterPressed: onClearEntityFilterPressed, onViewEntityFilterPressed: onViewEntityFilterPressed, - onEntityAction: onEntityAction, ); static QuoteListVM fromStore(Store store) { diff --git a/lib/ui/quote/quote_screen.dart b/lib/ui/quote/quote_screen.dart index 414f7de7a..6152331b4 100644 --- a/lib/ui/quote/quote_screen.dart +++ b/lib/ui/quote/quote_screen.dart @@ -46,8 +46,7 @@ class QuoteScreen extends StatelessWidget { .where((quote) => value != listUIState.isSelected(quote.id)) .toList(); - viewModel.onEntityAction( - context, quotes, EntityAction.toggleMultiselect); + handleQuoteAction(context, quotes, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.quotes, @@ -93,11 +92,7 @@ class QuoteScreen extends StatelessWidget { .toList(); await showEntityActionsDialog( - entities: quotes, - userCompany: userCompany, - context: context, - onEntityAction: viewModel.onEntityAction, - multiselect: true); + entities: quotes, context: context, multiselect: true); store.dispatch(ClearQuoteMultiselect(context: context)); }, ), diff --git a/lib/ui/quote/quote_screen_vm.dart b/lib/ui/quote/quote_screen_vm.dart index 161dc9a34..68beb1ad4 100644 --- a/lib/ui/quote/quote_screen_vm.dart +++ b/lib/ui/quote/quote_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class QuoteScreenVM { @required this.isInMultiselect, @required this.quoteList, @required this.userCompany, - @required this.onEntityAction, @required this.quoteMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List quoteList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap quoteMap; static QuoteScreenVM fromStore(Store store) { @@ -52,9 +49,6 @@ class QuoteScreenVM { state.quoteState.list, state.clientState.map, state.quoteListState), userCompany: state.userCompany, isInMultiselect: state.quoteListState.isInMultiselect(), - onEntityAction: (BuildContext context, List quotes, - EntityAction action) => - handleQuoteAction(context, quotes, action), ); } } diff --git a/lib/ui/quote/view/quote_view_vm.dart b/lib/ui/quote/view/quote_view_vm.dart index 77ddf52d0..a537924da 100644 --- a/lib/ui/quote/view/quote_view_vm.dart +++ b/lib/ui/quote/view/quote_view_vm.dart @@ -122,12 +122,9 @@ class QuoteViewVM extends EntityViewVM { onClientPressed: (BuildContext context, [bool longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [client], - onEntityAction: (BuildContext context, List clients, - EntityAction action) => - handleClientAction(context, clients, action)); + context: context, + entities: [client], + ); } else { store.dispatch(ViewClient(clientId: client.id, context: context)); } diff --git a/lib/ui/task/task_list.dart b/lib/ui/task/task_list.dart index 236ba732b..2c20e6603 100644 --- a/lib/ui/task/task_list.dart +++ b/lib/ui/task/task_list.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; +import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -52,11 +53,10 @@ class TaskList extends StatelessWidget { ClientEntity(); void showDialog() => showEntityActionsDialog( - entities: [task], - context: context, - userCompany: state.userCompany, - client: client, - onEntityAction: viewModel.onEntityAction); + entities: [task], + context: context, + client: client, + ); return TaskListItem( userCompany: state.userCompany, @@ -71,8 +71,7 @@ class TaskList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( - context, [task], action); + handleTaskAction(context, [task], action); } }, onLongPress: () async { @@ -80,7 +79,7 @@ class TaskList extends StatelessWidget { state.uiState.longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [task], + handleTaskAction(context, [task], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/task/task_list_vm.dart b/lib/ui/task/task_list_vm.dart index 8dd922cc1..da62538b0 100644 --- a/lib/ui/task/task_list_vm.dart +++ b/lib/ui/task/task_list_vm.dart @@ -45,7 +45,6 @@ class TaskListVM { @required this.onTaskTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -86,9 +85,6 @@ class TaskListVM { onTaskTap: (context, task) { store.dispatch(ViewTask(taskId: task.id, context: context)); }, - onEntityAction: - (BuildContext context, List tasks, EntityAction action) => - handleTaskAction(context, tasks, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -104,7 +100,6 @@ class TaskListVM { final bool isLoaded; final Function(BuildContext, TaskEntity) onTaskTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/task/task_screen.dart b/lib/ui/task/task_screen.dart index 0ca92a277..af4b36cd0 100644 --- a/lib/ui/task/task_screen.dart +++ b/lib/ui/task/task_screen.dart @@ -45,8 +45,7 @@ class TaskScreen extends StatelessWidget { .where((task) => value != listUIState.isSelected(task.id)) .toList(); - viewModel.onEntityAction( - context, tasks, EntityAction.toggleMultiselect); + handleTaskAction(context, tasks, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.tasks, @@ -92,9 +91,7 @@ class TaskScreen extends StatelessWidget { await showEntityActionsDialog( entities: tasks, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearTaskMultiselect(context: context)); }, diff --git a/lib/ui/task/task_screen_vm.dart b/lib/ui/task/task_screen_vm.dart index a2ac04e53..80ea39415 100644 --- a/lib/ui/task/task_screen_vm.dart +++ b/lib/ui/task/task_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; import 'package:invoiceninja_flutter/redux/task/task_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class TaskScreenVM { @required this.isInMultiselect, @required this.taskList, @required this.userCompany, - @required this.onEntityAction, @required this.taskMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List taskList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap taskMap; static TaskScreenVM fromStore(Store store) { @@ -56,9 +53,6 @@ class TaskScreenVM { state.taskListState), userCompany: state.userCompany, isInMultiselect: state.taskListState.isInMultiselect(), - onEntityAction: - (BuildContext context, List tasks, EntityAction action) => - handleTaskAction(context, tasks, action), ); } } diff --git a/lib/ui/task/view/task_view_vm.dart b/lib/ui/task/view/task_view_vm.dart index 5f35c96d7..5941ea4ab 100644 --- a/lib/ui/task/view/task_view_vm.dart +++ b/lib/ui/task/view/task_view_vm.dart @@ -110,12 +110,9 @@ class TaskViewVM { onClientPressed: (BuildContext context, [bool longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [client], - onEntityAction: (BuildContext context, List clients, - EntityAction action) => - handleClientAction(context, clients, action)); + context: context, + entities: [client], + ); } else { store.dispatch(ViewClient(clientId: client.id, context: context)); } @@ -123,13 +120,10 @@ class TaskViewVM { onProjectPressed: (context, [longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [project], - client: client, - onEntityAction: (BuildContext context, List projects, - EntityAction action) => - handleProjectAction(context, projects, action)); + context: context, + entities: [project], + client: client, + ); } else { store.dispatch(ViewProject(projectId: project.id, context: context)); } @@ -137,13 +131,10 @@ class TaskViewVM { onInvoicePressed: (context, [longPress = false]) { if (longPress) { showEntityActionsDialog( - userCompany: state.userCompany, - context: context, - entities: [invoice], - client: client, - onEntityAction: (BuildContext context, List invoices, - EntityAction action) => - handleInvoiceAction(context, invoices, action)); + context: context, + entities: [invoice], + client: client, + ); } else { store.dispatch(ViewInvoice(invoiceId: invoice.id, context: context)); } diff --git a/lib/ui/tax_rate/tax_rate_list.dart b/lib/ui/tax_rate/tax_rate_list.dart index 078a6a042..b7575f064 100644 --- a/lib/ui/tax_rate/tax_rate_list.dart +++ b/lib/ui/tax_rate/tax_rate_list.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/tax_rate/tax_rate_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; @@ -41,13 +42,11 @@ class TaxRateList extends StatelessWidget { itemBuilder: (BuildContext context, index) { final taxRateId = viewModel.taxRateList[index]; final taxRate = viewModel.taxRateMap[taxRateId]; - final userCompany = viewModel.userCompany; void showDialog() => showEntityActionsDialog( - userCompany: userCompany, - entities: [taxRate], - context: context, - onEntityAction: viewModel.onEntityAction); + entities: [taxRate], + context: context, + ); return TaxRateListItem( user: viewModel.userCompany.user, @@ -59,7 +58,7 @@ class TaxRateList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( + handleTaxRateAction( context, [taxRate], action); } }, @@ -68,7 +67,7 @@ class TaxRateList extends StatelessWidget { .longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [taxRate], + handleTaxRateAction(context, [taxRate], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/tax_rate/tax_rate_list_vm.dart b/lib/ui/tax_rate/tax_rate_list_vm.dart index bde933c0a..04b4b2035 100644 --- a/lib/ui/tax_rate/tax_rate_list_vm.dart +++ b/lib/ui/tax_rate/tax_rate_list_vm.dart @@ -43,7 +43,6 @@ class TaxRateListVM { @required this.onTaxRateTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -79,9 +78,6 @@ class TaxRateListVM { onTaxRateTap: (context, taxRate) { store.dispatch(ViewTaxRate(taxRateId: taxRate.id, context: context)); }, - onEntityAction: (BuildContext context, List taxRates, - EntityAction action) => - handleTaxRateAction(context, taxRates, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -95,8 +91,6 @@ class TaxRateListVM { final bool isLoaded; final Function(BuildContext, TaxRateEntity) onTaxRateTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) - onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/tax_rate/tax_rate_screen.dart b/lib/ui/tax_rate/tax_rate_screen.dart index 11119a169..3bb54b760 100644 --- a/lib/ui/tax_rate/tax_rate_screen.dart +++ b/lib/ui/tax_rate/tax_rate_screen.dart @@ -28,7 +28,6 @@ class TaxRateSettingsScreen extends StatelessWidget { final store = StoreProvider.of(context); final state = store.state; final localization = AppLocalization.of(context); - final userCompany = state.userCompany; final listUIState = state.uiState.taxRateUIState.listUIState; final isInMultiselect = listUIState.isInMultiselect(); @@ -45,8 +44,7 @@ class TaxRateSettingsScreen extends StatelessWidget { .where((taxRate) => value != listUIState.isSelected(taxRate.id)) .toList(); - viewModel.onEntityAction( - context, taxRates, EntityAction.toggleMultiselect); + handleTaxRateAction(context, taxRates, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.taxRates, @@ -91,9 +89,7 @@ class TaxRateSettingsScreen extends StatelessWidget { await showEntityActionsDialog( entities: taxRates, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearTaxRateMultiselect(context: context)); }, diff --git a/lib/ui/tax_rate/tax_rate_screen_vm.dart b/lib/ui/tax_rate/tax_rate_screen_vm.dart index 8fff5068c..91362d4a9 100644 --- a/lib/ui/tax_rate/tax_rate_screen_vm.dart +++ b/lib/ui/tax_rate/tax_rate_screen_vm.dart @@ -7,7 +7,6 @@ import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; -import 'package:invoiceninja_flutter/redux/tax_rate/tax_rate_actions.dart'; import 'package:invoiceninja_flutter/redux/tax_rate/tax_rate_selectors.dart'; import 'package:invoiceninja_flutter/ui/tax_rate/tax_rate_screen.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -35,7 +34,6 @@ class TaxRateScreenVM { @required this.isInMultiselect, @required this.taxRateList, @required this.userCompany, - @required this.onEntityAction, @required this.onBackPressed, @required this.taxRateMap, }); @@ -43,7 +41,6 @@ class TaxRateScreenVM { final bool isInMultiselect; final UserCompanyEntity userCompany; final List taxRateList; - final Function(BuildContext, List, EntityAction) onEntityAction; final Function(BuildContext) onBackPressed; final BuiltMap taxRateMap; @@ -56,9 +53,6 @@ class TaxRateScreenVM { state.taxRateState.list, state.taxRateListState), userCompany: state.userCompany, isInMultiselect: state.taxRateListState.isInMultiselect(), - onEntityAction: (BuildContext context, List taxRates, - EntityAction action) => - handleTaxRateAction(context, taxRates, action), onBackPressed: (context) { if (isMobile(context)) { Navigator.pop(context); diff --git a/lib/ui/user/user_list.dart b/lib/ui/user/user_list.dart index ab312851f..18570b014 100644 --- a/lib/ui/user/user_list.dart +++ b/lib/ui/user/user_list.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; +import 'package:invoiceninja_flutter/redux/user/user_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; @@ -46,13 +47,11 @@ class UserList extends StatelessWidget { itemBuilder: (BuildContext context, index) { final userId = viewModel.userList[index]; final user = viewModel.userMap[userId]; - final userCompany = viewModel.userCompany; void showDialog() => showEntityActionsDialog( - userCompany: userCompany, - entities: [user], - context: context, - onEntityAction: viewModel.onEntityAction); + entities: [user], + context: context, + ); return UserListItem( user: user, @@ -62,8 +61,7 @@ class UserList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( - context, [user], action); + handleUserAction(context, [user], action); } }, onLongPress: () => showDialog(), diff --git a/lib/ui/user/user_list_vm.dart b/lib/ui/user/user_list_vm.dart index 5ce699675..289b68bf7 100644 --- a/lib/ui/user/user_list_vm.dart +++ b/lib/ui/user/user_list_vm.dart @@ -43,7 +43,6 @@ class UserListVM { @required this.onUserTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -78,9 +77,6 @@ class UserListVM { onUserTap: (context, user) { store.dispatch(ViewUser(userId: user.id, context: context)); }, - onEntityAction: - (BuildContext context, List users, EntityAction action) => - handleUserAction(context, users, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -94,7 +90,6 @@ class UserListVM { final bool isLoaded; final Function(BuildContext, UserEntity) onUserTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/user/user_screen.dart b/lib/ui/user/user_screen.dart index 7184ebade..c2f4c1695 100644 --- a/lib/ui/user/user_screen.dart +++ b/lib/ui/user/user_screen.dart @@ -95,9 +95,7 @@ class UserScreen extends StatelessWidget { await showEntityActionsDialog( entities: users, - userCompany: userCompany, context: context, - onEntityAction: viewModel.onEntityAction, multiselect: true); store.dispatch(ClearUserMultiselect(context: context)); }, diff --git a/lib/ui/user/user_screen_vm.dart b/lib/ui/user/user_screen_vm.dart index efdd26b7e..d72a10703 100644 --- a/lib/ui/user/user_screen_vm.dart +++ b/lib/ui/user/user_screen_vm.dart @@ -6,7 +6,6 @@ import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/user_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/user/user_actions.dart'; import 'package:invoiceninja_flutter/redux/user/user_selectors.dart'; import 'package:redux/redux.dart'; import 'user_screen.dart'; @@ -33,14 +32,12 @@ class UserScreenVM { @required this.isInMultiselect, @required this.userList, @required this.userCompany, - @required this.onEntityAction, @required this.userMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List userList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap userMap; static UserScreenVM fromStore(Store store) { @@ -52,9 +49,6 @@ class UserScreenVM { state.userState.map, state.userState.list, state.userListState), userCompany: state.userCompany, isInMultiselect: state.userListState.isInMultiselect(), - onEntityAction: - (BuildContext context, List users, EntityAction action) => - handleUserAction(context, users, action), ); } } diff --git a/lib/ui/vendor/vendor_list.dart b/lib/ui/vendor/vendor_list.dart index 0844b836a..8fa0e11e8 100644 --- a/lib/ui/vendor/vendor_list.dart +++ b/lib/ui/vendor/vendor_list.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; @@ -39,15 +40,13 @@ class VendorList extends StatelessWidget { separatorBuilder: (context, index) => ListDivider(), itemCount: viewModel.vendorList.length, itemBuilder: (BuildContext context, index) { - final userCompany = viewModel.state.userCompany; final vendorId = viewModel.vendorList[index]; final vendor = viewModel.vendorMap[vendorId]; void showDialog() => showEntityActionsDialog( - entities: [vendor], - context: context, - userCompany: userCompany, - onEntityAction: viewModel.onEntityAction); + entities: [vendor], + context: context, + ); return VendorListItem( userCompany: viewModel.state.userCompany, @@ -59,8 +58,7 @@ class VendorList extends StatelessWidget { if (action == EntityAction.more) { showDialog(); } else { - viewModel.onEntityAction( - context, [vendor], action); + handleVendorAction(context, [vendor], action); } }, onLongPress: () async { @@ -68,7 +66,7 @@ class VendorList extends StatelessWidget { .longPressSelectionIsDefault ?? true; if (longPressIsSelection && !isInMultiselect) { - viewModel.onEntityAction(context, [vendor], + handleVendorAction(context, [vendor], EntityAction.toggleMultiselect); } else { showDialog(); diff --git a/lib/ui/vendor/vendor_list_vm.dart b/lib/ui/vendor/vendor_list_vm.dart index caa7b31c7..b5b0cec14 100644 --- a/lib/ui/vendor/vendor_list_vm.dart +++ b/lib/ui/vendor/vendor_list_vm.dart @@ -42,7 +42,6 @@ class VendorListVM { @required this.onVendorTap, @required this.listState, @required this.onRefreshed, - @required this.onEntityAction, @required this.onClearEntityFilterPressed, @required this.onViewEntityFilterPressed, }); @@ -77,9 +76,6 @@ class VendorListVM { onVendorTap: (context, vendor) { store.dispatch(ViewVendor(vendorId: vendor.id, context: context)); }, - onEntityAction: (BuildContext context, List vendors, - EntityAction action) => - handleVendorAction(context, vendors, action), onRefreshed: (context) => _handleRefresh(context), ); } @@ -93,7 +89,6 @@ class VendorListVM { final bool isLoaded; final Function(BuildContext, VendorEntity) onVendorTap; final Function(BuildContext) onRefreshed; - final Function(BuildContext, List, EntityAction) onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; } diff --git a/lib/ui/vendor/vendor_screen.dart b/lib/ui/vendor/vendor_screen.dart index 52883c314..43bc5d5d3 100644 --- a/lib/ui/vendor/vendor_screen.dart +++ b/lib/ui/vendor/vendor_screen.dart @@ -44,8 +44,7 @@ class VendorScreen extends StatelessWidget { .where((vendor) => value != listUIState.isSelected(vendor.id)) .toList(); - viewModel.onEntityAction( - context, vendors, EntityAction.toggleMultiselect); + handleVendorAction(context, vendors, EntityAction.toggleMultiselect); }, appBarTitle: ListFilter( title: localization.vendors, @@ -91,11 +90,7 @@ class VendorScreen extends StatelessWidget { .toList(); await showEntityActionsDialog( - entities: vendors, - userCompany: userCompany, - context: context, - onEntityAction: viewModel.onEntityAction, - multiselect: true); + entities: vendors, context: context, multiselect: true); store.dispatch(ClearVendorMultiselect(context: context)); }, ), diff --git a/lib/ui/vendor/vendor_screen_vm.dart b/lib/ui/vendor/vendor_screen_vm.dart index 1fd6dec10..b8ac542aa 100644 --- a/lib/ui/vendor/vendor_screen_vm.dart +++ b/lib/ui/vendor/vendor_screen_vm.dart @@ -5,7 +5,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; -import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart'; import 'package:invoiceninja_flutter/redux/vendor/vendor_selectors.dart'; import 'package:redux/redux.dart'; @@ -33,14 +32,12 @@ class VendorScreenVM { @required this.isInMultiselect, @required this.vendorList, @required this.userCompany, - @required this.onEntityAction, @required this.vendorMap, }); final bool isInMultiselect; final UserCompanyEntity userCompany; final List vendorList; - final Function(BuildContext, List, EntityAction) onEntityAction; final BuiltMap vendorMap; static VendorScreenVM fromStore(Store store) { @@ -52,9 +49,6 @@ class VendorScreenVM { state.vendorState.map, state.vendorState.list, state.vendorListState), userCompany: state.userCompany, isInMultiselect: state.vendorListState.isInMultiselect(), - onEntityAction: (BuildContext context, List vendors, - EntityAction action) => - handleVendorAction(context, vendors, action), ); } }