Files

81 lines
2.7 KiB
TypeScript

import * as React from 'react';
import { View } from 'react-native';
import Identicon from 'identicon.js';
import { SvgXml } from 'react-native-svg';
import Base64Utils from './../utils/Base64Utils';
import PrivacyUtils from './../utils/PrivacyUtils';
const hash = require('object-hash');
export const NodeTitle = (selectedNode: any, overrideSensitivity = false) => {
const displayName =
selectedNode && selectedNode.nickname
? selectedNode.nickname
: selectedNode && selectedNode.implementation === 'lndhub'
? selectedNode.lndhubUrl
.replace('https://', '')
.replace('http://', '')
: selectedNode && selectedNode.url
? selectedNode.url.replace('https://', '').replace('http://', '')
: selectedNode && selectedNode.port
? `${selectedNode.host}:${selectedNode.port}`
: (selectedNode && selectedNode.host) || 'Unknown';
return overrideSensitivity
? displayName
: PrivacyUtils.sensitiveValue({ input: displayName, fixedLength: 8 });
};
export default function NodeIdenticon({
selectedNode,
width,
rounded
}: {
selectedNode: any;
width?: number;
rounded?: boolean;
}) {
// Build hash from stable connection identity fields so the identicon
// doesn't change when the user edits the nickname.
const stableIdentity = (() => {
if (!selectedNode) {
return 'unknown';
}
switch (selectedNode.implementation) {
case 'lndhub':
return `lndhub-${selectedNode.lndhubUrl || ''}-${
selectedNode.username || ''
}`;
case 'nostr-wallet-connect':
return `nwc-${selectedNode.nostrWalletConnectUrl || ''}`;
case 'embedded-lnd':
return `embedded-lnd-${selectedNode.lndDir || 'lnd'}`;
case 'ldk-node':
return `ldk-node-${selectedNode.ldkNodeDir || 'ldk'}`;
default:
return selectedNode.url
? `${selectedNode.implementation || ''}-${selectedNode.url}`
: `${selectedNode.implementation || ''}-${
selectedNode.host || ''
}:${selectedNode.port || ''}`;
}
})();
const data = new Identicon(
hash.sha1(stableIdentity),
// @ts-ignore:next-line
{
background: [255, 255, 255, 255],
size: width,
format: 'svg'
}
).toString();
return (
<View style={{ borderRadius: rounded ? width : 0, overflow: 'hidden' }}>
<SvgXml xml={Base64Utils.base64ToUtf8(data)} />
</View>
);
}