@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
39 lines (38 loc) • 1.65 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import * as React from 'react';
import { useAdaptable } from '../AdaptableContext';
export const ExternalRenderer = ({ render, frameworkComponent, componentName = 'N/A', onDestroy, ...rest }) => {
const ref = React.useRef(null);
const adaptable = useAdaptable();
const [contentsHTML, setContentsHTML] = React.useState('');
React.useLayoutEffect(() => {
const element = ref.current;
const adaptableApi = adaptable.api;
if (render) {
const html = render({
phase: 'onMount',
element,
...adaptableApi.internalApi.buildBaseContext(),
});
setContentsHTML(html);
}
else if (frameworkComponent) {
adaptableApi.internalApi.createFrameworkComponent(element, frameworkComponent, 'toolbar');
}
return () => {
if (render) {
render({
phase: 'onDestroy',
element: element,
...adaptableApi.internalApi.buildBaseContext(),
});
}
else if (frameworkComponent) {
onDestroy?.();
adaptableApi.internalApi.destroyFrameworkComponent(element, frameworkComponent, componentName);
}
};
}, []);
const RFC = adaptable.variant === 'react' ? frameworkComponent : null;
return RFC ? (_jsx("div", { ...rest, ref: ref, children: _jsx(RFC, { adaptableApi: adaptable.api }) })) : (_jsx("div", { ...rest, dangerouslySetInnerHTML: { __html: contentsHTML }, ref: ref }));
};