From 94778dd4ee8db376c6da0306b46f0f3b6f1e302e Mon Sep 17 00:00:00 2001 From: Sydney Achinger Date: Wed, 19 Jun 2024 15:08:27 -0400 Subject: [PATCH] Add setShadowRootVersionHash to force shadowRoot to update in provider when version changes. Signed-off-by: Sydney Achinger --- plugins/techdocs-react/src/context.tsx | 7 ++++++- .../TechDocsReaderPageContent.tsx | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/plugins/techdocs-react/src/context.tsx b/plugins/techdocs-react/src/context.tsx index 43fdada98e..7492d4b2a2 100644 --- a/plugins/techdocs-react/src/context.tsx +++ b/plugins/techdocs-react/src/context.tsx @@ -64,6 +64,7 @@ export type TechDocsReaderPageValue = { entityMetadata: AsyncState; shadowRoot?: ShadowRoot; setShadowRoot: Dispatch>; + setShadowRootVersionHash: Dispatch>; title: string; setTitle: Dispatch>; subtitle: string; @@ -80,6 +81,7 @@ const defaultTechDocsReaderPageValue: TechDocsReaderPageValue = { setTitle: () => {}, setSubtitle: () => {}, setShadowRoot: () => {}, + setShadowRootVersionHash: () => {}, metadata: { loading: true }, entityMetadata: { loading: true }, entityRef: { kind: '', name: '', namespace: '' }, @@ -134,6 +136,9 @@ export const TechDocsReaderPageProvider = memo( const [shadowRoot, setShadowRoot] = useState( defaultTechDocsReaderPageValue.shadowRoot, ); + const [, setShadowRootVersionHash] = useState( + undefined, + ); useEffect(() => { if (shadowRoot && !metadata.value && !metadata.loading) { @@ -153,6 +158,7 @@ export const TechDocsReaderPageProvider = memo( entityMetadata, shadowRoot, setShadowRoot, + setShadowRootVersionHash, title, setTitle, subtitle, @@ -190,6 +196,5 @@ export const useTechDocsReaderPage = () => { if (context === undefined) { throw new Error('No context found for version 1.'); } - return context; }; diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx index 3692ed22d3..4a93b98a83 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx @@ -34,6 +34,8 @@ import { TechDocsStateIndicator } from '../TechDocsStateIndicator'; import { useTechDocsReaderDom } from './dom'; import { withTechDocsReaderProvider } from '../TechDocsReaderProvider'; import { TechDocsReaderPageContentAddons } from './TechDocsReaderPageContentAddons'; +// eslint-disable-next-line no-restricted-imports +import { createHash } from 'crypto'; const useStyles = makeStyles({ search: { @@ -80,6 +82,7 @@ export const TechDocsReaderPageContent = withTechDocsReaderProvider( entityMetadata: { value: entityMetadata, loading: entityMetadataLoading }, entityRef, setShadowRoot, + setShadowRootVersionHash, } = useTechDocsReaderPage(); const dom = useTechDocsReaderDom(entityRef); const path = window.location.pathname; @@ -101,12 +104,16 @@ export const TechDocsReaderPageContent = withTechDocsReaderProvider( const handleAppend = useCallback( (newShadowRoot: ShadowRoot) => { + const newShadowRootVersionHash = createHash('sha256') + .update(newShadowRoot.innerHTML) + .digest('hex'); setShadowRoot(newShadowRoot); + setShadowRootVersionHash(newShadowRootVersionHash); if (onReady instanceof Function) { onReady(); } }, - [setShadowRoot, onReady], + [setShadowRoot, setShadowRootVersionHash, onReady], ); // No entity metadata = 404. Don't render content at all.