import React, { ReactElement, useContext, useEffect } from 'react'; import { useSelector, useStore } from 'react-redux'; import { Switch, Route, Redirect } from 'react-router-dom'; import { History } from 'history'; import { LinearProgress, makeStyles, createStyles, useTheme } from '@material-ui/core'; import { UserStatus, isRole, Role } from '@energyweb/origin-backend-core'; import { OriginFeature, allOriginFeatures } from '@energyweb/utils-general'; import { Certificates, UiCoreAdapter, Device, Admin, Account, Organization, AccountMismatchModal, ErrorComponent, NoBlockchainAccountModal, LoginPage, DeviceDataLayers, fromGeneralSelectors, fromUsersSelectors, useLinks } from '@energyweb/origin-ui-core'; import { ExchangeApp, ExchangeAdapter } from '@energyweb/exchange-ui-core'; import { OriginConfigurationContext } from './OriginConfigurationContext'; import { Header } from './Header'; import { IRecCoreAdapter, IRecDeviceApp, IRecCertificateApp } from '@energyweb/origin-ui-irec-core'; import { SidebarMenuContainer } from '../containers/SidebarMenuContainer'; interface IProps { history: History; } export const AppContainer = (props: IProps): ReactElement => { const error = useSelector(fromGeneralSelectors.getError); const loading = useSelector(fromGeneralSelectors.getLoading); const user = useSelector(fromUsersSelectors.getUserOffchain); const config = useContext(OriginConfigurationContext); const store = useStore(); const originConfiguration = useContext(OriginConfigurationContext); const enabledFeatures = originConfiguration?.enabledFeatures; const changeContext = originConfiguration?.changeContext; const environment = useSelector(fromGeneralSelectors.getEnvironment); useEffect(() => { if (environment?.DISABLED_UI_FEATURES) { const disabledFeatures = environment?.DISABLED_UI_FEATURES.split(';').map( (feature) => OriginFeature[feature] ); const newEnabledFeatures = allOriginFeatures.filter( (feature) => !disabledFeatures.includes(feature) ); const isEqual = enabledFeatures.join(',') === newEnabledFeatures.join(','); if (!isEqual) { changeContext({ ...originConfiguration, enabledFeatures: newEnabledFeatures }); } } }, [environment]); const shareContextCore = (component) => ( ); const certificatesCoreRoute = shareContextCore(); const devicesCoreRoute = shareContextCore(); const loginPageRoute = shareContextCore(); const accountRoute = shareContextCore(); const organizationRoute = shareContextCore(); const adminRoute = shareContextCore(); const exchangeDeviceDataLayer = enabledFeatures?.includes(OriginFeature.IRecUIApp) ? DeviceDataLayers.IRecDevice : DeviceDataLayers.OriginFormDevice; const { accountPageUrl, adminPageUrl, baseURL, certificatesPageUrl, devicesPageUrl, organizationPageUrl, exchangePageUrl } = useLinks(); const shareContextExchange = (component) => ( ); const exchangeRoute = shareContextExchange(); const shareContextIRec = (component) => ( ); const iRecCertificateRoute = shareContextIRec(); const iRecDeviceRoute = shareContextIRec(); const certificateRoute = enabledFeatures?.includes(OriginFeature.IRecUIApp) ? iRecCertificateRoute : certificatesCoreRoute; const deviceRoute = enabledFeatures?.includes(OriginFeature.IRecUIApp) ? iRecDeviceRoute : devicesCoreRoute; const useStyles = makeStyles(() => createStyles({ progress: { backgroundColor: 'rgb(39, 39, 39)' }, progressWrapper: { position: 'fixed', top: '0', left: '0', width: '100vw', zIndex: 100 } }) ); const classes = useStyles(useTheme()); const isUserIssuer = isRole(user, Role.Issuer); const userIsActive = user && user.status === UserStatus.Active; const userIsActiveAndPartOfOrg = user?.organization && userIsActive && isRole(user, Role.OrganizationUser, Role.OrganizationDeviceManager, Role.OrganizationAdmin); if (error) { return ; } if (environment === null) { return <>; } return ( {loginPageRoute}
{loading && (
)}
{deviceRoute} {((enabledFeatures.includes(OriginFeature.Certificates) && userIsActiveAndPartOfOrg) || isUserIssuer) && ( {certificateRoute} )} {accountRoute} {exchangeRoute} { if (!user) { return ; } else return organizationRoute; }} /> {adminRoute} { return enabledFeatures.includes(OriginFeature.Devices) ? deviceRoute : enabledFeatures.includes(OriginFeature.Exchange) ? exchangeRoute : accountRoute; }} />
); };