diff --git a/lib/data/models/transaction_rule_model.dart b/lib/data/models/transaction_rule_model.dart index da357d4f3..74327bb38 100644 --- a/lib/data/models/transaction_rule_model.dart +++ b/lib/data/models/transaction_rule_model.dart @@ -220,9 +220,9 @@ abstract class TransactionRuleCriteriaEntity @BuiltValueField(wireName: 'search_key') String get searchKey; - @nullable String get operator; + @nullable String get value; // ignore: unused_element diff --git a/lib/data/models/transaction_rule_model.g.dart b/lib/data/models/transaction_rule_model.g.dart index 8b7c44edf..5afdb2d72 100644 --- a/lib/data/models/transaction_rule_model.g.dart +++ b/lib/data/models/transaction_rule_model.g.dart @@ -293,15 +293,15 @@ class _$TransactionRuleCriteriaEntitySerializer 'search_key', serializers.serialize(object.searchKey, specifiedType: const FullType(String)), - 'value', - serializers.serialize(object.value, + 'operator', + serializers.serialize(object.operator, specifiedType: const FullType(String)), ]; Object value; - value = object.operator; + value = object.value; if (value != null) { result - ..add('operator') + ..add('value') ..add(serializers.serialize(value, specifiedType: const FullType(String))); } @@ -861,7 +861,7 @@ class _$TransactionRuleCriteriaEntity extends TransactionRuleCriteriaEntity { BuiltValueNullFieldError.checkNotNull( searchKey, 'TransactionRuleCriteriaEntity', 'searchKey'); BuiltValueNullFieldError.checkNotNull( - value, 'TransactionRuleCriteriaEntity', 'value'); + operator, 'TransactionRuleCriteriaEntity', 'operator'); } @override @@ -947,9 +947,9 @@ class TransactionRuleCriteriaEntityBuilder new _$TransactionRuleCriteriaEntity._( searchKey: BuiltValueNullFieldError.checkNotNull( searchKey, 'TransactionRuleCriteriaEntity', 'searchKey'), - operator: operator, - value: BuiltValueNullFieldError.checkNotNull( - value, 'TransactionRuleCriteriaEntity', 'value')); + operator: BuiltValueNullFieldError.checkNotNull( + operator, 'TransactionRuleCriteriaEntity', 'operator'), + value: value); replace(_$result); return _$result; } diff --git a/lib/ui/transaction_rule/edit/transaction_rule_edit.dart b/lib/ui/transaction_rule/edit/transaction_rule_edit.dart index 9f14b4a44..dfe954c93 100644 --- a/lib/ui/transaction_rule/edit/transaction_rule_edit.dart +++ b/lib/ui/transaction_rule/edit/transaction_rule_edit.dart @@ -182,7 +182,7 @@ class _TransactionRuleEditState extends State { child: Text(localization.lookup(rule.operator)), ), Expanded( - child: Text(rule.value), + child: Text(rule.value ?? ''), ), SizedBox( width: 100, @@ -322,7 +322,9 @@ class __RuleCriteriaState extends State<_RuleCriteria> { void onDonePressed() { if (_criteria.searchKey.isEmpty || _criteria.operator.isEmpty || - _criteria.value.isEmpty) { + (_criteria.value.isEmpty && + _criteria.operator != + TransactionRuleCriteriaEntity.STRING_OPERATOR_IS_EMPTY)) { return; } @@ -422,17 +424,19 @@ class __RuleCriteriaState extends State<_RuleCriteria> { ), ], ), - DecoratedFormField( - label: localization.value, - initialValue: _criteria.value, - keyboardType: TextInputType.text, - onChanged: (value) { - setState(() { - _criteria = _criteria.rebuild((b) => b..value = value); - }); - }, - onSavePressed: (context) => onDonePressed(), - ) + if (_criteria.operator != + TransactionRuleCriteriaEntity.STRING_OPERATOR_IS_EMPTY) + DecoratedFormField( + label: localization.value, + initialValue: _criteria.value, + keyboardType: TextInputType.text, + onChanged: (value) { + setState(() { + _criteria = _criteria.rebuild((b) => b..value = value); + }); + }, + onSavePressed: (context) => onDonePressed(), + ) ], ), actions: [ diff --git a/lib/ui/transaction_rule/view/transaction_rule_view.dart b/lib/ui/transaction_rule/view/transaction_rule_view.dart index 580babd48..e32e45f97 100644 --- a/lib/ui/transaction_rule/view/transaction_rule_view.dart +++ b/lib/ui/transaction_rule/view/transaction_rule_view.dart @@ -26,6 +26,7 @@ class _TransactionRuleViewState extends State { return ViewScaffold( isFilter: widget.isFilter, entity: transactionRule, + onBackPressed: () => viewModel.onBackPressed(), body: ScrollableListView( children: [], ), diff --git a/lib/ui/transaction_rule/view/transaction_rule_view_vm.dart b/lib/ui/transaction_rule/view/transaction_rule_view_vm.dart index 58f4b1c52..728c5b0a3 100644 --- a/lib/ui/transaction_rule/view/transaction_rule_view_vm.dart +++ b/lib/ui/transaction_rule/view/transaction_rule_view_vm.dart @@ -2,6 +2,8 @@ import 'dart:async'; import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; +import 'package:invoiceninja_flutter/ui/transaction_rule/transaction_rule_screen.dart'; import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:redux/redux.dart'; @@ -47,6 +49,7 @@ class TransactionRuleViewVM { @required this.isSaving, @required this.isLoading, @required this.isDirty, + @required this.onBackPressed, }); factory TransactionRuleViewVM.fromStore(Store store) { @@ -71,6 +74,9 @@ class TransactionRuleViewVM { isDirty: transactionRule.isNew, transactionRule: transactionRule, onRefreshed: (context) => _handleRefresh(context), + onBackPressed: () { + store.dispatch(UpdateCurrentRoute(TransactionRuleScreen.route)); + }, onEntityAction: (BuildContext context, EntityAction action) => handleEntitiesActions([transactionRule], action, autoPop: true), ); @@ -80,6 +86,7 @@ class TransactionRuleViewVM { final TransactionRuleEntity transactionRule; final CompanyEntity company; final Function(BuildContext, EntityAction) onEntityAction; + final Function onBackPressed; final Function(BuildContext) onRefreshed; final bool isSaving; final bool isLoading; diff --git a/stubs/ui/stub/view/stub_view b/stubs/ui/stub/view/stub_view index 0e0bc4fd8..f832eccc0 100644 --- a/stubs/ui/stub/view/stub_view +++ b/stubs/ui/stub/view/stub_view @@ -27,6 +27,7 @@ class _StubViewState extends State { return ViewScaffold( isFilter: widget.isFilter, entity: stub, + onBackPressed: () => viewModel.onBackPressed(), body: ScrollableListView( children: [ ], diff --git a/stubs/ui/stub/view/stub_view_vm b/stubs/ui/stub/view/stub_view_vm index 760b6fde1..21c669a73 100644 --- a/stubs/ui/stub/view/stub_view_vm +++ b/stubs/ui/stub/view/stub_view_vm @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:redux/redux.dart'; +import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; +import 'package:invoiceninja_flutter/ui/stub/stub_screen.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; @@ -42,6 +44,7 @@ class StubViewVM { @required this.isSaving, @required this.isLoading, @required this.isDirty, + @required this.onBackPressed, }); factory StubViewVM.fromStore(Store store) { @@ -64,6 +67,9 @@ class StubViewVM { isDirty: stub.isNew, stub: stub, onRefreshed: (context) => _handleRefresh(context), + onBackPressed: () { + store.dispatch(UpdateCurrentRoute(StubScreen.route)); + }, onEntityAction: (BuildContext context, EntityAction action) => handleEntitiesActions([stub], action, autoPop: true), ); @@ -74,6 +80,7 @@ class StubViewVM { final CompanyEntity company; final Function(BuildContext, EntityAction) onEntityAction; final Function(BuildContext) onRefreshed; + final Function onBackPressed; final bool isSaving; final bool isLoading; final bool isDirty;