mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
make sure the validator is called before setState
This commit is contained in:
parent
7311b14da1
commit
09ba8cd5d3
@ -81,37 +81,35 @@ export class DashboardPanel extends PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
if (plugin.exports) {
|
||||
this.validateOptions(plugin, panel);
|
||||
this.setState({ plugin, angularPanel: null });
|
||||
} else {
|
||||
try {
|
||||
plugin.exports = await importPluginModule(plugin.module);
|
||||
this.validateOptions(plugin, panel);
|
||||
} catch (e) {
|
||||
plugin = getPanelPluginNotFound(pluginId);
|
||||
}
|
||||
|
||||
this.setState({ plugin, angularPanel: null });
|
||||
}
|
||||
|
||||
// Clean the options when switching plugins
|
||||
// ??? is there a better way that will make sure to call componentDidUpdate ???
|
||||
// The panel constructor may have already run
|
||||
const { reactPanel } = plugin.exports;
|
||||
if (reactPanel && reactPanel.optionsValidator) {
|
||||
panel.options = reactPanel.optionsValidator(panel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This is be called before the plugin constructor, so the initial properties are valid
|
||||
validateOptions = (plugin: PanelPlugin, panel: PanelModel) => {
|
||||
const { reactPanel } = plugin.exports;
|
||||
if (reactPanel && reactPanel.optionsValidator) {
|
||||
panel.options = reactPanel.optionsValidator(panel);
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.loadPlugin(this.props.panel.type);
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps: Props, prevState: State) {
|
||||
componentDidUpdate() {
|
||||
if (!this.element || this.state.angularPanel) {
|
||||
const { plugin } = this.state;
|
||||
if (plugin && plugin !== prevState.plugin) {
|
||||
console.log('PLUGIN Changed', plugin);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user