mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* context for storing subchain config and tx view for subchain * address page and block page for subchain * address aggregated page: local txs tab * connect MultichainSelect to context * home page placeholder * refactor subchain select state * envs for demo * fix ts * clear value for l2 review * subchain widgets on home page * csp policies * sockets, duck and goose * fix socket on subchain address page * link builder for subchain views * update home widget * fix time increment * enable tx interpretator and metadata service * generate multichain config based on every chain app config * Fix the multichain config to work in Docker * multichain socket test * rename subchain-id to subchain-slug path param * refactoring * update chain icons on entities * home page: latest local txs * latest cross-chain txs * minor improvements * renaming, pt. 1 * rename chain routes * enable blockchain interaction * add loading state to icon shield * fix build * fix tests * update types package
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import type { AddressMetadataInfoFormatted, AddressMetadataTagFormatted } from 'types/client/addressMetadata';
|
|
|
|
import config from 'configs/app';
|
|
import useApiQuery from 'lib/api/useApiQuery';
|
|
import { useMultichainContext } from 'lib/contexts/multichain';
|
|
|
|
import parseMetaPayload from './parseMetaPayload';
|
|
|
|
export default function useAddressMetadataInfoQuery(addresses: Array<string>, isEnabled = true) {
|
|
|
|
const resource = 'metadata:info';
|
|
|
|
const multichainContext = useMultichainContext();
|
|
const feature = multichainContext?.chain?.config.features.addressMetadata || config.features.addressMetadata;
|
|
const chainId = multichainContext?.chain?.config.chain.id || config.chain.id;
|
|
|
|
return useApiQuery<typeof resource, unknown, AddressMetadataInfoFormatted>(resource, {
|
|
queryParams: {
|
|
addresses,
|
|
chainId,
|
|
tagsLimit: '20',
|
|
},
|
|
queryOptions: {
|
|
enabled: isEnabled && addresses.length > 0 && feature.isEnabled && Boolean(chainId),
|
|
select: (data) => {
|
|
const addresses = Object.entries(data.addresses)
|
|
.map(([ address, { tags, reputation } ]) => {
|
|
const formattedTags: Array<AddressMetadataTagFormatted> = tags.map((tag) => ({ ...tag, meta: parseMetaPayload(tag.meta) }));
|
|
return [ address.toLowerCase(), { tags: formattedTags, reputation } ] as const;
|
|
})
|
|
.reduce((result, item) => {
|
|
result[item[0]] = item[1];
|
|
return result;
|
|
}, {} as AddressMetadataInfoFormatted['addresses']);
|
|
|
|
return { addresses };
|
|
},
|
|
},
|
|
});
|
|
}
|