Files
klz-cables.com/.pnpm-store/v10/files/db/3530c2c17e7bca3eadbbc3435b75e198d33d22444560d3c3998344b6f226e3e5c1857027edbf368f23cd547a7bea66c3387974d1e477617a03aa0087f838e0
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

90 lines
3.2 KiB
Plaintext

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
import { $getSelection, $isRangeSelection, $isTextNode } from 'lexical';
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
function registerDragonSupport(editor) {
const origin = window.location.origin;
const handler = event => {
if (event.origin !== origin) {
return;
}
const rootElement = editor.getRootElement();
if (document.activeElement !== rootElement) {
return;
}
const data = event.data;
if (typeof data === 'string') {
let parsedData;
try {
parsedData = JSON.parse(data);
} catch (e) {
return;
}
if (parsedData && parsedData.protocol === 'nuanria_messaging' && parsedData.type === 'request') {
const payload = parsedData.payload;
if (payload && payload.functionId === 'makeChanges') {
const args = payload.args;
if (args) {
const [elementStart, elementLength, text, selStart, selLength, formatCommand] = args;
editor.update(() => {
const selection = $getSelection();
if ($isRangeSelection(selection)) {
const anchor = selection.anchor;
let anchorNode = anchor.getNode();
let setSelStart = 0;
let setSelEnd = 0;
if ($isTextNode(anchorNode)) {
// set initial selection
if (elementStart >= 0 && elementLength >= 0) {
setSelStart = elementStart;
setSelEnd = elementStart + elementLength;
// If the offset is more than the end, make it the end
selection.setTextNodeRange(anchorNode, setSelStart, anchorNode, setSelEnd);
}
}
if (setSelStart !== setSelEnd || text !== '') {
selection.insertRawText(text);
anchorNode = anchor.getNode();
}
if ($isTextNode(anchorNode)) {
// set final selection
setSelStart = selStart;
setSelEnd = selStart + selLength;
const anchorNodeTextLength = anchorNode.getTextContentSize();
// If the offset is more than the end, make it the end
setSelStart = setSelStart > anchorNodeTextLength ? anchorNodeTextLength : setSelStart;
setSelEnd = setSelEnd > anchorNodeTextLength ? anchorNodeTextLength : setSelEnd;
selection.setTextNodeRange(anchorNode, setSelStart, anchorNode, setSelEnd);
}
// block the chrome extension from handling this event
event.stopImmediatePropagation();
}
});
}
}
}
}
};
window.addEventListener('message', handler, true);
return () => {
window.removeEventListener('message', handler, true);
};
}
export { registerDragonSupport };