Skip to content

Commit 11a0094

Browse files
committed
fixup! feat: add stake pools service
1 parent 0359a41 commit 11a0094

File tree

1 file changed

+38
-70
lines changed

1 file changed

+38
-70
lines changed

packages/cardano/src/wallet/lib/stakePoolService.ts

Lines changed: 38 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -109,80 +109,48 @@ const enrichStakePool = (stakePools: Cardano.StakePool[], id: Cardano.PoolId, de
109109
}
110110
};
111111

112-
// eslint-disable-next-line sonarjs/cognitive-complexity, complexity
112+
// eslint-disable-next-line sonarjs/cognitive-complexity
113113
const getSorter = (sort: QueryStakePoolsArgs['sort']) => {
114114
if (!sort) return null;
115115

116116
const { field, order } = sort;
117-
118-
if (order === 'asc') {
119-
switch (field) {
120-
case 'name':
121-
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
122-
const nameA = a.metadata?.name || EMPTY_TEXT_PLACEHOLDER_ASC_ORDER;
123-
const nameB = b.metadata?.name || EMPTY_TEXT_PLACEHOLDER_ASC_ORDER;
124-
return nameA.localeCompare(nameB);
125-
};
126-
case 'ticker':
127-
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
128-
const tickerA = a.metadata?.ticker || EMPTY_TEXT_PLACEHOLDER_ASC_ORDER;
129-
const tickerB = b.metadata?.ticker || EMPTY_TEXT_PLACEHOLDER_ASC_ORDER;
130-
return tickerA.localeCompare(tickerB);
131-
};
132-
case 'cost':
133-
return (a: Cardano.StakePool, b: Cardano.StakePool) => Number(a.cost - b.cost);
134-
case 'margin':
135-
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
136-
const marginA = Cardano.FractionUtils.toNumber(a.margin);
137-
const marginB = Cardano.FractionUtils.toNumber(b.margin);
138-
return marginA - marginB;
139-
};
140-
case 'pledge':
141-
return (a: Cardano.StakePool, b: Cardano.StakePool) => Number(a.pledge - b.pledge);
142-
case 'blocks':
143-
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
144-
(a.metrics?.blocksCreated || 0) - (b.metrics?.blocksCreated || 0);
145-
case 'liveStake':
146-
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
147-
Number((a.metrics?.stake.live || BigInt(0)) - (b.metrics?.stake.live || BigInt(0)));
148-
case 'saturation':
149-
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
150-
(a.metrics?.saturation || 0) - (b.metrics?.saturation || 0);
151-
}
152-
} else {
153-
switch (field) {
154-
case 'name':
155-
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
156-
const nameA = a.metadata?.name || EMPTY_TEXT_PLACEHOLDER_DESC_ORDER;
157-
const nameB = b.metadata?.name || EMPTY_TEXT_PLACEHOLDER_DESC_ORDER;
158-
return nameB.localeCompare(nameA);
159-
};
160-
case 'ticker':
161-
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
162-
const tickerA = a.metadata?.ticker || EMPTY_TEXT_PLACEHOLDER_DESC_ORDER;
163-
const tickerB = b.metadata?.ticker || EMPTY_TEXT_PLACEHOLDER_DESC_ORDER;
164-
return tickerB.localeCompare(tickerA);
165-
};
166-
case 'cost':
167-
return (a: Cardano.StakePool, b: Cardano.StakePool) => Number(b.cost - a.cost);
168-
case 'margin':
169-
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
170-
const marginA = Cardano.FractionUtils.toNumber(a.margin);
171-
const marginB = Cardano.FractionUtils.toNumber(b.margin);
172-
return marginB - marginA;
173-
};
174-
case 'pledge':
175-
return (a: Cardano.StakePool, b: Cardano.StakePool) => Number(b.pledge - a.pledge);
176-
case 'blocks':
177-
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
178-
(b.metrics?.blocksCreated || 0) - (a.metrics?.blocksCreated || 0);
179-
case 'liveStake':
180-
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
181-
Number((b.metrics?.stake.live || BigInt(0)) - (a.metrics?.stake.live || BigInt(0)));
182-
case 'saturation':
183-
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
184-
(b.metrics?.saturation || 0) - (a.metrics?.saturation || 0);
185-
}
117+
const asc = order === 'asc';
118+
const placeholder = asc ? EMPTY_TEXT_PLACEHOLDER_ASC_ORDER : EMPTY_TEXT_PLACEHOLDER_DESC_ORDER;
119+
120+
switch (field) {
121+
case 'name':
122+
case 'ticker':
123+
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
124+
const valueA = a.metadata?.[field] || placeholder;
125+
const valueB = b.metadata?.[field] || placeholder;
126+
return asc ? valueA.localeCompare(valueB) : valueB.localeCompare(valueA);
127+
};
128+
case 'cost':
129+
return (a: Cardano.StakePool, b: Cardano.StakePool) => (asc ? Number(a.cost - b.cost) : Number(b.cost - a.cost));
130+
case 'margin':
131+
return (a: Cardano.StakePool, b: Cardano.StakePool) => {
132+
const marginA = Cardano.FractionUtils.toNumber(a.margin);
133+
const marginB = Cardano.FractionUtils.toNumber(b.margin);
134+
return asc ? marginA - marginB : marginB - marginA;
135+
};
136+
case 'pledge':
137+
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
138+
asc ? Number(a.pledge - b.pledge) : Number(b.pledge - a.pledge);
139+
case 'blocks':
140+
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
141+
asc
142+
? (a.metrics?.blocksCreated || 0) - (b.metrics?.blocksCreated || 0)
143+
: (b.metrics?.blocksCreated || 0) - (a.metrics?.blocksCreated || 0);
144+
case 'liveStake':
145+
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
146+
asc
147+
? Number((a.metrics?.stake.live || BigInt(0)) - (b.metrics?.stake.live || BigInt(0)))
148+
: Number((b.metrics?.stake.live || BigInt(0)) - (a.metrics?.stake.live || BigInt(0)));
149+
case 'saturation':
150+
return (a: Cardano.StakePool, b: Cardano.StakePool) =>
151+
asc
152+
? (a.metrics?.saturation || 0) - (b.metrics?.saturation || 0)
153+
: (b.metrics?.saturation || 0) - (a.metrics?.saturation || 0);
186154
}
187155

188156
return null;

0 commit comments

Comments
 (0)