// Copyright 2017-2026 @pezkuwi/react-hooks authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { ApiPromise } from '@pezkuwi/api'; import type { Option, StorageKey } from '@pezkuwi/types'; import type { PalletBrokerRegionId, PalletBrokerRegionRecord } from '@pezkuwi/types/lookup'; import type { RegionInfo } from './types.js'; import { useEffect, useState } from 'react'; import { createNamedHook, useCall, useMapKeys } from '@pezkuwi/react-hooks'; function extractInfo (core: number, start: number, end: number, owner: string, paid: string, mask: `0x${string}`) { return { core, end, mask, owner, paid, start }; } const OPT_KEY = { transform: (keys: StorageKey<[PalletBrokerRegionId]>[]): PalletBrokerRegionId[] => keys.map(({ args: [regionId] }) => regionId) }; function useRegionsImpl (api: ApiPromise): RegionInfo[] | undefined { const regionKeys = useMapKeys(api?.query?.broker.regions, [], OPT_KEY); const regionInfo = useCall<[[PalletBrokerRegionId[]], Option[]]>(api?.query?.broker.regions.multi, [regionKeys], { withParams: true }); const [state, setState] = useState(); useEffect((): void => { regionInfo && regionInfo[0][0].length > 0 && setState( regionInfo[0][0].map((info, index) => extractInfo(info.core.toNumber(), info.begin.toNumber(), regionInfo[1][index].unwrap().end.toNumber(), regionInfo[1][index].unwrap().owner.toString(), regionInfo[1][index].unwrap().paid.toString(), info.mask.toHex()) ) ); }, [regionInfo]); return state; } export const useRegions = createNamedHook('useRegions', useRegionsImpl);