64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import manifest from "./manifest";
|
|
import React, { useEffect, useRef } from "react";
|
|
import { Editor } from "@silverbulletmd/web/editor";
|
|
import { HttpSpacePrimitives } from "@silverbulletmd/common/spaces/http_space_primitives";
|
|
import { safeRun } from "@plugos/plugos/util";
|
|
import { Space } from "@silverbulletmd/common/spaces/space";
|
|
|
|
import "../../../packages/web/styles/main.scss";
|
|
import "./styles.scss";
|
|
|
|
function loadSheet(file: string) {
|
|
var sbCSS = document.createElement("link");
|
|
sbCSS.rel = "stylesheet";
|
|
sbCSS.type = "text/css";
|
|
sbCSS.href = `/static/plugins/silverbullet/${file}`;
|
|
document.getElementsByTagName("head")[0].appendChild(sbCSS);
|
|
}
|
|
|
|
const MainApp = (): React.ReactElement => {
|
|
let ref = useRef<HTMLDivElement>(null);
|
|
useEffect(() => {
|
|
loadSheet("index.css");
|
|
|
|
safeRun(async () => {
|
|
let httpPrimitives = new HttpSpacePrimitives("/plugins/silverbullet", "");
|
|
const editor = new Editor(
|
|
new Space(httpPrimitives, true),
|
|
ref.current!,
|
|
"/plugins/silverbullet"
|
|
);
|
|
await editor.init();
|
|
});
|
|
}, []);
|
|
return (
|
|
<div id="sb-root" ref={ref}>
|
|
This is Silver Bullet
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default class Plugin {
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
|
|
public async initialize(registry: any, store: any) {
|
|
// @see https://developers.mattermost.com/extend/plugins/webapp/reference/
|
|
console.log("SUP YALL SILVER BULLET!!!");
|
|
|
|
registry.registerProduct(
|
|
"/plugins/silverbullet",
|
|
"product-boards",
|
|
"Silver Bullet",
|
|
"/plugins/silverbullet",
|
|
MainApp
|
|
);
|
|
}
|
|
}
|
|
|
|
declare global {
|
|
interface Window {
|
|
registerPlugin(id: string, plugin: Plugin): void;
|
|
}
|
|
}
|
|
|
|
window.registerPlugin(manifest.id, new Plugin());
|