Open mshatikhin opened 2 years ago
Привет. Всё-таки думаю, что это не является багом. Поэтому не должно исправляться из коробки. Это специфичная реализация порталов в контролах Контура. И она отличается в различный мажорных версиях.
Эту проблему стоит решать с помощью хелпера setFilter()
.
Подготовил универсальный код, который повторяет старое поведение для различный версий контролов Контура:
setFilter((fiber) => {
if (fiber.key === "portal-ref") {
const id = fiber.memoizedProps?.rt_rootID;
const noscript = document.querySelector(`[data-render-container-id="${id}"]`);
const portal = document.querySelector(`[data-prop-rootid="${id}"]`);
if (portal instanceof HTMLElement && noscript instanceof HTMLElement) {
let tid = fiber.memoizedProps?.["data-tid"];
findAmongParents(fiber, (f) => {
if (findAssociatedNode(f) === portal && f.memoizedProps?.["data-tid"]) {
tid = f.memoizedProps["data-tid"];
}
return false;
});
if (tid) {
noscript.dataset.tid = tid;
}
noscript.dataset.compName = "Portal " + portal.dataset.compName;
}
}
// Пропускаем только контролы из пакета @skbkontur/react-ui
if (typeof fiber.type?.__KONTUR_REACT_UI__ === "string") {
return null;
}
return [];
});
Можно потрогать в этом примере: codesandbox.io/s/props2attrs-kontur-portal.
Фрагмент кода с поиском data-tid
у родителя будет необязателен после исправления этого #7 бага. После релиза приложу пример.
привет, есть разница в поведении,
в старой либе (которая скриптик react-selenium-testing.js) на всякие SidePage проставлялись атрибуты в noscript элемент,
<noscript data-render-container-id="9402" data-comp-name="Portal RenderInnerContainer RenderContainer SidePage CashboxViewerSidePage" data-tid="CashboxSidePage"></noscript>
а в props2attrs вот так
<noscript data-render-container-id="e3b5" data-comp-name="Portal" data-key="portal-ref"></noscript>
из за этого у нас в проекте попадали все тесты где есть порталы, потому что поиск элемента в портале через data-tid на noscript элементе,
верните пожалуйста это поведение.