@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
JavaScript
;
;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);