diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index b9a780143..2d979aab5 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -512,13 +512,10 @@ abstract class InvoiceEntity extends Object static Serializer get serializer => _$invoiceEntitySerializer; } -abstract class InvoiceItemEntity extends Object - with BaseEntity, SelectableEntity +abstract class InvoiceItemEntity implements Built { factory InvoiceItemEntity({String productKey, double quantity}) { return _$InvoiceItemEntity._( - id: BaseEntity.nextId, - isChanged: false, productKey: productKey ?? '', notes: '', cost: 0.0, @@ -533,19 +530,11 @@ abstract class InvoiceItemEntity extends Object customValue1: '', customValue2: '', discount: 0.0, - updatedAt: 0, - archivedAt: 0, - isDeleted: false, ); } InvoiceItemEntity._(); - @override - EntityType get entityType { - return EntityType.invoiceItem; - } - @BuiltValueField(wireName: 'product_key') String get productKey; @@ -598,24 +587,6 @@ abstract class InvoiceItemEntity extends Object bool get isExpense => expenseId != null && expenseId.isNotEmpty; - @override - bool matchesFilter(String filter) { - if (filter == null || filter.isEmpty) { - return true; - } - - return false; - } - - @override - String matchesFilterValue(String filter) { - if (filter == null || filter.isEmpty) { - return null; - } - - return null; - } - InvoiceItemEntity applyTax(TaxRateEntity taxRate, {bool isSecond = false}) { InvoiceItemEntity item; @@ -637,17 +608,6 @@ abstract class InvoiceItemEntity extends Object return item; } - @override - String get listDisplayName { - return ''; - } - - @override - double get listDisplayAmount => null; - - @override - FormatNumberType get listDisplayAmountType => FormatNumberType.money; - static Serializer get serializer => _$invoiceItemEntitySerializer; } diff --git a/lib/data/models/invoice_model.g.dart b/lib/data/models/invoice_model.g.dart index 3b93926ae..f981690b8 100644 --- a/lib/data/models/invoice_model.g.dart +++ b/lib/data/models/invoice_model.g.dart @@ -606,54 +606,6 @@ class _$InvoiceItemEntitySerializer ..add(serializers.serialize(object.expenseId, specifiedType: const FullType(String))); } - if (object.isChanged != null) { - result - ..add('isChanged') - ..add(serializers.serialize(object.isChanged, - specifiedType: const FullType(bool))); - } - if (object.createdAt != null) { - result - ..add('created_at') - ..add(serializers.serialize(object.createdAt, - specifiedType: const FullType(int))); - } - if (object.updatedAt != null) { - result - ..add('updated_at') - ..add(serializers.serialize(object.updatedAt, - specifiedType: const FullType(int))); - } - if (object.archivedAt != null) { - result - ..add('archived_at') - ..add(serializers.serialize(object.archivedAt, - specifiedType: const FullType(int))); - } - if (object.isDeleted != null) { - result - ..add('is_deleted') - ..add(serializers.serialize(object.isDeleted, - specifiedType: const FullType(bool))); - } - if (object.createdUserId != null) { - result - ..add('user_id') - ..add(serializers.serialize(object.createdUserId, - specifiedType: const FullType(String))); - } - if (object.assignedUserId != null) { - result - ..add('assigned_user_id') - ..add(serializers.serialize(object.assignedUserId, - specifiedType: const FullType(String))); - } - if (object.id != null) { - result - ..add('id') - ..add(serializers.serialize(object.id, - specifiedType: const FullType(String))); - } return result; } @@ -733,38 +685,6 @@ class _$InvoiceItemEntitySerializer result.expenseId = serializers.deserialize(value, specifiedType: const FullType(String)) as String; break; - case 'isChanged': - result.isChanged = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool; - break; - case 'created_at': - result.createdAt = serializers.deserialize(value, - specifiedType: const FullType(int)) as int; - break; - case 'updated_at': - result.updatedAt = serializers.deserialize(value, - specifiedType: const FullType(int)) as int; - break; - case 'archived_at': - result.archivedAt = serializers.deserialize(value, - specifiedType: const FullType(int)) as int; - break; - case 'is_deleted': - result.isDeleted = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool; - break; - case 'user_id': - result.createdUserId = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; - case 'assigned_user_id': - result.assignedUserId = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; - case 'id': - result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; } } @@ -1894,22 +1814,6 @@ class _$InvoiceItemEntity extends InvoiceItemEntity { final String taskId; @override final String expenseId; - @override - final bool isChanged; - @override - final int createdAt; - @override - final int updatedAt; - @override - final int archivedAt; - @override - final bool isDeleted; - @override - final String createdUserId; - @override - final String assignedUserId; - @override - final String id; factory _$InvoiceItemEntity( [void Function(InvoiceItemEntityBuilder) updates]) => @@ -1931,15 +1835,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity { this.customValue2, this.discount, this.taskId, - this.expenseId, - this.isChanged, - this.createdAt, - this.updatedAt, - this.archivedAt, - this.isDeleted, - this.createdUserId, - this.assignedUserId, - this.id}) + this.expenseId}) : super._() { if (productKey == null) { throw new BuiltValueNullFieldError('InvoiceItemEntity', 'productKey'); @@ -2013,15 +1909,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity { customValue2 == other.customValue2 && discount == other.discount && taskId == other.taskId && - expenseId == other.expenseId && - isChanged == other.isChanged && - createdAt == other.createdAt && - updatedAt == other.updatedAt && - archivedAt == other.archivedAt && - isDeleted == other.isDeleted && - createdUserId == other.createdUserId && - assignedUserId == other.assignedUserId && - id == other.id; + expenseId == other.expenseId; } @override @@ -2042,28 +1930,24 @@ class _$InvoiceItemEntity extends InvoiceItemEntity { $jc( $jc( $jc( - $jc( - $jc( - $jc($jc($jc($jc($jc($jc(0, productKey.hashCode), notes.hashCode), cost.hashCode), quantity.hashCode), taxName1.hashCode), - taxRate1.hashCode), - taxName2.hashCode), - taxRate2.hashCode), - taxName3.hashCode), - taxRate3.hashCode), - invoiceItemTypeId.hashCode), - customValue1.hashCode), - customValue2.hashCode), - discount.hashCode), - taskId.hashCode), - expenseId.hashCode), - isChanged.hashCode), - createdAt.hashCode), - updatedAt.hashCode), - archivedAt.hashCode), - isDeleted.hashCode), - createdUserId.hashCode), - assignedUserId.hashCode), - id.hashCode)); + 0, + productKey + .hashCode), + notes.hashCode), + cost.hashCode), + quantity.hashCode), + taxName1.hashCode), + taxRate1.hashCode), + taxName2.hashCode), + taxRate2.hashCode), + taxName3.hashCode), + taxRate3.hashCode), + invoiceItemTypeId.hashCode), + customValue1.hashCode), + customValue2.hashCode), + discount.hashCode), + taskId.hashCode), + expenseId.hashCode)); } @override @@ -2084,15 +1968,7 @@ class _$InvoiceItemEntity extends InvoiceItemEntity { ..add('customValue2', customValue2) ..add('discount', discount) ..add('taskId', taskId) - ..add('expenseId', expenseId) - ..add('isChanged', isChanged) - ..add('createdAt', createdAt) - ..add('updatedAt', updatedAt) - ..add('archivedAt', archivedAt) - ..add('isDeleted', isDeleted) - ..add('createdUserId', createdUserId) - ..add('assignedUserId', assignedUserId) - ..add('id', id)) + ..add('expenseId', expenseId)) .toString(); } } @@ -2166,40 +2042,6 @@ class InvoiceItemEntityBuilder String get expenseId => _$this._expenseId; set expenseId(String expenseId) => _$this._expenseId = expenseId; - bool _isChanged; - bool get isChanged => _$this._isChanged; - set isChanged(bool isChanged) => _$this._isChanged = isChanged; - - int _createdAt; - int get createdAt => _$this._createdAt; - set createdAt(int createdAt) => _$this._createdAt = createdAt; - - int _updatedAt; - int get updatedAt => _$this._updatedAt; - set updatedAt(int updatedAt) => _$this._updatedAt = updatedAt; - - int _archivedAt; - int get archivedAt => _$this._archivedAt; - set archivedAt(int archivedAt) => _$this._archivedAt = archivedAt; - - bool _isDeleted; - bool get isDeleted => _$this._isDeleted; - set isDeleted(bool isDeleted) => _$this._isDeleted = isDeleted; - - String _createdUserId; - String get createdUserId => _$this._createdUserId; - set createdUserId(String createdUserId) => - _$this._createdUserId = createdUserId; - - String _assignedUserId; - String get assignedUserId => _$this._assignedUserId; - set assignedUserId(String assignedUserId) => - _$this._assignedUserId = assignedUserId; - - String _id; - String get id => _$this._id; - set id(String id) => _$this._id = id; - InvoiceItemEntityBuilder(); InvoiceItemEntityBuilder get _$this { @@ -2220,14 +2062,6 @@ class InvoiceItemEntityBuilder _discount = _$v.discount; _taskId = _$v.taskId; _expenseId = _$v.expenseId; - _isChanged = _$v.isChanged; - _createdAt = _$v.createdAt; - _updatedAt = _$v.updatedAt; - _archivedAt = _$v.archivedAt; - _isDeleted = _$v.isDeleted; - _createdUserId = _$v.createdUserId; - _assignedUserId = _$v.assignedUserId; - _id = _$v.id; _$v = null; } return this; @@ -2265,15 +2099,7 @@ class InvoiceItemEntityBuilder customValue2: customValue2, discount: discount, taskId: taskId, - expenseId: expenseId, - isChanged: isChanged, - createdAt: createdAt, - updatedAt: updatedAt, - archivedAt: archivedAt, - isDeleted: isDeleted, - createdUserId: createdUserId, - assignedUserId: assignedUserId, - id: id); + expenseId: expenseId); replace(_$result); return _$result; } diff --git a/lib/redux/invoice/invoice_actions.dart b/lib/redux/invoice/invoice_actions.dart index a4e607b4f..0a65fcec5 100644 --- a/lib/redux/invoice/invoice_actions.dart +++ b/lib/redux/invoice/invoice_actions.dart @@ -33,11 +33,11 @@ class EditInvoice implements PersistUI { {this.invoice, this.context, this.completer, - this.invoiceItem, + this.invoiceItemIndex, this.force = false}); final InvoiceEntity invoice; - final InvoiceItemEntity invoiceItem; + final int invoiceItemIndex; final BuildContext context; final Completer completer; final bool force; @@ -52,9 +52,9 @@ class ShowEmailInvoice { } class EditInvoiceItem implements PersistUI { - EditInvoiceItem([this.invoiceItem]); + EditInvoiceItem([this.invoiceItemIndex]); - final InvoiceItemEntity invoiceItem; + final int invoiceItemIndex; } class UpdateInvoice implements PersistUI { diff --git a/lib/redux/invoice/invoice_reducer.dart b/lib/redux/invoice/invoice_reducer.dart index 5eea34bd7..092311547 100644 --- a/lib/redux/invoice/invoice_reducer.dart +++ b/lib/redux/invoice/invoice_reducer.dart @@ -13,20 +13,15 @@ EntityUIState invoiceUIReducer(InvoiceUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(invoiceListReducer(state.listUIState, action)) ..editing.replace(editingReducer(state.editing, action)) - ..editingItem.replace(editingItemReducer(state.editingItem, action)) + ..editingItemIndex = editingItemIndexReducer(state.editingItemIndex, action) ..selectedId = selectedIdReducer(state.selectedId, action)); } -final editingItemReducer = combineReducers([ - TypedReducer(editInvoiceItem), - TypedReducer(editInvoiceItem), +final editingItemIndexReducer = combineReducers([ + TypedReducer((index, action) => action.invoiceItemIndex), + TypedReducer((index, action) => action.invoiceItemIndex), ]); -InvoiceItemEntity editInvoiceItem( - InvoiceItemEntity invoiceItem, dynamic action) { - return action.invoiceItem ?? InvoiceItemEntity(); -} - Reducer dropdownFilterReducer = combineReducers([ TypedReducer(filterInvoiceDropdownReducer), ]); diff --git a/lib/redux/invoice/invoice_state.dart b/lib/redux/invoice/invoice_state.dart index 8c21cc0da..bfb8511c4 100644 --- a/lib/redux/invoice/invoice_state.dart +++ b/lib/redux/invoice/invoice_state.dart @@ -59,7 +59,6 @@ abstract class InvoiceUIState extends Object listUIState: ListUIState(InvoiceFields.invoiceNumber, sortAscending: false), editing: InvoiceEntity(), - editingItem: InvoiceItemEntity(), selectedId: '', ); } @@ -70,7 +69,7 @@ abstract class InvoiceUIState extends Object InvoiceEntity get editing; @nullable - InvoiceItemEntity get editingItem; + int get editingItemIndex; @override bool get isCreatingNew => editing.isNew; diff --git a/lib/redux/invoice/invoice_state.g.dart b/lib/redux/invoice/invoice_state.g.dart index 4777dde12..2b66307f8 100644 --- a/lib/redux/invoice/invoice_state.g.dart +++ b/lib/redux/invoice/invoice_state.g.dart @@ -95,11 +95,11 @@ class _$InvoiceUIStateSerializer ..add(serializers.serialize(object.editing, specifiedType: const FullType(InvoiceEntity))); } - if (object.editingItem != null) { + if (object.editingItemIndex != null) { result - ..add('editingItem') - ..add(serializers.serialize(object.editingItem, - specifiedType: const FullType(InvoiceItemEntity))); + ..add('editingItemIndex') + ..add(serializers.serialize(object.editingItemIndex, + specifiedType: const FullType(int))); } if (object.selectedId != null) { result @@ -126,10 +126,9 @@ class _$InvoiceUIStateSerializer result.editing.replace(serializers.deserialize(value, specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity); break; - case 'editingItem': - result.editingItem.replace(serializers.deserialize(value, - specifiedType: const FullType(InvoiceItemEntity)) - as InvoiceItemEntity); + case 'editingItemIndex': + result.editingItemIndex = serializers.deserialize(value, + specifiedType: const FullType(int)) as int; break; case 'listUIState': result.listUIState.replace(serializers.deserialize(value, @@ -269,7 +268,7 @@ class _$InvoiceUIState extends InvoiceUIState { @override final InvoiceEntity editing; @override - final InvoiceItemEntity editingItem; + final int editingItemIndex; @override final ListUIState listUIState; @override @@ -284,7 +283,7 @@ class _$InvoiceUIState extends InvoiceUIState { _$InvoiceUIState._( {this.editing, - this.editingItem, + this.editingItemIndex, this.listUIState, this.selectedId, this.saveCompleter, @@ -308,7 +307,7 @@ class _$InvoiceUIState extends InvoiceUIState { if (identical(other, this)) return true; return other is InvoiceUIState && editing == other.editing && - editingItem == other.editingItem && + editingItemIndex == other.editingItemIndex && listUIState == other.listUIState && selectedId == other.selectedId && saveCompleter == other.saveCompleter && @@ -320,7 +319,7 @@ class _$InvoiceUIState extends InvoiceUIState { return $jf($jc( $jc( $jc( - $jc($jc($jc(0, editing.hashCode), editingItem.hashCode), + $jc($jc($jc(0, editing.hashCode), editingItemIndex.hashCode), listUIState.hashCode), selectedId.hashCode), saveCompleter.hashCode), @@ -331,7 +330,7 @@ class _$InvoiceUIState extends InvoiceUIState { String toString() { return (newBuiltValueToStringHelper('InvoiceUIState') ..add('editing', editing) - ..add('editingItem', editingItem) + ..add('editingItemIndex', editingItemIndex) ..add('listUIState', listUIState) ..add('selectedId', selectedId) ..add('saveCompleter', saveCompleter) @@ -349,11 +348,10 @@ class InvoiceUIStateBuilder _$this._editing ??= new InvoiceEntityBuilder(); set editing(InvoiceEntityBuilder editing) => _$this._editing = editing; - InvoiceItemEntityBuilder _editingItem; - InvoiceItemEntityBuilder get editingItem => - _$this._editingItem ??= new InvoiceItemEntityBuilder(); - set editingItem(InvoiceItemEntityBuilder editingItem) => - _$this._editingItem = editingItem; + int _editingItemIndex; + int get editingItemIndex => _$this._editingItemIndex; + set editingItemIndex(int editingItemIndex) => + _$this._editingItemIndex = editingItemIndex; ListUIStateBuilder _listUIState; ListUIStateBuilder get listUIState => @@ -380,7 +378,7 @@ class InvoiceUIStateBuilder InvoiceUIStateBuilder get _$this { if (_$v != null) { _editing = _$v.editing?.toBuilder(); - _editingItem = _$v.editingItem?.toBuilder(); + _editingItemIndex = _$v.editingItemIndex; _listUIState = _$v.listUIState?.toBuilder(); _selectedId = _$v.selectedId; _saveCompleter = _$v.saveCompleter; @@ -410,7 +408,7 @@ class InvoiceUIStateBuilder _$result = _$v ?? new _$InvoiceUIState._( editing: _editing?.build(), - editingItem: _editingItem?.build(), + editingItemIndex: editingItemIndex, listUIState: listUIState.build(), selectedId: selectedId, saveCompleter: saveCompleter, @@ -420,8 +418,7 @@ class InvoiceUIStateBuilder try { _$failedField = 'editing'; _editing?.build(); - _$failedField = 'editingItem'; - _editingItem?.build(); + _$failedField = 'listUIState'; listUIState.build(); } catch (e) { diff --git a/lib/redux/quote/quote_actions.dart b/lib/redux/quote/quote_actions.dart index 3c01a10f4..3afd26773 100644 --- a/lib/redux/quote/quote_actions.dart +++ b/lib/redux/quote/quote_actions.dart @@ -33,11 +33,11 @@ class EditQuote implements PersistUI { {this.quote, this.context, this.completer, - this.quoteItem, + this.quoteItemIndex, this.force = false}); final InvoiceEntity quote; - final InvoiceItemEntity quoteItem; + final int quoteItemIndex; final BuildContext context; final Completer completer; final bool force; @@ -52,9 +52,9 @@ class ShowEmailQuote { } class EditQuoteItem implements PersistUI { - EditQuoteItem([this.quoteItem]); + EditQuoteItem([this.quoteItemIndex]); - final InvoiceItemEntity quoteItem; + final int quoteItemIndex; } class UpdateQuote implements PersistUI { diff --git a/lib/redux/quote/quote_reducer.dart b/lib/redux/quote/quote_reducer.dart index 53121c4f9..8155232ff 100644 --- a/lib/redux/quote/quote_reducer.dart +++ b/lib/redux/quote/quote_reducer.dart @@ -13,19 +13,15 @@ EntityUIState quoteUIReducer(QuoteUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(quoteListReducer(state.listUIState, action)) ..editing.replace(editingReducer(state.editing, action)) - ..editingItem.replace(editingItemReducer(state.editingItem, action)) + ..editingItemIndex = editingItemReducer(state.editingItemIndex, action) ..selectedId = selectedIdReducer(state.selectedId, action)); } -final editingItemReducer = combineReducers([ - TypedReducer(editQuoteItem), - TypedReducer(editQuoteItem), +final editingItemReducer = combineReducers([ + TypedReducer((index, action) => action.quoteItemIndex), + TypedReducer((index, action) => action.quoteItemIndex), ]); -InvoiceItemEntity editQuoteItem(InvoiceItemEntity quoteItem, dynamic action) { - return action.quoteItem ?? InvoiceItemEntity(); -} - Reducer dropdownFilterReducer = combineReducers([ TypedReducer(filterquoteDropdownReducer), ]); diff --git a/lib/redux/quote/quote_state.dart b/lib/redux/quote/quote_state.dart index ce877c987..08d6e3cbc 100644 --- a/lib/redux/quote/quote_state.dart +++ b/lib/redux/quote/quote_state.dart @@ -51,7 +51,6 @@ abstract class QuoteUIState extends Object return _$QuoteUIState._( listUIState: ListUIState(QuoteFields.quoteNumber, sortAscending: false), editing: InvoiceEntity(), - editingItem: InvoiceItemEntity(), selectedId: '', ); } @@ -62,7 +61,7 @@ abstract class QuoteUIState extends Object InvoiceEntity get editing; @nullable - InvoiceItemEntity get editingItem; + int get editingItemIndex; @override bool get isCreatingNew => editing.isNew; diff --git a/lib/redux/quote/quote_state.g.dart b/lib/redux/quote/quote_state.g.dart index f6e49dd14..87bf13377 100644 --- a/lib/redux/quote/quote_state.g.dart +++ b/lib/redux/quote/quote_state.g.dart @@ -93,11 +93,11 @@ class _$QuoteUIStateSerializer implements StructuredSerializer { ..add(serializers.serialize(object.editing, specifiedType: const FullType(InvoiceEntity))); } - if (object.editingItem != null) { + if (object.editingItemIndex != null) { result - ..add('editingItem') - ..add(serializers.serialize(object.editingItem, - specifiedType: const FullType(InvoiceItemEntity))); + ..add('editingItemIndex') + ..add(serializers.serialize(object.editingItemIndex, + specifiedType: const FullType(int))); } if (object.selectedId != null) { result @@ -123,10 +123,9 @@ class _$QuoteUIStateSerializer implements StructuredSerializer { result.editing.replace(serializers.deserialize(value, specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity); break; - case 'editingItem': - result.editingItem.replace(serializers.deserialize(value, - specifiedType: const FullType(InvoiceItemEntity)) - as InvoiceItemEntity); + case 'editingItemIndex': + result.editingItemIndex = serializers.deserialize(value, + specifiedType: const FullType(int)) as int; break; case 'listUIState': result.listUIState.replace(serializers.deserialize(value, @@ -265,7 +264,7 @@ class _$QuoteUIState extends QuoteUIState { @override final InvoiceEntity editing; @override - final InvoiceItemEntity editingItem; + final int editingItemIndex; @override final ListUIState listUIState; @override @@ -280,7 +279,7 @@ class _$QuoteUIState extends QuoteUIState { _$QuoteUIState._( {this.editing, - this.editingItem, + this.editingItemIndex, this.listUIState, this.selectedId, this.saveCompleter, @@ -303,7 +302,7 @@ class _$QuoteUIState extends QuoteUIState { if (identical(other, this)) return true; return other is QuoteUIState && editing == other.editing && - editingItem == other.editingItem && + editingItemIndex == other.editingItemIndex && listUIState == other.listUIState && selectedId == other.selectedId && saveCompleter == other.saveCompleter && @@ -315,7 +314,7 @@ class _$QuoteUIState extends QuoteUIState { return $jf($jc( $jc( $jc( - $jc($jc($jc(0, editing.hashCode), editingItem.hashCode), + $jc($jc($jc(0, editing.hashCode), editingItemIndex.hashCode), listUIState.hashCode), selectedId.hashCode), saveCompleter.hashCode), @@ -326,7 +325,7 @@ class _$QuoteUIState extends QuoteUIState { String toString() { return (newBuiltValueToStringHelper('QuoteUIState') ..add('editing', editing) - ..add('editingItem', editingItem) + ..add('editingItemIndex', editingItemIndex) ..add('listUIState', listUIState) ..add('selectedId', selectedId) ..add('saveCompleter', saveCompleter) @@ -344,11 +343,10 @@ class QuoteUIStateBuilder _$this._editing ??= new InvoiceEntityBuilder(); set editing(InvoiceEntityBuilder editing) => _$this._editing = editing; - InvoiceItemEntityBuilder _editingItem; - InvoiceItemEntityBuilder get editingItem => - _$this._editingItem ??= new InvoiceItemEntityBuilder(); - set editingItem(InvoiceItemEntityBuilder editingItem) => - _$this._editingItem = editingItem; + int _editingItemIndex; + int get editingItemIndex => _$this._editingItemIndex; + set editingItemIndex(int editingItemIndex) => + _$this._editingItemIndex = editingItemIndex; ListUIStateBuilder _listUIState; ListUIStateBuilder get listUIState => @@ -375,7 +373,7 @@ class QuoteUIStateBuilder QuoteUIStateBuilder get _$this { if (_$v != null) { _editing = _$v.editing?.toBuilder(); - _editingItem = _$v.editingItem?.toBuilder(); + _editingItemIndex = _$v.editingItemIndex; _listUIState = _$v.listUIState?.toBuilder(); _selectedId = _$v.selectedId; _saveCompleter = _$v.saveCompleter; @@ -405,7 +403,7 @@ class QuoteUIStateBuilder _$result = _$v ?? new _$QuoteUIState._( editing: _editing?.build(), - editingItem: _editingItem?.build(), + editingItemIndex: editingItemIndex, listUIState: listUIState.build(), selectedId: selectedId, saveCompleter: saveCompleter, @@ -415,8 +413,7 @@ class QuoteUIStateBuilder try { _$failedField = 'editing'; _editing?.build(); - _$failedField = 'editingItem'; - _editingItem?.build(); + _$failedField = 'listUIState'; listUIState.build(); } catch (e) { diff --git a/lib/ui/invoice/edit/invoice_edit.dart b/lib/ui/invoice/edit/invoice_edit.dart index 8e3f39d50..8c79fe80f 100644 --- a/lib/ui/invoice/edit/invoice_edit.dart +++ b/lib/ui/invoice/edit/invoice_edit.dart @@ -38,11 +38,10 @@ class _InvoiceEditState extends State void initState() { super.initState(); - final invoice = widget.viewModel.invoice; - final invoiceItem = widget.viewModel.invoiceItem; + final viewModel = widget.viewModel; final index = - invoice.lineItems.contains(invoiceItem) ? kItemScreen : kDetailsScreen; + viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen; _controller = TabController(vsync: this, length: 4, initialIndex: index); } diff --git a/lib/ui/invoice/edit/invoice_edit_items.dart b/lib/ui/invoice/edit/invoice_edit_items.dart index 077b76025..abd82f330 100644 --- a/lib/ui/invoice/edit/invoice_edit_items.dart +++ b/lib/ui/invoice/edit/invoice_edit_items.dart @@ -28,8 +28,7 @@ class InvoiceEditItems extends StatefulWidget { class _InvoiceEditItemsState extends State { InvoiceItemEntity selectedInvoiceItem; - void _showInvoiceItemEditor( - InvoiceItemEntity invoiceItem, BuildContext context) { + void _showInvoiceItemEditor(int lineItemIndex, BuildContext context) { showDialog( context: context, builder: (BuildContext context) { @@ -38,10 +37,9 @@ class _InvoiceEditItemsState extends State { return ItemEditDetails( viewModel: viewModel, - key: Key(invoiceItem.entityKey), - invoiceItem: invoiceItem, - index: invoice.lineItems.indexOf( - invoice.lineItems.firstWhere((i) => i.id == invoiceItem.id)), + key: ValueKey('__${lineItemIndex}__'), + invoiceItem: invoice.lineItems[lineItemIndex], + index: lineItemIndex, ); }); } @@ -51,30 +49,31 @@ class _InvoiceEditItemsState extends State { final localization = AppLocalization.of(context); final viewModel = widget.viewModel; final invoice = viewModel.invoice; - final invoiceItem = invoice.lineItems.contains(viewModel.invoiceItem) - ? viewModel.invoiceItem - : null; + final itemIndex = viewModel.invoiceItemIndex; + final invoiceItem = + itemIndex != null && invoice.lineItems.length > itemIndex + ? invoice.lineItems[itemIndex] + : null; if (invoiceItem != null && invoiceItem != selectedInvoiceItem) { selectedInvoiceItem = invoiceItem; WidgetsBinding.instance.addPostFrameCallback((duration) { - _showInvoiceItemEditor(invoiceItem, context); + _showInvoiceItemEditor(itemIndex, context); }); } if (invoice.lineItems.isEmpty) { return HelpText(localization.clickPlusToAddItem); } - - final lineItems = - invoice.lineItems.map((invoiceItem) => InvoiceItemListTile( - invoice: invoice, - invoiceItem: invoiceItem, - onTap: () => _showInvoiceItemEditor(invoiceItem, context), - )); - return ListView( - children: lineItems.toList(), + children: [ + for (int i = 0; i < invoice.lineItems.length; i++) + InvoiceItemListTile( + invoice: invoice, + invoiceItem: invoice.lineItems[i], + onTap: () => _showInvoiceItemEditor(i, context), + ) + ], ); } } diff --git a/lib/ui/invoice/edit/invoice_edit_items_vm.dart b/lib/ui/invoice/edit/invoice_edit_items_vm.dart index 965df86ab..b9754825d 100644 --- a/lib/ui/invoice/edit/invoice_edit_items_vm.dart +++ b/lib/ui/invoice/edit/invoice_edit_items_vm.dart @@ -29,7 +29,7 @@ class EntityEditItemsVM { EntityEditItemsVM({ @required this.company, @required this.invoice, - @required this.invoiceItem, + @required this.invoiceItemIndex, @required this.onRemoveInvoiceItemPressed, @required this.onDoneInvoiceItemPressed, @required this.onChangedInvoiceItem, @@ -37,7 +37,7 @@ class EntityEditItemsVM { final CompanyEntity company; final InvoiceEntity invoice; - final InvoiceItemEntity invoiceItem; + final int invoiceItemIndex; final Function(int) onRemoveInvoiceItemPressed; final Function onDoneInvoiceItemPressed; final Function(InvoiceItemEntity, int) onChangedInvoiceItem; @@ -47,14 +47,14 @@ class InvoiceEditItemsVM extends EntityEditItemsVM { InvoiceEditItemsVM({ CompanyEntity company, InvoiceEntity invoice, - InvoiceItemEntity invoiceItem, + int invoiceItemIndex, Function(int) onRemoveInvoiceItemPressed, Function onDoneInvoiceItemPressed, Function(InvoiceItemEntity, int) onChangedInvoiceItem, }) : super( company: company, invoice: invoice, - invoiceItem: invoiceItem, + invoiceItemIndex: invoiceItemIndex, onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed, onDoneInvoiceItemPressed: onDoneInvoiceItemPressed, onChangedInvoiceItem: onChangedInvoiceItem, @@ -67,7 +67,7 @@ class InvoiceEditItemsVM extends EntityEditItemsVM { return InvoiceEditItemsVM( company: state.selectedCompany, invoice: invoice, - invoiceItem: state.invoiceUIState.editingItem, + invoiceItemIndex: state.invoiceUIState.editingItemIndex, onRemoveInvoiceItemPressed: (index) => store.dispatch(DeleteInvoiceItem(index)), onDoneInvoiceItemPressed: () => store.dispatch(EditInvoiceItem()), diff --git a/lib/ui/invoice/edit/invoice_edit_vm.dart b/lib/ui/invoice/edit/invoice_edit_vm.dart index 40b48d50f..824405421 100644 --- a/lib/ui/invoice/edit/invoice_edit_vm.dart +++ b/lib/ui/invoice/edit/invoice_edit_vm.dart @@ -41,7 +41,7 @@ class EntityEditVM { @required this.state, @required this.company, @required this.invoice, - @required this.invoiceItem, + @required this.invoiceItemIndex, @required this.origInvoice, @required this.onSavePressed, @required this.onItemsAdded, @@ -53,7 +53,7 @@ class EntityEditVM { final AppState state; final CompanyEntity company; final InvoiceEntity invoice; - final InvoiceItemEntity invoiceItem; + final int invoiceItemIndex; final InvoiceEntity origInvoice; final Function(BuildContext) onSavePressed; final Function(List, String) onItemsAdded; @@ -67,7 +67,7 @@ class InvoiceEditVM extends EntityEditVM { AppState state, CompanyEntity company, InvoiceEntity invoice, - InvoiceItemEntity invoiceItem, + int invoiceItemIndex, InvoiceEntity origInvoice, Function(BuildContext) onSavePressed, Function(List, String) onItemsAdded, @@ -78,7 +78,7 @@ class InvoiceEditVM extends EntityEditVM { state: state, company: company, invoice: invoice, - invoiceItem: invoiceItem, + invoiceItemIndex: invoiceItemIndex, origInvoice: origInvoice, onSavePressed: onSavePressed, onItemsAdded: onItemsAdded, @@ -96,7 +96,7 @@ class InvoiceEditVM extends EntityEditVM { company: state.selectedCompany, isSaving: state.isSaving, invoice: invoice, - invoiceItem: state.invoiceUIState.editingItem, + invoiceItemIndex: state.invoiceUIState.editingItemIndex, origInvoice: store.state.invoiceState.map[invoice.id], onBackPressed: () { if (state.uiState.currentRoute.contains(InvoiceScreen.route)) { @@ -134,7 +134,7 @@ class InvoiceEditVM extends EntityEditVM { store.dispatch(AddInvoiceItems(items)); // if we're just adding one item automatically show the editor if (items.length == 1) { - store.dispatch(EditInvoiceItem(items[0])); + store.dispatch(EditInvoiceItem(invoice.lineItems.length)); } }, onCancelPressed: (BuildContext context) { diff --git a/lib/ui/invoice/view/invoice_view_overview.dart b/lib/ui/invoice/view/invoice_view_overview.dart index 29456e379..874ef5d5e 100644 --- a/lib/ui/invoice/view/invoice_view_overview.dart +++ b/lib/ui/invoice/view/invoice_view_overview.dart @@ -160,7 +160,7 @@ class InvoiceOverview extends StatelessWidget { invoice: invoice, invoiceItem: invoiceItem, onTap: () => userCompany.canEditEntity(invoice) - ? viewModel.onEditPressed(context, invoiceItem) + ? viewModel.onEditPressed(context, invoice.lineItems.indexOf(invoiceItem)) : null, ); }, diff --git a/lib/ui/invoice/view/invoice_view_vm.dart b/lib/ui/invoice/view/invoice_view_vm.dart index abe308a41..0bb6d7d9d 100644 --- a/lib/ui/invoice/view/invoice_view_vm.dart +++ b/lib/ui/invoice/view/invoice_view_vm.dart @@ -67,7 +67,7 @@ class EntityViewVM { final bool isSaving; final bool isDirty; final Function(BuildContext, EntityAction) onActionSelected; - final Function(BuildContext, [InvoiceItemEntity]) onEditPressed; + final Function(BuildContext, [int]) onEditPressed; final Function(BuildContext, [bool]) onClientPressed; final Function(BuildContext) onPaymentsPressed; final Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed; @@ -87,7 +87,7 @@ class InvoiceViewVM extends EntityViewVM { bool isSaving, bool isDirty, Function(BuildContext, EntityAction) onEntityAction, - Function(BuildContext, [InvoiceItemEntity]) onEditPressed, + Function(BuildContext, [int]) onEditPressed, Function(BuildContext, [bool]) onClientPressed, Function(BuildContext, PaymentEntity, [bool]) onPaymentPressed, Function(BuildContext) onPaymentsPressed, @@ -133,14 +133,14 @@ class InvoiceViewVM extends EntityViewVM { isDirty: invoice.isNew, invoice: invoice, client: client, - onEditPressed: (BuildContext context, [InvoiceItemEntity invoiceItem]) { + onEditPressed: (BuildContext context, [invoiceItemIndex]) { final Completer completer = new Completer(); store.dispatch(EditInvoice( invoice: invoice, context: context, completer: completer, - invoiceItem: invoiceItem)); + invoiceItemIndex: invoiceItemIndex)); completer.future.then((invoice) { Scaffold.of(context).showSnackBar(SnackBar( content: SnackBarRow( diff --git a/lib/ui/quote/edit/quote_edit_items_vm.dart b/lib/ui/quote/edit/quote_edit_items_vm.dart index 808df3d34..e7efe833b 100644 --- a/lib/ui/quote/edit/quote_edit_items_vm.dart +++ b/lib/ui/quote/edit/quote_edit_items_vm.dart @@ -30,14 +30,14 @@ class QuoteEditItemsVM extends EntityEditItemsVM { QuoteEditItemsVM({ CompanyEntity company, InvoiceEntity invoice, - InvoiceItemEntity invoiceItem, + int invoiceItemIndex, Function(int) onRemoveInvoiceItemPressed, Function onDoneInvoiceItemPressed, Function(InvoiceItemEntity, int) onChangedInvoiceItem, }) : super( company: company, invoice: invoice, - invoiceItem: invoiceItem, + invoiceItemIndex: invoiceItemIndex, onRemoveInvoiceItemPressed: onRemoveInvoiceItemPressed, onDoneInvoiceItemPressed: onDoneInvoiceItemPressed, onChangedInvoiceItem: onChangedInvoiceItem, @@ -50,7 +50,7 @@ class QuoteEditItemsVM extends EntityEditItemsVM { return QuoteEditItemsVM( company: state.selectedCompany, invoice: quote, - invoiceItem: state.quoteUIState.editingItem, + invoiceItemIndex: state.quoteUIState.editingItemIndex, onRemoveInvoiceItemPressed: (index) => store.dispatch(DeleteQuoteItem(index)), onDoneInvoiceItemPressed: () => store.dispatch(EditQuoteItem()), diff --git a/lib/ui/quote/edit/quote_edit_vm.dart b/lib/ui/quote/edit/quote_edit_vm.dart index bcceca402..86dcc3f08 100644 --- a/lib/ui/quote/edit/quote_edit_vm.dart +++ b/lib/ui/quote/edit/quote_edit_vm.dart @@ -42,7 +42,7 @@ class QuoteEditVM extends EntityEditVM { AppState state, CompanyEntity company, InvoiceEntity invoice, - InvoiceItemEntity invoiceItem, + int invoiceItemIndex, InvoiceEntity origInvoice, Function(BuildContext) onSavePressed, Function(List, String) onItemsAdded, @@ -53,7 +53,7 @@ class QuoteEditVM extends EntityEditVM { state: state, company: company, invoice: invoice, - invoiceItem: invoiceItem, + invoiceItemIndex: invoiceItemIndex, origInvoice: origInvoice, onSavePressed: onSavePressed, onItemsAdded: onItemsAdded, @@ -70,7 +70,7 @@ class QuoteEditVM extends EntityEditVM { company: state.selectedCompany, isSaving: state.isSaving, invoice: quote, - invoiceItem: state.quoteUIState.editingItem, + invoiceItemIndex: state.quoteUIState.editingItemIndex, origInvoice: store.state.quoteState.map[quote.id], onBackPressed: () { if (state.uiState.currentRoute.contains(QuoteScreen.route)) { @@ -100,7 +100,7 @@ class QuoteEditVM extends EntityEditVM { }, onItemsAdded: (items, clientId) { if (items.length == 1) { - store.dispatch(EditQuoteItem(items[0])); + store.dispatch(EditQuoteItem(quote.lineItems.length)); } store.dispatch(AddQuoteItems(items)); }, diff --git a/lib/ui/quote/quote_edit.dart b/lib/ui/quote/quote_edit.dart index dc12d140b..19a81fc56 100644 --- a/lib/ui/quote/quote_edit.dart +++ b/lib/ui/quote/quote_edit.dart @@ -36,11 +36,10 @@ class _QuoteEditState extends State void initState() { super.initState(); - final invoice = widget.viewModel.invoice; - final invoiceItem = widget.viewModel.invoiceItem; + final viewModel = widget.viewModel; final index = - invoice.lineItems.contains(invoiceItem) ? kItemScreen : kDetailsScreen; + viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen; _controller = TabController(vsync: this, length: 3, initialIndex: index); } diff --git a/lib/ui/quote/view/quote_view_vm.dart b/lib/ui/quote/view/quote_view_vm.dart index 490c32bed..10fc9d42d 100644 --- a/lib/ui/quote/view/quote_view_vm.dart +++ b/lib/ui/quote/view/quote_view_vm.dart @@ -49,7 +49,7 @@ class QuoteViewVM extends EntityViewVM { bool isSaving, bool isDirty, Function(BuildContext, EntityAction) onEntityAction, - Function(BuildContext, [InvoiceItemEntity]) onEditPressed, + Function(BuildContext, [int]) onEditPressed, Function(BuildContext, [bool]) onClientPressed, Function(BuildContext) onPaymentsPressed, Function(BuildContext, PaymentEntity) onPaymentPressed, @@ -98,14 +98,14 @@ class QuoteViewVM extends EntityViewVM { isDirty: quote.isNew, invoice: quote, client: client, - onEditPressed: (BuildContext context, [InvoiceItemEntity invoiceItem]) { + onEditPressed: (BuildContext context, [int index]) { final Completer completer = new Completer(); store.dispatch(EditQuote( quote: quote, context: context, completer: completer, - quoteItem: invoiceItem)); + quoteItemIndex: index)); completer.future.then((invoice) { Scaffold.of(context).showSnackBar(SnackBar( content: SnackBarRow(