plugins/nfc/components/Nfc.tsx
import React, { FunctionComponent } from 'react';import { useImmer } from 'use-immer';import NfcTable from './NfcTable';import STRINGS from '../../../src/client/assets/strings.json';import { GraphQLErrorMessage } from '../../../src/client/components/Text/ErrorMessage';import FloatingPopup from '../../../src/client/components/Containers/FloatingPopup';import { Spinner } from '../../../src/client/components/Loading/Spinner';import { defaultTableState, TableContext } from '../../../src/client/contexts/TableContext';import { useEventsQuery, useHackersQuery, useMeSponsorQuery, Sponsor,} from '../../../src/client/generated/graphql'; Function `Nfc` has 58 lines of code (exceeds 25 allowed). Consider refactoring.
Function `Nfc` has a Cognitive Complexity of 12 (exceeds 5 allowed). Consider refactoring.export const Nfc: FunctionComponent = (): JSX.Element => { const hackers = useHackersQuery(); const hackersLoading = hackers.loading; const hackersError = hackers.error; const hackersData = hackers.data; const events = useEventsQuery(); const eventsLoading = events.loading; const eventsError = events.error; const eventsData = events.data; const sponsorMeQueryResult = useMeSponsorQuery(); const sponsorLoading = sponsorMeQueryResult.loading; const sponsorError = sponsorMeQueryResult.error; let sponsorData: Sponsor; let viewNfc = false; let isSponsor = false; if (!sponsorLoading && sponsorMeQueryResult.data && sponsorMeQueryResult.data.me) { sponsorData = sponsorMeQueryResult.data.me as Sponsor; if ( sponsorData.userType === 'SPONSOR' && sponsorData.company && sponsorData.company.tier && sponsorData.company.tier.permissions ) { isSponsor = true; viewNfc = sponsorData.company.tier.permissions.includes(STRINGS.PERMISSIONS_NFC); } } const [tableState, updateTableState] = useImmer(defaultTableState); if (hackersLoading || !hackersData || eventsLoading || sponsorLoading || !eventsData) { return <Spinner />; } if (hackersError) { console.log(hackersError); return <GraphQLErrorMessage text={STRINGS.GRAPHQL_ORGANIZER_ERROR_MESSAGE} />; } if (eventsError) { console.log(eventsError); return <GraphQLErrorMessage text={STRINGS.GRAPHQL_ORGANIZER_ERROR_MESSAGE} />; } const now = Date.now();Similar blocks of code found in 2 locations. Consider refactoring. const eventsCurrent = eventsData.events.filter(e => { const TIME_BUFFER = 60; // 60 minutes const delta = (now - e.startTimestamp) / (1000 * 60); // Time diff in minutes return delta >= -1 * TIME_BUFFER && delta <= e.duration + TIME_BUFFER; }); if (isSponsor && sponsorError) { console.log(sponsorError); return <GraphQLErrorMessage text={STRINGS.GRAPHQL_ORGANIZER_ERROR_MESSAGE} />; } if (isSponsor && !viewNfc) {Avoid too many `return` statements within this function. return <p>You dont have permissions to scan NFCs</p>; } Avoid too many `return` statements within this function. return ( <FloatingPopup borderRadius="1rem" height="100%" backgroundOpacity="1" padding="1.5rem"> <TableContext.Provider value={{ state: tableState, update: updateTableState }}> <NfcTable hackersData={hackersData.hackers} eventsData={eventsCurrent} /> </TableContext.Provider> </FloatingPopup> );}; export default Nfc;