@atlaskit/editor-plugin-block-controls
Version:
Block controls plugin for @atlaskit/editor-core
63 lines (59 loc) • 3.12 kB
JavaScript
/** Document range containing a heading and all content in its section. */
/** Returns the full section range when the heading at this position is collapsed. */
export var getCollapsedHeadingRange = function getCollapsedHeadingRange(api, headingPos) {
var _api$blockCollapse;
var sectionEnd = api === null || api === void 0 || (_api$blockCollapse = api.blockCollapse) === null || _api$blockCollapse === void 0 || (_api$blockCollapse = _api$blockCollapse.sharedState.currentState()) === null || _api$blockCollapse === void 0 ? void 0 : _api$blockCollapse.collapsedSectionEnds.get(headingPos);
return sectionEnd === undefined ? undefined : {
from: headingPos,
to: sectionEnd
};
};
/** Returns whether the heading at this position has a collapsed section. */
export var isCollapsedHeading = function isCollapsedHeading(api, headingPos) {
var _api$blockCollapse$sh, _api$blockCollapse2;
return (_api$blockCollapse$sh = api === null || api === void 0 || (_api$blockCollapse2 = api.blockCollapse) === null || _api$blockCollapse2 === void 0 || (_api$blockCollapse2 = _api$blockCollapse2.sharedState.currentState()) === null || _api$blockCollapse2 === void 0 ? void 0 : _api$blockCollapse2.collapsedSectionEnds.has(headingPos)) !== null && _api$blockCollapse$sh !== void 0 ? _api$blockCollapse$sh : false;
};
/** Selects a collapsed section for drag or block-menu operations, optionally expanding it. */
export var prepareCollapsedHeadingSelection = function prepareCollapsedHeadingSelection(_ref) {
var _api$blockControls;
var api = _ref.api,
expand = _ref.expand,
headingPos = _ref.headingPos,
tr = _ref.tr;
var range = getCollapsedHeadingRange(api, headingPos);
if (!range) {
return false;
}
if (expand) {
var _api$blockCollapse3;
api === null || api === void 0 || (_api$blockCollapse3 = api.blockCollapse) === null || _api$blockCollapse3 === void 0 || _api$blockCollapse3.commands.expandHeading(headingPos)({
tr: tr
});
}
api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || _api$blockControls.commands.setMultiSelectPositions(range.from, range.to)({
tr: tr
});
return true;
};
/** Preserves collapse for root moves and expands headings moved into nested containers. */
export var updateCollapsedHeadingAfterMove = function updateCollapsedHeadingAfterMove(_ref2) {
var _api$blockCollapse5;
var api = _ref2.api,
destinationPos = _ref2.destinationPos,
isNested = _ref2.isNested,
tr = _ref2.tr,
wasCollapsed = _ref2.wasCollapsed;
if (!wasCollapsed) {
return;
}
if (isNested) {
var _api$blockCollapse4;
api === null || api === void 0 || (_api$blockCollapse4 = api.blockCollapse) === null || _api$blockCollapse4 === void 0 || _api$blockCollapse4.commands.expandHeading(destinationPos)({
tr: tr
});
return;
}
api === null || api === void 0 || (_api$blockCollapse5 = api.blockCollapse) === null || _api$blockCollapse5 === void 0 || _api$blockCollapse5.commands.collapseHeadingsAtPositions([destinationPos])({
tr: tr
});
};