Skip to content

Commit 525d7f5

Browse files
committed
Receive setVariantAnalysis message in React component
This will store the variant analysis in the React state and replace it when the `setVariantAnalysis` message is received.
1 parent 84621b7 commit 525d7f5

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import * as React from 'react';
2+
import { useEffect, useState } from 'react';
23

4+
import { ToVariantAnalysisMessage } from '../../pure/interface-types';
35
import {
46
VariantAnalysis as VariantAnalysisDomainModel,
57
VariantAnalysisQueryLanguage,
@@ -222,7 +224,30 @@ function getContainerContents(variantAnalysis: VariantAnalysisDomainModel) {
222224
);
223225
}
224226

225-
export function VariantAnalysis(): JSX.Element {
227+
type Props = {
228+
variantAnalysis?: VariantAnalysisDomainModel;
229+
}
230+
231+
export function VariantAnalysis({
232+
variantAnalysis: initialVariantAnalysis = variantAnalysis,
233+
}: Props): JSX.Element {
234+
const [variantAnalysis, setVariantAnalysis] = useState<VariantAnalysisDomainModel>(initialVariantAnalysis);
235+
236+
useEffect(() => {
237+
window.addEventListener('message', (evt: MessageEvent) => {
238+
if (evt.origin === window.origin) {
239+
const msg: ToVariantAnalysisMessage = evt.data;
240+
if (msg.t === 'setVariantAnalysis') {
241+
setVariantAnalysis(msg.variantAnalysis);
242+
}
243+
} else {
244+
// sanitize origin
245+
const origin = evt.origin.replace(/\n|\r/g, '');
246+
console.error(`Invalid event origin ${origin}`);
247+
}
248+
});
249+
});
250+
226251
return (
227252
<VariantAnalysisContainer>
228253
{getContainerContents(variantAnalysis)}

0 commit comments

Comments
 (0)