import { DomNode } from "@common-module/app"; import { getAddress } from "ethers"; const ELEMENTS = 3; const SIZE = 80; function hashCode(name: string) { var hash = 0; for (var i = 0; i < name.length; i++) { var character = name.charCodeAt(i); hash = ((hash << 5) - hash) + character; hash = hash & hash; // Convert to 32bit integer } return Math.abs(hash); } function getRandomColor(number: number, colors: string[], range: number) { return colors[number % range]; } function getDigit(number: number, ntn: number) { return Math.floor((number / Math.pow(10, ntn)) % 10); } function getUnit(number: number, range: number, index?: number) { let value = number % range; if (index && ((getDigit(number, index) % 2) === 0)) { return -value; } else return value; } function generateColors(name: string, colors: string[]) { const numFromName = hashCode(name); const range = colors && colors.length; const elementsProperties = Array.from({ length: ELEMENTS }, (_, i) => ({ color: getRandomColor(numFromName + i, colors, range), translateX: getUnit(numFromName * (i + 1), SIZE / 10, 1), translateY: getUnit(numFromName * (i + 1), SIZE / 10, 2), scale: 1.2 + getUnit(numFromName * (i + 1), SIZE / 20) / 10, rotate: getUnit(numFromName * (i + 1), 360, 1), })); return elementsProperties; } export default class WalletAvatar extends DomNode { constructor(walletAddress: string, options: { size: number }) { super(".wallet-avatar"); walletAddress = getAddress(walletAddress); const properties = generateColors(walletAddress, [ "#92A1C6", "#146A7C", "#F0AB3D", "#ADD8E6", "#FF6347", ]); const maskId = `mask_${hashCode(walletAddress)}`; this.htmlElement.innerHTML = ` `; } }