@deck.gl/json
Version:
JSON format rendering components for deck.gl
41 lines • 1.71 kB
JavaScript
// deck.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
import convertFunctions from "./convert-functions.js";
// This attempts to instantiate a class, either as a class or as a React component
export function instantiateClass(type, props, configuration) {
// Find the class
const Class = configuration.classes[type];
const Component = configuration.reactComponents[type];
// Check that the class is in the configuration.
if (!Class && !Component) {
const { log } = configuration; // eslint-disable-line
if (log) {
const stringProps = JSON.stringify(props, null, 0).slice(0, 40);
log.warn(`JSON converter: No registered class of type ${type}(${stringProps}...) `);
}
return null;
}
if (Class) {
return instantiateJavaScriptClass(Class, props, configuration);
}
return instantiateReactComponent(Component, props, configuration);
}
function instantiateJavaScriptClass(Class, props, configuration) {
if (configuration.preProcessClassProps) {
props = configuration.preProcessClassProps(Class, props, configuration);
}
props = convertFunctions(props, configuration);
return new Class(props);
}
function instantiateReactComponent(Component, props, configuration) {
const { React } = configuration;
const { children = [] } = props;
delete props.children;
if (configuration.preProcessClassProps) {
props = configuration.preProcessClassProps(Component, props, configuration);
}
props = convertFunctions(props, configuration);
return React.createElement(Component, props, children);
}
//# sourceMappingURL=instantiate-class.js.map