diff --git a/packages/react-params/src/Param/findComponent.ts b/packages/react-params/src/Param/findComponent.ts index 9c3e4276b1..82a272ebd5 100644 --- a/packages/react-params/src/Param/findComponent.ts +++ b/packages/react-params/src/Param/findComponent.ts @@ -149,31 +149,24 @@ export default function findComponent (registry: Registry, def: TypeDef, overrid let Component = findOne(def.lookupName) || findOne(type); if (!Component) { - let error: string | null = null; - try { const instance = registry.createType(type as 'u32'); const raw = getTypeDef(instance.toRawType()); - Component = findOne(raw.lookupName || raw.type); + Component = findOne(raw.lookupName || raw.type) || findOne(fromDef(raw)); if (Component) { return Component; } else if (isBn(instance)) { return Amount; - } else if ([TypeDefInfo.Enum, TypeDefInfo.Struct, TypeDefInfo.Tuple, TypeDefInfo.Vec].includes(raw.info)) { - return findComponent(registry, raw, overrides); - } else if (raw.info === TypeDefInfo.VecFixed && (raw.sub as TypeDef).type !== 'u8') { - return findComponent(registry, raw, overrides); } } catch (e) { - error = (e as Error).message; + console.error(`params: findComponent: ${(e as Error).message}`); } // we only want to want once, not spam if (!warnList.includes(type)) { warnList.push(type); - error && console.error(`params: findComponent: ${error}`); console.info(`params: findComponent: No pre-defined component for type ${type} from ${TypeDefInfo[def.info]}: ${JSON.stringify(def)}`); } } diff --git a/packages/react-params/src/Param/index.tsx b/packages/react-params/src/Param/index.tsx index 280c3544ba..d2c3e90aac 100644 --- a/packages/react-params/src/Param/index.tsx +++ b/packages/react-params/src/Param/index.tsx @@ -5,6 +5,7 @@ import type { Props } from '../types'; import React, { useMemo } from 'react'; +import { getTypeDef } from '@polkadot/types'; import { encodeTypeDef } from '@polkadot/types/create'; import { isUndefined } from '@polkadot/util'; @@ -30,7 +31,14 @@ function Param ({ className = '', defaultValue, isDisabled, isInOption, isOption const label = useMemo( (): string => { - const fmtType = formatJSON(`${isDisabled && isInOption ? 'Option<' : ''}${encodeTypeDef(registry, type)}${isDisabled && isInOption ? '>' : ''}`); + const inner = encodeTypeDef( + registry, + // if our type is a Lookup, try and unwrap again + registry.isLookupType(type.lookupName || type.type) + ? getTypeDef(registry.createType(type.type).toRawType()) + : type + ); + const fmtType = formatJSON(`${isDisabled && isInOption ? 'Option<' : ''}${inner}${isDisabled && isInOption ? '>' : ''}`); return `${isUndefined(name) ? '' : `${name}: `}${fmtType}${type.typeName && !fmtType.includes(type.typeName) ? ` (${type.typeName})` : ''}`; },