Show toast messages

This commit is contained in:
Hillel Coren 2021-01-31 11:52:29 +02:00
parent 7bb66c75b9
commit 48290144c9
24 changed files with 170 additions and 152 deletions

View File

@ -1026,63 +1026,32 @@ void editEntity(
callback: () {
switch (entityType) {
case EntityType.client:
store.dispatch(
EditClient(
store.dispatch(EditClient(
client: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<ClientEntity>(
context,
entity.isNew
? localization.createdClient
: localization.updatedClient)),
);
completer: completer,
));
break;
case EntityType.user:
store.dispatch(
EditUser(
store.dispatch(EditUser(
user: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<UserEntity>(
context,
entity.isNew
? localization.createdUser
: localization.updatedUser)),
);
completer: completer,
));
break;
case EntityType.project:
store.dispatch(EditProject(
project: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<ProjectEntity>(
context,
entity.isNew
? localization.createdProject
: localization.updatedProject)));
project: entity, navigator: navigator, completer: completer));
break;
case EntityType.taxRate:
store.dispatch(EditTaxRate(
taxRate: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<TaxRateEntity>(
context,
entity.isNew
? localization.createdTaxRate
: localization.updatedTaxRate)));
taxRate: entity, navigator: navigator, completer: completer));
break;
case EntityType.companyGateway:
store.dispatch(EditCompanyGateway(
companyGateway: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<CompanyGatewayEntity>(
context,
entity.isNew
? localization.createdCompanyGateway
: localization.updatedCompanyGateway)));
completer: completer));
break;
case EntityType.invoice:
final invoice = entity as InvoiceEntity;
@ -1108,12 +1077,7 @@ void editEntity(
store.dispatch(EditInvoice(
invoice: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdInvoice
: localization.updatedInvoice),
completer: completer,
invoiceItemIndex: subIndex,
));
}
@ -1122,12 +1086,7 @@ void editEntity(
store.dispatch(EditQuote(
quote: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdQuote
: localization.updatedQuote),
completer: completer,
quoteItemIndex: subIndex,
));
break;
@ -1135,24 +1094,12 @@ void editEntity(
store.dispatch(EditVendor(
vendor: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<VendorEntity>(
context,
entity.isNew
? localization.createdVendor
: localization.updatedVendor),
completer: completer,
));
break;
case EntityType.product:
store.dispatch(EditProduct(
product: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<ProductEntity>(
context,
entity.isNew
? localization.createdProduct
: localization.updatedProduct)));
product: entity, navigator: navigator, completer: completer));
break;
case EntityType.task:
store.dispatch(EditTask(
@ -1160,54 +1107,27 @@ void editEntity(
(b) => b..showAsRunning = (entity as TaskEntity).isRunning),
navigator: navigator,
taskTimeIndex: subIndex,
completer: completer ??
snackBarCompleter<TaskEntity>(
context,
entity.isNew
? localization.createdTask
: localization.updatedTask),
completer: completer,
));
break;
case EntityType.expense:
store.dispatch(EditExpense(
expense: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<ExpenseEntity>(
context,
entity.isNew
? localization.createdExpense
: localization.updatedExpense),
));
store.dispatch(
EditExpense(
expense: entity, navigator: navigator, completer: completer),
);
break;
//case EntityType.expenseCategory:
//store.dispatch(EditExpenseCategory(taxRate: entity, navigator: navigator));
//break;
//case EntityType.credit:
//store.dispatch(EditCredit(credit: entity, navigator: navigator));
//break;
case EntityType.payment:
store.dispatch(EditPayment(
payment: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<PaymentEntity>(
context,
entity.isNew
? localization.createdPayment
: localization.updatedPayment),
completer: completer,
));
break;
case EntityType.group:
store.dispatch(EditGroup(
group: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<GroupEntity>(
context,
entity.isNew
? localization.createdGroup
: localization.updatedGroup),
completer: completer,
));
break;
// STARTER: edit - do not remove comment
@ -1215,12 +1135,7 @@ void editEntity(
store.dispatch(EditTaskStatus(
taskStatus: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<TaskStatusEntity>(
context,
entity.isNew
? localization.createdTaskStatus
: localization.updatedTaskStatus),
completer: completer,
));
break;
@ -1228,12 +1143,7 @@ void editEntity(
store.dispatch(EditExpenseCategory(
expenseCategory: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<ExpenseCategoryEntity>(
context,
entity.isNew
? localization.createdExpenseCategory
: localization.updatedExpenseCategory),
completer: completer,
));
break;
@ -1241,12 +1151,7 @@ void editEntity(
store.dispatch(EditRecurringInvoice(
recurringInvoice: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdRecurringInvoice
: localization.updatedRecurringInvoice),
completer: completer,
));
break;
@ -1254,12 +1159,7 @@ void editEntity(
store.dispatch(EditWebhook(
webhook: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<WebhookEntity>(
context,
entity.isNew
? localization.createdWebhook
: localization.updatedWebhook),
completer: completer,
));
break;
@ -1267,12 +1167,7 @@ void editEntity(
store.dispatch(EditToken(
token: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<TokenEntity>(
context,
entity.isNew
? localization.createdToken
: localization.updatedToken),
completer: completer,
));
break;
@ -1280,12 +1175,7 @@ void editEntity(
store.dispatch(EditPaymentTerm(
paymentTerm: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<PaymentTermEntity>(
context,
entity.isNew
? localization.createdPaymentTerm
: localization.updatedPaymentTerm),
completer: completer,
));
break;
@ -1293,12 +1183,7 @@ void editEntity(
store.dispatch(EditDesign(
design: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<DesignEntity>(
context,
entity.isNew
? localization.createdDesign
: localization.updatedDesign),
completer: completer,
));
break;
@ -1306,12 +1191,7 @@ void editEntity(
store.dispatch(EditCredit(
credit: entity,
navigator: navigator,
completer: completer ??
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdCredit
: localization.updatedCredit),
completer: completer,
));
break;
}

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
@ -11,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit.dart';
import 'package:invoiceninja_flutter/ui/client/view/client_view_vm.dart';
import 'package:invoiceninja_flutter/ui/settings/localization_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
@ -98,9 +100,11 @@ class ClientEditVM {
return null;
}
final Completer<ClientEntity> completer = Completer<ClientEntity>();
final localization = AppLocalization.of(context);
store.dispatch(
SaveClientRequest(completer: completer, client: client));
return completer.future.then((savedClient) {
showToast(client.isNew ? localization.createdClient : localization.updatedClient);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ClientViewScreen.route));
if (client.isNew && state.clientUIState.saveCompleter == null) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -68,11 +70,16 @@ class CompanyGatewayEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<CompanyGatewayEntity> completer =
new Completer<CompanyGatewayEntity>();
store.dispatch(SaveCompanyGatewayRequest(
completer: completer, companyGateway: companyGateway));
return completer.future.then((savedCompanyGateway) {
showToast(companyGateway.isNew
? localization.createdCompanyGateway
: localization.updatedCompanyGateway);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(CompanyGatewayViewScreen.route));
if (companyGateway.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/credit/credit_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -79,9 +80,14 @@ class CreditEditVM extends EntityEditVM {
});
return null;
}
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(SaveCreditRequest(completer: completer, credit: credit));
return completer.future.then((savedCredit) {
showToast(credit.isNew
? localization.createdCredit
: localization.updatedCredit);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(CreditViewScreen.route));
if (credit.isNew) {

View File

@ -55,11 +55,15 @@ class DocumentEditVM {
},
onSavePressed: (BuildContext context) {
/*
final localization = AppLocalization.of(context);
final Completer<DocumentEntity> completer =
new Completer<DocumentEntity>();
store.dispatch(
SaveDocumentRequest(completer: completer, document: document));
return completer.future.then((savedDocument) {
showToast(client.isNew
? localization.createdClient
: localization.updatedClient);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(DocumentViewScreen.route));
if (document.isNew) {

View File

@ -2,8 +2,10 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -96,11 +98,16 @@ class ExpenseEditVM {
});
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ExpenseEntity> completer =
new Completer<ExpenseEntity>();
store.dispatch(
SaveExpenseRequest(completer: completer, expense: expense));
return completer.future.then((savedExpense) {
showToast(expense.isNew
? localization.createdExpense
: localization.updatedExpense);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ExpenseViewScreen.route));
if (expense.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -68,11 +70,16 @@ class ExpenseCategoryEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ExpenseCategoryEntity> completer =
new Completer<ExpenseCategoryEntity>();
store.dispatch(SaveExpenseCategoryRequest(
completer: completer, expenseCategory: expenseCategory));
return completer.future.then((savedExpenseCategory) {
showToast(expenseCategory.isNew
? localization.createdExpenseCategory
: localization.updatedExpenseCategory);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ExpenseCategoryViewScreen.route));
if (expenseCategory.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -67,9 +69,14 @@ class GroupEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<GroupEntity> completer = Completer<GroupEntity>();
store.dispatch(SaveGroupRequest(completer: completer, group: group));
return completer.future.then((savedGroup) {
showToast(group.isNew
? localization.createdGroup
: localization.updatedGroup);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(GroupViewScreen.route));
if (group.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
@ -102,10 +103,15 @@ class InvoiceEditVM extends EntityEditVM {
});
return null;
}
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(
SaveInvoiceRequest(completer: completer, invoice: invoice));
return completer.future.then((savedInvoice) {
showToast(invoice.isNew
? localization.createdInvoice
: localization.updatedInvoice);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(InvoiceViewScreen.route));
if (invoice.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/redux/ui/pref_state.dart';
@ -83,10 +84,14 @@ class PaymentEditVM {
});
return null;
}
final localization = AppLocalization.of(context);
final Completer<PaymentEntity> completer = Completer<PaymentEntity>();
store.dispatch(
SavePaymentRequest(completer: completer, payment: payment));
return completer.future.then((savedPayment) {
showToast(payment.isNew
? localization.createdPayment
: localization.updatedPayment);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(PaymentViewScreen.route));
if (payment.isNew) {

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/payment/refund/payment_refund.dart';
import 'package:invoiceninja_flutter/ui/payment/view/payment_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';

View File

@ -2,10 +2,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/payment_term/payment_term_screen.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -68,11 +70,16 @@ class PaymentTermEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<PaymentTermEntity> completer =
new Completer<PaymentTermEntity>();
store.dispatch(SavePaymentTermRequest(
completer: completer, paymentTerm: paymentTerm));
return completer.future.then((savedPaymentTerm) {
showToast(paymentTerm.isNew
? localization.createdPaymentTerm
: localization.updatedPaymentTerm);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(PaymentTermScreen.route));
if (paymentTerm.isNew) {

View File

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
@ -11,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/product/edit/product_edit.dart';
import 'package:invoiceninja_flutter/ui/product/view/product_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
@ -68,11 +70,16 @@ class ProductEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ProductEntity> completer =
new Completer<ProductEntity>();
store.dispatch(
SaveProductRequest(completer: completer, product: product));
return completer.future.then((savedProduct) {
showToast(product.isNew
? localization.createdProduct
: localization.updatedProduct);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ProductViewScreen.route));
if (product.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/client_model.dart';
import 'package:invoiceninja_flutter/data/models/company_model.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
@ -9,6 +10,7 @@ import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/project/view/project_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
@ -88,11 +90,16 @@ class ProjectEditVM {
});
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ProjectEntity> completer =
new Completer<ProjectEntity>();
store.dispatch(
SaveProjectRequest(completer: completer, project: project));
return completer.future.then((savedProject) {
showToast(project.isNew
? localization.createdProject
: localization.updatedProject);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ProjectViewScreen.route));
if (project.isNew && state.projectUIState.saveCompleter == null) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -79,9 +80,14 @@ class QuoteEditVM extends EntityEditVM {
});
return null;
}
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(SaveQuoteRequest(completer: completer, quote: quote));
return completer.future.then((savedQuote) {
showToast(quote.isNew
? localization.createdQuote
: localization.updatedQuote);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(QuoteViewScreen.route));
if (quote.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -79,10 +80,15 @@ class RecurringInvoiceEditVM extends EntityEditVM {
});
return null;
}
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(SaveRecurringInvoiceRequest(
completer: completer, recurringInvoice: recurringInvoice));
return completer.future.then((savedRecurringInvoice) {
showToast(recurringInvoice.isNew
? localization.createdRecurringInvoice
: localization.updatedRecurringInvoice);
if (isMobile(context)) {
store
.dispatch(UpdateCurrentRoute(RecurringInvoiceViewScreen.route));

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -84,9 +85,13 @@ class TaskEditVM {
return null;
}
final localization = AppLocalization.of(context);
final Completer<TaskEntity> completer = new Completer<TaskEntity>();
store.dispatch(SaveTaskRequest(completer: completer, task: task));
return completer.future.then((savedTask) {
showToast(
task.isNew ? localization.createTask : localization.updatedTask);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TaskViewScreen.route));
if (task.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -67,11 +69,16 @@ class TaskStatusEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<TaskStatusEntity> completer =
new Completer<TaskStatusEntity>();
store.dispatch(SaveTaskStatusRequest(
completer: completer, taskStatus: taskStatus));
return completer.future.then((savedTaskStatus) {
showToast(taskStatus.isNew
? localization.createdTaskStatus
: localization.updatedTaskStatus);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TaskStatusViewScreen.route));
if (taskStatus.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -67,11 +69,16 @@ class TaxRateEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<TaxRateEntity> completer =
new Completer<TaxRateEntity>();
store.dispatch(
SaveTaxRateRequest(completer: completer, taxRate: taxRate));
return completer.future.then((savedTaxRate) {
showToast(taxRate.isNew
? localization.createdTaxRate
: localization.updatedTaxRate);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TaxRateViewScreen.route));
if (taxRate.isNew) {

View File

@ -2,11 +2,13 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -74,11 +76,16 @@ class TokenEditVM {
passwordCallback(
context: context,
callback: (password) {
final localization = AppLocalization.of(context);
final Completer<TokenEntity> completer =
new Completer<TokenEntity>();
store.dispatch(SaveTokenRequest(
completer: completer, token: token, password: password));
return completer.future.then((savedToken) {
showToast(token.isNew
? localization.createdToken
: localization.updatedToken);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TokenViewScreen.route));
if (token.isNew) {

View File

@ -2,10 +2,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -70,6 +72,7 @@ class UserEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<UserEntity> completer = new Completer<UserEntity>();
passwordCallback(
context: context,
@ -78,6 +81,9 @@ class UserEditVM {
completer: completer, user: user, password: password));
});
return completer.future.then((savedUser) {
showToast(
user.isNew ? localization.createdUser : localization.updatedUser);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(UserViewScreen.route));
if (user.isNew) {

View File

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/data/models/vendor_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
@ -80,9 +81,14 @@ class VendorEditVM {
});
return null;
}
final localization = AppLocalization.of(context);
final Completer<VendorEntity> completer = new Completer<VendorEntity>();
store.dispatch(SaveVendorRequest(completer: completer, vendor: vendor));
return completer.future.then((savedVendor) {
showToast(vendor.isNew
? localization.createdVendor
: localization.updatedVendor);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(VendorViewScreen.route));
if (vendor.isNew && state.vendorUIState.saveCompleter == null) {

View File

@ -2,10 +2,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -71,11 +73,16 @@ class WebhookEditVM {
));
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<WebhookEntity> completer =
new Completer<WebhookEntity>();
store.dispatch(
SaveWebhookRequest(completer: completer, webhook: webhook));
return completer.future.then((savedWebhook) {
showToast(webhook.isNew
? localization.createdWebhook
: localization.updatedWebhook);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(WebhookViewScreen.route));
if (webhook.isNew) {

View File

@ -13,6 +13,8 @@ import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart';
import 'package:invoiceninja_flutter/data/models/stub_model.dart';
import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class StubEditScreen extends StatelessWidget {
const StubEditScreen({Key key}) : super(key: key);
@ -65,9 +67,13 @@ class StubEditVM {
createEntity(context: context, entity: StubEntity(), force: true);
},
onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<StubEntity> completer = new Completer<StubEntity>();
store.dispatch(SaveStubRequest(completer: completer, stub: stub));
return completer.future.then((savedStub) {
showToast(stub.isNew
? localization.createdStub
: localization.updatedStub);
if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(StubViewScreen.route));
if (stub.isNew) {