1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-30 05:31:58 +02:00

Merge remote-tracking branch 'origin/AD-544-automatically-share-registered-pr' into AD-544-automatically-share-registered-pr

This commit is contained in:
diminator 2015-08-06 13:56:57 +02:00
commit 2d4f307dcb
4 changed files with 27 additions and 30 deletions

View File

@ -44,16 +44,17 @@ let CreateEditionsButton = React.createClass({
startPolling() { startPolling() {
// start polling until editions are defined // start polling until editions are defined
let pollingIntervalIndex = setInterval(() => { let pollingIntervalIndex = setInterval(() => {
let editionsForPiece = this.state.editionList[this.props.piece.id];
EditionListActions.fetchEditionList(this.props.piece.id, null, null, null, null, editionsForPiece.filterBy) // requests, will try to merge the filterBy parameter with other parameters (mergeOptions).
// Therefore it can't but null but instead has to be an empty object
EditionListActions.fetchEditionList(this.props.piece.id, null, null, null, null, {})
.then((res) => { .then((res) => {
clearInterval(this.state.pollingIntervalIndex); clearInterval(this.state.pollingIntervalIndex);
this.props.onPollingSuccess(this.props.piece.id, res.editions[0].num_editions); this.props.onPollingSuccess(this.props.piece.id, res.editions[0].num_editions);
}) })
.catch(() => { .catch((err) => {
/* Ignore and keep going */ /* Ignore and keep going */
}); });
}, 5000); }, 5000);

View File

@ -13,6 +13,8 @@ let PieceListToolbar = React.createClass({
propTypes: { propTypes: {
className: React.PropTypes.string, className: React.PropTypes.string,
searchFor: React.PropTypes.func, searchFor: React.PropTypes.func,
filterBy: React.PropTypes.object,
applyFilterBy: React.PropTypes.func,
children: React.PropTypes.oneOfType([ children: React.PropTypes.oneOfType([
React.PropTypes.arrayOf(React.PropTypes.element), React.PropTypes.arrayOf(React.PropTypes.element),
React.PropTypes.element React.PropTypes.element
@ -48,7 +50,9 @@ let PieceListToolbar = React.createClass({
filterParams={['acl_transfer', 'acl_consign', { filterParams={['acl_transfer', 'acl_consign', {
key: 'acl_create_editions', key: 'acl_create_editions',
label: 'create editions' label: 'create editions'
}]} /> }]}
filterBy={this.props.filterBy}
applyFilterBy={this.props.applyFilterBy}/>
</span> </span>
</div> </div>
</div> </div>

View File

@ -2,9 +2,6 @@
import React from 'react'; import React from 'react';
import PieceListStore from '../../stores/piece_list_store';
import PieceListActions from '../../actions/piece_list_actions';
import DropdownButton from 'react-bootstrap/lib/DropdownButton'; import DropdownButton from 'react-bootstrap/lib/DropdownButton';
import MenuItem from 'react-bootstrap/lib/MenuItem'; import MenuItem from 'react-bootstrap/lib/MenuItem';
@ -19,27 +16,13 @@ let PieceListToolbarFilterWidgetFilter = React.createClass({
// label: <a human readable string> // label: <a human readable string>
// } // }
// //
filterParams: React.PropTypes.arrayOf(React.PropTypes.any).isRequired filterParams: React.PropTypes.arrayOf(React.PropTypes.any).isRequired,
}, filterBy: React.PropTypes.object,
applyFilterBy: React.PropTypes.func
getInitialState() {
return PieceListStore.getState();
},
componentDidMount() {
PieceListStore.listen(this.onChange);
},
componentWillUnmount() {
PieceListStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
}, },
generateFilterByStatement(param) { generateFilterByStatement(param) {
let filterBy = this.state.filterBy; let filterBy = this.props.filterBy;
if(filterBy) { if(filterBy) {
// we need hasOwnProperty since the values are all booleans // we need hasOwnProperty since the values are all booleans
@ -68,13 +51,12 @@ let PieceListToolbarFilterWidgetFilter = React.createClass({
filterBy(param) { filterBy(param) {
return () => { return () => {
let filterBy = this.generateFilterByStatement(param); let filterBy = this.generateFilterByStatement(param);
PieceListActions.fetchPieceList(this.state.page, this.state.pageSize, this.state.search, this.props.applyFilterBy(filterBy);
this.state.orderBy, this.state.orderAsc, filterBy);
}; };
}, },
isFilterActive() { isFilterActive() {
let trueValuesOnly = Object.keys(this.state.filterBy).filter((acl) => acl); let trueValuesOnly = Object.keys(this.props.filterBy).filter((acl) => acl);
// We're hiding the star in that complicated matter so that, // We're hiding the star in that complicated matter so that,
// the surrounding button is not resized up on appearance // the surrounding button is not resized up on appearance
@ -123,7 +105,7 @@ let PieceListToolbarFilterWidgetFilter = React.createClass({
<input <input
readOnly readOnly
type="checkbox" type="checkbox"
checked={this.state.filterBy[param]} /> checked={this.props.filterBy[param]} />
</div> </div>
</MenuItem> </MenuItem>
); );

View File

@ -85,6 +85,14 @@ let PieceList = React.createClass({
this.transitionTo(this.getPathname(), {page: 1}); this.transitionTo(this.getPathname(), {page: 1});
}, },
applyFilterBy(filterBy) {
PieceListActions.fetchPieceList(1, this.state.pageSize, this.state.search,
this.state.orderBy, this.state.orderAsc, filterBy);
// we have to redirect the user always to page one as it could be that there is no page two
// for filtered pieces
this.transitionTo(this.getPathname(), {page: 1});
},
accordionChangeOrder(orderBy, orderAsc) { accordionChangeOrder(orderBy, orderAsc) {
PieceListActions.fetchPieceList(this.state.page, this.state.pageSize, this.state.search, PieceListActions.fetchPieceList(this.state.page, this.state.pageSize, this.state.search,
orderBy, orderAsc, this.state.filterBy); orderBy, orderAsc, this.state.filterBy);
@ -97,7 +105,9 @@ let PieceList = React.createClass({
<div> <div>
<PieceListToolbar <PieceListToolbar
className="ascribe-piece-list-toolbar" className="ascribe-piece-list-toolbar"
searchFor={this.searchFor}> searchFor={this.searchFor}
filterBy={this.state.filterBy}
applyFilterBy={this.applyFilterBy}>
{this.props.customSubmitButton} {this.props.customSubmitButton}
</PieceListToolbar> </PieceListToolbar>
<PieceListBulkModal className="ascribe-piece-list-bulk-modal" /> <PieceListBulkModal className="ascribe-piece-list-bulk-modal" />