react-on-rails
Version:
react-on-rails JavaScript for react_on_rails Ruby gem
64 lines • 2.36 kB
JavaScript
import isRenderFunction from "./isRenderFunction.js";
const registeredComponents = new Map();
export default {
/**
* @param components { component1: component1, component2: component2, etc. }
*/
register(components) {
Object.keys(components).forEach((name) => {
if (registeredComponents.has(name)) {
console.warn('Called register for component that is already registered', name);
}
const component = components[name];
if (!component) {
throw new Error(`Called register with null component named ${name}`);
}
const renderFunction = isRenderFunction(component);
const isRenderer = renderFunction && component.length === 3;
registeredComponents.set(name, {
name,
component,
renderFunction,
isRenderer,
});
});
},
/**
* @param name
* @returns { name, component, renderFunction, isRenderer }
*/
get(name) {
const registeredComponent = registeredComponents.get(name);
if (registeredComponent !== undefined) {
return registeredComponent;
}
const keys = Array.from(registeredComponents.keys()).join(', ');
throw new Error(`Could not find component registered with name ${name}. \
Registered component names include [ ${keys} ]. Maybe you forgot to register the component?`);
},
/**
* Get a Map containing all registered components. Useful for debugging.
* @returns Map where key is the component name and values are the
* { name, component, renderFunction, isRenderer}
*/
components() {
return registeredComponents;
},
/**
* Pro-only method that waits for component registration
* @param _name Component name to wait for
* @throws Always throws error indicating pro package is required
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
getOrWaitForComponent(_name) {
throw new Error('getOrWaitForComponent requires react-on-rails-pro package');
},
/**
* Clear all registered components (for testing purposes)
* @private
*/
clear() {
registeredComponents.clear();
},
};
//# sourceMappingURL=ComponentRegistry.js.map