Commit 949ce203 authored by isstuev's avatar isstuev

adblock detect

parent 8dec6f5b
...@@ -8,6 +8,7 @@ export enum NAMES { ...@@ -8,6 +8,7 @@ export enum NAMES {
TXS_SORT='txs_sort', TXS_SORT='txs_sort',
COLOR_MODE='chakra-ui-color-mode', COLOR_MODE='chakra-ui-color-mode',
INDEXING_ALERT='indexing_alert', INDEXING_ALERT='indexing_alert',
ADBLOCK_DETECTED='adblock_detected',
} }
export function get(name?: NAMES | undefined | null, serverCookie?: string) { export function get(name?: NAMES | undefined | null, serverCookie?: string) {
......
import { useEffect } from 'react';
import { useAppContext } from 'lib/appContext';
import * as cookies from 'lib/cookies';
import isBrowser from 'lib/isBrowser';
export default function useAdblockDetect() {
const hasAdblockCookie = cookies.get(cookies.NAMES.ADBLOCK_DETECTED, useAppContext().cookies);
useEffect(() => {
if (isBrowser() && !hasAdblockCookie) {
const url = 'https://request-global.czilladx.com';
fetch(url, {
method: 'HEAD',
mode: 'no-cors',
cache: 'no-store',
}).catch(() => {
cookies.set(cookies.NAMES.ADBLOCK_DETECTED, 'true', { expires: 1 });
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}
import { GridItem } from '@chakra-ui/react'; import { GridItem } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import * as cookies from 'lib/cookies';
import useIsMobile from 'lib/hooks/useIsMobile'; import useIsMobile from 'lib/hooks/useIsMobile';
import AdBanner from 'ui/shared/ad/AdBanner'; import AdBanner from 'ui/shared/ad/AdBanner';
import DetailsInfoItem from 'ui/shared/DetailsInfoItem'; import DetailsInfoItem from 'ui/shared/DetailsInfoItem';
const DetailsSponsoredItem = () => { const DetailsSponsoredItem = () => {
const isMobile = useIsMobile(); const isMobile = useIsMobile();
const hasAdblockCookie = cookies.get(cookies.NAMES.ADBLOCK_DETECTED);
if (hasAdblockCookie) {
return null;
}
if (isMobile) { if (isMobile) {
return ( return (
......
...@@ -2,6 +2,7 @@ import { Flex } from '@chakra-ui/react'; ...@@ -2,6 +2,7 @@ import { Flex } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import getErrorStatusCode from 'lib/errors/getErrorStatusCode'; import getErrorStatusCode from 'lib/errors/getErrorStatusCode';
import useAdblockDetect from 'lib/hooks/useAdblockDetect';
import useGetCsrfToken from 'lib/hooks/useGetCsrfToken'; import useGetCsrfToken from 'lib/hooks/useGetCsrfToken';
import AppError from 'ui/shared/AppError/AppError'; import AppError from 'ui/shared/AppError/AppError';
import ErrorBoundary from 'ui/shared/ErrorBoundary'; import ErrorBoundary from 'ui/shared/ErrorBoundary';
...@@ -26,6 +27,8 @@ const Page = ({ ...@@ -26,6 +27,8 @@ const Page = ({
useGetCsrfToken(); useGetCsrfToken();
useAdblockDetect();
const renderErrorScreen = React.useCallback((error?: Error) => { const renderErrorScreen = React.useCallback((error?: Error) => {
const statusCode = getErrorStatusCode(error) || 500; const statusCode = getErrorStatusCode(error) || 500;
const isInvalidTxHash = error?.message.includes('Invalid tx hash'); const isInvalidTxHash = error?.message.includes('Invalid tx hash');
......
...@@ -2,13 +2,17 @@ import { chakra } from '@chakra-ui/react'; ...@@ -2,13 +2,17 @@ import { chakra } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import appConfig from 'configs/app/config'; import appConfig from 'configs/app/config';
import { useAppContext } from 'lib/appContext';
import * as cookies from 'lib/cookies';
import isSelfHosted from 'lib/isSelfHosted'; import isSelfHosted from 'lib/isSelfHosted';
import AdbutlerBanner from './AdbutlerBanner'; import AdbutlerBanner from './AdbutlerBanner';
import CoinzillaBanner from './CoinzillaBanner'; import CoinzillaBanner from './CoinzillaBanner';
const AdBanner = ({ className }: { className?: string }) => { const AdBanner = ({ className }: { className?: string }) => {
if (!isSelfHosted()) { const hasAdblockCookie = cookies.get(cookies.NAMES.ADBLOCK_DETECTED, useAppContext().cookies);
if (!isSelfHosted() || hasAdblockCookie) {
return null; return null;
} }
......
import { Box, Image, Link, Text, chakra } from '@chakra-ui/react'; import { Box, Image, Link, Text, chakra } from '@chakra-ui/react';
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { useAppContext } from 'lib/appContext';
import * as cookies from 'lib/cookies';
import { ndash } from 'lib/html-entities'; import { ndash } from 'lib/html-entities';
import isBrowser from 'lib/isBrowser';
type AdData = { type AdData = {
ad: { ad: {
...@@ -28,20 +31,28 @@ const CoinzillaTextAd = ({ className }: {className?: string}) => { ...@@ -28,20 +31,28 @@ const CoinzillaTextAd = ({ className }: {className?: string}) => {
const [ adData, setAdData ] = React.useState<AdData | null>(null); const [ adData, setAdData ] = React.useState<AdData | null>(null);
const [ isLoading, setIsLoading ] = React.useState(true); const [ isLoading, setIsLoading ] = React.useState(true);
const hasAdblockCookie = cookies.get(cookies.NAMES.ADBLOCK_DETECTED, useAppContext().cookies);
useEffect(() => { useEffect(() => {
fetch('https://request-global.czilladx.com/serve/native.php?z=19260bf627546ab7242') if (!hasAdblockCookie && isBrowser()) {
.then(res => res.status === 200 ? res.json() : null) fetch('https://request-global.czilladx.com/serve/native.php?z=19260bf627546ab7242')
.then((_data) => { .then(res => res.status === 200 ? res.json() : null)
const data = _data as AdData; .then((_data) => {
setAdData(data); const data = _data as AdData;
if (data?.ad?.impressionUrl) { setAdData(data);
fetch(data.ad.impressionUrl); if (data?.ad?.impressionUrl) {
} fetch(data.ad.impressionUrl);
}) }
.finally(() => { })
setIsLoading(false); .finally(() => {
}); setIsLoading(false);
}, []); });
}
}, [ hasAdblockCookie ]);
if (hasAdblockCookie) {
return null;
}
if (isLoading) { if (isLoading) {
return <Box className={ className } h={{ base: 12, lg: 6 }}/>; return <Box className={ className } h={{ base: 12, lg: 6 }}/>;
......
...@@ -22,7 +22,6 @@ const TxDetailsSkeleton = () => { ...@@ -22,7 +22,6 @@ const TxDetailsSkeleton = () => {
<DetailsSkeletonRow/> <DetailsSkeletonRow/>
<DetailsSkeletonRow w="70%"/> <DetailsSkeletonRow w="70%"/>
<DetailsSkeletonRow w="70%"/> <DetailsSkeletonRow w="70%"/>
<GridItem h={{ base: '82px', lg: '38px' }}/>
{ sectionGap } { sectionGap }
<DetailsSkeletonRow w="40%"/> <DetailsSkeletonRow w="40%"/>
<DetailsSkeletonRow w="40%"/> <DetailsSkeletonRow w="40%"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment