@atlaskit/editor-plugin-tasks-and-decisions
Version:
Tasks and decisions plugin for @atlaskit/editor-core
36 lines • 1.35 kB
JavaScript
import { useMemo } from 'react';
import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
import { TextSelection } from '@atlaskit/editor-prosemirror/state';
export const useShowPlaceholder = ({
editorView,
api,
isContentNodeEmpty,
getPos
}) => {
const {
typeAheadState
} = useSharedPluginState(api, ['typeAhead']);
const isTypeAheadOpen = Boolean(typeAheadState === null || typeAheadState === void 0 ? void 0 : typeAheadState.isOpen);
const isTypeAheadOpenedInsideItem = useMemo(() => {
var _selection$$cursor;
if (!isTypeAheadOpen) {
return false;
}
const itemPosition = getPos();
if (typeof itemPosition !== 'number') {
return false;
}
const selection = editorView.state.selection;
if (!(selection instanceof TextSelection)) {
return false;
}
const maybeItemNode = editorView.state.doc.nodeAt(itemPosition);
const maybeParentItemNode = (_selection$$cursor = selection.$cursor) === null || _selection$$cursor === void 0 ? void 0 : _selection$$cursor.node();
if (maybeItemNode && maybeParentItemNode && maybeItemNode.eq(maybeParentItemNode)) {
return true;
}
return false;
}, [isTypeAheadOpen, getPos, editorView]);
const showPlaceholder = Boolean(!isTypeAheadOpenedInsideItem && isContentNodeEmpty);
return showPlaceholder;
};