mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-02-10 22:14:53 -05:00
* squash frontend changes * Style quest explorer * Style quest page * Dates * Dates * Typecheck * Prettier * Fix create page layout * Update only OPEN quests * Repetition info * Fix create quest errors * Quest form Textarea * Quest form Textarea * Truncate texts * Redirect if user not logged in * Tooltips * Factorize skills tags * fix username in completions * Metafam as default guild on creation * Layouts * Remove todo * cooldown * Rename to "claim quest" * squash frontend changes * Style quest explorer * Style quest page * Dates * Dates * Typecheck * Prettier * Fix create page layout * Update only OPEN quests * Repetition info * Fix create quest errors * Quest form Textarea * Quest form Textarea * Truncate texts * Redirect if user not logged in * Tooltips * Factorize skills tags * fix username in completions * Metafam as default guild on creation * Layouts * Remove todo * cooldown * Rename to "claim quest" * Move ConfirmModal in ds * Extract pSeed balance * Fix "created by me" switch * Reword complete quest * Style quest form * prettier * lint
112 lines
2.4 KiB
TypeScript
112 lines
2.4 KiB
TypeScript
import gql from 'fake-tag';
|
|
|
|
import {
|
|
GetPatronsQuery,
|
|
GetPatronsQueryVariables,
|
|
GetpSeedHoldersQuery,
|
|
GetpSeedHoldersQueryVariables,
|
|
PlayerFragmentFragment,
|
|
TokenBalancesFragmentFragment,
|
|
} from './autogen/types';
|
|
import { client } from './client';
|
|
import { PlayerFragment, TokenBalancesFragment } from './fragments';
|
|
import { Patron } from './types';
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
gql`
|
|
query GetpSeedBalance($address: String!) {
|
|
getTokenBalances(address: $address) {
|
|
...TokenBalancesFragment
|
|
}
|
|
}
|
|
${TokenBalancesFragment}
|
|
`;
|
|
|
|
const patronsQuery = gql`
|
|
query GetPatrons($addresses: [String!], $limit: Int) {
|
|
player(where: { ethereum_address: { _in: $addresses } }, limit: $limit) {
|
|
...PlayerFragment
|
|
}
|
|
}
|
|
${PlayerFragment}
|
|
`;
|
|
|
|
const pSeedHoldersQuery = gql`
|
|
query GetpSeedHolders($limit: Int) {
|
|
pSeedHolders: getTopPSeedHolders(limit: $limit) {
|
|
...TokenBalancesFragment
|
|
}
|
|
}
|
|
${TokenBalancesFragment}
|
|
`;
|
|
|
|
const getPlayersFromAddresses = async (
|
|
addresses: Array<string>,
|
|
limit: number,
|
|
): Promise<Array<PlayerFragmentFragment>> => {
|
|
const { data, error } = await client
|
|
.query<GetPatronsQuery, GetPatronsQueryVariables>(patronsQuery, {
|
|
addresses,
|
|
limit,
|
|
})
|
|
.toPromise();
|
|
|
|
if (!data) {
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
return data.player;
|
|
};
|
|
|
|
const getpSeedHolders = async (
|
|
limit: number,
|
|
): Promise<Array<TokenBalancesFragmentFragment>> => {
|
|
const { data, error } = await client
|
|
.query<GetpSeedHoldersQuery, GetpSeedHoldersQueryVariables>(
|
|
pSeedHoldersQuery,
|
|
{
|
|
limit,
|
|
},
|
|
)
|
|
.toPromise();
|
|
|
|
if (!data || !data.pSeedHolders) {
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
return data.pSeedHolders;
|
|
};
|
|
|
|
export const getPatrons = async (limit = 50): Promise<Array<Patron>> => {
|
|
const tokenBalances: Array<TokenBalancesFragmentFragment> = await getpSeedHolders(
|
|
limit,
|
|
);
|
|
|
|
const players: Array<PlayerFragmentFragment> = await getPlayersFromAddresses(
|
|
tokenBalances.map((u) => u.address),
|
|
limit,
|
|
);
|
|
|
|
const patrons: Array<Patron> = tokenBalances.reduce<Array<Patron>>(
|
|
(res, u) => {
|
|
const player = players.find((p) => p.ethereum_address === u.address);
|
|
if (player) {
|
|
const patron = { ...player, pSeedBalance: u.pSeedBalance } as Patron;
|
|
res.push(patron);
|
|
}
|
|
return res;
|
|
},
|
|
[],
|
|
);
|
|
|
|
return patrons;
|
|
};
|