@@ -2,25 +2,10 @@ import { AssetSummary } from '@/features/assets/models'
22import { AccountResult , AssetHoldingResult , AssetResult } from '../data/types'
33import { Account , AccountAssetSummary , AssetHolding } from '../models'
44import { microAlgos } from '@algorandfoundation/algokit-utils'
5+ import { AsyncMaybeAtom } from '@/features/common/data/types'
56
6- export const asAccount = async (
7- accountResult : AccountResult ,
8- assetResolver : ( assetId : number ) => Promise < AssetSummary > | AssetSummary
9- ) : Promise < Account > => {
10- const asAccountAssetSummary = createAccountSummaryMapper ( assetResolver )
11-
12- const assetsHoldings = await asAssetHoldings ( accountResult . assets ?? [ ] , asAccountAssetSummary )
13- const [ assetsHeld , assetsOpted ] = assetsHoldings . reduce (
14- ( acc , asset ) => {
15- if ( asset . amount === 0 ) {
16- acc [ 1 ] . push ( asset )
17- } else {
18- acc [ 0 ] . push ( asset )
19- }
20- return acc
21- } ,
22- [ [ ] , [ ] ] as [ AssetHolding [ ] , AssetHolding [ ] ]
23- )
7+ export const asAccount = ( accountResult : AccountResult , assetResolver : ( assetId : number ) => AsyncMaybeAtom < AssetSummary > ) : Account => {
8+ const [ assetsHeld , assetsOpted ] = asAssetHoldings ( accountResult . assets ?? [ ] , assetResolver )
249
2510 return {
2611 address : accountResult . address ,
@@ -29,44 +14,43 @@ export const asAccount = async (
2914 applicationsCreated : ( accountResult [ 'created-apps' ] ?? [ ] ) . map ( ( app ) => ( { id : app . id } ) ) ,
3015 applicationsOpted : ( accountResult [ 'apps-local-state' ] ?? [ ] ) . map ( ( app ) => ( { id : app . id } ) ) ,
3116 assetsHeld,
32- assetsCreated : await asAccountAssetSummaries ( accountResult [ 'created-assets' ] ?? [ ] , asAccountAssetSummary ) ,
17+ assetsCreated : asAccountAssetSummaries ( accountResult [ 'created-assets' ] ?? [ ] , assetResolver ) ,
3318 assetsOpted,
3419 rekeyedTo : accountResult [ 'auth-addr' ] ,
3520 json : accountResult ,
3621 }
3722}
3823
39- const createAccountSummaryMapper =
40- ( assetResolver : ( assetId : number ) => Promise < AssetSummary > | AssetSummary ) =>
41- async ( asset : AssetResult | AssetHoldingResult ) : Promise < AccountAssetSummary > => {
42- const assetId = 'index' in asset ? asset . index : asset [ 'asset-id' ]
43- const { clawback : _clawback , ...assetSummary } = await assetResolver ( assetId )
44- return assetSummary
45- }
46-
47- const asAssetHoldings = async (
24+ const asAssetHoldings = (
4825 heldAssets : AssetHoldingResult [ ] ,
49- asAccountSummary : ( asset : AssetHoldingResult ) => Promise < AccountAssetSummary >
50- ) : Promise < AssetHolding [ ] > => {
51- return Promise . all (
52- heldAssets . map ( async ( asset ) => {
53- const assetSummary = await asAccountSummary ( asset )
54- return {
55- asset : assetSummary ,
56- amount : asset . amount ,
57- isFrozen : asset [ 'is-frozen' ] ,
26+ assetResolver : ( assetId : number ) => AsyncMaybeAtom < AssetSummary >
27+ ) : [ AssetHolding [ ] , AssetHolding [ ] ] =>
28+ heldAssets . reduce (
29+ ( acc , result ) => {
30+ const assetId = result [ 'asset-id' ]
31+ const asset = {
32+ assetId,
33+ asset : assetResolver ( assetId ) ,
34+ amount : result . amount ,
35+ isFrozen : result [ 'is-frozen' ] ,
5836 }
59- } )
37+ if ( result . amount === 0 ) {
38+ acc [ 1 ] . push ( asset )
39+ } else {
40+ acc [ 0 ] . push ( asset )
41+ }
42+ return acc
43+ } ,
44+ [ [ ] , [ ] ] as [ AssetHolding [ ] , AssetHolding [ ] ]
6045 )
61- }
6246
63- const asAccountAssetSummaries = async (
47+ const asAccountAssetSummaries = (
6448 createdAssets : AssetResult [ ] ,
65- asAccountSummary : ( asset : AssetResult ) => Promise < AccountAssetSummary >
66- ) : Promise < AccountAssetSummary [ ] > => {
67- return Promise . all (
68- createdAssets . map ( async ( asset ) => {
69- return await asAccountSummary ( asset )
70- } )
71- )
72- }
49+ assetResolver : ( assetId : number ) => AsyncMaybeAtom < AssetSummary >
50+ ) : AccountAssetSummary [ ] =>
51+ createdAssets . map ( ( asset ) => {
52+ return {
53+ assetId : asset . index ,
54+ asset : assetResolver ( asset . index ) ,
55+ }
56+ } )
0 commit comments