diff --git a/lib/data/models/invoice_model.g.dart b/lib/data/models/invoice_model.g.dart index db10bd39e..6d59e8857 100644 --- a/lib/data/models/invoice_model.g.dart +++ b/lib/data/models/invoice_model.g.dart @@ -656,8 +656,6 @@ class _$InvitationEntitySerializer Iterable serialize(Serializers serializers, InvitationEntity object, {FullType specifiedType: FullType.unspecified}) { final result = [ - 'key', - serializers.serialize(object.key, specifiedType: const FullType(String)), 'link', serializers.serialize(object.link, specifiedType: const FullType(String)), 'sent_date', @@ -706,10 +704,6 @@ class _$InvitationEntitySerializer iterator.moveNext(); final dynamic value = iterator.current; switch (key) { - case 'key': - result.key = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; case 'link': result.link = serializers.deserialize(value, specifiedType: const FullType(String)) as String; @@ -1952,8 +1946,6 @@ class InvoiceItemEntityBuilder } class _$InvitationEntity extends InvitationEntity { - @override - final String key; @override final String link; @override @@ -1973,8 +1965,7 @@ class _$InvitationEntity extends InvitationEntity { (new InvitationEntityBuilder()..update(updates)).build(); _$InvitationEntity._( - {this.key, - this.link, + {this.link, this.sentDate, this.viewedDate, this.id, @@ -1982,8 +1973,6 @@ class _$InvitationEntity extends InvitationEntity { this.archivedAt, this.isDeleted}) : super._() { - if (key == null) - throw new BuiltValueNullFieldError('InvitationEntity', 'key'); if (link == null) throw new BuiltValueNullFieldError('InvitationEntity', 'link'); if (sentDate == null) @@ -2004,8 +1993,7 @@ class _$InvitationEntity extends InvitationEntity { bool operator ==(dynamic other) { if (identical(other, this)) return true; if (other is! InvitationEntity) return false; - return key == other.key && - link == other.link && + return link == other.link && sentDate == other.sentDate && viewedDate == other.viewedDate && id == other.id && @@ -2020,9 +2008,7 @@ class _$InvitationEntity extends InvitationEntity { $jc( $jc( $jc( - $jc( - $jc($jc($jc(0, key.hashCode), link.hashCode), - sentDate.hashCode), + $jc($jc($jc(0, link.hashCode), sentDate.hashCode), viewedDate.hashCode), id.hashCode), updatedAt.hashCode), @@ -2033,7 +2019,6 @@ class _$InvitationEntity extends InvitationEntity { @override String toString() { return (newBuiltValueToStringHelper('InvitationEntity') - ..add('key', key) ..add('link', link) ..add('sentDate', sentDate) ..add('viewedDate', viewedDate) @@ -2049,10 +2034,6 @@ class InvitationEntityBuilder implements Builder { _$InvitationEntity _$v; - String _key; - String get key => _$this._key; - set key(String key) => _$this._key = key; - String _link; String get link => _$this._link; set link(String link) => _$this._link = link; @@ -2085,7 +2066,6 @@ class InvitationEntityBuilder InvitationEntityBuilder get _$this { if (_$v != null) { - _key = _$v.key; _link = _$v.link; _sentDate = _$v.sentDate; _viewedDate = _$v.viewedDate; @@ -2113,7 +2093,6 @@ class InvitationEntityBuilder _$InvitationEntity build() { final _$result = _$v ?? new _$InvitationEntity._( - key: key, link: link, sentDate: sentDate, viewedDate: viewedDate, diff --git a/lib/redux/app/app_middleware.dart b/lib/redux/app/app_middleware.dart index 84f5413bb..68e538512 100644 --- a/lib/redux/app/app_middleware.dart +++ b/lib/redux/app/app_middleware.dart @@ -197,7 +197,7 @@ List _getRoutes(AppState state) { .forEach((part) { if (part == 'edit') { // Only restore new unsaved entities to prevent conflicts - bool isNew = state.getUIState(entityType).isSelectedNew; + final bool isNew = state.getUIState(entityType).isCreatingNew; if (isNew) { route += '/edit'; } else if (entityType == EntityType.client) { diff --git a/lib/redux/client/client_actions.dart b/lib/redux/client/client_actions.dart index 1fa48e453..110b5b3f6 100644 --- a/lib/redux/client/client_actions.dart +++ b/lib/redux/client/client_actions.dart @@ -8,9 +8,9 @@ import 'package:invoiceninja/redux/app/app_actions.dart'; class ViewClientList implements PersistUI {} class ViewClient implements PersistUI { - final ClientEntity client; + final int clientId; final BuildContext context; - ViewClient({this.client, this.context}); + ViewClient({this.clientId, this.context}); } class EditClient implements PersistUI { diff --git a/lib/redux/client/client_reducer.dart b/lib/redux/client/client_reducer.dart index 788b9e06e..68a3922bf 100644 --- a/lib/redux/client/client_reducer.dart +++ b/lib/redux/client/client_reducer.dart @@ -6,11 +6,12 @@ import 'package:redux/redux.dart'; import 'package:invoiceninja/redux/client/client_actions.dart'; import 'package:invoiceninja/redux/client/client_state.dart'; -EntityUIState clientUIReducer(ClientUIState state, action) { +EntityUIState clientUIReducer(ClientUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(clientListReducer(state.listUIState, action)) - ..selected.replace(editingReducer(state.selected, action)) + ..editing.replace(editingReducer(state.editing, action)) ..dropdownFilter = dropdownFilterReducer(state.dropdownFilter, action) + ..selectedId = selectedIdReducer(state.selectedId, action) ); } @@ -22,13 +23,20 @@ String filterClientDropdownReducer(String dropdownFilter, FilterClientDropdown a return action.filter; } +Reducer selectedIdReducer = combineReducers([ + TypedReducer(updateSelectedId), +]); + +int updateSelectedId(int selectedId, ViewClient action) { + return action.clientId; +} + final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), - TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_addContact), @@ -45,6 +53,10 @@ ClientEntity _updateEditing(ClientEntity client, action) { return action.client; } +ClientEntity _updateViewing(ClientEntity client, ViewClient action) { + return action.clientId; +} + ClientEntity _addContact(ClientEntity client, AddContact action) { return client.rebuild((b) => b ..contacts.add(ContactEntity()) diff --git a/lib/redux/client/client_state.dart b/lib/redux/client/client_state.dart index b881b7ea5..a34b0e57f 100644 --- a/lib/redux/client/client_state.dart +++ b/lib/redux/client/client_state.dart @@ -42,14 +42,15 @@ abstract class ClientState implements Built { abstract class ClientUIState extends Object with EntityUIState implements Built { @nullable - ClientEntity get selected; + ClientEntity get editing; - bool get isSelectedNew => selected.isNew(); + @override + bool get isCreatingNew => editing.isNew(); factory ClientUIState() { return _$ClientUIState._( listUIState: ListUIState(ClientFields.name), - selected: ClientEntity(), + editing: ClientEntity(), dropdownFilter: '', ); } diff --git a/lib/redux/client/client_state.g.dart b/lib/redux/client/client_state.g.dart index b050e7a2c..5fbeafc81 100644 --- a/lib/redux/client/client_state.g.dart +++ b/lib/redux/client/client_state.g.dart @@ -92,6 +92,9 @@ class _$ClientUIStateSerializer implements StructuredSerializer { Iterable serialize(Serializers serializers, ClientUIState object, {FullType specifiedType: FullType.unspecified}) { final result = [ + 'selectedId', + serializers.serialize(object.selectedId, + specifiedType: const FullType(int)), 'listUIState', serializers.serialize(object.listUIState, specifiedType: const FullType(ListUIState)), @@ -99,10 +102,10 @@ class _$ClientUIStateSerializer implements StructuredSerializer { serializers.serialize(object.dropdownFilter, specifiedType: const FullType(String)), ]; - if (object.selected != null) { + if (object.editing != null) { result - ..add('selected') - ..add(serializers.serialize(object.selected, + ..add('editing') + ..add(serializers.serialize(object.editing, specifiedType: const FullType(ClientEntity))); } @@ -120,10 +123,14 @@ class _$ClientUIStateSerializer implements StructuredSerializer { iterator.moveNext(); final dynamic value = iterator.current; switch (key) { - case 'selected': - result.selected.replace(serializers.deserialize(value, + case 'editing': + result.editing.replace(serializers.deserialize(value, specifiedType: const FullType(ClientEntity)) as ClientEntity); break; + case 'selectedId': + result.selectedId = serializers.deserialize(value, + specifiedType: const FullType(int)) as int; + break; case 'listUIState': result.listUIState.replace(serializers.deserialize(value, specifiedType: const FullType(ListUIState)) as ListUIState); @@ -253,7 +260,9 @@ class ClientStateBuilder implements Builder { class _$ClientUIState extends ClientUIState { @override - final ClientEntity selected; + final ClientEntity editing; + @override + final int selectedId; @override final ListUIState listUIState; @override @@ -262,8 +271,11 @@ class _$ClientUIState extends ClientUIState { factory _$ClientUIState([void updates(ClientUIStateBuilder b)]) => (new ClientUIStateBuilder()..update(updates)).build(); - _$ClientUIState._({this.selected, this.listUIState, this.dropdownFilter}) + _$ClientUIState._( + {this.editing, this.selectedId, this.listUIState, this.dropdownFilter}) : super._() { + if (selectedId == null) + throw new BuiltValueNullFieldError('ClientUIState', 'selectedId'); if (listUIState == null) throw new BuiltValueNullFieldError('ClientUIState', 'listUIState'); if (dropdownFilter == null) @@ -281,21 +293,25 @@ class _$ClientUIState extends ClientUIState { bool operator ==(dynamic other) { if (identical(other, this)) return true; if (other is! ClientUIState) return false; - return selected == other.selected && + return editing == other.editing && + selectedId == other.selectedId && listUIState == other.listUIState && dropdownFilter == other.dropdownFilter; } @override int get hashCode { - return $jf($jc($jc($jc(0, selected.hashCode), listUIState.hashCode), + return $jf($jc( + $jc($jc($jc(0, editing.hashCode), selectedId.hashCode), + listUIState.hashCode), dropdownFilter.hashCode)); } @override String toString() { return (newBuiltValueToStringHelper('ClientUIState') - ..add('selected', selected) + ..add('editing', editing) + ..add('selectedId', selectedId) ..add('listUIState', listUIState) ..add('dropdownFilter', dropdownFilter)) .toString(); @@ -306,10 +322,14 @@ class ClientUIStateBuilder implements Builder { _$ClientUIState _$v; - ClientEntityBuilder _selected; - ClientEntityBuilder get selected => - _$this._selected ??= new ClientEntityBuilder(); - set selected(ClientEntityBuilder selected) => _$this._selected = selected; + ClientEntityBuilder _editing; + ClientEntityBuilder get editing => + _$this._editing ??= new ClientEntityBuilder(); + set editing(ClientEntityBuilder editing) => _$this._editing = editing; + + int _selectedId; + int get selectedId => _$this._selectedId; + set selectedId(int selectedId) => _$this._selectedId = selectedId; ListUIStateBuilder _listUIState; ListUIStateBuilder get listUIState => @@ -326,7 +346,8 @@ class ClientUIStateBuilder ClientUIStateBuilder get _$this { if (_$v != null) { - _selected = _$v.selected?.toBuilder(); + _editing = _$v.editing?.toBuilder(); + _selectedId = _$v.selectedId; _listUIState = _$v.listUIState?.toBuilder(); _dropdownFilter = _$v.dropdownFilter; _$v = null; @@ -351,14 +372,16 @@ class ClientUIStateBuilder try { _$result = _$v ?? new _$ClientUIState._( - selected: _selected?.build(), + editing: _editing?.build(), + selectedId: selectedId, listUIState: listUIState.build(), dropdownFilter: dropdownFilter); } catch (_) { String _$failedField; try { - _$failedField = 'selected'; - _selected?.build(); + _$failedField = 'editing'; + _editing?.build(); + _$failedField = 'listUIState'; listUIState.build(); } catch (e) { diff --git a/lib/redux/invoice/invoice_actions.dart b/lib/redux/invoice/invoice_actions.dart index 827cdf71e..dfc5071c4 100644 --- a/lib/redux/invoice/invoice_actions.dart +++ b/lib/redux/invoice/invoice_actions.dart @@ -8,9 +8,9 @@ import 'package:invoiceninja/redux/app/app_actions.dart'; class ViewInvoiceList implements PersistUI {} class ViewInvoice implements PersistUI { - final InvoiceEntity invoice; + final int invoiceId; final BuildContext context; - ViewInvoice({this.invoice, this.context}); + ViewInvoice({this.invoiceId, this.context}); } class EditInvoice implements PersistUI { diff --git a/lib/redux/invoice/invoice_reducer.dart b/lib/redux/invoice/invoice_reducer.dart index d2572c2fb..58af38e30 100644 --- a/lib/redux/invoice/invoice_reducer.dart +++ b/lib/redux/invoice/invoice_reducer.dart @@ -10,8 +10,9 @@ import 'package:invoiceninja/redux/invoice/invoice_state.dart'; EntityUIState invoiceUIReducer(InvoiceUIState state, action) { return state.rebuild((b) => b ..listUIState.replace(invoiceListReducer(state.listUIState, action)) - ..selected.replace(editingReducer(state.selected, action)) + ..editing.replace(editingReducer(state.editing, action)) ..dropdownFilter = dropdownFilterReducer(state.dropdownFilter, action) + ..selectedId = selectedIdReducer(state.selectedId, action) ); } @@ -23,10 +24,17 @@ String filterClientDropdownReducer(String dropdownFilter, FilterInvoiceDropdown return action.filter; } +Reducer selectedIdReducer = combineReducers([ + TypedReducer(updateSelectedId), +]); + +int updateSelectedId(int selectedId, ViewInvoice action) { + return action.invoiceId; +} + final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), - TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), diff --git a/lib/redux/invoice/invoice_state.dart b/lib/redux/invoice/invoice_state.dart index 5c9399001..f7a617c63 100644 --- a/lib/redux/invoice/invoice_state.dart +++ b/lib/redux/invoice/invoice_state.dart @@ -42,14 +42,15 @@ abstract class InvoiceState implements Built abstract class InvoiceUIState extends Object with EntityUIState implements Built { @nullable - InvoiceEntity get selected; + InvoiceEntity get editing; - bool get isSelectedNew => selected.isNew(); + @override + bool get isCreatingNew => editing.isNew(); factory InvoiceUIState() { return _$InvoiceUIState._( listUIState: ListUIState(InvoiceFields.invoiceNumber), - selected: InvoiceEntity(), + editing: InvoiceEntity(), dropdownFilter: '', ); } diff --git a/lib/redux/invoice/invoice_state.g.dart b/lib/redux/invoice/invoice_state.g.dart index ec4406944..c2310fc11 100644 --- a/lib/redux/invoice/invoice_state.g.dart +++ b/lib/redux/invoice/invoice_state.g.dart @@ -94,6 +94,9 @@ class _$InvoiceUIStateSerializer Iterable serialize(Serializers serializers, InvoiceUIState object, {FullType specifiedType: FullType.unspecified}) { final result = [ + 'selectedId', + serializers.serialize(object.selectedId, + specifiedType: const FullType(int)), 'listUIState', serializers.serialize(object.listUIState, specifiedType: const FullType(ListUIState)), @@ -101,10 +104,10 @@ class _$InvoiceUIStateSerializer serializers.serialize(object.dropdownFilter, specifiedType: const FullType(String)), ]; - if (object.selected != null) { + if (object.editing != null) { result - ..add('selected') - ..add(serializers.serialize(object.selected, + ..add('editing') + ..add(serializers.serialize(object.editing, specifiedType: const FullType(InvoiceEntity))); } @@ -122,10 +125,14 @@ class _$InvoiceUIStateSerializer iterator.moveNext(); final dynamic value = iterator.current; switch (key) { - case 'selected': - result.selected.replace(serializers.deserialize(value, + case 'editing': + result.editing.replace(serializers.deserialize(value, specifiedType: const FullType(InvoiceEntity)) as InvoiceEntity); break; + case 'selectedId': + result.selectedId = serializers.deserialize(value, + specifiedType: const FullType(int)) as int; + break; case 'listUIState': result.listUIState.replace(serializers.deserialize(value, specifiedType: const FullType(ListUIState)) as ListUIState); @@ -257,7 +264,9 @@ class InvoiceStateBuilder class _$InvoiceUIState extends InvoiceUIState { @override - final InvoiceEntity selected; + final InvoiceEntity editing; + @override + final int selectedId; @override final ListUIState listUIState; @override @@ -266,8 +275,11 @@ class _$InvoiceUIState extends InvoiceUIState { factory _$InvoiceUIState([void updates(InvoiceUIStateBuilder b)]) => (new InvoiceUIStateBuilder()..update(updates)).build(); - _$InvoiceUIState._({this.selected, this.listUIState, this.dropdownFilter}) + _$InvoiceUIState._( + {this.editing, this.selectedId, this.listUIState, this.dropdownFilter}) : super._() { + if (selectedId == null) + throw new BuiltValueNullFieldError('InvoiceUIState', 'selectedId'); if (listUIState == null) throw new BuiltValueNullFieldError('InvoiceUIState', 'listUIState'); if (dropdownFilter == null) @@ -286,21 +298,25 @@ class _$InvoiceUIState extends InvoiceUIState { bool operator ==(dynamic other) { if (identical(other, this)) return true; if (other is! InvoiceUIState) return false; - return selected == other.selected && + return editing == other.editing && + selectedId == other.selectedId && listUIState == other.listUIState && dropdownFilter == other.dropdownFilter; } @override int get hashCode { - return $jf($jc($jc($jc(0, selected.hashCode), listUIState.hashCode), + return $jf($jc( + $jc($jc($jc(0, editing.hashCode), selectedId.hashCode), + listUIState.hashCode), dropdownFilter.hashCode)); } @override String toString() { return (newBuiltValueToStringHelper('InvoiceUIState') - ..add('selected', selected) + ..add('editing', editing) + ..add('selectedId', selectedId) ..add('listUIState', listUIState) ..add('dropdownFilter', dropdownFilter)) .toString(); @@ -311,10 +327,14 @@ class InvoiceUIStateBuilder implements Builder { _$InvoiceUIState _$v; - InvoiceEntityBuilder _selected; - InvoiceEntityBuilder get selected => - _$this._selected ??= new InvoiceEntityBuilder(); - set selected(InvoiceEntityBuilder selected) => _$this._selected = selected; + InvoiceEntityBuilder _editing; + InvoiceEntityBuilder get editing => + _$this._editing ??= new InvoiceEntityBuilder(); + set editing(InvoiceEntityBuilder editing) => _$this._editing = editing; + + int _selectedId; + int get selectedId => _$this._selectedId; + set selectedId(int selectedId) => _$this._selectedId = selectedId; ListUIStateBuilder _listUIState; ListUIStateBuilder get listUIState => @@ -331,7 +351,8 @@ class InvoiceUIStateBuilder InvoiceUIStateBuilder get _$this { if (_$v != null) { - _selected = _$v.selected?.toBuilder(); + _editing = _$v.editing?.toBuilder(); + _selectedId = _$v.selectedId; _listUIState = _$v.listUIState?.toBuilder(); _dropdownFilter = _$v.dropdownFilter; _$v = null; @@ -356,14 +377,16 @@ class InvoiceUIStateBuilder try { _$result = _$v ?? new _$InvoiceUIState._( - selected: _selected?.build(), + editing: _editing?.build(), + selectedId: selectedId, listUIState: listUIState.build(), dropdownFilter: dropdownFilter); } catch (_) { String _$failedField; try { - _$failedField = 'selected'; - _selected?.build(); + _$failedField = 'editing'; + _editing?.build(); + _$failedField = 'listUIState'; listUIState.build(); } catch (e) { diff --git a/lib/redux/product/product_reducer.dart b/lib/redux/product/product_reducer.dart index 3de9952c3..10d24db3e 100644 --- a/lib/redux/product/product_reducer.dart +++ b/lib/redux/product/product_reducer.dart @@ -9,7 +9,7 @@ import 'package:invoiceninja/redux/product/product_state.dart'; EntityUIState productUIReducer(ProductUIState state, action) { return state.rebuild((b) => b ..listUIState.replace(productListReducer(state.listUIState, action)) - ..selected.replace(editingReducer(state.selected, action)) + ..editing.replace(editingReducer(state.editing, action)) ..dropdownFilter = dropdownFilterReducer(state.dropdownFilter, action) ); } diff --git a/lib/redux/product/product_state.dart b/lib/redux/product/product_state.dart index b03a5222c..8ef02b377 100644 --- a/lib/redux/product/product_state.dart +++ b/lib/redux/product/product_state.dart @@ -42,14 +42,15 @@ abstract class ProductState implements Built abstract class ProductUIState extends Object with EntityUIState implements Built { @nullable - ProductEntity get selected; + ProductEntity get editing; - bool get isSelectedNew => selected.isNew(); + @override + bool get isCreatingNew => editing.isNew(); factory ProductUIState() { return _$ProductUIState._( listUIState: ListUIState(ProductFields.productKey), - selected: ProductEntity(), + editing: ProductEntity(), dropdownFilter: '', ); } diff --git a/lib/redux/product/product_state.g.dart b/lib/redux/product/product_state.g.dart index b1235c589..885128e81 100644 --- a/lib/redux/product/product_state.g.dart +++ b/lib/redux/product/product_state.g.dart @@ -94,6 +94,9 @@ class _$ProductUIStateSerializer Iterable serialize(Serializers serializers, ProductUIState object, {FullType specifiedType: FullType.unspecified}) { final result = [ + 'selectedId', + serializers.serialize(object.selectedId, + specifiedType: const FullType(int)), 'listUIState', serializers.serialize(object.listUIState, specifiedType: const FullType(ListUIState)), @@ -101,10 +104,10 @@ class _$ProductUIStateSerializer serializers.serialize(object.dropdownFilter, specifiedType: const FullType(String)), ]; - if (object.selected != null) { + if (object.editing != null) { result - ..add('selected') - ..add(serializers.serialize(object.selected, + ..add('editing') + ..add(serializers.serialize(object.editing, specifiedType: const FullType(ProductEntity))); } @@ -122,10 +125,14 @@ class _$ProductUIStateSerializer iterator.moveNext(); final dynamic value = iterator.current; switch (key) { - case 'selected': - result.selected.replace(serializers.deserialize(value, + case 'editing': + result.editing.replace(serializers.deserialize(value, specifiedType: const FullType(ProductEntity)) as ProductEntity); break; + case 'selectedId': + result.selectedId = serializers.deserialize(value, + specifiedType: const FullType(int)) as int; + break; case 'listUIState': result.listUIState.replace(serializers.deserialize(value, specifiedType: const FullType(ListUIState)) as ListUIState); @@ -257,7 +264,9 @@ class ProductStateBuilder class _$ProductUIState extends ProductUIState { @override - final ProductEntity selected; + final ProductEntity editing; + @override + final int selectedId; @override final ListUIState listUIState; @override @@ -266,8 +275,11 @@ class _$ProductUIState extends ProductUIState { factory _$ProductUIState([void updates(ProductUIStateBuilder b)]) => (new ProductUIStateBuilder()..update(updates)).build(); - _$ProductUIState._({this.selected, this.listUIState, this.dropdownFilter}) + _$ProductUIState._( + {this.editing, this.selectedId, this.listUIState, this.dropdownFilter}) : super._() { + if (selectedId == null) + throw new BuiltValueNullFieldError('ProductUIState', 'selectedId'); if (listUIState == null) throw new BuiltValueNullFieldError('ProductUIState', 'listUIState'); if (dropdownFilter == null) @@ -286,21 +298,25 @@ class _$ProductUIState extends ProductUIState { bool operator ==(dynamic other) { if (identical(other, this)) return true; if (other is! ProductUIState) return false; - return selected == other.selected && + return editing == other.editing && + selectedId == other.selectedId && listUIState == other.listUIState && dropdownFilter == other.dropdownFilter; } @override int get hashCode { - return $jf($jc($jc($jc(0, selected.hashCode), listUIState.hashCode), + return $jf($jc( + $jc($jc($jc(0, editing.hashCode), selectedId.hashCode), + listUIState.hashCode), dropdownFilter.hashCode)); } @override String toString() { return (newBuiltValueToStringHelper('ProductUIState') - ..add('selected', selected) + ..add('editing', editing) + ..add('selectedId', selectedId) ..add('listUIState', listUIState) ..add('dropdownFilter', dropdownFilter)) .toString(); @@ -311,10 +327,14 @@ class ProductUIStateBuilder implements Builder { _$ProductUIState _$v; - ProductEntityBuilder _selected; - ProductEntityBuilder get selected => - _$this._selected ??= new ProductEntityBuilder(); - set selected(ProductEntityBuilder selected) => _$this._selected = selected; + ProductEntityBuilder _editing; + ProductEntityBuilder get editing => + _$this._editing ??= new ProductEntityBuilder(); + set editing(ProductEntityBuilder editing) => _$this._editing = editing; + + int _selectedId; + int get selectedId => _$this._selectedId; + set selectedId(int selectedId) => _$this._selectedId = selectedId; ListUIStateBuilder _listUIState; ListUIStateBuilder get listUIState => @@ -331,7 +351,8 @@ class ProductUIStateBuilder ProductUIStateBuilder get _$this { if (_$v != null) { - _selected = _$v.selected?.toBuilder(); + _editing = _$v.editing?.toBuilder(); + _selectedId = _$v.selectedId; _listUIState = _$v.listUIState?.toBuilder(); _dropdownFilter = _$v.dropdownFilter; _$v = null; @@ -356,14 +377,16 @@ class ProductUIStateBuilder try { _$result = _$v ?? new _$ProductUIState._( - selected: _selected?.build(), + editing: _editing?.build(), + selectedId: selectedId, listUIState: listUIState.build(), dropdownFilter: dropdownFilter); } catch (_) { String _$failedField; try { - _$failedField = 'selected'; - _selected?.build(); + _$failedField = 'editing'; + _editing?.build(); + _$failedField = 'listUIState'; listUIState.build(); } catch (e) { diff --git a/lib/redux/ui/entity_ui_state.dart b/lib/redux/ui/entity_ui_state.dart index 3711255c7..1ad4243f6 100644 --- a/lib/redux/ui/entity_ui_state.dart +++ b/lib/redux/ui/entity_ui_state.dart @@ -2,7 +2,8 @@ import 'package:invoiceninja/redux/ui/list_ui_state.dart'; abstract class EntityUIState { - bool get isSelectedNew; + bool get isCreatingNew; + int get selectedId; ListUIState get listUIState; String get dropdownFilter; } \ No newline at end of file diff --git a/lib/ui/client/client_list_vm.dart b/lib/ui/client/client_list_vm.dart index f663a78ba..70320483e 100644 --- a/lib/ui/client/client_list_vm.dart +++ b/lib/ui/client/client_list_vm.dart @@ -72,7 +72,7 @@ class ClientListVM { isLoading: store.state.isLoading, isLoaded: store.state.clientState.isLoaded, onClientTap: (context, client) { - store.dispatch(ViewClient(client: client, context: context)); + store.dispatch(ViewClient(clientId: client.id, context: context)); }, onRefreshed: (context) => _handleRefresh(context), onDismissed: (BuildContext context, ClientEntity client, diff --git a/lib/ui/client/edit/client_edit_vm.dart b/lib/ui/client/edit/client_edit_vm.dart index 52d808400..c4c7e8a49 100644 --- a/lib/ui/client/edit/client_edit_vm.dart +++ b/lib/ui/client/edit/client_edit_vm.dart @@ -54,7 +54,7 @@ class ClientEditVM { }); factory ClientEditVM.fromStore(Store store) { - final client = store.state.clientUIState.selected; + final client = store.state.clientUIState.editing; return ClientEditVM( client: client, diff --git a/lib/ui/client/view/client_view_vm.dart b/lib/ui/client/view/client_view_vm.dart index d87a960d9..87e41105f 100644 --- a/lib/ui/client/view/client_view_vm.dart +++ b/lib/ui/client/view/client_view_vm.dart @@ -51,7 +51,8 @@ class ClientViewVM { }); factory ClientViewVM.fromStore(Store store) { - final client = store.state.clientUIState.selected; + final state = store.state; + final client = state.clientState.map[state.clientUIState.selectedId]; return ClientViewVM( state: store.state, diff --git a/lib/ui/invoice/edit/invoice_edit_details_vm.dart b/lib/ui/invoice/edit/invoice_edit_details_vm.dart index 4e990a1b7..630839ed6 100644 --- a/lib/ui/invoice/edit/invoice_edit_details_vm.dart +++ b/lib/ui/invoice/edit/invoice_edit_details_vm.dart @@ -47,7 +47,7 @@ class InvoiceEditDetailsVM { factory InvoiceEditDetailsVM.fromStore(Store store) { AppState state = store.state; - final invoice = state.invoiceUIState.selected; + final invoice = state.invoiceUIState.editing; return InvoiceEditDetailsVM( state: state, diff --git a/lib/ui/invoice/edit/invoice_edit_items_vm.dart b/lib/ui/invoice/edit/invoice_edit_items_vm.dart index 1737b266a..9c50e166f 100644 --- a/lib/ui/invoice/edit/invoice_edit_items_vm.dart +++ b/lib/ui/invoice/edit/invoice_edit_items_vm.dart @@ -40,7 +40,7 @@ class InvoiceEditItemsVM { factory InvoiceEditItemsVM.fromStore(Store store) { AppState state = store.state; - final invoice = state.invoiceUIState.selected; + final invoice = state.invoiceUIState.editing; return InvoiceEditItemsVM( state: state, diff --git a/lib/ui/invoice/edit/invoice_edit_vm.dart b/lib/ui/invoice/edit/invoice_edit_vm.dart index 3f01f2df1..912bf4cd4 100644 --- a/lib/ui/invoice/edit/invoice_edit_vm.dart +++ b/lib/ui/invoice/edit/invoice_edit_vm.dart @@ -55,7 +55,7 @@ class InvoiceEditVM { factory InvoiceEditVM.fromStore(Store store) { AppState state = store.state; - final invoice = state.invoiceUIState.selected; + final invoice = state.invoiceUIState.editing; return InvoiceEditVM( state: state, diff --git a/lib/ui/invoice/invoice_list_vm.dart b/lib/ui/invoice/invoice_list_vm.dart index e96e06f46..f6ad3b99f 100644 --- a/lib/ui/invoice/invoice_list_vm.dart +++ b/lib/ui/invoice/invoice_list_vm.dart @@ -82,7 +82,7 @@ class InvoiceListVM { isLoaded: state.invoiceState.isLoaded && state.clientState.isLoaded, onInvoiceTap: (context, invoice) { - store.dispatch(ViewInvoice(invoice: invoice, context: context)); + store.dispatch(ViewInvoice(invoiceId: invoice.id, context: context)); }, onRefreshed: (context) => _handleRefresh(context), onDismissed: (BuildContext context, InvoiceEntity invoice, diff --git a/lib/ui/invoice/view/invoice_view_vm.dart b/lib/ui/invoice/view/invoice_view_vm.dart index 6251b7b51..e8b07494a 100644 --- a/lib/ui/invoice/view/invoice_view_vm.dart +++ b/lib/ui/invoice/view/invoice_view_vm.dart @@ -57,7 +57,8 @@ class InvoiceViewVM { }); factory InvoiceViewVM.fromStore(Store store) { - final invoice = store.state.invoiceUIState.selected; + final state = store.state; + final invoice = state.invoiceState.map[state.invoiceUIState.selectedId]; final client = store.state.clientState.map[invoice.clientId]; Future _viewPdf(BuildContext context) async { @@ -91,7 +92,7 @@ class InvoiceViewVM { }, onBackPressed: () => store.dispatch(UpdateCurrentRoute(InvoiceScreen.route)), onClientPressed: (BuildContext context) { - store.dispatch(ViewClient(client: client, context: context)); + store.dispatch(ViewClient(clientId: client.id, context: context)); }, onActionSelected: (BuildContext context, EntityAction action) { final Completer completer = new Completer(); diff --git a/lib/ui/product/edit/product_edit_vm.dart b/lib/ui/product/edit/product_edit_vm.dart index 283acad8d..d278c58c5 100644 --- a/lib/ui/product/edit/product_edit_vm.dart +++ b/lib/ui/product/edit/product_edit_vm.dart @@ -55,7 +55,7 @@ class ProductEditVM { }); factory ProductEditVM.fromStore(Store store) { - final product = store.state.productUIState.selected; + final product = store.state.productUIState.editing; return ProductEditVM( state: store.state,