67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
|
/**
|
||
|
* Copyright 2014-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var _prodInvariant = require('./reactProdInvariant');
|
||
|
|
||
|
var invariant = require('fbjs/lib/invariant');
|
||
|
|
||
|
var genericComponentClass = null;
|
||
|
var textComponentClass = null;
|
||
|
|
||
|
var ReactHostComponentInjection = {
|
||
|
// This accepts a class that receives the tag string. This is a catch all
|
||
|
// that can render any kind of tag.
|
||
|
injectGenericComponentClass: function (componentClass) {
|
||
|
genericComponentClass = componentClass;
|
||
|
},
|
||
|
// This accepts a text component class that takes the text string to be
|
||
|
// rendered as props.
|
||
|
injectTextComponentClass: function (componentClass) {
|
||
|
textComponentClass = componentClass;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Get a host internal component class for a specific tag.
|
||
|
*
|
||
|
* @param {ReactElement} element The element to create.
|
||
|
* @return {function} The internal class constructor function.
|
||
|
*/
|
||
|
function createInternalComponent(element) {
|
||
|
!genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;
|
||
|
return new genericComponentClass(element);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {ReactText} text
|
||
|
* @return {ReactComponent}
|
||
|
*/
|
||
|
function createInstanceForText(text) {
|
||
|
return new textComponentClass(text);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {ReactComponent} component
|
||
|
* @return {boolean}
|
||
|
*/
|
||
|
function isTextComponent(component) {
|
||
|
return component instanceof textComponentClass;
|
||
|
}
|
||
|
|
||
|
var ReactHostComponent = {
|
||
|
createInternalComponent: createInternalComponent,
|
||
|
createInstanceForText: createInstanceForText,
|
||
|
isTextComponent: isTextComponent,
|
||
|
injection: ReactHostComponentInjection
|
||
|
};
|
||
|
|
||
|
module.exports = ReactHostComponent;
|