Files
6d44e159b5 Address widgets (#2788)
* add address widgets

* Update ENVS.md

* fix long values

* fix responsive size and hover border color

* improve url template formatting, add chainId mapping

* add hover animation

* add widgets tab

* filter widgets by address type

* fix link style

* add mixpanel event

* fix stub

* fix result check

* add tests

* fix tabs loading

* Check the workflow: generate chakra types if the node_modules cache is hit

* fix loading

* fix loading view all link

* fix loading issue

* post-review changes

* rename envs and feature

* rename components and hook

* rename config prop and change url template format

* change validation schema

* add chain_id to request params

* update tests

* rename, improve

* improve grid logic

* improve formatting func

* simplify grid logic

* update hint text

* duplicate widgets in env for tests

* update mocks and snapshots

* fix text

* fix grid one more time

* update envs with test config

* update snapshots

* fix grid max width

* update mock and snapshots

* use separator

* Update .env.eth

* fix

* update snapshots

---------

Co-authored-by: tom <[email protected]>
2025-07-04 10:21:28 +02:00

32 lines
873 B
TypeScript

import { useMemo } from 'react';
import type { Address3rdPartyWidget } from 'types/views/address';
import config from 'configs/app';
import useWidgetsConfigQuery from './useWidgetsConfigQuery';
const feature = config.features.address3rdPartyWidgets;
const widgets = (feature.isEnabled && feature.widgets) || [];
export default function useAddress3rdPartyWidgets(
addressType: Address3rdPartyWidget['pages'][number],
isLoading = false,
isQueryEnabled = true,
) {
const configQuery = useWidgetsConfigQuery(isQueryEnabled);
const items = useMemo(() => {
if (configQuery.isPlaceholderData || isLoading) {
return widgets;
}
return widgets.filter((widget) => configQuery.data?.[widget]?.pages.includes(addressType));
}, [ configQuery, isLoading, addressType ]);
return {
isEnabled: feature.isEnabled,
items,
configQuery,
};
}