@atlaskit/editor-plugin-block-controls
Version:
Block controls plugin for @atlaskit/editor-core
80 lines (79 loc) • 4.7 kB
JavaScript
;
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CommittedBlockControlsSurfaces = void 0;
var _react = _interopRequireWildcard(require("react"));
var _nativeAnchor = require("@atlaskit/editor-common/styles/native-anchor");
var _decorationsCommon = require("../pm-plugins/decorations-common");
var _blockControlsLeftSurface = require("../ui/block-controls-left-surface");
var _blockControlsRightSurface = require("../ui/block-controls-right-surface");
var _getSurfacePlacement = require("../ui/utils/get-surface-placement");
var _surfaceLifecycle = require("./surface-lifecycle");
var _useMeasuredSurfacePlacements = require("./use-measured-surface-placements");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var CommittedSurface = /*#__PURE__*/(0, _react.memo)(function (_ref) {
var api = _ref.api,
descriptor = _ref.descriptor,
side = _ref.side,
forceVisibleOnMouseOut = _ref.forceVisibleOnMouseOut,
measuredPlacement = _ref.measuredPlacement;
var anchorName = descriptor.anchorName,
blockControlsContext = descriptor.blockControlsContext,
isTopLevel = descriptor.isTopLevel;
var nodeType = blockControlsContext.targetNode.type.name;
var nodeTypeWithLevel = (0, _decorationsCommon.getNodeTypeWithLevel)(blockControlsContext.targetNode.node);
var layout = blockControlsContext.targetNode.node.attrs.layout;
var parentNodeType = blockControlsContext.targetNode.parentType === 'doc' ? undefined : blockControlsContext.targetNode.parentType;
var anchoredPlacement = (0, _react.useMemo)(function () {
if (!(0, _nativeAnchor.isCSSAnchorSupported)()) {
return undefined;
}
var options = {
anchorName: anchorName,
nodeType: nodeType,
nodeTypeWithLevel: nodeTypeWithLevel,
layout: layout,
parentNodeType: parentNodeType,
side: side
};
return side === 'left' && isTopLevel ? (0, _getSurfacePlacement.getAnchoredLeftGutterSurfacePlacement)(options) : (0, _getSurfacePlacement.getAnchoredSurfacePlacement)(options);
}, [anchorName, nodeType, nodeTypeWithLevel, layout, parentNodeType, side, isTopLevel]);
var Surface = side === 'left' ? _blockControlsLeftSurface.BlockControlsLeftSurface : _blockControlsRightSurface.BlockControlsRightSurface;
return /*#__PURE__*/_react.default.createElement(Surface, {
api: api,
components: descriptor.surfaceComponents,
forceVisibleOnMouseOut: forceVisibleOnMouseOut,
placement: anchoredPlacement !== null && anchoredPlacement !== void 0 ? anchoredPlacement : measuredPlacement,
source: descriptor.source,
surfaceContext: descriptor.surfaceContext
});
});
var CommittedBlockControlsSurfaces = exports.CommittedBlockControlsSurfaces = function CommittedBlockControlsSurfaces(props) {
var lifecycle = (0, _surfaceLifecycle.getSurfaceLifecycle)(props.editorView);
var snapshot = (0, _react.useSyncExternalStore)(lifecycle.subscribe, lifecycle.getSnapshot, function () {
return undefined;
});
var measuredPlacements = (0, _useMeasuredSurfacePlacements.useMeasuredSurfacePlacements)(props.editorView, snapshot === null || snapshot === void 0 ? void 0 : snapshot.left, snapshot === null || snapshot === void 0 ? void 0 : snapshot.right);
(0, _react.useLayoutEffect)(function () {
if (snapshot) {
lifecycle.acknowledge(snapshot.revision);
}
}, [lifecycle, snapshot]);
if (!snapshot) {
return null;
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, ['left', 'right'].flatMap(function (side) {
return snapshot[side].map(function (descriptor) {
return /*#__PURE__*/_react.default.createElement(CommittedSurface, {
key: (0, _useMeasuredSurfacePlacements.getSurfaceKey)(side, descriptor),
api: props.api,
descriptor: descriptor,
side: side,
forceVisibleOnMouseOut: snapshot.forceVisibleOnMouseOut,
measuredPlacement: measuredPlacements.get((0, _useMeasuredSurfacePlacements.getSurfaceKey)(side, descriptor))
});
});
}));
};