@superset-ui/core
Version:
115 lines (86 loc) • 4.02 kB
JavaScript
import _pt from "prop-types";(function () {var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;enterModule && enterModule(module);})();var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {return a;}; /*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// eslint-disable-next-line no-restricted-syntax -- whole React import is required for `reactify.test.tsx` Jest test passing.
import React, { Component } from 'react';
// TODO: Note that id and className can collide between Props and ReactifyProps
// leading to (likely) unexpected behaviors. We should either require Props to not
// contain an id/className, or not combine them (via intersection), instead preferring
// wrapping (composition). As an example:
// interface MyProps {
// id: number;
// }
// function myRender(container: HTMLDivElement, props: Readonly<MyProps>): void {
// props.id // unusable: id is string & number
// }
// new (reactify(myRender))({ id: 5 }); // error: id has to be string & number
// TODO: add more React lifecycle callbacks as needed
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
export default function reactify(
renderFn,
callbacks)
{
class ReactifiedComponent extends Component {
constructor(props) {
super(props);this.container = void 0;
this.setContainerRef = this.setContainerRef.bind(this);
}
componentDidMount() {
this.execute();
}
componentDidUpdate() {
this.execute();
}
componentWillUnmount() {
this.container = undefined;
if (callbacks != null && callbacks.componentWillUnmount) {
callbacks.componentWillUnmount.bind(this)();
}
}
setContainerRef(ref) {
this.container = ref;
}
execute() {
if (this.container) {
renderFn(this.container, this.props);
}
}
render() {
const { id, className } = this.props;
return _jsx("div", { ref: this.setContainerRef, id: id, className: className });
} // @ts-ignore
__reactstandin__regenerateByEval(key, code) {// @ts-ignore
this[key] = eval(code);}}ReactifiedComponent.propTypes = { id: _pt.string, className: _pt.string };
const ReactifiedClass =
ReactifiedComponent;
if (renderFn.displayName) {
ReactifiedClass.displayName = renderFn.displayName;
}
// eslint-disable-next-line react/forbid-foreign-prop-types
if (renderFn.propTypes) {
ReactifiedClass.propTypes = {
...ReactifiedClass.propTypes,
...renderFn.propTypes
};
}
if (renderFn.defaultProps) {
ReactifiedClass.defaultProps = renderFn.defaultProps;
}
return ReactifiedComponent;
};(function () {var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;if (!reactHotLoader) {return;}reactHotLoader.register(reactify, "reactify", "/Users/evan_1/GitHub/superset/superset-frontend/packages/superset-ui-core/src/chart/components/reactify.tsx");})();;(function () {var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;leaveModule && leaveModule(module);})();
//# sourceMappingURL=reactify.js.map