Perform inner inspect on Luukup types (Label & Component) (#7901)

This commit is contained in:
Jaco 2022-07-25 16:24:10 +02:00 committed by GitHub
parent 7b108bdf8b
commit 0e51d20aff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 10 deletions

View File

@ -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)}`);
}
}

View File

@ -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})` : ''}`;
},