From 141866fb89b9d7d4e7891d97dd202d8abaa12cb5 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 6 Oct 2019 16:12:52 +0300 Subject: [PATCH] Settings --- lib/ui/group/edit/group_edit.dart | 51 ++++++++--------- lib/ui/group/edit/group_edit_vm.dart | 24 ++++---- lib/ui/group/group_list.dart | 86 +++++++++++++--------------- lib/ui/group/group_list_vm.dart | 38 ++++++------ lib/utils/i18n.dart | 3 + stubs/ui/stub/edit/stub_edit | 3 +- stubs/ui/stub/edit/stub_edit_vm | 1 + stubs/ui/stub/stub_list | 1 + stubs/ui/stub/stub_list_vm | 1 + 9 files changed, 104 insertions(+), 104 deletions(-) diff --git a/lib/ui/group/edit/group_edit.dart b/lib/ui/group/edit/group_edit.dart index 682616906..c40582cf8 100644 --- a/lib/ui/group/edit/group_edit.dart +++ b/lib/ui/group/edit/group_edit.dart @@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/group/edit/group_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; +import 'package:invoiceninja_flutter/utils/platforms.dart'; class GroupEdit extends StatefulWidget { const GroupEdit({ @@ -26,7 +27,6 @@ class _GroupEditState extends State { @override void didChangeDependencies() { - _controllers = [ // STARTER: array - do not remove comment ]; @@ -53,8 +53,8 @@ class _GroupEditState extends State { void _onChanged() { final group = widget.viewModel.group.rebuild((b) => b - // STARTER: set value - do not remove comment - ); + // STARTER: set value - do not remove comment + ); if (group != widget.viewModel.group) { widget.viewModel.onChanged(group); } @@ -72,33 +72,33 @@ class _GroupEditState extends State { return true; }, child: Scaffold( - automaticallyImplyLeading: isMobile(context), appBar: AppBar( + automaticallyImplyLeading: isMobile(context), title: Text(viewModel.group.isNew ? localization.newGroup : localization.editGroup), actions: [ - if (!isMobile(context)) - FlatButton( - child: Text( - localization.cancel, - style: TextStyle(color: Colors.white), - ), - onPressed: () => viewModel.onCancelPressed(context), - ), - ActionIconButton( - icon: Icons.cloud_upload, - tooltip: localization.save, - isVisible: !group.isDeleted, - isDirty: group.isNew || group != viewModel.origGroup, - isSaving: viewModel.isSaving, - onPressed: () { - if (! _formKey.currentState.validate()) { - return; - } - viewModel.onSavePressed(context); - }, + if (!isMobile(context)) + FlatButton( + child: Text( + localization.cancel, + style: TextStyle(color: Colors.white), ), + onPressed: () => viewModel.onCancelPressed(context), + ), + ActionIconButton( + icon: Icons.cloud_upload, + tooltip: localization.save, + isVisible: !group.isDeleted, + isDirty: group.isNew || group != viewModel.origGroup, + isSaving: viewModel.isSaving, + onPressed: () { + if (!_formKey.currentState.validate()) { + return; + } + viewModel.onSavePressed(context); + }, + ), ], ), body: Form( @@ -113,8 +113,7 @@ class _GroupEditState extends State { ), ], ); - }) - ), + })), ), ); } diff --git a/lib/ui/group/edit/group_edit_vm.dart b/lib/ui/group/edit/group_edit_vm.dart index a2d7e66b7..1773b9e8a 100644 --- a/lib/ui/group/edit/group_edit_vm.dart +++ b/lib/ui/group/edit/group_edit_vm.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/ui/group/group_screen.dart'; +import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:redux/redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart'; @@ -62,25 +63,26 @@ class GroupEditVM { }, onBackPressed: () { if (state.uiState.currentRoute.contains(GroupScreen.route)) { - store.dispatch(UpdateCurrentRoute(group.isNew ? GroupScreen.route : GroupViewScreen.route)); + store.dispatch(UpdateCurrentRoute( + group.isNew ? GroupScreen.route : GroupViewScreen.route)); } }, - onCancelPressed: (BuildContext context) { - store.dispatch(EditGroup( - group: GroupEntity(), context: context, force: true)); - store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); - }, + onCancelPressed: (BuildContext context) { + store.dispatch( + EditGroup(group: GroupEntity(), context: context, force: true)); + store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); + }, onSavePressed: (BuildContext context) { final Completer completer = new Completer(); store.dispatch(SaveGroupRequest(completer: completer, group: group)); return completer.future.then((savedGroup) { store.dispatch(UpdateCurrentRoute(GroupViewScreen.route)); if (isMobile(context)) { - if (group.isNew) { - Navigator.of(context).pushReplacementNamed(GroupViewScreen.route); - } else { - Navigator.of(context).pop(savedGroup); - } + if (group.isNew) { + Navigator.of(context).pushReplacementNamed(GroupViewScreen.route); + } else { + Navigator.of(context).pop(savedGroup); + } } }).catchError((Object error) { showDialog( diff --git a/lib/ui/group/group_list.dart b/lib/ui/group/group_list.dart index 7479c11b3..dd8cfe430 100644 --- a/lib/ui/group/group_list.dart +++ b/lib/ui/group/group_list.dart @@ -2,12 +2,11 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; +import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; -import 'package:invoiceninja_flutter/ui/app/snackbar_row.dart'; import 'package:invoiceninja_flutter/ui/group/group_list_item.dart'; import 'package:invoiceninja_flutter/ui/group/group_list_vm.dart'; -import 'package:invoiceninja_flutter/utils/icons.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class GroupList extends StatelessWidget { @@ -30,53 +29,48 @@ class GroupList extends StatelessWidget { return Column( children: [ - - Expanded( - child: !viewModel.isLoaded - ? (viewModel.isLoading ? LoadingIndicator() : SizedBox()) - : RefreshIndicator( - onRefresh: () => viewModel.onRefreshed(context), - child: viewModel.groupList.isEmpty - ? HelpText(AppLocalization.of(context).noRecordsFound) - : ListView.separated( - shrinkWrap: true, - separatorBuilder: (context, index) => ListDivider(), - itemCount: viewModel.groupList.length, - itemBuilder: (BuildContext context, index) { - final groupId = viewModel.groupList[index]; - final group = viewModel.groupMap[groupId]; - final user = viewModel.user; + Expanded( + child: !viewModel.isLoaded + ? (viewModel.isLoading ? LoadingIndicator() : SizedBox()) + : RefreshIndicator( + onRefresh: () => viewModel.onRefreshed(context), + child: viewModel.groupList.isEmpty + ? HelpText(AppLocalization.of(context).noRecordsFound) + : ListView.separated( + shrinkWrap: true, + separatorBuilder: (context, index) => ListDivider(), + itemCount: viewModel.groupList.length, + itemBuilder: (BuildContext context, index) { + final groupId = viewModel.groupList[index]; + final group = viewModel.groupMap[groupId]; + final user = viewModel.user; - void showDialog() => showEntityActionsDialog( - entity: group, - context: context, - user: user, - onEntityAction: viewModel.onEntityAction); + void showDialog() => showEntityActionsDialog( + entity: group, + context: context, + user: user, + onEntityAction: viewModel.onEntityAction); + return GroupListItem( + user: viewModel.user, + filter: viewModel.filter, + group: group, + onTap: () => viewModel.onGroupTap(context, group), + onEntityAction: (EntityAction action) { + if (action == EntityAction.more) { + showDialog(); + } else { + viewModel.onEntityAction( + context, group, action); + } + }, + onLongPress: () => showDialog(), + ); + }, + ), + ), + ), - return GroupListItem( - user: viewModel.user, - filter: viewModel.filter, - group: group, - onTap: () => - viewModel.onGroupTap(context, group), - onEntityAction: (EntityAction action) { - if (action == EntityAction.more) { - showDialog(); - } else { - viewModel.onEntityAction( - context, group, action); - } - }, - onLongPress: () => - showDialog(), - ); - }, - ), - ), - ), - - /* filteredClient != null ? Material( diff --git a/lib/ui/group/group_list_vm.dart b/lib/ui/group/group_list_vm.dart index fcf0f82de..ecb37871a 100644 --- a/lib/ui/group/group_list_vm.dart +++ b/lib/ui/group/group_list_vm.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:invoiceninja_flutter/data/models/group_model.dart'; import 'package:redux/redux.dart'; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; @@ -61,27 +62,25 @@ class GroupListVM { final state = store.state; return GroupListVM( - user: state.user, - listState: state.groupListState, - groupList: memoizedFilteredGroupList(state.groupState.map, - state.groupState.list, state.groupListState), - groupMap: state.groupState.map, - isLoading: state.isLoading, - isLoaded: state.groupState.isLoaded, - filter: state.groupUIState.listUIState.filter, - onClearEntityFilterPressed: () => - store.dispatch(FilterGroupsByEntity()), - onViewEntityFilterPressed: (BuildContext context) => store.dispatch( - ViewClient( - clientId: state.groupListState.filterEntityId, - context: context)), - onGroupTap: (context, group) { - store.dispatch(ViewGroup(groupId: group.id, context: context)); - }, + user: state.user, + listState: state.groupListState, + groupList: memoizedFilteredGroupList( + state.groupState.map, state.groupState.list, state.groupListState), + groupMap: state.groupState.map, + isLoading: state.isLoading, + isLoaded: state.groupState.isLoaded, + filter: state.groupUIState.listUIState.filter, + onClearEntityFilterPressed: () => store.dispatch(FilterGroupsByEntity()), + onViewEntityFilterPressed: (BuildContext context) => store.dispatch( + ViewClient( + clientId: state.groupListState.filterEntityId, context: context)), + onGroupTap: (context, group) { + store.dispatch(ViewGroup(groupId: group.id, context: context)); + }, onEntityAction: (BuildContext context, BaseEntity group, EntityAction action) => - handleGroupAction(context, group, action), - onRefreshed: (context) => _handleRefresh(context), + handleGroupAction(context, group, action), + onRefreshed: (context) => _handleRefresh(context), ); } @@ -97,5 +96,4 @@ class GroupListVM { final Function(BuildContext, GroupEntity, EntityAction) onEntityAction; final Function onClearEntityFilterPressed; final Function(BuildContext) onViewEntityFilterPressed; - } diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 8633a1d9e..6f6070238 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -15,6 +15,7 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { 'new_group': 'New Group', + 'edit_group': 'Edit Group', 'created_group': 'Successfully created group', 'updated_group': 'Successfully updated group', 'archived_group': 'Successfully archived group', @@ -14706,6 +14707,8 @@ mixin LocalizationsProvider on LocaleCodeAware { String get restoredGroup => _localizedValues[localeCode]['restored_group']; + String get editGroup => _localizedValues[localeCode]['edit_group']; + String lookup(String key) { final lookupKey = toSnakeCase(key); return _localizedValues[localeCode][lookupKey] ?? diff --git a/stubs/ui/stub/edit/stub_edit b/stubs/ui/stub/edit/stub_edit index 4074a7386..121f3e930 100644 --- a/stubs/ui/stub/edit/stub_edit +++ b/stubs/ui/stub/edit/stub_edit @@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; +import 'package:invoiceninja_flutter/utils/platforms.dart'; class StubEdit extends StatefulWidget { const StubEdit({ @@ -72,8 +73,8 @@ class _StubEditState extends State { return true; }, child: Scaffold( - automaticallyImplyLeading: isMobile(context), appBar: AppBar( + automaticallyImplyLeading: isMobile(context), title: Text(viewModel.stub.isNew ? localization.newStub : localization.editStub), diff --git a/stubs/ui/stub/edit/stub_edit_vm b/stubs/ui/stub/edit/stub_edit_vm index 6a299e943..715df0552 100644 --- a/stubs/ui/stub/edit/stub_edit_vm +++ b/stubs/ui/stub/edit/stub_edit_vm @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/ui/stub/stub_screen.dart'; +import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:redux/redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart'; diff --git a/stubs/ui/stub/stub_list b/stubs/ui/stub/stub_list index b96254c85..f51dc1d33 100644 --- a/stubs/ui/stub/stub_list +++ b/stubs/ui/stub/stub_list @@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; +import 'package:invoiceninja_flutter/ui/app/help_text.dart'; import 'package:invoiceninja_flutter/ui/app/snackbar_row.dart'; import 'package:invoiceninja_flutter/ui/stub/stub_list_item.dart'; import 'package:invoiceninja_flutter/ui/stub/stub_list_vm.dart'; diff --git a/stubs/ui/stub/stub_list_vm b/stubs/ui/stub/stub_list_vm index 8542fc311..44d560556 100644 --- a/stubs/ui/stub/stub_list_vm +++ b/stubs/ui/stub/stub_list_vm @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:invoiceninja_flutter/data/models/stub_model.dart'; import 'package:redux/redux.dart'; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart';