Rollback the changes in #25332

Add MutationObserver in useShadowRootElements to we can trigger update when the elements under the shadow root change

Signed-off-by: Alex Lorenzi <alorenzi@spotify.com>
Signed-off-by: Jackson Chen <jacksonc@spotify.com>
This commit is contained in:
Alex Lorenzi
2024-06-26 17:21:37 -04:00
committed by Jackson Chen
parent 25450bab24
commit 8a4c24e036
3 changed files with 24 additions and 14 deletions
+1 -8
View File
@@ -25,7 +25,6 @@ import React, {
} from 'react';
import useAsync, { AsyncState } from 'react-use/esm/useAsync';
import useAsyncRetry from 'react-use/esm/useAsyncRetry';
import useCounter from 'react-use/esm/useCounter';
import {
CompoundEntityRef,
@@ -65,8 +64,6 @@ export type TechDocsReaderPageValue = {
entityMetadata: AsyncState<TechDocsEntityMetadata>;
shadowRoot?: ShadowRoot;
setShadowRoot: Dispatch<SetStateAction<ShadowRoot | undefined>>;
shadowRootVersion: number;
incShadowRootVersion: () => void;
title: string;
setTitle: Dispatch<SetStateAction<string>>;
subtitle: string;
@@ -83,8 +80,6 @@ const defaultTechDocsReaderPageValue: TechDocsReaderPageValue = {
setTitle: () => {},
setSubtitle: () => {},
setShadowRoot: () => {},
shadowRootVersion: 0,
incShadowRootVersion: () => {},
metadata: { loading: true },
entityMetadata: { loading: true },
entityRef: { kind: '', name: '', namespace: '' },
@@ -139,7 +134,6 @@ export const TechDocsReaderPageProvider = memo(
const [shadowRoot, setShadowRoot] = useState<ShadowRoot | undefined>(
defaultTechDocsReaderPageValue.shadowRoot,
);
const [shadowRootVersion, { inc: incShadowRootVersion }] = useCounter(0);
useEffect(() => {
if (shadowRoot && !metadata.value && !metadata.loading) {
@@ -159,8 +153,6 @@ export const TechDocsReaderPageProvider = memo(
entityMetadata,
shadowRoot,
setShadowRoot,
shadowRootVersion,
incShadowRootVersion,
title,
setTitle,
subtitle,
@@ -198,5 +190,6 @@ export const useTechDocsReaderPage = () => {
if (context === undefined) {
throw new Error('No context found for version 1.');
}
return context;
};
+22 -3
View File
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { useState, useEffect, useMemo } from 'react';
import { useEffect, useMemo, useState } from 'react';
import debounce from 'lodash/debounce';
import { useTechDocsReaderPage } from './context';
@@ -39,9 +39,28 @@ export const useShadowRootElements = <
selectors: string[],
): TReturnedElement[] => {
const shadowRoot = useShadowRoot();
if (!shadowRoot) return [];
const [root, setRootNode] = useState(shadowRoot?.querySelector('html'));
useEffect(() => {
let observer: MutationObserver;
if (shadowRoot) {
observer = new MutationObserver(() => {
setRootNode(shadowRoot.querySelector('html'));
});
observer.observe(shadowRoot, {
attributes: true,
characterData: true,
childList: true,
subtree: true,
});
}
return () => observer?.disconnect();
}, [shadowRoot]);
if (!root) return [];
return selectors
.map(selector => shadowRoot?.querySelectorAll<TReturnedElement>(selector))
.map(selector => root.querySelectorAll<TReturnedElement>(selector))
.filter(nodeList => nodeList.length)
.map(nodeList => Array.from(nodeList))
.flat();