34 lines
975 B
TypeScript
34 lines
975 B
TypeScript
import compact from 'lodash/compact';
|
|
import maxBy from 'lodash/maxBy';
|
|
import { getVolumeTier } from './utils';
|
|
import type { DiscountProgramsQuery, FeesQuery } from './__generated__/Fees';
|
|
|
|
export const useVolumeStats = (
|
|
stats?: FeesQuery['volumeDiscountStats'],
|
|
program?: DiscountProgramsQuery['currentVolumeDiscountProgram']
|
|
) => {
|
|
const volumeTiers = program?.benefitTiers || [];
|
|
|
|
if (!stats || !program) {
|
|
return {
|
|
volumeDiscount: 0,
|
|
volumeTierIndex: -1,
|
|
volumeInWindow: 0,
|
|
volumeTiers,
|
|
};
|
|
}
|
|
|
|
const volumeStats = compact(stats.edges).map((e) => e.node);
|
|
const lastEpochStats = maxBy(volumeStats, (s) => s.atEpoch);
|
|
const volumeDiscount = Number(lastEpochStats?.discountFactor || 0);
|
|
const volumeInWindow = Number(lastEpochStats?.runningVolume || 0);
|
|
const volumeTierIndex = getVolumeTier(volumeInWindow, volumeTiers);
|
|
|
|
return {
|
|
volumeDiscount,
|
|
volumeTierIndex,
|
|
volumeInWindow,
|
|
volumeTiers,
|
|
};
|
|
};
|