diff --git a/lib/data/models/task_status_model.dart b/lib/data/models/task_status_model.dart index a1e311762..ab35ad278 100644 --- a/lib/data/models/task_status_model.dart +++ b/lib/data/models/task_status_model.dart @@ -99,6 +99,9 @@ abstract class TaskStatusEntity extends Object case TaskStatusFields.name: response = taskStatusA.name.compareTo(taskStatusB.name); break; + case TaskStatusFields.sortOrder: + response = taskStatusA.sortOrder.compareTo(taskStatusB.sortOrder); + break; default: print('## ERROR: sort by taskStatus.$sortField is not implemented'); break; diff --git a/lib/ui/task_status/edit/task_status_edit_vm.dart b/lib/ui/task_status/edit/task_status_edit_vm.dart index ae22f6976..8e1cb1dc4 100644 --- a/lib/ui/task_status/edit/task_status_edit_vm.dart +++ b/lib/ui/task_status/edit/task_status_edit_vm.dart @@ -64,6 +64,7 @@ class TaskStatusEditVM { }, onCancelPressed: (BuildContext context) { createEntity(context: context, entity: TaskStatusEntity(), force: true); + store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); }, onSavePressed: (BuildContext context) { final Completer completer = diff --git a/lib/ui/task_status/view/task_status_view.dart b/lib/ui/task_status/view/task_status_view.dart index aaac1cdb3..cac31cc74 100644 --- a/lib/ui/task_status/view/task_status_view.dart +++ b/lib/ui/task_status/view/task_status_view.dart @@ -26,6 +26,7 @@ class _TaskStatusViewState extends State { return ViewScaffold( isFilter: widget.isFilter, entity: taskStatus, + onBackPressed: () => viewModel.onBackPressed(), body: ListView( children: [], ), diff --git a/lib/ui/task_status/view/task_status_view_vm.dart b/lib/ui/task_status/view/task_status_view_vm.dart index a35402262..c37ae6d91 100644 --- a/lib/ui/task_status/view/task_status_view_vm.dart +++ b/lib/ui/task_status/view/task_status_view_vm.dart @@ -3,6 +3,8 @@ import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; +import 'package:invoiceninja_flutter/ui/task_status/task_status_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 TaskStatusViewVM { @required this.isSaving, @required this.isLoading, @required this.isDirty, + @required this.onBackPressed, }); factory TaskStatusViewVM.fromStore(Store store) { @@ -73,6 +76,8 @@ class TaskStatusViewVM { onRefreshed: (context) => _handleRefresh(context), onEntityAction: (BuildContext context, EntityAction action) => handleEntitiesActions(context, [taskStatus], action, autoPop: true), + onBackPressed: () => + store.dispatch(UpdateCurrentRoute(TaskStatusScreen.route)), ); } @@ -81,6 +86,7 @@ class TaskStatusViewVM { final CompanyEntity company; final Function(BuildContext, EntityAction) onEntityAction; final Function(BuildContext) onRefreshed; + final Function onBackPressed; final bool isSaving; final bool isLoading; final bool isDirty; diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index a15bba3ae..8cb364a53 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -15,6 +15,7 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { // STARTER: lang key - do not remove comment + 'sort_order': 'Sort Order', 'task_status': 'Status', 'task_statuses': 'Task Statuses', 'new_task_status': 'New Task Status', @@ -4832,6 +4833,8 @@ mixin LocalizationsProvider on LocaleCodeAware { String get showTasksTableHelp => _localizedValues[localeCode]['show_tasks_table_help'] ?? ''; + String get sortOrder => _localizedValues[localeCode]['sort_order'] ?? ''; + String lookup(String key) { final lookupKey = toSnakeCase(key);