| 1234567891011121314151617181920212223242526272829303132333435 |
- import coreModule from 'app/core/core_module';
- import { importPluginModule } from './plugin_loader';
- import React from 'react';
- import ReactDOM from 'react-dom';
- import DefaultTemplateQueryCtrl from '../templating/defaultTemplateQueryCtrl';
- async function loadComponent(module) {
- const component = await importPluginModule(module);
- if (!component.TemplateQueryCtrl) {
- return DefaultTemplateQueryCtrl;
- } else {
- return component.TemplateQueryCtrl;
- }
- }
- /** @ngInject */
- function pluginTemplateQueryComponentLoader(datasourceSrv) {
- return {
- restrict: 'E',
- link: async (scope, elem) => {
- const Component = await loadComponent(scope.currentDatasource.meta.module);
- const props = {
- datasourceSrv,
- query: scope.current.query,
- onChange: scope.onQueryChange,
- };
- ReactDOM.render(<Component {...props} />, elem[0]);
- scope.$on('$destroy', () => {
- ReactDOM.unmountComponentAtNode(elem[0]);
- });
- },
- };
- }
- coreModule.directive('pluginTemplateQueryComponent', pluginTemplateQueryComponentLoader);
|