1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-30 21:52:08 +02:00
onion/js/components/ascribe_accordion_list/accordion_list_item_table_editions.js

173 lines
5.8 KiB
JavaScript
Raw Normal View History

'use strict';
import React from 'react';
2015-06-04 11:41:56 +02:00
import Router from 'react-router';
import EditionListStore from '../../stores/edition_list_store';
import EditionListActions from '../../actions/edition_list_actions';
import PieceListActions from '../../actions/piece_list_actions';
import AccordionListItemTable from './accordion_list_item_table';
import AccordionListItemTableToggle from './accordion_list_item_table_toggle';
import AccordionListItemTableSelectAllEditionsToggle from './accordion_list_item_table_select_all_editions_toggle';
import { ColumnModel, TransitionModel } from '../ascribe_table/models/table_models';
import TableItemText from '../ascribe_table/table_item_text';
2015-06-01 14:10:11 +02:00
import TableItemCheckbox from '../ascribe_table/table_item_checkbox';
2015-06-01 13:18:24 +02:00
import TableItemAclFiltered from '../ascribe_table/table_item_acl_filtered';
import { getLangText } from '../../utils/lang_utils';
2015-06-04 11:41:56 +02:00
let Link = Router.Link;
let AccordionListItemTableEditions = React.createClass({
propTypes: {
className: React.PropTypes.string,
2015-06-01 13:18:24 +02:00
parentId: React.PropTypes.number,
numOfEditions: React.PropTypes.number,
show: React.PropTypes.bool
},
getInitialState() {
return EditionListStore.getState();
},
componentDidMount() {
EditionListStore.listen(this.onChange);
},
componentWillUnmount() {
EditionListStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
},
2015-06-01 14:10:11 +02:00
selectItem(pieceId, editionId) {
EditionListActions.selectEdition({pieceId, editionId});
},
selectAllItems() {
this.state.editionList[this.props.parentId]
.forEach((edition) => {
this.selectItem(this.props.parentId, edition.id);
});
},
filterSelectedEditions() {
let selectedEditions = this.state.editionList[this.props.parentId]
.filter((edition) => edition.selected);
return selectedEditions;
},
toggleTable() {
PieceListActions.showEditionList(this.props.parentId);
EditionListActions.fetchEditionList(this.props.parentId);
},
changeEditionListOrder(orderBy, orderAsc) {
EditionListActions.fetchEditionList(this.props.parentId, orderBy, orderAsc);
},
2015-06-01 14:10:11 +02:00
render() {
let selectedEditionsCount = 0;
let allEditionsCount = 0;
let orderBy;
let orderAsc;
// here we need to check if all editions of a specific
// piece are already defined. Otherwise .length will throw an error and we'll not
// be notified about it.
if(this.state.editionList[this.props.parentId]) {
selectedEditionsCount = this.filterSelectedEditions().length;
allEditionsCount = this.state.editionList[this.props.parentId].length;
orderBy = this.state.editionList[this.props.parentId].orderBy;
orderAsc = this.state.editionList[this.props.parentId].orderAsc;
}
let transition = new TransitionModel('edition', 'editionId', 'bitcoin_id', PieceListActions.closeAllEditionLists);
let columnList = [
new ColumnModel(
2015-06-03 10:45:23 +02:00
(item) => {
return {
'editionId': item.id,
'pieceId': this.props.parentId,
'selectItem': this.selectItem,
'selected': item.selected
}; },
2015-06-03 10:45:23 +02:00
'',
<AccordionListItemTableSelectAllEditionsToggle
onChange={this.selectAllItems}
numOfSelectedEditions={selectedEditionsCount}
numOfAllEditions={allEditionsCount}/>,
2015-06-03 10:45:23 +02:00
TableItemCheckbox,
1,
false
),
new ColumnModel(
(item) => {
2015-06-03 10:45:23 +02:00
return {
'content': item.edition_number
}; },
'edition_number',
2015-06-03 10:45:23 +02:00
'#',
TableItemText,
1,
2015-06-04 11:41:56 +02:00
true,
transition
2015-06-03 10:45:23 +02:00
),
new ColumnModel(
2015-06-03 10:45:23 +02:00
(item) => {
return {
'content': item.bitcoin_id
}; },
2015-06-03 10:45:23 +02:00
'bitcoin_id',
getLangText('Bitcoin Address'),
TableItemText,
5,
2015-06-04 11:41:56 +02:00
true,
transition
2015-06-03 10:45:23 +02:00
),
new ColumnModel(
(item) => {
2015-06-03 10:45:23 +02:00
return {
'content': item.acl
}; },
2015-06-03 10:45:23 +02:00
'acl',
getLangText('Actions'),
TableItemAclFiltered,
4,
2015-06-04 11:41:56 +02:00
false,
transition
2015-06-03 10:45:23 +02:00
)
];
return (
<div>
<AccordionListItemTable
className={this.props.className}
parentId={this.props.parentId}
itemList={this.state.editionList[this.props.parentId]}
columnList={columnList}
numOfTableItems={this.props.numOfEditions}
show={this.props.show}
orderBy={orderBy}
orderAsc={orderAsc}
changeOrder={this.changeEditionListOrder}>
<AccordionListItemTableToggle
className="ascribe-accordion-list-table-toggle"
onClick={this.toggleTable}
show={this.props.show}
numOfTableItems={this.props.numOfEditions} />
</AccordionListItemTable>
</div>
);
}
});
export default AccordionListItemTableEditions;