diff --git a/src/app/_services/user.service.ts b/src/app/_services/user.service.ts index 7d63be6..cddbae3 100644 --- a/src/app/_services/user.service.ts +++ b/src/app/_services/user.service.ts @@ -209,7 +209,7 @@ export class UserService { ); } }); - this.addAccount(data, limit); + this.addAccount(data, limit, false); } }; worker.postMessage({ @@ -222,7 +222,7 @@ export class UserService { 'Web workers are not supported in this environment' ); for (const accountAddress of accountAddresses.slice(offset, offset + limit)) { - await this.getAccountByAddress(accountAddress, limit); + await this.getAccountByAddress(accountAddress, limit, false, false); } } } catch (error) { @@ -234,7 +234,8 @@ export class UserService { async getAccountByAddress( accountAddress: string, limit: number = 100, - history: boolean = false + history: boolean = false, + top: boolean = true ): Promise> { const accountSubject: Subject = new Subject(); this.getAccountDetailsFromMeta(await User.toKey(add0x(accountAddress))) @@ -260,7 +261,7 @@ export class UserService { }); accountInfo.vcard = vCard.parse(atob(accountInfo.vcard)); await vcardValidation(accountInfo.vcard); - this.addAccount(accountInfo, limit); + this.addAccount(accountInfo, limit, top); accountSubject.next(accountInfo); }); return accountSubject.asObservable(); @@ -321,21 +322,34 @@ export class UserService { return this.httpClient.get(`${environment.cicMetaUrl}/genders`); } - addAccount(account: AccountDetails, cacheSize: number): void { + addAccount(account: AccountDetails, cacheSize: number, top: boolean = true): void { const savedIndex = this.accounts.findIndex( (acc) => acc.identities.evm[`bloxberg:${environment.bloxbergChainId}`][0] === account.identities.evm[`bloxberg:${environment.bloxbergChainId}`][0] ); - if (savedIndex === 0) { - return; - } - if (savedIndex > 0) { - this.accounts.splice(savedIndex, 1); - } - this.accounts.unshift(account); - if (this.accounts.length > cacheSize) { - this.accounts.length = Math.min(this.accounts.length, cacheSize); + if (top) { + if (savedIndex === 0) { + return; + } + if (savedIndex > 0) { + this.accounts.splice(savedIndex, 1); + } + this.accounts.unshift(account); + if (this.accounts.length > cacheSize) { + this.accounts.length = Math.min(this.accounts.length, cacheSize); + } + } else { + if ( + this.accounts.length >= cacheSize || + (savedIndex !== -1 && savedIndex === this.accounts.length - 1) + ) { + return; + } + if (savedIndex !== -1 && savedIndex < this.accounts.length - 1) { + this.accounts.splice(savedIndex, 1); + } + this.accounts.push(account); } this.accountsList.next(this.accounts); }