UNPKG

@atlaskit/editor-plugin-card

Version:

Card plugin for @atlaskit/editor-core

65 lines (64 loc) • 2.98 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createCardRegistry = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /** * Creates a registry of resolved cards, for use with editor actions. * Registration changes (insertion, deletion, and id/title/url updates) notify subscribers; live position changes do not. * * @returns A registry object with the following methods: * - `getCardRegistrations`: Returns the current registrations, keyed by card ID. * - `registerCard`: Adds or updates a card. * - `removeCard`: Removes a card by ID. * - `subscribe`: Registers a change listener and returns an unsubscribe function. */ var createCardRegistry = exports.createCardRegistry = function createCardRegistry() { // Replace registrations on each change to notify subscribers and trigger React updates. var registrations = {}; var listeners = new Set(); var getCardRegistrations = function getCardRegistrations() { return registrations; }; var notify = function notify() { Array.from(listeners).forEach(function (listener) { return listener(); }); }; var registerCard = function registerCard(info) { if (info.getPos() === undefined) { return; } var previous = registrations[info.id]; if (previous && previous.getPos === info.getPos && previous.title === info.title && previous.url === info.url) { return; // Don't mutate registrations if no change } registrations = _objectSpread(_objectSpread({}, registrations), {}, (0, _defineProperty2.default)({}, info.id, _objectSpread({}, info))); notify(); }; var removeCard = function removeCard(id) { if (!registrations[id]) { return; } var next = _objectSpread({}, registrations); delete next[id]; registrations = next; notify(); }; var subscribe = function subscribe(listener) { listeners.add(listener); return function () { listeners.delete(listener); }; }; return { registerCard: registerCard, removeCard: removeCard, subscribe: subscribe, getCardRegistrations: getCardRegistrations }; };