import { TradingFormGroup, TradingInput, TradingInputError, TradingCheckbox, TextArea, TradingButton, Intent, VegaIcon, VegaIconNames, } from '@vegaprotocol/ui-toolkit'; import { URL_REGEX, isValidVegaPublicKey } from '@vegaprotocol/utils'; import { type useReferralSetTransaction } from '../../lib/hooks/use-referral-set-transaction'; import { useT } from '../../lib/use-t'; import { useForm, Controller } from 'react-hook-form'; import type { CreateReferralSet, UpdateReferralSet, Status, } from '@vegaprotocol/wallet'; import classNames from 'classnames'; import { useLayoutEffect, useState } from 'react'; export type FormFields = { id: string; name: string; url: string; avatarUrl: string; private: boolean; allowList: string; }; export enum TransactionType { CreateReferralSet = 'CreateReferralSet', UpdateReferralSet = 'UpdateReferralSet', } const prepareTransaction = ( type: TransactionType, fields: FormFields ): CreateReferralSet | UpdateReferralSet => { switch (type) { case TransactionType.CreateReferralSet: return { createReferralSet: { isTeam: true, team: { name: fields.name, teamUrl: fields.url, avatarUrl: fields.avatarUrl, closed: fields.private, allowList: fields.private ? parseAllowListText(fields.allowList) : [], }, }, }; case TransactionType.UpdateReferralSet: return { updateReferralSet: { id: fields.id, isTeam: true, team: { name: fields.name, teamUrl: fields.url, avatarUrl: fields.avatarUrl, closed: fields.private, allowList: fields.private ? parseAllowListText(fields.allowList) : [], }, }, }; } }; export const TeamForm = ({ type, status, err, isCreatingSoloTeam, onSubmit, defaultValues, }: { type: TransactionType; status: ReturnType['status']; err: ReturnType['err']; isCreatingSoloTeam: boolean; onSubmit: ReturnType['onSubmit']; defaultValues?: FormFields; }) => { const t = useT(); const { register, handleSubmit, control, watch, formState: { errors }, } = useForm({ defaultValues: { private: isCreatingSoloTeam, ...defaultValues, }, }); const isPrivate = watch('private'); const sendTransaction = (fields: FormFields) => { onSubmit(prepareTransaction(type, fields)); }; return (
{errors.name?.message && ( {errors.name.message} )} {errors.url?.message && ( {errors.url.message} )} {errors.avatarUrl?.message && ( {errors.avatarUrl.message} )} { // allow changing to private/public if editing, but don't show these options if making a solo team (type === TransactionType.UpdateReferralSet || !isCreatingSoloTeam) && ( <> { return ( { field.onChange(value); }} data-testid="team-private-checkbox" /> ); }} /> {isPrivate && (