Skip to content

Instantly share code, notes, and snippets.

@ryanlanciaux
Created January 11, 2015 22:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ryanlanciaux/d7fa52911b3b6f87fa03 to your computer and use it in GitHub Desktop.
Save ryanlanciaux/d7fa52911b3b6f87fa03 to your computer and use it in GitHub Desktop.
Griddle with Simulated External Data
<div id="griddle-external-simulated"></div>
<script type="text/jsx">
var externalData = fakeData.slice(0, 53);
var SimulatedExternalComponent = React.createClass({
getInitialState: function(){
var initial = { "results": [],
"currentPage": 0,
"maxPages": 0,
"externalResultsPerPage": 5,
"externalSortColumn":null,
"externalSortAscending":true,
"pretendServerData": externalData
};
return initial;
},
componentWillMount: function(){
this.setState({
maxPages: Math.round(this.state.pretendServerData.length/this.state.externalResultsPerPage),
"results": this.state.pretendServerData.slice(0,this.state.externalResultsPerPage)
})
},
setPage: function(index){
//This should interact with the data source to get the page at the given index
var number = index === 0 ? 0 : index * this.state.externalResultsPerPage;
this.setState(
{
"results": this.state.pretendServerData.slice(number, number+5>this.state.pretendServerData.length ? this.state.pretendServerData.length : number+this.state.externalResultsPerPage),
"currentPage": index
});
},
sortData: function(sort, sortAscending, data){
//sorting should generally happen wherever the data is coming from
shows as and all that
sortedData = _.sortBy(data, function(item){
return item[sort];
});
if(sortAscending === false){
sortedData.reverse();
}
return {
"currentPage": 0,
"externalSortColumn": sort,
"externalSortAscending": sortAscending,
"pretendServerData": sortedData,
"results": sortedData.slice(0,this.state.externalResultsPerPage)
};
},
changeSort: function(sort, sortAscending){
//this should change the sort for the given column
this.setState(this.sortData(sort, sortAscending, this.state.pretendServerData));
},
setFilter: function(filter){
//filtering should generally occur on the server (or wherever)
//this is a lot of code for what should normally just be a method that is used to pass data back and forth
var sortedData = this.sortData(this.state.externalSortColumn, this.state.externalSortAscending, externalData);
if(filter === ""){
this.setState(_.extend(sortedData, {maxPages: Math.round(sortedData.pretendServerData.length > this.state.externalResultsPerPage ? sortedData.pretendServerData.length/this.state.externalResultsPerPage : 1)}));
return;
}
var filteredData = _.filter(sortedData.pretendServerData,
function(item) {
var arr = _.values(item);
for(var i = 0; i < arr.length; i++){
if ((arr[i]||"").toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0){
return true;
}
}
return false;
});
this.setState({
pretendServerData: filteredData,
maxPages: Math.round(filteredData.length > this.state.externalResultsPerPage ? filteredData.length/this.state.externalResultsPerPage : 1),
"results": filteredData.slice(0,this.state.externalResultsPerPage)
});
},
setPageSize: function(size){
this.setState({
currentPage: 0,
externalResultsPerPage: size,
maxPages: Math.round(this.state.pretendServerData.length > size ? this.state.pretendServerData.length/size : 1),
results: this.state.pretendServerData.slice(0,size)
});
},
render: function(){
return <Griddle useExternal={true} externalSetPage={this.setPage}
externalChangeSort={this.changeSort} externalSetFilter={this.setFilter}
externalSetPageSize={this.setPageSize} externalMaxPage={this.state.maxPages}
externalCurrentPage={this.state.currentPage} results={this.state.results} tableClassName="table" resultsPerPage={this.state.externalResultsPerPage}
externalSortColumn={this.state.externalSortColumn} externalSortAscending={this.state.externalSortAscending} showFilter={true} showSettings={true} />
}
});
React.render(<SimulatedExternalComponent />, document.getElementById("griddle-external-simulated"));
</script>
Copy link

ghost commented Feb 8, 2017

Thanks for the code snippet helped out a lot to understand how to use griddle

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment