ghost-portal/packages/ui-params/src/valueToText.tsx
2019-06-12 20:48:15 +02:00

55 lines
1.4 KiB
TypeScript

// Copyright 2017-2019 @polkadot/ui-app authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import './Params.css';
import React from 'react';
import { classes } from '@polkadot/ui-app/util';
import { isNull, isUndefined, u8aToHex } from '@polkadot/util';
import { Option, U8a } from '@polkadot/types';
const unknown = div({}, '<unknown>');
type DivProps = {
className?: string,
key?: any
};
function div ({ key, className }: DivProps, ...values: Array<React.ReactNode>): React.ReactNode {
return (
<div
className={classes('ui--Param-text', className)}
key={key}
>
{values}
</div>
);
}
function valueToText (type: string, value: any, swallowError: boolean = true, contentShorten: boolean = true): React.ReactNode {
// dont' even ask, nested ?: ... really?
return isNull(value) || isUndefined(value)
? unknown
: div(
{},
['Bytes', 'Data'].includes(type)
? u8aToHex(value.toU8a(true), contentShorten ? 512 : -1)
: (
value instanceof U8a
? (
value.isEmpty
? '<empty>'
: value.toString()
)
: (
(value instanceof Option) && value.isNone
? '<empty>'
: value.toString()
)
)
);
}
export default valueToText;