blob: b21d10a873905385385549c3599376dd90fa8a6b [file] [log] [blame]
var Preact = require('preact'),
h = require('preact').h,
createClass = require('preact-compat').createClass,
Plugin = require('./plugin.jsx');
var InitialPageLength = 10;
var PageExtensionLength = 20;
/*
States site loaded
*/
var PluginList = createClass({
getInitialState: function() {
return { bootstrapped: false }
},
componentWillReceiveProps: function() {
// Recieving a set of plugins
this.setState({
bootstrapped: true,
searchPage: 0
});
},
increaseSearchResults: function() {
this.setState({ searchPage: this.state.searchPage + 1 });
},
render: function() {
if (!this.state.bootstrapped) {
var emptyPluginList = [];
for (var i = 0; i < InitialPageLength; i++) {
emptyPluginList.push(<Plugin key={i}/>)
};
return (
<div className="container plugins-results-container">
{emptyPluginList}
</div>
)
} else {
var plugins = this.props.plugins;
var showMore = null, visiblePlugins = [];
if (plugins.length - this.state.searchPage * PageExtensionLength > InitialPageLength) {
showMore =
<div className="plugin-results-show-more btn-block btn-primary" onClick={this.increaseSearchResults}>
Show More
</div>;
}
if (plugins.length === 0) {
return (
<div className="container plugins-results-container">
No plugins found. Learn how to <a href="{{ site.baseurl }}/docs/en/{{ site.default_linked_docs_version }}/guide/hybrid/plugins/index.html">create one</a>
</div>
);
} else {
for (var i = 0; i < InitialPageLength + this.state.searchPage * PageExtensionLength; i++) {
if (plugins[i]) {
visiblePlugins.push(<Plugin plugin={plugins[i]} key={i}/>);
} else {
break;
}
};
return (
<div className="container plugins-results-container">
{visiblePlugins}
{showMore}
</div>
);
}
}
}
});
module.exports = PluginList;