UNPKG

@atlaskit/editor-plugin-connectivity

Version:

Connectivity plugin for @atlaskit/editor-core

81 lines (80 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.connectivityPlugin = void 0; var _react = require("react"); var _bindEventListener = require("bind-event-listener"); var _main = require("./pm-plugins/main"); var connectivityPlugin = exports.connectivityPlugin = function connectivityPlugin() { var previousMode; return { name: 'connectivity', getSharedState: function getSharedState(editorState) { var _ref, _pluginState$external; if (!editorState) { return { mode: 'online' }; } var pluginState = _main.key.getState(editorState); return { mode: (_ref = (_pluginState$external = pluginState === null || pluginState === void 0 ? void 0 : pluginState.externalState) !== null && _pluginState$external !== void 0 ? _pluginState$external : pluginState === null || pluginState === void 0 ? void 0 : pluginState.browserState) !== null && _ref !== void 0 ? _ref : 'online' }; }, commands: { setMode: function setMode(mode) { return function (_ref2) { var tr = _ref2.tr; // Leave early if the mode has not changed if (mode === previousMode) { return null; } previousMode = mode; return tr.setMeta(_main.key, { externalState: mode }); }; } }, pmPlugins: function pmPlugins() { return [{ name: 'connectivity', plugin: _main.createPlugin }]; }, usePluginHook: function usePluginHook(_ref3) { var editorView = _ref3.editorView; (0, _react.useEffect)(function () { var dispatch = function dispatch(value) { var dispatch = editorView.dispatch, tr = editorView.state.tr; dispatch(tr.setMeta(_main.key, { browserState: value })); }; var handleOnline = function handleOnline() { return dispatch('online'); }; var handleOffline = function handleOffline() { return dispatch('offline'); }; if (window.navigator.onLine === false) { dispatch('offline'); } var cleanupOnlineListener = (0, _bindEventListener.bind)(window, { type: 'online', listener: handleOnline }); var cleanupOfflineListener = (0, _bindEventListener.bind)(window, { type: 'offline', listener: handleOffline }); return function () { cleanupOnlineListener(); cleanupOfflineListener(); }; }, [editorView]); } }; };