@yoroi/portfolio
Version:
The Portfolio package of Yoroi SDK
65 lines • 2.36 kB
JavaScript
import { Portfolio } from '@yoroi/types';
export const alpha = transform => (a, b) => transform(a).localeCompare(transform(b));
export const toEnd = predicate => (a, b) => predicate(a) ? 1 : predicate(b) ? -1 : 0;
export const toStart = predicate => (a, b) => predicate(a) ? -1 : predicate(b) ? 1 : 0;
export const sortTokenInfos = _ref => {
let {
primaryTokenInfo,
secondaryTokenInfos
} = _ref;
return [...secondaryTokenInfos].sort(alpha(tokenInfo => {
switch (tokenInfo.type) {
case Portfolio.Token.Type.FT:
{
if (tokenInfo.ticker !== '') return tokenInfo.ticker.toLocaleLowerCase();
return tokenInfo.name.toLocaleLowerCase();
}
case Portfolio.Token.Type.NFT:
return tokenInfo.name.toLocaleLowerCase();
}
})).sort(toEnd(tokenInfo => {
switch (tokenInfo.status) {
case Portfolio.Token.Status.Unknown:
case Portfolio.Token.Status.Invalid:
case Portfolio.Token.Status.Scam:
return true;
}
switch (tokenInfo.type) {
case Portfolio.Token.Type.FT:
return !tokenInfo.ticker && !tokenInfo.name;
case Portfolio.Token.Type.NFT:
return !tokenInfo.name;
}
})).sort(toStart(tokenInfo => tokenInfo.id === primaryTokenInfo.id));
};
export const sortTokenAmountsByInfo = _ref2 => {
let {
primaryTokenInfo,
amounts
} = _ref2;
return [...amounts].sort(alpha(tokenBalance => {
switch (tokenBalance.info.type) {
case Portfolio.Token.Type.FT:
{
if (tokenBalance.info.ticker !== '') return tokenBalance.info.ticker.toLocaleLowerCase();
return tokenBalance.info.name.toLocaleLowerCase();
}
case Portfolio.Token.Type.NFT:
return tokenBalance.info.name.toLocaleLowerCase();
}
})).sort(toEnd(tokenBalance => {
switch (tokenBalance.info.status) {
case Portfolio.Token.Status.Unknown:
case Portfolio.Token.Status.Invalid:
case Portfolio.Token.Status.Scam:
return true;
}
switch (tokenBalance.info.type) {
case Portfolio.Token.Type.FT:
return !tokenBalance.info.ticker && !tokenBalance.info.name;
case Portfolio.Token.Type.NFT:
return !tokenBalance.info.name;
}
})).sort(toStart(tokenBalance => tokenBalance.info.id === primaryTokenInfo.id));
};
//# sourceMappingURL=sorting.js.map