import { Input, InputGroup, InputLeftElement, InputRightAddon, Text, } from '@metafam/ds'; import { composeDBProfileFieldAvailability } from '@metafam/utils'; import React, { useEffect } from 'react'; import { FormProvider, useForm, useFormContext } from 'react-hook-form'; import { useGetOwnProfileFieldFromComposeDB } from '#lib/hooks/ceramic/useGetOwnProfileFromComposeDB'; import { usePlayerSetupSaveToComposeDB } from '#lib/hooks/ceramic/usePlayerSetupSaveToComposeDB'; import { useShowToastOnQueryError } from './SetupProfile'; import { WizardPane } from './WizardPane'; const field = composeDBProfileFieldAvailability; export const SetupAvailability: React.FC = () => { const { fetching, error, result: existing, } = useGetOwnProfileFieldFromComposeDB(field); useShowToastOnQueryError(error); const formMethods = useForm<{ [field]: string | undefined }>({ mode: 'onTouched', }); const { watch, setValue, formState: { dirtyFields }, } = formMethods; useEffect(() => { setValue(field, existing); }, [existing, setValue]); const current = watch(field, existing); const dirty = current !== existing || !!dirtyFields[field]; const { onSubmit, status } = usePlayerSetupSaveToComposeDB({ isChanged: dirty, }); return ( {...{ field, onSubmit, status, fetching }} title="Avail­ability" prompt="What is your weekly availability for any kind of freelance work?" > ); }; const SetupAvailabilityInput: React.FC = () => { const { register, formState: { errors }, } = useFormContext(); const { ...props } = register(field, { valueAsNumber: true, min: { value: 0, message: 'It’s not possible to be available for negative time.', }, max: { value: 24 * 7, message: `More than 24 * 7 hours a week? Wow! Care to share your secret? πŸ˜‰`, }, }); return ( πŸ•› hr ⁄ week ); };