import {FormTextField} from '../../../ui/forms/input-field/text-field/text-field'; import {Trans} from '../../../i18n/trans'; import React, {Fragment, ReactNode} from 'react'; import {useFieldArray, useFormContext} from 'react-hook-form'; import {Accordion, AccordionItem} from '../../../ui/accordion/accordion'; import {FormattedPrice} from '../../../i18n/formatted-price'; import {FormPermissionSelector} from '../../../auth/ui/permission-selector'; import {PriceForm} from './price-form'; import {Button} from '../../../ui/buttons/button'; import {AddIcon} from '../../../icons/material/Add'; import {IconButton} from '../../../ui/buttons/icon-button'; import {CloseIcon} from '../../../icons/material/Close'; import {CreateProductPayload} from '../requests/use-create-product'; import {FormSwitch} from '../../../ui/forms/toggle/switch'; import {FormSelect} from '../../../ui/forms/select/select'; import {Item} from '../../../ui/forms/listbox/item'; import {FormFileSizeField} from '../../../ui/forms/input-field/file-size-field'; import {Link} from 'react-router-dom'; import {LinkStyle} from '../../../ui/buttons/external-link'; export function CrupdatePlanForm() { return ( } className="mb-20" required autoFocus /> } className="mb-20" inputElementType="textarea" rows={4} /> } className="mb-20" > } description={ ( {parts} ), }} message="Total storage space all user uploads are allowed to take up." /> } /> } > } > } >
); } interface HeaderProps { children: ReactNode; } function Header({children}: HeaderProps) { return

{children}

; } function FeatureListForm() { const {fields, append, remove} = useFieldArray({ name: 'feature_list', }); return (
{fields.map((field, index) => { return (
{ remove(index); }} >
); })}
); } function PricingListForm() { const { watch, formState: {errors}, } = useFormContext(); const {fields, append, remove} = useFieldArray< CreateProductPayload, 'prices', 'key' >({ name: 'prices', keyName: 'key', }); // if plan is marked as free, hide pricing form if (watch('free')) { return null; } return (
{errors.prices?.message && (
{errors.prices.message}
)} {fields.map((field, index) => ( } key={field.key} > { remove(index); }} /> ))}
); }