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/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 ViewRecurringInvoiceList extends AbstractNavigatorAction implements PersistUI, StopLoading { ViewRecurringInvoiceList({ @required NavigatorState navigator, this.force = false, }) : super(navigator: navigator); final bool force; } class ViewRecurringInvoice extends AbstractNavigatorAction implements PersistUI, PersistPrefs { ViewRecurringInvoice({ @required NavigatorState navigator, @required this.recurringInvoiceId, this.force = false, }) : super(navigator: navigator); final String recurringInvoiceId; final bool force; } class EditRecurringInvoice extends AbstractNavigatorAction implements PersistUI, PersistPrefs { EditRecurringInvoice( {@required this.recurringInvoice, @required NavigatorState navigator, this.completer, this.cancelCompleter, this.itemIndex, this.force = false}) : super(navigator: navigator); final InvoiceEntity recurringInvoice; final int itemIndex; final Completer completer; final Completer cancelCompleter; final bool force; } class ShowEmailRecurringInvoice { ShowEmailRecurringInvoice({this.invoice, this.context, this.completer}); final InvoiceEntity invoice; final BuildContext context; final Completer completer; } class EditRecurringInvoiceItem implements PersistUI { EditRecurringInvoiceItem([this.itemIndex]); final int itemIndex; } class UpdateRecurringInvoice implements PersistUI { UpdateRecurringInvoice(this.recurringInvoice); final InvoiceEntity recurringInvoice; } class UpdateRecurringInvoiceClient implements PersistUI { UpdateRecurringInvoiceClient({this.client}); final ClientEntity client; } class LoadRecurringInvoice { LoadRecurringInvoice({this.completer, this.recurringInvoiceId}); final Completer completer; final String recurringInvoiceId; } class LoadRecurringInvoiceActivity { LoadRecurringInvoiceActivity({this.completer, this.recurringInvoiceId}); final Completer completer; final String recurringInvoiceId; } class LoadRecurringInvoices { LoadRecurringInvoices({this.completer}); final Completer completer; } class LoadRecurringInvoiceRequest implements StartLoading {} class LoadRecurringInvoiceFailure implements StopLoading { LoadRecurringInvoiceFailure(this.error); final dynamic error; @override String toString() { return 'LoadRecurringInvoiceFailure{error: $error}'; } } class LoadRecurringInvoiceSuccess implements StopLoading, PersistData { LoadRecurringInvoiceSuccess(this.recurringInvoice); final InvoiceEntity recurringInvoice; @override String toString() { return 'LoadRecurringInvoiceSuccess{recurringInvoice: $recurringInvoice}'; } } class LoadRecurringInvoicesRequest implements StartLoading {} class LoadRecurringInvoicesFailure implements StopLoading { LoadRecurringInvoicesFailure(this.error); final dynamic error; @override String toString() { return 'LoadRecurringInvoicesFailure{error: $error}'; } } class LoadRecurringInvoicesSuccess implements StopLoading { LoadRecurringInvoicesSuccess(this.recurringInvoices); final BuiltList recurringInvoices; @override String toString() { return 'LoadRecurringInvoicesSuccess{recurringInvoices: $recurringInvoices}'; } } class AddRecurringInvoiceContact implements PersistUI { AddRecurringInvoiceContact({this.contact, this.invitation}); final ContactEntity contact; final InvitationEntity invitation; } class RemoveRecurringInvoiceContact implements PersistUI { RemoveRecurringInvoiceContact({this.invitation}); final InvitationEntity invitation; } class SaveRecurringInvoiceRequest implements StartSaving { SaveRecurringInvoiceRequest({this.completer, this.recurringInvoice}); final Completer completer; final InvoiceEntity recurringInvoice; } class SaveRecurringInvoiceSuccess implements StopSaving, PersistData, PersistUI { SaveRecurringInvoiceSuccess(this.recurringInvoice); final InvoiceEntity recurringInvoice; } class AddRecurringInvoiceSuccess implements StopSaving, PersistData, PersistUI { AddRecurringInvoiceSuccess(this.recurringInvoice); final InvoiceEntity recurringInvoice; } class AddQuoteItem implements PersistUI { AddQuoteItem({this.quoteItem}); final InvoiceItemEntity quoteItem; } class AddRecurringInvoiceItem implements PersistUI { AddRecurringInvoiceItem({this.invoiceItem}); final InvoiceItemEntity invoiceItem; } class AddRecurringInvoiceItems implements PersistUI { AddRecurringInvoiceItems(this.items); final List items; } class UpdateRecurringInvoiceItem implements PersistUI { UpdateRecurringInvoiceItem({this.index, this.item}); final int index; final InvoiceItemEntity item; } class DeleteRecurringInvoiceItem implements PersistUI { DeleteRecurringInvoiceItem(this.index); final int index; } class SaveRecurringInvoiceFailure implements StopSaving { SaveRecurringInvoiceFailure(this.error); final Object error; } class ArchiveRecurringInvoicesRequest implements StartSaving { ArchiveRecurringInvoicesRequest(this.completer, this.recurringInvoiceIds); final Completer completer; final List recurringInvoiceIds; } class ArchiveRecurringInvoicesSuccess implements StopSaving, PersistData { ArchiveRecurringInvoicesSuccess(this.recurringInvoices); final List recurringInvoices; } class ArchiveRecurringInvoicesFailure implements StopSaving { ArchiveRecurringInvoicesFailure(this.recurringInvoices); final List recurringInvoices; } class DeleteRecurringInvoicesRequest implements StartSaving { DeleteRecurringInvoicesRequest(this.completer, this.recurringInvoiceIds); final Completer completer; final List recurringInvoiceIds; } class DeleteRecurringInvoicesSuccess implements StopSaving, PersistData { DeleteRecurringInvoicesSuccess(this.recurringInvoices); final List recurringInvoices; } class DeleteRecurringInvoicesFailure implements StopSaving { DeleteRecurringInvoicesFailure(this.recurringInvoices); final List recurringInvoices; } class RestoreRecurringInvoicesRequest implements StartSaving { RestoreRecurringInvoicesRequest(this.completer, this.recurringInvoiceIds); final Completer completer; final List recurringInvoiceIds; } class RestoreRecurringInvoicesSuccess implements StopSaving, PersistData { RestoreRecurringInvoicesSuccess(this.recurringInvoices); final List recurringInvoices; } class RestoreRecurringInvoicesFailure implements StopSaving { RestoreRecurringInvoicesFailure(this.recurringInvoices); final List recurringInvoices; } class FilterRecurringInvoices implements PersistUI { FilterRecurringInvoices(this.filter); final String filter; } class SortRecurringInvoices implements PersistUI { SortRecurringInvoices(this.field); final String field; } class FilterRecurringInvoicesByState implements PersistUI { FilterRecurringInvoicesByState(this.state); final EntityState state; } class FilterRecurringInvoiceDropdown { FilterRecurringInvoiceDropdown(this.filter); final String filter; } class FilterRecurringInvoicesByCustom1 implements PersistUI { FilterRecurringInvoicesByCustom1(this.value); final String value; } class FilterRecurringInvoicesByCustom2 implements PersistUI { FilterRecurringInvoicesByCustom2(this.value); final String value; } class FilterRecurringInvoicesByCustom3 implements PersistUI { FilterRecurringInvoicesByCustom3(this.value); final String value; } class FilterRecurringInvoicesByCustom4 implements PersistUI { FilterRecurringInvoicesByCustom4(this.value); final String value; } void handleRecurringInvoiceAction(BuildContext context, List recurringInvoices, EntityAction action) { if (recurringInvoices.isEmpty) { return; } final store = StoreProvider.of(context); final localization = AppLocalization.of(context); final recurringInvoice = recurringInvoices.first as InvoiceEntity; final recurringInvoiceIds = recurringInvoices.map((recurringInvoice) => recurringInvoice.id).toList(); switch (action) { case EntityAction.edit: editEntity(context: context, entity: recurringInvoice); break; case EntityAction.restore: store.dispatch(RestoreRecurringInvoicesRequest( snackBarCompleter( context, localization.restoredRecurringInvoice), recurringInvoiceIds)); break; case EntityAction.archive: store.dispatch(ArchiveRecurringInvoicesRequest( snackBarCompleter( context, localization.archivedRecurringInvoice), recurringInvoiceIds)); break; case EntityAction.delete: store.dispatch(DeleteRecurringInvoicesRequest( snackBarCompleter( context, localization.deletedRecurringInvoice), recurringInvoiceIds)); break; case EntityAction.toggleMultiselect: if (!store.state.recurringInvoiceListState.isInMultiselect()) { store.dispatch(StartRecurringInvoiceMultiselect()); } if (recurringInvoices.isEmpty) { break; } for (final recurringInvoice in recurringInvoices) { if (!store.state.recurringInvoiceListState .isSelected(recurringInvoice.id)) { store.dispatch( AddToRecurringInvoiceMultiselect(entity: recurringInvoice)); } else { store.dispatch( RemoveFromRecurringInvoiceMultiselect(entity: recurringInvoice)); } } break; case EntityAction.more: showEntityActionsDialog( entities: [recurringInvoice], context: context, ); break; } } class StartRecurringInvoiceMultiselect { StartRecurringInvoiceMultiselect(); } class AddToRecurringInvoiceMultiselect { AddToRecurringInvoiceMultiselect({@required this.entity}); final BaseEntity entity; } class RemoveFromRecurringInvoiceMultiselect { RemoveFromRecurringInvoiceMultiselect({@required this.entity}); final BaseEntity entity; } class ClearRecurringInvoiceMultiselect { ClearRecurringInvoiceMultiselect(); }