27 lines
921 B
TypeScript
27 lines
921 B
TypeScript
import { EDITABLE_INPUT_ID, EDITABLE_INPUT_MODAL_ID } from '../../../../config';
|
|
|
|
const MAX_NESTING_PARENTS = 5;
|
|
|
|
export function isSelectionInsideInput(selectionRange: Range, inputId: string) {
|
|
const { commonAncestorContainer } = selectionRange;
|
|
let parentNode: HTMLElement | null = commonAncestorContainer as HTMLElement;
|
|
let iterations = 1;
|
|
while (parentNode && parentNode.id !== inputId && iterations < MAX_NESTING_PARENTS) {
|
|
parentNode = parentNode.parentElement;
|
|
iterations++;
|
|
}
|
|
|
|
return Boolean(parentNode && parentNode.id === inputId);
|
|
}
|
|
|
|
export function isComposerHasSelection() {
|
|
const activeElement = document.activeElement;
|
|
const isComposerFocused = activeElement?.id === EDITABLE_INPUT_ID
|
|
|| activeElement?.id === EDITABLE_INPUT_MODAL_ID;
|
|
|
|
if (!isComposerFocused) return false;
|
|
|
|
const selection = window.getSelection();
|
|
return Boolean(selection && !selection.isCollapsed);
|
|
}
|