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

180 lines
6.2 KiB
JavaScript
Raw Normal View History

'use strict';
import React from 'react';
import EditionListStore from '../../stores/edition_list_store';
import EditionListActions from '../../actions/edition_list_actions';
import AccordionListItemTable from './accordion_list_item_table';
import AccordionListItemTableToggle from './accordion_list_item_table_toggle';
2015-06-08 14:13:35 +02:00
import AccordionListItemTableSelectAllEditionsCheckbox from './accordion_list_item_table_select_all_editions_checkbox';
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';
let AccordionListItemTableEditions = React.createClass({
propTypes: {
className: React.PropTypes.string,
parentId: React.PropTypes.number
},
getInitialState() {
return EditionListStore.getState();
},
componentDidMount() {
EditionListStore.listen(this.onChange);
},
componentWillUnmount() {
EditionListStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
},
2015-06-08 14:13:35 +02:00
selectItem(pieceId, editionId, toValue) {
EditionListActions.selectEdition({pieceId, editionId, toValue});
2015-06-01 14:10:11 +02:00
},
2015-06-08 14:13:35 +02:00
toggleAllItems(checked) {
this.state.editionList[this.props.parentId]
.forEach((edition) => {
2015-06-08 14:13:35 +02:00
this.selectItem(this.props.parentId, edition.id, !checked);
});
},
filterSelectedEditions() {
let selectedEditions = this.state.editionList[this.props.parentId]
.filter((edition) => edition.selected);
return selectedEditions;
},
toggleTable() {
let isEditionListOpen = this.state.isEditionListOpenForPieceId[this.props.parentId] ? this.state.isEditionListOpenForPieceId[this.props.parentId].show : false;
if(isEditionListOpen) {
EditionListActions.toggleEditionList(this.props.parentId);
} else {
EditionListActions.toggleEditionList(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;
let show;
// 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;
}
if(this.props.parentId in this.state.isEditionListOpenForPieceId) {
show = this.state.isEditionListOpenForPieceId[this.props.parentId].show;
}
2015-06-12 15:00:26 +02:00
let transition = new TransitionModel('edition', 'editionId', 'bitcoin_id');
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
'',
2015-06-08 14:13:35 +02:00
<AccordionListItemTableSelectAllEditionsCheckbox
onChange={this.toggleAllItems}
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 + ' of ' + item.num_editions
}; },
'edition_number',
'Edition',
2015-06-03 10:45:23 +02:00
TableItemText,
1,
2015-07-01 10:59:06 +02:00
false,
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',
2015-07-01 10:59:06 +02:00
getLangText('ID'),
2015-06-03 10:45:23 +02:00
TableItemText,
5,
2015-07-01 10:59:06 +02:00
false,
2015-07-01 10:53:40 +02:00
transition,
'hidden-xs visible-sm visible-md visible-lg'
2015-06-03 10:45:23 +02:00
),
new ColumnModel(
(item) => {
2015-07-01 19:05:47 +02:00
let content = item.acl;
if (item.request_action){
content = [item.request_action + ' request'];
}
2015-06-03 10:45:23 +02:00
return {
2015-07-01 19:05:47 +02:00
'content': content
}; },
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}
show={show}
orderBy={orderBy}
orderAsc={orderAsc}
changeOrder={this.changeEditionListOrder}>
<AccordionListItemTableToggle
className="ascribe-accordion-list-table-toggle"
onClick={this.toggleTable}
show={show} />
</AccordionListItemTable>
</div>
);
}
});
export default AccordionListItemTableEditions;