UNPKG

@atlaskit/editor-plugin-block-controls

Version:

Block controls plugin for @atlaskit/editor-core

80 lines (79 loc) • 4.7 kB
"use strict"; 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)) }); }); })); };