Skip to content

Commit 0cb0af2

Browse files
committed
fix: make ReactStandalone react on props changes
1 parent 18ec3ac commit 0cb0af2

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/components/StoreProvider.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Component } from 'react';
33
import { AppStore } from '../services/';
44
import { RedocRawOptions } from '../services/RedocNormalizedOptions';
55
import { loadAndBundleSpec } from '../utils';
6+
import { OpenAPISpec } from '../types';
67

78
interface StoreProviderProps {
89
specUrl?: string;
@@ -23,6 +24,8 @@ interface StoreProviderState {
2324
export class StoreProvider extends Component<StoreProviderProps, StoreProviderState> {
2425
store: AppStore;
2526

27+
private _resolvedSpec: OpenAPISpec;
28+
2629
constructor(props: StoreProviderProps) {
2730
super(props);
2831

@@ -43,10 +46,21 @@ export class StoreProvider extends Component<StoreProviderProps, StoreProviderSt
4346
});
4447

4548
try {
46-
const resolvedSpec = await loadAndBundleSpec(spec || specUrl!);
49+
this._resolvedSpec = await loadAndBundleSpec(spec || specUrl!);
50+
this.updateStore(this._resolvedSpec, specUrl, options);
51+
} catch (e) {
52+
this.setState({
53+
error: e,
54+
});
55+
}
56+
}
57+
58+
updateStore(resolvedSpec, specUrl, options) {
59+
try {
4760
this.setState({
4861
loading: false,
4962
store: new AppStore(resolvedSpec, specUrl, options),
63+
error: undefined,
5064
});
5165
} catch (e) {
5266
this.setState({
@@ -55,6 +69,16 @@ export class StoreProvider extends Component<StoreProviderProps, StoreProviderSt
5569
}
5670
}
5771

72+
componentWillReceiveProps(nextProps) {
73+
if (this.props.specUrl !== nextProps.specUrl || this.props.spec !== nextProps.spec) {
74+
setTimeout(() => this.load(), 0);
75+
return;
76+
}
77+
if (this.props.options !== nextProps.options && this._resolvedSpec) {
78+
this.updateStore(this._resolvedSpec, nextProps.specUrl, nextProps.options);
79+
}
80+
}
81+
5882
setError(e?: Error) {
5983
this.setState({
6084
error: e,

0 commit comments

Comments
 (0)