This commit is contained in:
Hillel Coren 2019-06-14 12:17:56 +03:00
parent e1cf7150af
commit 4ad28040c7
4 changed files with 154 additions and 184 deletions

View File

@ -1,8 +1,15 @@
import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:built_collection/built_collection.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class ViewClientList implements PersistUI {
ViewClientList(this.context);
@ -244,3 +251,46 @@ class FilterClientsByCustom2 implements PersistUI {
final String value;
}
void handleClientAction(
ClientEntity client, EntityAction action, BuildContext context) {
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final CompanyEntity company = state.selectedCompany;
final localization = AppLocalization.of(context);
switch (action) {
case EntityAction.edit:
store.dispatch(EditClient(context: context, client: client));
break;
case EntityAction.newInvoice:
store.dispatch(EditInvoice(
invoice: InvoiceEntity(company: company)
.rebuild((b) => b.clientId = client.id),
context: context));
break;
case EntityAction.newExpense:
store.dispatch(EditExpense(
expense: ExpenseEntity(
company: company, client: client, uiState: state.uiState),
context: context));
break;
case EntityAction.enterPayment:
store.dispatch(EditPayment(
payment: PaymentEntity(company: company)
.rebuild((b) => b.clientId = client.id),
context: context));
break;
case EntityAction.restore:
store.dispatch(RestoreClientRequest(
snackBarCompleter(context, localization.restoredClient), client.id));
break;
case EntityAction.archive:
store.dispatch(ArchiveClientRequest(
snackBarCompleter(context, localization.archivedClient), client.id));
break;
case EntityAction.delete:
store.dispatch(DeleteClientRequest(
snackBarCompleter(context, localization.deletedClient), client.id));
break;
}
}

View File

@ -91,6 +91,7 @@ class ClientList extends StatelessWidget {
if (action == EntityAction.more) {
_showMenu(context, client, viewModel.user);
} else {
Navigator.of(context).pop();
viewModel.onEntityAction(context, client, action);
}
},

View File

@ -5,9 +5,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:redux/redux.dart';
@ -80,50 +77,9 @@ class ClientListVM {
onClientTap: (context, client) {
store.dispatch(ViewClient(clientId: client.id, context: context));
},
onEntityAction: (context, client, action) {
final localization = AppLocalization.of(context);
switch (action) {
case EntityAction.edit:
store.dispatch(EditClient(context: context, client: client));
break;
case EntityAction.newInvoice:
store.dispatch(EditInvoice(
invoice: InvoiceEntity(company: state.selectedCompany)
.rebuild((b) => b.clientId = client.id),
context: context));
break;
case EntityAction.newExpense:
store.dispatch(EditExpense(
expense: ExpenseEntity(
company: state.selectedCompany,
client: client,
uiState: state.uiState),
context: context));
break;
case EntityAction.enterPayment:
store.dispatch(EditPayment(
payment: PaymentEntity(company: state.selectedCompany)
.rebuild((b) => b.clientId = client.id),
context: context));
break;
case EntityAction.restore:
store.dispatch(RestoreClientRequest(
snackBarCompleter(context, localization.restoredClient),
client.id));
break;
case EntityAction.archive:
store.dispatch(ArchiveClientRequest(
snackBarCompleter(context, localization.archivedClient),
client.id));
break;
case EntityAction.delete:
store.dispatch(DeleteClientRequest(
snackBarCompleter(context, localization.deletedClient),
client.id));
break;
}
return false;
},
onEntityAction:
(BuildContext context, ClientEntity client, EntityAction action) =>
handleClientAction(client, action, context),
onRefreshed: (context) => _handleRefresh(context),
);
}

View File

@ -77,8 +77,8 @@ class ClientViewVM {
company: state.selectedCompany,
onEditPressed: (BuildContext context) {
final Completer<ClientEntity> completer = Completer<ClientEntity>();
store.dispatch(EditClient(
client: client, context: context, completer: completer));
store.dispatch(
EditClient(client: client, context: context, completer: completer));
completer.future.then((client) {
Scaffold.of(context).showSnackBar(SnackBar(
content: SnackBarRow(
@ -130,8 +130,8 @@ class ClientViewVM {
if (longPress) {
store.dispatch(EditProject(
context: context,
project: ProjectEntity()
.rebuild((b) => b..clientId = client.id)));
project:
ProjectEntity().rebuild((b) => b..clientId = client.id)));
} else {
store.dispatch(FilterProjectsByEntity(
entityId: client.id, entityType: EntityType.client));
@ -173,46 +173,9 @@ class ClientViewVM {
store.dispatch(UpdateCurrentRoute(ClientScreen.route));
}
},
onActionSelected: (BuildContext context, EntityAction action) {
final localization = AppLocalization.of(context);
switch (action) {
case EntityAction.newInvoice:
store.dispatch(EditInvoice(
invoice: InvoiceEntity(company: state.selectedCompany)
.rebuild((b) => b.clientId = client.id),
context: context));
break;
case EntityAction.newExpense:
store.dispatch(EditExpense(
expense: ExpenseEntity(
company: state.selectedCompany,
client: client,
uiState: state.uiState),
context: context));
break;
case EntityAction.enterPayment:
store.dispatch(EditPayment(
payment: PaymentEntity(company: state.selectedCompany)
.rebuild((b) => b.clientId = client.id),
context: context));
break;
case EntityAction.archive:
store.dispatch(ArchiveClientRequest(
popCompleter(context, localization.archivedClient),
client.id));
break;
case EntityAction.delete:
store.dispatch(DeleteClientRequest(
popCompleter(context, localization.deletedClient),
client.id));
break;
case EntityAction.restore:
store.dispatch(RestoreClientRequest(
snackBarCompleter(context, localization.restoredClient),
client.id));
break;
}
});
onActionSelected: (BuildContext context, EntityAction action) =>
handleClientAction(client, action, context),
);
}
final ClientEntity client;