diff --git a/js/src/ui/Actionbar/Sort/sort.js b/js/src/ui/Actionbar/Sort/sort.js
index 474ef465b..bbf320911 100644
--- a/js/src/ui/Actionbar/Sort/sort.js
+++ b/js/src/ui/Actionbar/Sort/sort.js
@@ -15,6 +15,8 @@
// along with Parity. If not, see .
import React, { Component, PropTypes } from 'react';
+import { observer } from 'mobx-react';
+
import IconMenu from 'material-ui/IconMenu';
import MenuItem from 'material-ui/MenuItem';
@@ -22,11 +24,15 @@ import SortIcon from 'material-ui/svg-icons/content/sort';
import { Button } from '../../';
+import SortStore from './sortStore';
import styles from './sort.css';
+@observer
export default class ActionbarSort extends Component {
static propTypes = {
+ id: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
+
order: PropTypes.string,
showDefault: PropTypes.bool,
metas: PropTypes.array
@@ -37,8 +43,10 @@ export default class ActionbarSort extends Component {
showDefault: true
}
- state = {
- menuOpen: false
+ store = new SortStore(this.props);
+
+ componentDidMount () {
+ this.store.restoreSavedOrder();
}
render () {
@@ -51,12 +59,12 @@ export default class ActionbarSort extends Component {
className={ styles.sortButton }
label=''
icon={ }
- onClick={ this.handleMenuOpen }
+ onClick={ this.store.handleMenuOpen }
/>
}
- open={ this.state.menuOpen }
- onRequestChange={ this.handleMenuChange }
- onItemTouchTap={ this.handleSortChange }
+ open={ this.store.menuOpen }
+ onRequestChange={ this.store.handleMenuChange }
+ onItemTouchTap={ this.store.handleSortChange }
targetOrigin={ { horizontal: 'right', vertical: 'top' } }
anchorOrigin={ { horizontal: 'right', vertical: 'top' } }
touchTapCloseDelay={ 0 }
@@ -109,16 +117,4 @@ export default class ActionbarSort extends Component {
);
}
- handleSortChange = (event, child) => {
- const order = child.props.value;
- this.props.onChange(order);
- }
-
- handleMenuOpen = () => {
- this.setState({ menuOpen: true });
- }
-
- handleMenuChange = (open) => {
- this.setState({ menuOpen: open });
- }
}
diff --git a/js/src/ui/Actionbar/Sort/sortStore.js b/js/src/ui/Actionbar/Sort/sortStore.js
new file mode 100644
index 000000000..2bcbd3753
--- /dev/null
+++ b/js/src/ui/Actionbar/Sort/sortStore.js
@@ -0,0 +1,71 @@
+// Copyright 2015, 2016 Ethcore (UK) Ltd.
+// This file is part of Parity.
+
+// Parity is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Parity is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Parity. If not, see .
+
+import { action, observable } from 'mobx';
+import store from 'store';
+
+const LS_STORE_KEY = '_parity::sortStore';
+
+export default class SortStore {
+ @observable menuOpen = false;
+
+ constructor (props) {
+ const { id, onChange } = props;
+
+ this.onChange = onChange;
+ this.id = id;
+ }
+
+ @action handleMenuOpen = () => {
+ this.menuOpen = true;
+ }
+
+ @action handleMenuChange = (open) => {
+ this.menuOpen = open;
+ }
+
+ @action handleSortChange = (event, child) => {
+ const order = child.props.value;
+ this.onChange(order);
+ this.saveOrder(order);
+ }
+
+ @action restoreSavedOrder = () => {
+ const order = this.getSavedOrder();
+ this.onChange(order);
+ }
+
+ getSavedOrder = () => {
+ return (this.getSavedOrders())[this.id];
+ }
+
+ getSavedOrders = () => {
+ return store.get(LS_STORE_KEY) || {};
+ }
+
+ setSavedOrders = (orders) => {
+ store.set(LS_STORE_KEY, orders);
+ }
+
+ saveOrder = (order) => {
+ const orders = {
+ ...this.getSavedOrders(),
+ [ this.id ]: order
+ };
+
+ this.setSavedOrders(orders);
+ }
+}
diff --git a/js/src/views/Accounts/accounts.js b/js/src/views/Accounts/accounts.js
index 2cf2c3adf..8fd2a3982 100644
--- a/js/src/views/Accounts/accounts.js
+++ b/js/src/views/Accounts/accounts.js
@@ -90,6 +90,7 @@ class Accounts extends Component {
return (
);
diff --git a/js/src/views/Addresses/addresses.js b/js/src/views/Addresses/addresses.js
index 8b5fc0818..bfd3f087c 100644
--- a/js/src/views/Addresses/addresses.js
+++ b/js/src/views/Addresses/addresses.js
@@ -75,6 +75,7 @@ class Addresses extends Component {
return (
);
diff --git a/js/src/views/Contracts/contracts.js b/js/src/views/Contracts/contracts.js
index 758bca041..098e5f5c2 100644
--- a/js/src/views/Contracts/contracts.js
+++ b/js/src/views/Contracts/contracts.js
@@ -82,6 +82,7 @@ class Contracts extends Component {
return (