Merge pull request #3457 from ethcore/ng-save-sorting
Save sort order in LocalStorage
This commit is contained in:
commit
130fd3f9c1
@ -15,6 +15,8 @@
|
|||||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import React, { Component, PropTypes } from 'react';
|
import React, { Component, PropTypes } from 'react';
|
||||||
|
import { observer } from 'mobx-react';
|
||||||
|
|
||||||
import IconMenu from 'material-ui/IconMenu';
|
import IconMenu from 'material-ui/IconMenu';
|
||||||
import MenuItem from 'material-ui/MenuItem';
|
import MenuItem from 'material-ui/MenuItem';
|
||||||
|
|
||||||
@ -22,11 +24,15 @@ import SortIcon from 'material-ui/svg-icons/content/sort';
|
|||||||
|
|
||||||
import { Button } from '../../';
|
import { Button } from '../../';
|
||||||
|
|
||||||
|
import SortStore from './sortStore';
|
||||||
import styles from './sort.css';
|
import styles from './sort.css';
|
||||||
|
|
||||||
|
@observer
|
||||||
export default class ActionbarSort extends Component {
|
export default class ActionbarSort extends Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
|
id: PropTypes.string.isRequired,
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func.isRequired,
|
||||||
|
|
||||||
order: PropTypes.string,
|
order: PropTypes.string,
|
||||||
showDefault: PropTypes.bool,
|
showDefault: PropTypes.bool,
|
||||||
metas: PropTypes.array
|
metas: PropTypes.array
|
||||||
@ -37,8 +43,10 @@ export default class ActionbarSort extends Component {
|
|||||||
showDefault: true
|
showDefault: true
|
||||||
}
|
}
|
||||||
|
|
||||||
state = {
|
store = new SortStore(this.props);
|
||||||
menuOpen: false
|
|
||||||
|
componentDidMount () {
|
||||||
|
this.store.restoreSavedOrder();
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
@ -51,12 +59,12 @@ export default class ActionbarSort extends Component {
|
|||||||
className={ styles.sortButton }
|
className={ styles.sortButton }
|
||||||
label=''
|
label=''
|
||||||
icon={ <SortIcon /> }
|
icon={ <SortIcon /> }
|
||||||
onClick={ this.handleMenuOpen }
|
onClick={ this.store.handleMenuOpen }
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
open={ this.state.menuOpen }
|
open={ this.store.menuOpen }
|
||||||
onRequestChange={ this.handleMenuChange }
|
onRequestChange={ this.store.handleMenuChange }
|
||||||
onItemTouchTap={ this.handleSortChange }
|
onItemTouchTap={ this.store.handleSortChange }
|
||||||
targetOrigin={ { horizontal: 'right', vertical: 'top' } }
|
targetOrigin={ { horizontal: 'right', vertical: 'top' } }
|
||||||
anchorOrigin={ { horizontal: 'right', vertical: 'top' } }
|
anchorOrigin={ { horizontal: 'right', vertical: 'top' } }
|
||||||
touchTapCloseDelay={ 0 }
|
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 });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
71
js/src/ui/Actionbar/Sort/sortStore.js
Normal file
71
js/src/ui/Actionbar/Sort/sortStore.js
Normal file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -90,6 +90,7 @@ class Accounts extends Component {
|
|||||||
return (
|
return (
|
||||||
<ActionbarSort
|
<ActionbarSort
|
||||||
key='sortAccounts'
|
key='sortAccounts'
|
||||||
|
id='sortAccounts'
|
||||||
order={ this.state.sortOrder }
|
order={ this.state.sortOrder }
|
||||||
onChange={ onChange } />
|
onChange={ onChange } />
|
||||||
);
|
);
|
||||||
|
@ -75,6 +75,7 @@ class Addresses extends Component {
|
|||||||
return (
|
return (
|
||||||
<ActionbarSort
|
<ActionbarSort
|
||||||
key='sortAccounts'
|
key='sortAccounts'
|
||||||
|
id='sortAddresses'
|
||||||
order={ this.state.sortOrder }
|
order={ this.state.sortOrder }
|
||||||
onChange={ onChange } />
|
onChange={ onChange } />
|
||||||
);
|
);
|
||||||
|
@ -82,6 +82,7 @@ class Contracts extends Component {
|
|||||||
return (
|
return (
|
||||||
<ActionbarSort
|
<ActionbarSort
|
||||||
key='sortAccounts'
|
key='sortAccounts'
|
||||||
|
id='sortContracts'
|
||||||
order={ this.state.sortOrder }
|
order={ this.state.sortOrder }
|
||||||
metas={ [
|
metas={ [
|
||||||
{ key: 'timestamp', label: 'date' }
|
{ key: 'timestamp', label: 'date' }
|
||||||
|
Loading…
Reference in New Issue
Block a user