1
0
silverbullet/mattermost-plugin/webapp/src/index.tsx
2022-07-22 13:44:45 +02:00

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());