0.0.1•Updated a month ago
import { render } from "npm:preact-render-to-string";
import { Tailwind } from "../../app/tailwind/tailwind.tsx";
import { PluginType } from "../plugin/plugin_type.ts";
import type { Core } from "../core.ts";
import type { I_Component } from "../plugin/types/component.ts";
export class PluginComponentManager {
constructor(private core: typeof Core) {}
private render(this: Record<string, unknown>, component: I_Component) {
Tailwind.TrackPlugin(component.id.replace(/\:\:.+$/, ''), render(<>{component.render(this || {})}</>));
return component.render(this || {})
}
RenderAll(plugin_id: string, config: Record<string, unknown>) {
const plugin = this.core.Plugins.Find(plugin_id);
if(!plugin?.hasService(PluginType.ComponentProvider)) return <div>Plugin not found!</div>;
return (
plugin.services(PluginType.ComponentProvider).map(provider =>
provider.components.map(this.render.bind(config))
)
)
}
Render(name: string, config: Record<string, unknown>) {
const [plugin_id, _component_id] = name.split('::');
const plugin = this.core.Plugins.Find(plugin_id);
if(!plugin) return undefined;
const services = plugin.services(PluginType.ComponentProvider);
const components = services.flatMap(service => service.components.filter(c => c.id == name));
return components.map(this.render.bind(config));
}
}