import React, { useState, useEffect } from 'react'; import { getFormErrorLabelsProps } from './errorHandling'; import * as Yup from 'yup'; import { withProposalFormData, ProposalFormExportProps, ProposalFormContainerProps, ProposalFormInnerProps, genericFormDefaultOptions } from './GenericProposalForm'; import { GenericWorkingGroupProposalForm, FormValues as WGFormValues, defaultValues as wgFromDefaultValues } from './GenericWorkingGroupProposalForm'; import { InputFormField } from './FormFields'; import { withFormContainer } from './FormContainer'; import { Grid } from 'semantic-ui-react'; import { formatBalance } from '@polkadot/util'; import _ from 'lodash'; import Validation from '../validationSchema'; import { WorkerData } from '@polkadot/joy-utils/types/workingGroups'; export type FormValues = WGFormValues & { amount: string; }; const defaultValues: FormValues = { ...wgFromDefaultValues, amount: '' }; type FormAdditionalProps = {}; // Aditional props coming all the way from export component into the inner form. type ExportComponentProps = ProposalFormExportProps; type FormContainerProps = ProposalFormContainerProps; type FormInnerProps = ProposalFormInnerProps; const DecreaseWorkingGroupLeadStakeForm: React.FunctionComponent = props => { const { handleChange, errors, touched, values, myMemberId, setFieldError } = props; const errorLabelsProps = getFormErrorLabelsProps(errors, touched); const [lead, setLead] = useState(null); // Here we validate if stake <= current lead stake. // Because it depends on selected working group, // there's no easy way to do it using validationSchema useEffect(() => { if (lead && parseInt(values.amount) > (lead.stake || 0) && !errors.amount) { setFieldError('amount', `The stake cannot exceed current leader's stake (${formatBalance(lead.stake)})`); } }); return ( setLead(lead)} submitParams={[ myMemberId, values.title, values.rationale, '{STAKE}', lead?.workerId, values.amount, values.workingGroup ]} > { (lead && lead.stake) && ( ) } ); }; const FormContainer = withFormContainer({ mapPropsToValues: (props: FormContainerProps) => ({ ...defaultValues, ...(props.initialData || {}) }), validationSchema: Yup.object().shape({ ...genericFormDefaultOptions.validationSchema, ...Validation.DecreaseWorkingGroupLeaderStake() }), handleSubmit: genericFormDefaultOptions.handleSubmit, displayName: 'DecreaseWorkingGroupLeadStakeForm' })(DecreaseWorkingGroupLeadStakeForm); export default withProposalFormData(FormContainer);