plugin-api/dev/PluginDevEnvironment.tsx (42 lines of code) (raw):
import React, { useContext, useEffect } from 'react';
import TestWrapper from '../../src/utils/testing';
import PluginGroup from '../../src/components/Plugins/PluginGroup';
import { AllowedSlot, PluginsContext, PluginsProvider } from '../../src/components/Plugins/PluginManager';
import PluginRegisterSystem from '../../src/components/Plugins/PluginRegisterSystem';
const PluginDevEnvironment = (props) => {
return (
<TestWrapper>
<PluginsProvider>
<PluginContent {...props} />
</PluginsProvider>
</TestWrapper>
);
};
type Props = {
slot: AllowedSlot;
baseurl: string;
data: Record<string, any>;
};
const PluginContent: React.FC<Props> = ({
slot = 'task-details',
baseurl = 'http://localhost:5000/dev/plugins/',
data,
}) => {
const { addDataToStore } = useContext(PluginsContext);
useEffect(() => {
addDataToStore('metadata', data.metadata);
}, []);
// NOTE: You could add some more complex interactions here to test different things like data updates for plugin.
// functions `addDataToStore` and `callEvent` from plugin contexts are useful for interacting with plugin.
return (
<>
<PluginGroup
id="dev-group"
title="Plugin dev environment"
slot={slot}
baseurl={baseurl}
resourceParams={{
flow_id: 'Devflow',
run_number: '1',
step_name: 'start',
task_id: '1',
}}
/>
<PluginRegisterSystem baseurl={baseurl} />
</>
);
};
export default PluginDevEnvironment;