import { useQuery } from '@tanstack/react-query'; import { Ad, getProvider } from 'soapbox/features/ads/providers'; import { useAppDispatch } from 'soapbox/hooks'; import { adSchema } from 'soapbox/schemas'; import { filteredArray } from 'soapbox/schemas/utils'; import { isExpired } from 'soapbox/utils/ads'; const AdKeys = { ads: ['ads'] as const, }; function useAds() { const dispatch = useAppDispatch(); const getAds = async () => { return dispatch(async (_, getState) => { const provider = await getProvider(getState); if (provider) { return provider.getAds(getState); } else { return []; } }); }; const result = useQuery(AdKeys.ads, getAds, { placeholderData: [], }); // Filter out expired ads. const data = filteredArray(adSchema) .parse(result.data) .filter(ad => !isExpired(ad)); return { ...result, data, }; } export { useAds as default, AdKeys };