Skip to content

Commit d7e8d3e

Browse files
committed
fix: SSR considerations
1 parent f0b813f commit d7e8d3e

File tree

6 files changed

+40
-16
lines changed

6 files changed

+40
-16
lines changed

docusaurus.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ const config: Config = {
129129
} satisfies Preset.ThemeConfig,
130130

131131
clientModules: [
132-
'node_modules/provenance-widgets/web-components/index.js'
132+
require.resolve('./src/pw.js')
133133
],
134134

135135
themes: ['@docusaurus/theme-live-codeblock'],

src/components/lib/AbstractSelectionComponent.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import type { MultiselectComponent } from 'provenance-widgets';
33
import type { NgWebComponent } from './types';
44
import StateView from './StateView';
5+
import useIsBrowser from '@docusaurus/useIsBrowser';
56

67
type AbstractProps = Pick<MultiselectComponent, 'provenance' | 'provenanceChange' | 'selectedChange' | 'visualize' | 'freeze' | 'selected'>;
78

@@ -15,9 +16,11 @@ interface SelectionProps extends AbstractProps {
1516
}
1617

1718
export default function AbstractSelectionComponent (props: SelectionProps) {
19+
20+
const isBrowser = useIsBrowser();
21+
if (!isBrowser) return <div>loading...</div>
1822

1923
const ref = React.useRef<HTMLDivElement>(null);
20-
2124
const [selected, setSelected] = React.useState<any>(null);
2225
const [provenance, setProvenance] = React.useState<any>({});
2326

src/components/lib/ProvenanceInputText.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@ import React from 'react';
22
import type { InputtextComponent } from 'provenance-widgets';
33
import type { NgWebComponent } from './types';
44
import StateView from './StateView';
5+
import useIsBrowser from '@docusaurus/useIsBrowser';
56

67
type InputtextComponentProps = Pick<InputtextComponent, 'id' | 'value' | 'visualize' | 'freeze' | 'provenance' | 'provenanceChange' | 'valueChange'>;
78

89
export default function ProvenanceInputText(props: InputtextComponentProps) {
10+
11+
const isBrowser = useIsBrowser();
12+
if (!isBrowser) return <div>loading...</div>
13+
914
const ref = React.useRef<HTMLDivElement>(null);
1015

1116
const [value, setValue] = React.useState<any>(null);

src/components/lib/ProvenanceSlider.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ import React from 'react';
22
import type { SliderComponent } from 'provenance-widgets';
33
import type { NgWebComponent } from './types';
44
import StateView from './StateView';
5+
import useIsBrowser from '@docusaurus/useIsBrowser';
56

67
type SliderComponentProps = Pick<SliderComponent, 'id' | 'mode' | 'value' | 'highValue' | 'options' | 'provenance' | 'provenanceChange' | 'selectedChange' | 'visualize' | 'freeze'>;
78

89
export default function ProvenanceSlider (props: SliderComponentProps) {
10+
11+
const isBrowser = useIsBrowser();
12+
if (!isBrowser) return <div>loading...</div>
913

1014
const ref = React.useRef<HTMLDivElement>(null);
1115

src/components/lib/StateView.tsx

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import ReactJson, { ReactJsonViewProps } from '@microlink/react-json-view'
1+
import BrowserOnly from '@docusaurus/BrowserOnly';
2+
// import ReactJson, { ReactJsonViewProps } from '@microlink/react-json-view'
3+
import type { ReactJsonViewProps } from '@microlink/react-json-view'
24

35
interface StateViewProps {
46
selected: any;
@@ -14,19 +16,26 @@ const reactJsonProps: Omit<ReactJsonViewProps, 'src'> = {
1416
export default function StateView(props: StateViewProps) {
1517
return (
1618
<div className="row margin-top--md">
17-
<div className="col col--6">
18-
<ReactJson src={props.provenance} name="provenance" {...reactJsonProps} />
19-
</div>
20-
{
21-
props.selected !== null &&
22-
<div className="col col--6">
23-
{
24-
typeof props.selected === 'string' ?
25-
<code style={{ color: "black" }}>"{props.selectedAlias || "selected"}": "{props.selected}"</code> :
26-
<ReactJson src={props.selected} name={props.selectedAlias || "selected"} {...reactJsonProps} />
27-
}
28-
</div>
29-
}
19+
<BrowserOnly>
20+
{() => {
21+
const ReactJson = require('@microlink/react-json-view').default;
22+
return <>
23+
<div className="col col--6">
24+
<ReactJson src={props.provenance} name="provenance" {...reactJsonProps} />
25+
</div>
26+
{
27+
props.selected !== null &&
28+
<div className="col col--6">
29+
{
30+
typeof props.selected === 'string' ?
31+
<code style={{ color: "black" }}>"{props.selectedAlias || "selected"}": "{props.selected}"</code> :
32+
<ReactJson src={props.selected} name={props.selectedAlias || "selected"} {...reactJsonProps} />
33+
}
34+
</div>
35+
}
36+
</>
37+
}}
38+
</BrowserOnly>
3039
</div>
3140
)
3241
}

src/pw.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if (typeof window !== "undefined") {
2+
require('../node_modules/provenance-widgets/web-components/index.js')
3+
}

0 commit comments

Comments
 (0)