UNPKG

@girders-elements/core

Version:

Girders Elements is an architectural framework that assists with building data-driven apps with React or React Native.

125 lines (83 loc) 4 kB
'use strict'; 'use strict';Object.defineProperty(exports,"__esModule",{value:true});var _jsxFileName='packages/core/src/ui/index.js'; var _ramda=require('ramda');var _ramda2=_interopRequireDefault(_ramda); var _immutable=require('immutable'); var _react=require('react');var _react2=_interopRequireDefault(_react); var _invariant=require('invariant');var _invariant2=_interopRequireDefault(_invariant); var _log=require('../impl/log'); var _registry=require('../registry'); var _ElementView=require('./ElementView');var _ElementView2=_interopRequireDefault(_ElementView); var _data=require('../data');var data=_interopRequireWildcard(_data); var _util=require('../impl/util'); var _classes=require('../impl/classes'); var _subsystem=require('../subsystem');var SubSystem=_interopRequireWildcard(_subsystem);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}var registryAttribute='@@girders-elements/_uiRegistry'; SubSystem.extend(function(){var _ui; var registry=new _registry.Registry(); return{ ui:(_ui={},_defineProperty(_ui, registryAttribute,registry),_defineProperty(_ui,'register',function register( kind,Component){ (0,_invariant2.default)( data.isElementRef(kind), 'You must provide a valid element reference to register'); (0,_invariant2.default)( Component!=null&&( (0,_classes.isSubclassOf)(Component,_react2.default.Component)|| typeof Component==='function'), 'You must provide a react component class or a pure-function component'); registry.register(kind,(0,_ElementView2.default)(kind,Component)); }),_defineProperty(_ui,'reset',function reset() { }),_ui)}; });exports.default= SubSystem.create(function(system){ var runtime={ registry:getCombinedRegistry(system.subsystemSequence), system:system, uiFor:function uiFor(element){var reactKey=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined; return system.subsystems.ui.uiFor(element,reactKey); }}; var _forElement=forElement(runtime); var _forElements=forElements(_forElement); return{ name:'ui', uiFor:function uiFor(element){var reactKey=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined; if(_immutable.Iterable.isIndexed(element)){ var ui=_forElements(element); return ui; } return _forElement(element,reactKey); }}; }); var forElement=function forElement(runtime){var registry=runtime.registry; var componentFor=(0,_util.memoize)(function(kind){ var C=registry.get(kind); if(C!=null)return C(runtime); (0,_log.warning)('Couldn\'t find the following kind(s) within the registry: ['+ kind.toJS()+']'); return null; }); return function(element){var reactKey=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined; if(element==null){ return null; } (0,_invariant2.default)( data.isElement(element), 'You provided something other than an element for ui lookup'); (0,_invariant2.default)( element._keyPath!=null, 'The current implementation requires a Cursor to be passed in. This may be removed in the future'); var kind=data.kindOf(element); var Component=componentFor(kind); if(Component){ return _react2.default.createElement(Component,{element:element,key:reactKey,__source:{fileName:_jsxFileName,lineNumber:112}}); } }; }; var forElements=_ramda2.default.curry(function(elementBuilder,elementSeq){return( elementSeq.map(elementBuilder).filter(function(ui){return!!ui;}));}); var getRegistry=_ramda2.default.path(['ui',registryAttribute]); var getCombinedRegistry=_ramda2.default.pipe( _ramda2.default.map(getRegistry), _ramda2.default.reject(_ramda2.default.isNil),_registry.chainRegistries);