import React, { useCallback, ChangeEvent } from 'react'; import { StepProps, FormData } from './types'; import { SectionHeader, Field, Label, Input, TextArea, FieldDescription, SliderContainer, SliderTrack, SliderRange, SliderHandle, SliderValues, SubSectionLabel, NewsletterCheckboxLabel, NewsletterCheckboxWrapper, CheckboxInput } from './styles'; import { BUDGET_MAX } from './constants'; import { formatCurrency } from './utils'; import { CheckmarkSvg } from './CheckmarkSvg'; export const BudgetExtrasStep: React.FC = ({ isApp, formData, updateField }) => { const minPercent = (formData.budgetMin / BUDGET_MAX) * 100; const maxPercent = (formData.budgetMax / BUDGET_MAX) * 100; const handleSliderChange = useCallback( ( field: 'budgetMin' | 'budgetMax', limit: number, compareFn: (val: number, lim: number) => boolean ) => (e: ChangeEvent) => { const val = Number(e.target.value); if (compareFn(val, limit)) { updateField(field, val); } }, [updateField] ); const handleTextChange = useCallback( (field: keyof FormData) => ( e: ChangeEvent ) => { updateField(field, e.target.value); }, [updateField] ); const onBudgetMinChange = handleSliderChange( 'budgetMin', formData.budgetMax, (val, lim) => val < lim ); const onBudgetMaxChange = handleSliderChange( 'budgetMax', formData.budgetMin, (val, lim) => val > lim ); const onSubscriberChange = handleTextChange('subscriberCode'); const onCommentsChange = handleTextChange('comments'); return ( <> Budget & extras {formatCurrency(formData.budgetMin)} – {formatCurrency(formData.budgetMax)} Please give us any extra details that will help us tailor your trip to perfection, such as added extras.