import React, { useEffect } from 'react'; import { useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; import { Grid, InputAdornment, Divider } from '@material-ui/core'; import { useValidation, LightenColor, fromUsersSelectors } from '@energyweb/origin-ui-core'; import { FormInput, CalendarFieldOnPeriod, FormSelect } from '../Form'; import { getExchangeClient } from '../../features/general'; import { periodTypeOptions } from '../../utils/demand'; import { calculateTotalVolume } from '../../utils/exchange'; import { useOriginConfiguration } from '../../utils/configuration'; export const RepeatedPurchase = (props) => { const { fieldDisabled, currency, setFieldValue, energyUnit, values, setValidationSchema } = props; const { t } = useTranslation(); const { Yup } = useValidation(); const exchangeClient = useSelector(getExchangeClient); const user = useSelector(fromUsersSelectors.getUserOffchain); const originConfiguration = useOriginConfiguration(); const originBgColor = originConfiguration?.styleConfig?.MAIN_BACKGROUND_COLOR; const bgColorLighten = LightenColor(originBgColor, 5); const periodOptions = periodTypeOptions(t); const VALIDATION_SCHEMA = Yup.object().shape({ demandPeriod: Yup.number().label(t('exchange.properties.period')), demandVolume: Yup.number().positive().integer().label(t('exchange.properties.volume')), demandDateStart: Yup.date().label(t('exchange.properties.demandStartDate')), demandDateEnd: Yup.date().label(t('exchange.properties.demandEndDate')), totalDemandVolume: Yup.number() .positive() .integer() .label(t('exchange.properties.totalVolume')), price: Yup.number().positive().min(0.01).label(t('exchange.properties.price')) }); useEffect(() => { setValidationSchema(VALIDATION_SCHEMA); const { demandPeriod, demandVolume, demandDateStart, demandDateEnd } = values; const setVolume = async () => { const totalVolume = await calculateTotalVolume(exchangeClient.demandClient, { volume: demandVolume, period: demandPeriod, start: demandDateStart, end: demandDateEnd }); setFieldValue('totalDemandVolume', totalVolume); }; setVolume(); }, [values]); return ( <> {energyUnit} ) }} />
{energyUnit} ) }} /> {currency} }} wrapperProps={{ onBlur: (e) => { const parsedValue = parseFloat((e.target as any)?.value); if (!isNaN(parsedValue) && parsedValue > 0) { setFieldValue('price', parsedValue.toFixed(2)); } } }} /> ); };