Added context to stop prop drilling

This commit is contained in:
z0ccc 2021-09-30 14:20:14 -04:00
parent 26ac07bedb
commit 148beeeaed
11 changed files with 149 additions and 121 deletions

View file

@ -1,4 +1,5 @@
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import DataContext from './Context';
import BlocksOne from './BlocksOne'; import BlocksOne from './BlocksOne';
import BlocksTwo from './BlocksTwo'; import BlocksTwo from './BlocksTwo';
// import FontsBlock from './FontsBlock'; // import FontsBlock from './FontsBlock';
@ -18,24 +19,18 @@ const Blocks = () => {
return ( return (
<> <>
{connectionData ? ( {connectionData ? (
<> <DataContext.Provider value={{ workerData, connectionData }}>
<div className="centerBlockInner"> <div className="centerBlockInner">
<BlocksOne workerData={workerData} /> <BlocksOne />
</div> </div>
<div className="centerBlockInner"> <div className="centerBlockInner">
<BlocksTwo <BlocksTwo />
workerData={workerData}
connectionData={connectionData}
/>
</div> </div>
<div className="centerBlockMobile"> <div className="centerBlockMobile">
<BlocksOne workerData={workerData} /> <BlocksOne />
<BlocksTwo <BlocksTwo />
workerData={workerData}
connectionData={connectionData}
/>
</div> </div>
</> </DataContext.Provider>
) : ( ) : (
<div className="contentBlock loadBlock"> <div className="contentBlock loadBlock">
<center>Loading...</center> <center>Loading...</center>

View file

@ -3,12 +3,12 @@ import IntlBlock from './IntlBlock';
import NavigatorBlock from './NavigatorBlock'; import NavigatorBlock from './NavigatorBlock';
import FingerprintBlock from './FingerprintBlock'; import FingerprintBlock from './FingerprintBlock';
const BlocksOne = ({ workerData }) => ( const BlocksOne = () => (
<> <>
<FingerprintBlock workerData={workerData} /> <FingerprintBlock />
<NavigatorBlock workerData={workerData} /> <NavigatorBlock />
<UserAgentBlock workerAgent={workerData.userAgent} /> <UserAgentBlock />
<IntlBlock workerData={workerData} /> <IntlBlock />
</> </>
); );

View file

@ -3,12 +3,12 @@ import ScreenBlock from './ScreenBlock';
import LocationBlock from './LocationBlock'; import LocationBlock from './LocationBlock';
import ConnectionBlock from './ConnectionBlock'; import ConnectionBlock from './ConnectionBlock';
const BlocksTwo = ({ workerData, connectionData }) => ( const BlocksTwo = () => (
<> <>
<LocationBlock workerData={workerData} connectionData={connectionData} /> <LocationBlock />
<ConnectionBlock workerData={workerData} connectionData={connectionData} /> <ConnectionBlock />
<ScreenBlock /> <ScreenBlock />
<OtherBlock workerData={workerData} /> <OtherBlock />
</> </>
); );

View file

@ -1,25 +1,30 @@
import { useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import { getConnection } from '../utils/connection'; import { getConnection } from '../utils/connection';
const LocationBlock = ({ connectionData }) => ( const LocationBlock = () => {
<Block> const { connectionData } = useContext(DataContext);
<h1>Connection</h1> return (
<Table data={getConnection(connectionData)} /> <Block>
<p> <h1>Connection</h1>
<b>Explanation:</b> Your IP address reveals information about your <Table data={getConnection(connectionData)} />
connection.{' '} <p>
<a <b>Explanation:</b> Your IP address reveals information about your
className="link" connection.{' '}
target="_blank" <a
rel="noreferrer" className="link"
alt="Read more about ip connection" target="_blank"
href="https://en.wikipedia.org/wiki/IP_address" rel="noreferrer"
> alt="Read more about ip connection"
Read more href="https://en.wikipedia.org/wiki/IP_address"
</a> >
</p> Read more
</Block> </a>
); </p>
</Block>
);
};
export default LocationBlock; export default LocationBlock;

View file

@ -0,0 +1,5 @@
import { createContext } from 'react';
const DataContext = createContext();
export default DataContext;

View file

@ -1,5 +1,6 @@
import './FingerprintBlock.css'; import './FingerprintBlock.css';
import { useState, useEffect } from 'react'; import { useState, useEffect, useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import { import {
@ -9,9 +10,10 @@ import {
getFingerprint, getFingerprint,
} from '../utils/fingerprint'; } from '../utils/fingerprint';
const FingerprintBlock = ({ workerData }) => { const FingerprintBlock = () => {
const [signature, setSignature] = useState(); const [signature, setSignature] = useState();
const [load, setload] = useState(false); const [load, setload] = useState(false);
const { workerData } = useContext(DataContext);
const hash = getHash(workerData); const hash = getHash(workerData);
useEffect(() => { useEffect(() => {

View file

@ -1,24 +1,29 @@
import { useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import getIntl from '../utils/intl'; import getIntl from '../utils/intl';
const IntlBlock = ({ workerData }) => ( const IntlBlock = () => {
<Block> const { workerData } = useContext(DataContext);
<h1>Intl</h1> return (
<Table data={getIntl(workerData)} /> <Block>
<p> <h1>Intl</h1>
<b>Explanation:</b> The Intl object exposes info about your computer.{' '} <Table data={getIntl(workerData)} />
<a <p>
className="link" <b>Explanation:</b> The Intl object exposes info about your computer.{' '}
target="_blank" <a
rel="noreferrer" className="link"
alt="Read more about intl" target="_blank"
href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl" rel="noreferrer"
> alt="Read more about intl"
Read more href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl"
</a> >
</p> Read more
</Block> </a>
); </p>
</Block>
);
};
export default IntlBlock; export default IntlBlock;

View file

@ -1,26 +1,31 @@
import { useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import { getMap, getLocation } from '../utils/connection'; import { getMap, getLocation } from '../utils/connection';
const LocationBlock = ({ connectionData, workerData }) => ( const LocationBlock = () => {
<Block> const { workerData, connectionData } = useContext(DataContext);
<h1>Location</h1> return (
<img src={getMap(connectionData)} alt="Map of current location" /> <Block>
<Table data={getLocation(connectionData, workerData)} /> <h1>Location</h1>
<p> <img src={getMap(connectionData)} alt="Map of current location" />
<b>Explanation:</b> Your IP address can be used to determine your <Table data={getLocation(connectionData, workerData)} />
location.{' '} <p>
<a <b>Explanation:</b> Your IP address can be used to determine your
className="link" location.{' '}
target="_blank" <a
rel="noreferrer" className="link"
alt="Read more about ip location" target="_blank"
href="https://en.wikipedia.org/wiki/IP_address" rel="noreferrer"
> alt="Read more about ip location"
Read more href="https://en.wikipedia.org/wiki/IP_address"
</a> >
</p> Read more
</Block> </a>
); </p>
</Block>
);
};
export default LocationBlock; export default LocationBlock;

View file

@ -1,25 +1,30 @@
import { useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import getNavigator from '../utils/navigator'; import getNavigator from '../utils/navigator';
const NavigatorBlock = ({ workerData }) => ( const NavigatorBlock = () => {
<Block> const { workerData } = useContext(DataContext);
<h1>Navigator</h1> return (
<Table data={getNavigator(workerData)} /> <Block>
<p> <h1>Navigator</h1>
<b>Explanation:</b> The Navigator interface exposes info about your <Table data={getNavigator(workerData)} />
computer.{' '} <p>
<a <b>Explanation:</b> The Navigator interface exposes info about your
className="link" computer.{' '}
target="_blank" <a
rel="noreferrer" className="link"
alt="Read more about navigator" target="_blank"
href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator" rel="noreferrer"
> alt="Read more about navigator"
Read more href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator"
</a> >
</p> Read more
</Block> </a>
); </p>
</Block>
);
};
export default NavigatorBlock; export default NavigatorBlock;

View file

@ -1,12 +1,13 @@
import { useState, useEffect } from 'react'; import { useState, useEffect, useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import getOther from '../utils/other'; import getOther from '../utils/other';
const OtherBlock = ({ workerData }) => { const OtherBlock = () => {
const [adBlock, setAdBlock] = useState(); const [adBlock, setAdBlock] = useState();
const [battery, setBattery] = useState(); const [battery, setBattery] = useState();
const { workerData } = useContext(DataContext);
useEffect(() => { useEffect(() => {
fetch('https://www3.doubleclick.net', { fetch('https://www3.doubleclick.net', {

View file

@ -1,25 +1,30 @@
import { useContext } from 'react';
import DataContext from './Context';
import Block from './Block'; import Block from './Block';
import Table from './Table'; import Table from './Table';
import getUserAgent from '../utils/userAgent'; import getUserAgent from '../utils/userAgent';
const UserAgentBlock = ({ workerAgent }) => ( const UserAgentBlock = () => {
<Block> const { workerData } = useContext(DataContext);
<h1>User Agent</h1> return (
<Table data={getUserAgent(workerAgent)} /> <Block>
<p> <h1>User Agent</h1>
<b>Explanation:</b> Your user agent can be parsed to determine information <Table data={getUserAgent(workerData.userAgent)} />
about your browser or operating system.{' '} <p>
<a <b>Explanation:</b> Your user agent can be parsed to determine
className="link" information about your browser or operating system.{' '}
target="_blank" <a
rel="noreferrer" className="link"
alt="Read more about user agent" target="_blank"
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent" rel="noreferrer"
> alt="Read more about user agent"
Read more href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent"
</a> >
</p> Read more
</Block> </a>
); </p>
</Block>
);
};
export default UserAgentBlock; export default UserAgentBlock;