import { WALLET_TOKEN_TYPE_CHANGE } from "../common/WalletEvent"; import { ZError } from "../common/ZError"; import { DEFAULT_NFT_TYPES } from "../config/chain_config"; import WalletBase from "./WallerBase"; const {ccclass, property} = cc._decorator; @ccclass export default class ListNode extends WalletBase { @property(cc.Prefab) nftListPreb: cc.Prefab = null @property(cc.Node) tokenNode: cc.Node = null otherNode: Map = new Map() // LIFE-CYCLE CALLBACKS: // onLoad () {} start () { super.start() this.wallet.mainHandlers.on(WALLET_TOKEN_TYPE_CHANGE, this.onTokenTypeChange.bind(this)) } // update (dt) {} initOneNftList(type: string) { if (this.otherNode.has(type)) { return this.otherNode.get(type) } const chain = this.wallet.currentChain.id let nftData: any = DEFAULT_NFT_TYPES[chain] if (!nftData) { throw new ZError(10, 'no nft data found') } let node = cc.instantiate(this.nftListPreb) node.active = false node.getComponent('NftList').address = nftData[type] node.getComponent('NftList').type = type this.node.addChild(node) this.otherNode.set(type, node) return node } onTokenTypeChange(type: string) { console.log('on token type change: ', type) for (let key of this.otherNode.keys()) { this.otherNode.get(key).active = key === type } if (type === 'tokens') { this.tokenNode.active = true this.tokenNode.getComponent('TokenList').updateList() } else { this.tokenNode.active = false const nftList = this.initOneNftList(type) nftList.active = true nftList.getComponent('NftList').updateList() } } }