import { InboxPanel } from './InboxPanel'; import { CertificateSource, requestDepositCertificate, requestClaimCertificate } from '../../features'; import React, { useEffect, useState } from 'react'; import { TabContent } from './Inbox/InboxTabContent'; import { IInboxCertificateData, SelectedInboxList } from './Inbox'; import { Checkbox } from '@material-ui/core'; import { BeneficiaryForm } from './Inbox/BeneficiaryForm'; import { useDispatch, useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; import { fromUsersSelectors } from '../../features'; import { useOriginConfiguration } from '../../utils/configuration'; import { makeStyles } from '@material-ui/styles'; import { IClaimData } from '@energyweb/issuer'; import { Requirement, usePermissions, EnergyFormatter } from '../../utils'; import { Requirements } from '../Layout'; export function BlockchainInboxPage(): JSX.Element { const [retireForBeneficiary, setRetireForBeneficiary] = useState(false); const [beneficiaryFormData, setBeneficiaryFormData] = useState(); const [disableButton, setDisableButton] = useState(false); const dispatch = useDispatch(); const { t } = useTranslation(); const user = useSelector(fromUsersSelectors.getUserOffchain); useEffect(() => { setRetireForBeneficiary(false); setBeneficiaryFormData({ beneficiary: user?.organization?.name, location: `${user?.organization?.address}, ${user?.organization?.zipCode}`, countryCode: user?.organization?.country, periodStartDate: new Date().toISOString(), periodEndDate: new Date().toISOString(), purpose: 'GHG Accounting' }); }, [user]); async function deposit(certs: IInboxCertificateData[], callback: () => void) { certs.forEach((cert) => { dispatch( requestDepositCertificate({ certificateId: cert.id, amount: cert.energy, callback: () => { callback(); } }) ); }); } async function claim(cert: IInboxCertificateData, callback: () => void) { dispatch( requestClaimCertificate({ certificateId: cert.id, claimData: beneficiaryFormData, amount: cert.energy, callback }) ); } const configuration = useOriginConfiguration(); const simpleTextColor = configuration?.styleConfig?.SIMPLE_TEXT_COLOR; const useStyles = makeStyles({ text_1: { fontSize: '16px', color: simpleTextColor }, text_2: { fontSize: '14px', color: simpleTextColor, opacity: '.5' } }); const classes = useStyles(); const pageRequirements = [ Requirement.IsLoggedIn, Requirement.IsActiveUser, Requirement.IsPartOfApprovedOrg, Requirement.HasOrganizationBlockchainAddress ]; const { canAccessPage } = usePermissions(pageRequirements); if (!canAccessPage.value) { return ; } return ( {({ tabIndex, selectedCerts, getSelectedItems, setEnergy, getSelectedCertificates, updateView, totalVolume }) => { return ( <> {tabIndex === 0 && ( deposit(getSelectedCertificates(), updateView)} selectedCerts={selectedCerts} >
{t('certificate.info.totalVolume')}:{' '}
{EnergyFormatter.format(totalVolume, true)}
)} {tabIndex === 1 && ( claim(getSelectedCertificates()[0], updateView)} selectedCerts={selectedCerts} disableButton={disableButton} >
{t('certificate.info.totalVolume')}:{' '}
{EnergyFormatter.format(totalVolume, true)}
setRetireForBeneficiary(!retireForBeneficiary) } /> {t('certificate.info.retireForBeneficiary')}
{retireForBeneficiary && ( )}
)} ); }}
); }