// 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 { const endpoints = useRelayEndpoints(); return useMemo( () => ids ? ids.reduce((all: Record, id) => ({ ...all, [id.toString()]: extractParaEndpoints(endpoints, id).length !== 0 }), {}) : {}, [endpoints, ids] ); }