@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
65 lines (64 loc) • 2.98 kB
JavaScript
;
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
};
};