import {storageSerializer} from '@yoroi/common' import {App, Portfolio} from '@yoroi/types' import {freeze} from 'immer' import {deserializers} from '../../transformers/deserializers' export const portfolioBalanceStorageMaker = ({ balanceStorage, primaryBreakdownStorage, primaryTokenId, }: { balanceStorage: App.ObservableStorage primaryBreakdownStorage: App.ObservableStorage primaryTokenId: Portfolio.Token.Id }): Portfolio.Storage.Balance => { const balances = { save: ( entries: ReadonlyArray<[Portfolio.Token.Id, Portfolio.Token.Amount]>, ) => balanceStorage.multiSet( entries, storageSerializer, ), read: (keys: ReadonlyArray) => balanceStorage.multiGet( keys, deserializers.tokenAmount, ), all: () => balanceStorage.multiGet( balanceStorage.getAllKeys(), deserializers.tokenAmount, ), keys: () => balanceStorage.getAllKeys(), clear: () => balanceStorage.clear(), } const primaryBreakdown = { save: (breakdown: Readonly) => primaryBreakdownStorage.setItem( primaryTokenId, breakdown, storageSerializer, ), read: () => primaryBreakdownStorage.getItem( primaryTokenId, deserializers.primaryBreakdown, ), clear: () => primaryBreakdownStorage.clear(), } const clear = () => { balanceStorage.clear() primaryBreakdownStorage.clear() } return freeze( { balances, primaryBreakdown, clear, }, true, ) }