import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Input } from '@documenso/ui/primitives/input'; import { Trans, useLingui } from '@lingui/react/macro'; import type { ReactNode } from 'react'; import type { Control, FieldValues, Path } from 'react-hook-form'; import { RateLimitArrayInput } from './rate-limit-array-input'; type ClaimLimitFieldsProps = { control: Control; /** e.g. '' for the claim form, 'claims.' for the org admin form. */ prefix?: string; disabled?: boolean; }; export const ClaimLimitFields = ({ control, prefix = '', disabled, }: ClaimLimitFieldsProps) => { const { t } = useLingui(); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const name = (key: string) => `${prefix}${key}` as Path; const renderQuotaField = (key: string, label: ReactNode, description: ReactNode) => ( ( {label} field.onChange(e.target.value === '' ? null : parseInt(e.target.value, 10))} /> {description} )} /> ); const renderRateLimitField = (key: string, label: ReactNode) => ( ( {label} )} /> ); return (
Limits {renderQuotaField( 'documentQuota', Monthly document quota, Empty = Unlimited, 0 = Blocked, )} {renderRateLimitField('documentRateLimits', Document rate limits)} {renderQuotaField( 'emailQuota', Monthly email quota, Empty = Unlimited, 0 = Blocked, )} {renderRateLimitField('emailRateLimits', Email rate limits)} {renderQuotaField('apiQuota', Monthly API quota, Empty = Unlimited, 0 = Blocked)} {renderRateLimitField('apiRateLimits', API rate limits)}
); };