ghost-portal/packages/react-hooks/src/useParaEndpoints.ts
Jaco Greeff 498a4818ff
Sort parachain lists with known first (#5011)
* Sort parachain lists with known first

* leases re-sort

* Adjust sorting
2021-04-02 21:19:52 +02:00

54 lines
1.5 KiB
TypeScript

// Copyright 2017-2021 @polkadot/react-hooks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type BN from 'bn.js';
import type { LinkOption } from '@polkadot/apps-config/settings/types';
import { useMemo } from 'react';
import { createWsEndpoints } from '@polkadot/apps-config';
import { bnToBn } from '@polkadot/util';
import { useApi } from './useApi';
function extractRelayEndpoints (genesisHash: string): LinkOption[] {
return createWsEndpoints((key: string, value: string | undefined) => value || key).filter(({ genesisHashRelay }) =>
genesisHash === genesisHashRelay
);
}
function extractParaEndpoints (allEndpoints: LinkOption[], paraId: BN | number): LinkOption[] {
const numId = bnToBn(paraId).toNumber();
return allEndpoints.filter(({ paraId }) => paraId === numId);
}
function useRelayEndpoints (): LinkOption[] {
const { api } = useApi();
return useMemo(
() => extractRelayEndpoints(api.genesisHash.toHex()),
[api]
);
}
export function useParaEndpoints (paraId: BN | number): LinkOption[] {
const endpoints = useRelayEndpoints();
return useMemo(
() => extractParaEndpoints(endpoints, paraId),
[endpoints, paraId]
);
}
export function useIsParasLinked (ids?: (BN | number)[] | null): Record<string, boolean> {
const endpoints = useRelayEndpoints();
return useMemo(
() => ids
? ids.reduce((all: Record<string, boolean>, id) => ({ ...all, [id.toString()]: extractParaEndpoints(endpoints, id).length !== 0 }), {})
: {},
[endpoints, ids]
);
}