JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr{ gilour
import {FieldValues, SubmitHandler, UseFormReturn} from 'react-hook-form'; import clsx from 'clsx'; import {ReactNode} from 'react'; import {Link} from 'react-router-dom'; import {useValueLists} from '../../http/value-lists'; import {FormTextField} from '../../ui/forms/input-field/text-field/text-field'; import {FormSwitch} from '../../ui/forms/toggle/switch'; import {FormFileSizeField} from '../../ui/forms/input-field/file-size-field'; import {LinkStyle} from '../../ui/buttons/external-link'; import {FormPermissionSelector} from '../../auth/ui/permission-selector'; import {Trans} from '../../i18n/trans'; import {FormChipField} from '../../ui/forms/input-field/chip-field/form-chip-field'; import {Item} from '../../ui/forms/listbox/item'; import {CrupdateResourceLayout} from '../crupdate-resource-layout'; import {useSettings} from '../../core/settings/use-settings'; interface Props<T extends FieldValues> { onSubmit: SubmitHandler<T>; form: UseFormReturn<T>; title: ReactNode; subTitle?: ReactNode; isLoading: boolean; avatarManager: ReactNode; resendEmailButton?: ReactNode; children?: ReactNode; } export function CrupdateUserForm<T extends FieldValues>({ onSubmit, form, title, subTitle, isLoading, avatarManager, resendEmailButton, children, }: Props<T>) { const {require_email_confirmation} = useSettings(); const {data: valueLists} = useValueLists(['roles', 'permissions']); return ( <CrupdateResourceLayout onSubmit={onSubmit} form={form} title={title} subTitle={subTitle} isLoading={isLoading} > <div className="mb-40 flex items-start gap-40 md:gap-80"> {avatarManager} <div className="flex-auto"> {children} <FormTextField className="mb-30" name="first_name" label={<Trans message="First name" />} /> <FormTextField name="last_name" label={<Trans message="Last name" />} /> </div> </div> <div className="mb-30 border-b border-t pb-30 pt-30"> <FormSwitch className={clsx(resendEmailButton && 'mb-30')} disabled={!require_email_confirmation} name="email_verified_at" description={ <Trans message="Whether email address has been confirmed. User will not be able to login until address is confirmed, unless confirmation is disabled from settings page." /> } > <Trans message="Email confirmed" /> </FormSwitch> {resendEmailButton} </div> <FormFileSizeField className="mb-30" name="available_space" label={<Trans message="Allowed storage space" />} description={ <Trans values={{ a: parts => ( <Link className={LinkStyle} target="_blank" to="/admin/settings/uploading" > {parts} </Link> ), }} message="Total storage space all user uploads are allowed to take up. If left empty, this value will be inherited from any roles or subscriptions user has, or from 'Available space' setting in <a>Uploading</a> settings page." /> } /> <FormChipField className="mb-30" name="roles" label={<Trans message="Roles" />} suggestions={valueLists?.roles} > {chip => ( <Item key={chip.id} value={chip.id}> {chip.name} </Item> )} </FormChipField> <div className="mt-30 border-t pt-30"> <div className="mb-10 text-sm"> <Trans message="Permissions" /> </div> <FormPermissionSelector name="permissions" /> </div> </CrupdateResourceLayout> ); }