Adding override option to widget config

This commit is contained in:
Rainer Simon 2021-08-01 11:42:26 +02:00
parent 70628da819
commit 1876f89c89
1 changed files with 19 additions and 9 deletions

View File

@ -59,22 +59,32 @@ const isReactComponent = component => {
*/ */
export const getWidget = arg => { export const getWidget = arg => {
const instantiate = (widget, config) => { const instantiate = (widget, config, type) => {
// Check if user forced explicit type
if (typeof widget === 'string' || widget instanceof String) { if (typeof widget === 'string' || widget instanceof String) {
// Built-in
return React.createElement(BUILTIN_WIDGETS[widget], config); return React.createElement(BUILTIN_WIDGETS[widget], config);
} else if (isReactComponent(widget)) { } else {
return React.createElement(widget, config); // Plugin
} else if (typeof widget === 'function' || widget instanceof Function) { if (type?.toLowerCase() === 'react') {
return <WrappedWidget widget={widget} config={config} /> return React.createElement(widget, config);
} else { } else {
throw `${widget} is not a valid plugin` // Auto-detect
if (isReactComponent(widget)) {
return React.createElement(widget, config);
} else if (typeof widget === 'function' || widget instanceof Function) {
return <WrappedWidget widget={widget} config={config} />
} else {
throw `${widget} is not a valid plugin`
}
}
} }
} }
// First, check 'top-level' vs. 'nested object' case // First, check 'top-level' vs. 'nested object' case
if (arg.widget) { if (arg.widget) {
const { widget, ...config } = arg; const { widget, type, ...config } = arg;
return instantiate(widget, config); return instantiate(widget, config, type);
} else { } else {
// No object with args -> instantiate arg directly // No object with args -> instantiate arg directly
return instantiate(arg); return instantiate(arg);