Files
old-ribica/front-ui/app/components/items/randomItems.js
2015-09-26 11:58:01 +02:00

65 lines
1.8 KiB
JavaScript

var React = require('react');
var ItemList = require('./itemList');
var ItemStore = require('../../stores/itemStore.js');
var ItemActions = require('../../actions/itemActions.js');
var ItemCollection = require('../../models/itemCollection');
var RandomItems = React.createClass({
render: function() {
return (
<ItemList items={this.state.items} />
);
},
// Add change listeners to stores
componentDidMount: function() {
ItemActions.loadFrontPageItems();
ItemStore.addChangeListener(this._onChange);
},
componentWillUnmount: function () {
ItemStore.removeChangeListener(this._onChange);
},
getInitialState: function() {
return {
items: this.getRandomItems()
}
},
getRandomItems: function() {
var NUMBER_OF_SUGGESTED_ITEMS = 8;
var allItems = ItemStore.getItems();
var randomIndexStart = Math.floor(Math.random() * ((allItems.models.length - NUMBER_OF_SUGGESTED_ITEMS + 1)));
allItems.models = this.shuffle(allItems.models).slice(randomIndexStart, randomIndexStart + NUMBER_OF_SUGGESTED_ITEMS);
return allItems;
},
shuffle: function(array) {
var currentIndex = array.length, temporaryValue, randomIndex ;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
},
_onChange: function () {
this.setState({
items: this.getRandomItems()
});
},
});
module.exports = RandomItems;