1
0
mirror of https://github.com/ascribe/onion.git synced 2025-02-14 21:10:27 +01:00
onion/js/components/piece_list.js
2015-05-22 17:11:17 +02:00

84 lines
2.9 KiB
JavaScript

import React from 'react';
import AltContainer from 'alt/AltContainer';
import PieceListStore from '../stores/piece_list_store';
import PieceListActions from '../actions/piece_list_actions';
import Table from './ascribe_table/table';
import TableItemImg from './ascribe_table/table_item_img';
import TableItemText from './ascribe_table/table_item_text';
import TableColumnModel from '../models/table_column_model';
import Pagination from './ascribe_pagination/pagination'
let PieceList = React.createClass({
getInitialState() {
return PieceListStore.getState();
},
componentDidMount() {
let page = this.props.query.page || this.state.page;
PieceListStore.listen(this.onChange);
PieceListActions.fetchPieceList(page, this.state.pageSize, this.state.search,
this.state.orderBy, this.state.orderAsc);
},
componentWillUnmount() {
PieceListStore.unlisten(this.onChange);
},
onChange() {
this.setState(this.getInitialState());
},
paginationGoToPage(page) {
return (e) => PieceListActions.fetchPieceList(page, this.state.pageSize,
this.state.search, this.state.orderBy,
this.state.orderAsc);
},
tableChangeOrder(orderBy, orderAsc) {
PieceListActions.fetchPieceList(this.state.page, this.state.pageSize,
this.state.search, orderBy, orderAsc);
},
render() {
let columnList = [
new TableColumnModel('thumbnail', '', TableItemImg, 2, false),
new TableColumnModel('artist_name', 'Artist', TableItemText, 4, true),
new TableColumnModel('title', 'Title', TableItemText, 4, true)
];
let currentPage = parseInt(this.props.query.page, 10);
let totalPages = Math.ceil(this.state.pieceListCount / this.state.pageSize)
// Could wrap this altContainer potentially once again.
return (
<AltContainer
store={PieceListStore}
actions={PieceListActions}
transform={(props) => {
return {
'itemList': props.pieceList,
'itemListCount': props.pieceListCount,
'orderBy': props.orderBy,
'orderAsc': props.orderAsc,
'search': props.search,
'page': props.page,
'pageSize': props.pageSize
}
}}>
<Table columnList={columnList} changeOrder={this.tableChangeOrder} />
<Pagination currentPage={currentPage}
totalPages={totalPages}
goToPage={this.paginationGoToPage} />
</AltContainer>
);
}
});
export default PieceList;