// Dart imports: import 'dart:async'; // Flutter imports: import 'package:flutter/widgets.dart'; // Package imports: import 'package:built_collection/built_collection.dart'; import 'package:flutter_redux/flutter_redux.dart'; // Project imports: 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'; 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 ViewTaxRateList implements PersistUI { ViewTaxRateList({this.force = false}); final bool force; } class ViewTaxRate implements PersistUI { ViewTaxRate({ @required this.taxRateId, this.force = false, }); final String taxRateId; final bool force; } class EditTaxRate implements PersistUI { EditTaxRate({@required this.taxRate, this.completer, this.force = false}); final TaxRateEntity taxRate; final Completer completer; final bool force; } class UpdateTaxRate implements PersistUI { UpdateTaxRate(this.taxRate); final TaxRateEntity taxRate; } class LoadTaxRate { LoadTaxRate({this.completer, this.taxRateId}); final Completer completer; final String taxRateId; } class LoadTaxRateActivity { LoadTaxRateActivity({this.completer, this.taxRateId}); final Completer completer; final String taxRateId; } class LoadTaxRates { LoadTaxRates({this.completer}); final Completer completer; } class LoadTaxRateRequest implements StartLoading {} class LoadTaxRateFailure implements StopLoading { LoadTaxRateFailure(this.error); final dynamic error; @override String toString() { return 'LoadTaxRateFailure{error: $error}'; } } class LoadTaxRateSuccess implements StopLoading, PersistData { LoadTaxRateSuccess(this.taxRate); final TaxRateEntity taxRate; @override String toString() { return 'LoadTaxRateSuccess{taxRate: $taxRate}'; } } class LoadTaxRatesRequest implements StartLoading {} class LoadTaxRatesFailure implements StopLoading { LoadTaxRatesFailure(this.error); final dynamic error; @override String toString() { return 'LoadTaxRatesFailure{error: $error}'; } } class LoadTaxRatesSuccess implements StopLoading { LoadTaxRatesSuccess(this.taxRates); final BuiltList taxRates; @override String toString() { return 'LoadTaxRatesSuccess{taxRates: $taxRates}'; } } class SaveTaxRateRequest implements StartSaving { SaveTaxRateRequest({this.completer, this.taxRate}); final Completer completer; final TaxRateEntity taxRate; } class SaveTaxRateSuccess implements StopSaving, PersistData, PersistUI { SaveTaxRateSuccess(this.taxRate); final TaxRateEntity taxRate; } class AddTaxRateSuccess implements StopSaving, PersistData, PersistUI { AddTaxRateSuccess(this.taxRate); final TaxRateEntity taxRate; } class SaveTaxRateFailure implements StopSaving { SaveTaxRateFailure(this.error); final Object error; } class ArchiveTaxRateRequest implements StartSaving { ArchiveTaxRateRequest(this.completer, this.taxRateIds); final Completer completer; final List taxRateIds; } class ArchiveTaxRatesSuccess implements StopSaving, PersistData { ArchiveTaxRatesSuccess(this.taxRates); final List taxRates; } class ArchiveTaxRateFailure implements StopSaving { ArchiveTaxRateFailure(this.taxRates); final List taxRates; } class DeleteTaxRateRequest implements StartSaving { DeleteTaxRateRequest(this.completer, this.taxRateIds); final Completer completer; final List taxRateIds; } class DeleteTaxRatesSuccess implements StopSaving, PersistData { DeleteTaxRatesSuccess(this.taxRates); final List taxRates; } class DeleteTaxRateFailure implements StopSaving { DeleteTaxRateFailure(this.taxRates); final List taxRates; } class RestoreTaxRateRequest implements StartSaving { RestoreTaxRateRequest(this.completer, this.taxRateIds); final Completer completer; final List taxRateIds; } class RestoreTaxRatesSuccess implements StopSaving, PersistData { RestoreTaxRatesSuccess(this.taxRates); final List taxRates; } class RestoreTaxRateFailure implements StopSaving { RestoreTaxRateFailure(this.taxRates); final List taxRates; } class FilterTaxRates implements PersistUI { FilterTaxRates(this.filter); final String filter; } class SortTaxRates implements PersistUI, PersistPrefs { SortTaxRates(this.field); final String field; } class FilterTaxRatesByState implements PersistUI { FilterTaxRatesByState(this.state); final EntityState state; } void handleTaxRateAction( BuildContext context, List taxRates, EntityAction action) { if (taxRates.isEmpty) { return; } final store = StoreProvider.of(context); final localization = AppLocalization.of(context); final taxRate = taxRates.first; final taxRateIds = taxRates.map((taxRate) => taxRate.id).toList(); switch (action) { case EntityAction.edit: editEntity(entity: taxRate); break; case EntityAction.restore: final message = taxRateIds.length > 1 ? localization.restoredTaxRates .replaceFirst(':value', taxRateIds.length.toString()) : localization.restoredTaxRate; store.dispatch(RestoreTaxRateRequest( snackBarCompleter(context, message), taxRateIds)); break; case EntityAction.archive: final message = taxRateIds.length > 1 ? localization.archivedTaxRates .replaceFirst(':value', taxRateIds.length.toString()) : localization.archivedTaxRate; store.dispatch(ArchiveTaxRateRequest( snackBarCompleter(context, message), taxRateIds)); break; case EntityAction.delete: final message = taxRateIds.length > 1 ? localization.deletedTaxRates .replaceFirst(':value', taxRateIds.length.toString()) : localization.deletedTaxRate; store.dispatch(DeleteTaxRateRequest( snackBarCompleter(context, message), taxRateIds)); break; case EntityAction.toggleMultiselect: if (!store.state.taxRateListState.isInMultiselect()) { store.dispatch(StartTaxRateMultiselect()); } if (taxRates.isEmpty) { break; } for (final taxRate in taxRates) { if (!store.state.taxRateListState.isSelected(taxRate.id)) { store.dispatch(AddToTaxRateMultiselect(entity: taxRate)); } else { store.dispatch(RemoveFromTaxRateMultiselect(entity: taxRate)); } } break; case EntityAction.more: showEntityActionsDialog( entities: [taxRate], ); break; } } class StartTaxRateMultiselect {} class AddToTaxRateMultiselect { AddToTaxRateMultiselect({@required this.entity}); final BaseEntity entity; } class RemoveFromTaxRateMultiselect { RemoveFromTaxRateMultiselect({@required this.entity}); final BaseEntity entity; } class ClearTaxRateMultiselect {}