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 ( ); }, // 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;