UNPKG

reactui

Version:

A components library for ReactJS. This is part of the Gearz project

62 lines (53 loc) 2.06 kB
define(["exports"], function (exports) { "use strict"; var React = require("react"); var gearzMixin = require("../../gearz.mixin"); var ComponentBuilder = React.createClass({ displayName: "ComponentBuilder", mixins: [gearzMixin], propTypes: {}, isUpper: function isUpper(x) { var u = x.toUpperCase(), l = x.toLowerCase(); return x == u && x != l; }, isLower: function isLower(x) { var u = x.toUpperCase(), l = x.toLowerCase(); return x == l && x != u; }, getComponents: function getComponents(data) { if (!data) { return []; }var array = Array.isArray(data) ? data : [data]; return array.map((function (item) { if (!item) return null; if (typeof item == "string") return item; var args = []; // React convention: // first letter lower-case named components are HTML tags // first letter upper-case named components are custom React components if (this.isUpper(item.type[0]) && window[item.type]) args.push(window[item.type]);else if (this.isLower(item.type[0])) args.push(item.type);else return null; args.push(item.props); args.push.apply(args, this.getComponents(item.children)); return React.createElement.apply(React, args); }).bind(this)); }, render: function render() { var data = this.get("data"); if (!data) { return React.createElement( "div", null, "No components to render" ); }var components = this.getComponents(data); return React.createElement( "div", null, components ); } }); module.exports = ComponentBuilder; });