import 'dart:async'; import 'package:built_collection/built_collection.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/payment_term_model.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class ViewPaymentTermList implements PersistUI { ViewPaymentTermList({ this.force = false, }); final bool force; } class ViewPaymentTerm implements PersistUI, PersistPrefs { ViewPaymentTerm({ @required this.paymentTermId, this.force = false, }); final String paymentTermId; final bool force; } class EditPaymentTerm implements PersistUI, PersistPrefs { EditPaymentTerm( {@required this.paymentTerm, this.completer, this.cancelCompleter, this.force = false}); final PaymentTermEntity paymentTerm; final Completer completer; final Completer cancelCompleter; final bool force; } class UpdatePaymentTerm implements PersistUI { UpdatePaymentTerm(this.paymentTerm); final PaymentTermEntity paymentTerm; } class LoadPaymentTerm { LoadPaymentTerm({this.completer, this.paymentTermId}); final Completer completer; final String paymentTermId; } class LoadPaymentTermActivity { LoadPaymentTermActivity({this.completer, this.paymentTermId}); final Completer completer; final String paymentTermId; } class LoadPaymentTerms { LoadPaymentTerms({this.completer}); final Completer completer; } class LoadPaymentTermRequest implements StartLoading {} class LoadPaymentTermFailure implements StopLoading { LoadPaymentTermFailure(this.error); final dynamic error; @override String toString() { return 'LoadPaymentTermFailure{error: $error}'; } } class LoadPaymentTermSuccess implements StopLoading, PersistData { LoadPaymentTermSuccess(this.paymentTerm); final PaymentTermEntity paymentTerm; @override String toString() { return 'LoadPaymentTermSuccess{paymentTerm: $paymentTerm}'; } } class LoadPaymentTermsRequest implements StartLoading {} class LoadPaymentTermsFailure implements StopLoading { LoadPaymentTermsFailure(this.error); final dynamic error; @override String toString() { return 'LoadPaymentTermsFailure{error: $error}'; } } class LoadPaymentTermsSuccess implements StopLoading { LoadPaymentTermsSuccess(this.paymentTerms); final BuiltList paymentTerms; @override String toString() { return 'LoadPaymentTermsSuccess{paymentTerms: $paymentTerms}'; } } class SavePaymentTermRequest implements StartSaving { SavePaymentTermRequest({this.completer, this.paymentTerm}); final Completer completer; final PaymentTermEntity paymentTerm; } class SavePaymentTermSuccess implements StopSaving, PersistData, PersistUI { SavePaymentTermSuccess(this.paymentTerm); final PaymentTermEntity paymentTerm; } class AddPaymentTermSuccess implements StopSaving, PersistData, PersistUI { AddPaymentTermSuccess(this.paymentTerm); final PaymentTermEntity paymentTerm; } class SavePaymentTermFailure implements StopSaving { SavePaymentTermFailure(this.error); final Object error; } class ArchivePaymentTermsRequest implements StartSaving { ArchivePaymentTermsRequest(this.completer, this.paymentTermIds); final Completer completer; final List paymentTermIds; } class ArchivePaymentTermsSuccess implements StopSaving, PersistData { ArchivePaymentTermsSuccess(this.paymentTerms); final List paymentTerms; } class ArchivePaymentTermsFailure implements StopSaving { ArchivePaymentTermsFailure(this.paymentTerms); final List paymentTerms; } class DeletePaymentTermsRequest implements StartSaving { DeletePaymentTermsRequest(this.completer, this.paymentTermIds); final Completer completer; final List paymentTermIds; } class DeletePaymentTermsSuccess implements StopSaving, PersistData { DeletePaymentTermsSuccess(this.paymentTerms); final List paymentTerms; } class DeletePaymentTermsFailure implements StopSaving { DeletePaymentTermsFailure(this.paymentTerms); final List paymentTerms; } class RestorePaymentTermsRequest implements StartSaving { RestorePaymentTermsRequest(this.completer, this.paymentTermIds); final Completer completer; final List paymentTermIds; } class RestorePaymentTermsSuccess implements StopSaving, PersistData { RestorePaymentTermsSuccess(this.paymentTerms); final List paymentTerms; } class RestorePaymentTermsFailure implements StopSaving { RestorePaymentTermsFailure(this.paymentTerms); final List paymentTerms; } class FilterPaymentTerms implements PersistUI { FilterPaymentTerms(this.filter); final String filter; } class SortPaymentTerms implements PersistUI, PersistPrefs { SortPaymentTerms(this.field); final String field; } class FilterPaymentTermsByState implements PersistUI { FilterPaymentTermsByState(this.state); final EntityState state; } class FilterPaymentTermsByCustom1 implements PersistUI { FilterPaymentTermsByCustom1(this.value); final String value; } class FilterPaymentTermsByCustom2 implements PersistUI { FilterPaymentTermsByCustom2(this.value); final String value; } class FilterPaymentTermsByCustom3 implements PersistUI { FilterPaymentTermsByCustom3(this.value); final String value; } class FilterPaymentTermsByCustom4 implements PersistUI { FilterPaymentTermsByCustom4(this.value); final String value; } void handlePaymentTermAction( BuildContext context, List paymentTerms, EntityAction action) { if (paymentTerms.isEmpty) { return; } final store = StoreProvider.of(context); //final state = store.state; //final CompanyEntity company = state.company; final localization = AppLocalization.of(context); final paymentTerm = paymentTerms.first as PaymentTermEntity; final paymentTermIds = paymentTerms.map((paymentTerm) => paymentTerm.id).toList(); switch (action) { case EntityAction.edit: editEntity(context: context, entity: paymentTerm); break; case EntityAction.restore: final message = paymentTermIds.length > 1 ? localization.restoredPaymentTerms .replaceFirst(':value', paymentTermIds.length.toString()) : localization.restoredPaymentTerm; store.dispatch(RestorePaymentTermsRequest( snackBarCompleter(context, message), paymentTermIds)); break; case EntityAction.archive: final message = paymentTermIds.length > 1 ? localization.archivedPaymentTerms .replaceFirst(':value', paymentTermIds.length.toString()) : localization.archivedPaymentTerm; store.dispatch(ArchivePaymentTermsRequest( snackBarCompleter(context, message), paymentTermIds)); break; case EntityAction.delete: final message = paymentTermIds.length > 1 ? localization.deletedPaymentTerms .replaceFirst(':value', paymentTermIds.length.toString()) : localization.deletedPaymentTerm; store.dispatch(DeletePaymentTermsRequest( snackBarCompleter(context, message), paymentTermIds)); break; case EntityAction.toggleMultiselect: if (!store.state.paymentTermListState.isInMultiselect()) { store.dispatch(StartPaymentTermMultiselect()); } if (paymentTerms.isEmpty) { break; } for (final paymentTerm in paymentTerms) { if (!store.state.paymentTermListState.isSelected(paymentTerm.id)) { store.dispatch(AddToPaymentTermMultiselect(entity: paymentTerm)); } else { store.dispatch(RemoveFromPaymentTermMultiselect(entity: paymentTerm)); } } break; case EntityAction.more: showEntityActionsDialog( entities: [paymentTerm], ); break; } } class StartPaymentTermMultiselect { StartPaymentTermMultiselect(); } class AddToPaymentTermMultiselect { AddToPaymentTermMultiselect({@required this.entity}); final BaseEntity entity; } class RemoveFromPaymentTermMultiselect { RemoveFromPaymentTermMultiselect({@required this.entity}); final BaseEntity entity; } class ClearPaymentTermMultiselect { ClearPaymentTermMultiselect(); }