1
0
mirror of https://github.com/ascribe/onion.git synced 2024-12-22 09:23:13 +01:00

implement ordering

This commit is contained in:
Tim Daubenschütz 2015-05-21 12:12:25 +02:00
parent 284f729dca
commit 9506cf3b1b
8 changed files with 61 additions and 15 deletions

View File

@ -29,7 +29,7 @@
}
.ascribe-table-header-column > span > .glyphicon {
font-size: .6em;
font-size: .5em;
}
.ascribe-table-item:nth-child(even) {

View File

@ -9,10 +9,14 @@ class PieceListActions {
);
}
fetchList(page, pageSize, search, ordering) {
PieceListFetcher.fetch(page, pageSize, search, ordering)
fetchList(page, pageSize, search, orderBy, orderAsc) {
PieceListFetcher.fetch(page, pageSize, search, orderBy, orderAsc)
.then((res) => {
this.actions.updatePieceList(res.pieces);
this.actions.updatePieceList({
'itemList': res.pieces,
'orderBy': orderBy,
'orderAsc': orderAsc
});
})
.catch((err) => {
console.log(err);

View File

@ -14,8 +14,12 @@ let Link = Router.Link;
let PieceList = React.createClass({
getInitialState() {
return PieceListStore.getState();
},
componentDidMount() {
PieceListActions.fetchList(1, 10);
PieceListActions.fetchList(this.state.page, this.state.pageSize, this.state.search, this.state.orderBy, this.state.orderAsc);
},
render() {

View File

@ -9,12 +9,11 @@ let Table = React.createClass({
columnMap: React.PropTypes.object.isRequired
},
render() {
if(this.props.itemList && this.props.itemList.length > 0) {
return (
<div className="ascribe-table">
<TableHeader columnMap={this.props.columnMap} itemList={this.props.itemList} fetchList={this.props.fetchList} />
<TableHeader columnMap={this.props.columnMap} itemList={this.props.itemList} fetchList={this.props.fetchList} orderAsc={this.props.orderAsc} />
{this.props.itemList.map((item, i) => {
return (
<TableItem columnMap={this.props.columnMap} columnContent={item} key={i} />

View File

@ -9,11 +9,21 @@ let TableHeader = React.createClass({
propTypes: {
columnMap: React.PropTypes.object.isRequired,
itemList: React.PropTypes.array.isRequired,
fetchList: React.PropTypes.func.isRequired
fetchList: React.PropTypes.func.isRequired,
orderAsc: React.PropTypes.bool.isRequired
},
sortIndex(i) {
this.props.fetchList(1, 10, null, '-' + Object.keys(this.props.columnMap)[i]);
let orderAsc;
if(this.props.orderAsc) {
orderAsc = false;
} else {
orderAsc = true;
}
this.props.fetchList(1, 10, null, Object.keys(this.props.columnMap)[i], orderAsc);
},
render() {
@ -25,12 +35,20 @@ let TableHeader = React.createClass({
if(columnMapValuesList[i].canBeOrdered) {
let boundClick = this.sortIndex.bind(this, i)
let boundClick = this.sortIndex.bind(this, i);
let carretDirection = 'glyphicon-triangle-';
if(this.props.orderAsc) {
carretDirection += 'top';
} else {
carretDirection += 'bottom';
}
return (
<div className={columnClass + ' ascribe-table-header-column'} key={i} onClick={boundClick}>
<span>
<span className="glyphicon glyphicon-chevron-down"></span>
{val.displayName}
<span className={'glyphicon ' + carretDirection}></span>
</span>
</div>
);

View File

@ -8,10 +8,10 @@ let PieceListFetcher = {
/**
* Fetches a list of pieces from the API.
* Can be called with all supplied queryparams the API.
*
*
*/
fetch(page, pageSize, search, ordering) {
fetch(page, pageSize, search, orderBy, orderAsc) {
let ordering = FetchApiUtils.generateOrderingQueryParams(orderBy, orderAsc);
let params = FetchApiUtils.argsToQueryParams({
page,

View File

@ -5,10 +5,17 @@ import PieceListActions from '../actions/piece_list_actions';
class PieceListStore {
constructor() {
this.itemList = []; // rename this to pieceList after figuring out AltContainer transform
this.page = 1;
this.pageSize = 10;
this.search = "";
this.orderBy = "artist_name";
this.orderAsc = true;
this.bindActions(PieceListActions);
}
onUpdatePieceList(itemList) {
onUpdatePieceList({ itemList, orderBy, orderAsc }) {
this.orderAsc = orderAsc;
this.orderBy = orderBy;
this.itemList = itemList;
}
};

View File

@ -40,6 +40,20 @@ let FetchApiUtils = {
return s + snakeCaseKey + '=' + encodeURIComponent(obj[key]);
})
.join('');
},
/**
* Takes a string and a boolean and generates a string query parameter for
* an API call.
*/
generateOrderingQueryParams(orderBy, orderAsc) {
let interpolation = '';
if(!orderAsc) {
interpolation += '-';
}
return interpolation + orderBy;
}
};