diff --git a/lib/redux/client/client_actions.dart b/lib/redux/client/client_actions.dart index 1f430b135..d309be624 100644 --- a/lib/redux/client/client_actions.dart +++ b/lib/redux/client/client_actions.dart @@ -455,3 +455,15 @@ class SaveClientDocumentFailure implements StopSaving { final Object error; } + +class UpdateClientTab implements PersistUI { + UpdateClientTab({this.tabIndex}); + + final int tabIndex; +} + +class UpdateClientTablePage implements PersistUI { + UpdateClientTablePage({this.tableIndex}); + + final int tableIndex; +} diff --git a/lib/redux/client/client_reducer.dart b/lib/redux/client/client_reducer.dart index 476d1d4e5..7fc4dfff2 100644 --- a/lib/redux/client/client_reducer.dart +++ b/lib/redux/client/client_reducer.dart @@ -17,10 +17,27 @@ EntityUIState clientUIReducer(ClientUIState state, dynamic action) { ..editingContact .replace(editingContactReducer(state.editingContact, action)) ..selectedId = selectedIdReducer(state.selectedId, action) + ..tabIndex = tabIndexReducer(state.tabIndex, action) + ..tablePage = tablePageIndexReducer(state.tablePage, action) ..saveCompleter = saveCompleterReducer(state.saveCompleter, action) ..cancelCompleter = cancelCompleterReducer(state.cancelCompleter, action)); } +final tabIndexReducer = combineReducers([ + TypedReducer((completer, action) { + return action.tabIndex; + }), + TypedReducer((completer, action) { + return null; + }), +]); + +final tablePageIndexReducer = combineReducers([ + TypedReducer((completer, action) { + return action.tableIndex; + }), +]); + final saveCompleterReducer = combineReducers>([ TypedReducer, EditClient>((completer, action) { return action.completer; diff --git a/lib/ui/client/client_list_vm.dart b/lib/ui/client/client_list_vm.dart index 3c24adbe7..b4855d726 100644 --- a/lib/ui/client/client_list_vm.dart +++ b/lib/ui/client/client_list_vm.dart @@ -34,6 +34,7 @@ class ClientListBuilder extends StatelessWidget { onRefreshed: viewModel.onRefreshed, onSortColumn: viewModel.onSortColumn, onClearMultiselect: viewModel.onClearMultielsect, + onPageChanged: viewModel.onPageChanged, itemBuilder: (BuildContext context, index) { final state = viewModel.state; final clientId = viewModel.clientList[index]; @@ -65,6 +66,7 @@ class ClientListVM { @required this.onEntityAction, @required this.onSortColumn, @required this.onClearMultielsect, + @required this.onPageChanged, }); final AppState state; @@ -77,6 +79,7 @@ class ClientListVM { final List tableColumns; final Function(String) onSortColumn; final Function onClearMultielsect; + final Function(int) onPageChanged; static ClientListVM fromStore(Store store) { Future _handleRefresh(BuildContext context) { @@ -114,6 +117,8 @@ class ClientListVM { ClientPresenter.getDefaultTableFields(state.userCompany), onSortColumn: (field) => store.dispatch(SortClients(field)), onClearMultielsect: () => store.dispatch(ClearClientMultiselect()), + onPageChanged: (index) => + store.dispatch(UpdateClientTablePage(tableIndex: index)), ); } // } diff --git a/lib/ui/client/view/client_view.dart b/lib/ui/client/view/client_view.dart index f1fefa54c..26e02a7ad 100644 --- a/lib/ui/client/view/client_view.dart +++ b/lib/ui/client/view/client_view.dart @@ -37,11 +37,23 @@ class _ClientViewState extends State @override void initState() { super.initState(); - _controller = TabController(vsync: this, length: 6); + + final state = widget.viewModel.state; + _controller = TabController( + vsync: this, + length: 6, + initialIndex: state.clientUIState.tabIndex ?? 0); + _controller.addListener(_onTabChanged); + } + + void _onTabChanged() { + final store = StoreProvider.of(context); + store.dispatch(UpdateClientTab(tabIndex: _controller.index)); } @override void dispose() { + _controller.removeListener(_onTabChanged); _controller.dispose(); super.dispose(); }