import 'package:redux/redux.dart'; import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/company/company_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/entity_ui_state.dart'; import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_state.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; EntityUIState recurringInvoiceUIReducer( RecurringInvoiceUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState .replace(recurringInvoiceListReducer(state.listUIState, action)) ..editing.replace(editingReducer(state.editing, action)) ..selectedId = selectedIdReducer(state.selectedId, action)); } Reducer selectedIdReducer = combineReducers([ TypedReducer( (String selectedId, dynamic action) => action.recurringInvoiceId), TypedReducer( (String selectedId, dynamic action) => action.recurringInvoice.id), TypedReducer( (selectedId, action) => action.clearSelection ? '' : selectedId), TypedReducer( (selectedId, action) => ''), TypedReducer( (selectedId, action) => ''), TypedReducer((selectedId, action) => ''), TypedReducer((selectedId, action) => action.clearSelection ? '' : action.entityType == EntityType.recurringInvoice ? action.entityId : selectedId), ]); final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer( (recurringInvoices, action) { return action.recurringInvoices[0]; }), TypedReducer( (recurringInvoices, action) { return action.recurringInvoices[0]; }), TypedReducer( (recurringInvoices, action) { return action.recurringInvoices[0]; }), TypedReducer(_updateEditing), TypedReducer( (recurringInvoice, action) { return action.recurringInvoice.rebuild((b) => b..isChanged = true); }), TypedReducer(_clearEditing), ]); InvoiceEntity _clearEditing(InvoiceEntity recurringInvoice, dynamic action) { return InvoiceEntity(); } InvoiceEntity _updateEditing(InvoiceEntity recurringInvoice, dynamic action) { return action.recurringInvoice; } final recurringInvoiceListReducer = combineReducers([ TypedReducer(_sortRecurringInvoices), TypedReducer( _filterRecurringInvoicesByState), TypedReducer(_filterRecurringInvoices), TypedReducer( _filterRecurringInvoicesByCustom1), TypedReducer( _filterRecurringInvoicesByCustom2), TypedReducer( _startListMultiselect), TypedReducer( _addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer( _clearListMultiselect), ]); ListUIState _filterRecurringInvoicesByCustom1( ListUIState recurringInvoiceListState, FilterRecurringInvoicesByCustom1 action) { if (recurringInvoiceListState.custom1Filters.contains(action.value)) { return recurringInvoiceListState .rebuild((b) => b..custom1Filters.remove(action.value)); } else { return recurringInvoiceListState .rebuild((b) => b..custom1Filters.add(action.value)); } } ListUIState _filterRecurringInvoicesByCustom2( ListUIState recurringInvoiceListState, FilterRecurringInvoicesByCustom2 action) { if (recurringInvoiceListState.custom2Filters.contains(action.value)) { return recurringInvoiceListState .rebuild((b) => b..custom2Filters.remove(action.value)); } else { return recurringInvoiceListState .rebuild((b) => b..custom2Filters.add(action.value)); } } ListUIState _filterRecurringInvoicesByState( ListUIState recurringInvoiceListState, FilterRecurringInvoicesByState action) { if (recurringInvoiceListState.stateFilters.contains(action.state)) { return recurringInvoiceListState .rebuild((b) => b..stateFilters.remove(action.state)); } else { return recurringInvoiceListState .rebuild((b) => b..stateFilters.add(action.state)); } } ListUIState _filterRecurringInvoices( ListUIState recurringInvoiceListState, FilterRecurringInvoices action) { return recurringInvoiceListState.rebuild((b) => b ..filter = action.filter ..filterClearedAt = action.filter == null ? DateTime.now().millisecondsSinceEpoch : recurringInvoiceListState.filterClearedAt); } ListUIState _sortRecurringInvoices( ListUIState recurringInvoiceListState, SortRecurringInvoices action) { return recurringInvoiceListState.rebuild((b) => b ..sortAscending = b.sortField != action.field || !b.sortAscending ..sortField = action.field); } ListUIState _startListMultiselect( ListUIState productListState, StartRecurringInvoiceMultiselect action) { return productListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState productListState, AddToRecurringInvoiceMultiselect action) { return productListState.rebuild((b) => b..selectedIds.add(action.entity.id)); } ListUIState _removeFromListMultiselect(ListUIState productListState, RemoveFromRecurringInvoiceMultiselect action) { return productListState .rebuild((b) => b..selectedIds.remove(action.entity.id)); } ListUIState _clearListMultiselect( ListUIState productListState, ClearRecurringInvoiceMultiselect action) { return productListState.rebuild((b) => b..selectedIds = null); } final recurringInvoicesReducer = combineReducers([ TypedReducer( _updateRecurringInvoice), TypedReducer( _addRecurringInvoice), TypedReducer( _setLoadedRecurringInvoices), TypedReducer( _setLoadedRecurringInvoice), TypedReducer(_setLoadedCompany), TypedReducer( _archiveRecurringInvoiceSuccess), TypedReducer( _deleteRecurringInvoiceSuccess), TypedReducer( _restoreRecurringInvoiceSuccess), ]); RecurringInvoiceState _archiveRecurringInvoiceSuccess( RecurringInvoiceState recurringInvoiceState, ArchiveRecurringInvoicesSuccess action) { return recurringInvoiceState.rebuild((b) { for (final recurringInvoice in action.recurringInvoices) { b.map[recurringInvoice.id] = recurringInvoice; } }); } RecurringInvoiceState _deleteRecurringInvoiceSuccess( RecurringInvoiceState recurringInvoiceState, DeleteRecurringInvoicesSuccess action) { return recurringInvoiceState.rebuild((b) { for (final recurringInvoice in action.recurringInvoices) { b.map[recurringInvoice.id] = recurringInvoice; } }); } RecurringInvoiceState _restoreRecurringInvoiceSuccess( RecurringInvoiceState recurringInvoiceState, RestoreRecurringInvoicesSuccess action) { return recurringInvoiceState.rebuild((b) { for (final recurringInvoice in action.recurringInvoices) { b.map[recurringInvoice.id] = recurringInvoice; } }); } RecurringInvoiceState _addRecurringInvoice( RecurringInvoiceState recurringInvoiceState, AddRecurringInvoiceSuccess action) { return recurringInvoiceState.rebuild((b) => b ..map[action.recurringInvoice.id] = action.recurringInvoice ..list.add(action.recurringInvoice.id)); } RecurringInvoiceState _updateRecurringInvoice( RecurringInvoiceState recurringInvoiceState, SaveRecurringInvoiceSuccess action) { return recurringInvoiceState.rebuild( (b) => b..map[action.recurringInvoice.id] = action.recurringInvoice); } RecurringInvoiceState _setLoadedRecurringInvoice( RecurringInvoiceState recurringInvoiceState, LoadRecurringInvoiceSuccess action) { return recurringInvoiceState.rebuild( (b) => b..map[action.recurringInvoice.id] = action.recurringInvoice); } RecurringInvoiceState _setLoadedRecurringInvoices( RecurringInvoiceState recurringInvoiceState, LoadRecurringInvoicesSuccess action) => recurringInvoiceState.loadRecurringInvoices(action.recurringInvoices); RecurringInvoiceState _setLoadedCompany( RecurringInvoiceState recurringInvoiceState, LoadCompanySuccess action) { final company = action.userCompany.company; return recurringInvoiceState.loadRecurringInvoices(company.recurringInvoices); }