@atlaskit/editor-plugin-loom
Version:
Loom plugin for @atlaskit/editor-core
72 lines • 2.44 kB
JavaScript
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
import { setupLoom } from './commands';
export let LoomPluginAction = /*#__PURE__*/function (LoomPluginAction) {
LoomPluginAction[LoomPluginAction["ENABLE"] = 0] = "ENABLE";
LoomPluginAction[LoomPluginAction["DISABLE"] = 1] = "DISABLE";
LoomPluginAction[LoomPluginAction["RECORD_VIDEO"] = 2] = "RECORD_VIDEO";
LoomPluginAction[LoomPluginAction["INSERT_VIDEO"] = 3] = "INSERT_VIDEO";
return LoomPluginAction;
}({});
export const loomPluginKey = new PluginKey('loom');
export const createPlugin = ({
config,
api
}) => {
return new SafePlugin({
key: loomPluginKey,
state: {
init: () => ({
isEnabled: false,
loomButton: null,
isRecordingVideo: false,
error: undefined
}),
apply: (tr, pluginState) => {
var _tr$getMeta, _pluginState$loomButt;
const action = (_tr$getMeta = tr.getMeta(loomPluginKey)) === null || _tr$getMeta === void 0 ? void 0 : _tr$getMeta.type;
switch (action) {
case LoomPluginAction.ENABLE:
const {
loomButton
} = tr.getMeta(loomPluginKey);
return {
...pluginState,
isEnabled: true,
loomButton
};
case LoomPluginAction.DISABLE:
const {
error
} = tr.getMeta(loomPluginKey);
return {
...pluginState,
isEnabled: false,
loomButton: null,
error
};
case LoomPluginAction.RECORD_VIDEO:
// Click the unmounted button in state that has the Loom SDK attached
pluginState === null || pluginState === void 0 ? void 0 : (_pluginState$loomButt = pluginState.loomButton) === null || _pluginState$loomButt === void 0 ? void 0 : _pluginState$loomButt.click();
return {
...pluginState,
isRecordingVideo: true
};
case LoomPluginAction.INSERT_VIDEO:
return {
...pluginState,
isRecordingVideo: false
};
default:
return pluginState;
}
}
},
view(editorView) {
if (config.loomProvider) {
setupLoom(config.loomProvider, api, editorView);
}
return {};
}
});
};