11import React , { useEffect , useState } from 'react'
22import { Row , Col , Form , Button } from 'react-bootstrap'
3- import { PcDropdownSelect , PcCompanyLogoUploader , PcInput } from '../ui'
3+ import { PcDropdownSelect , PcLogoUploader , PcInput } from '../ui'
44import { EMPTY_ENTITIES , INPUT_VALIDATORS , ROUTES , STEPS } from './constants'
55import { fetchCustomers , fetchQuotes } from '../services'
66import { useAppHooks } from '../hooks'
@@ -29,32 +29,35 @@ export const CustomerForm = () => {
2929 customers . find ( ( c ) => c . attributes . company_name . toLowerCase ( ) === customer . company_name . toLowerCase ( ) ) ?. id ||
3030 customer . company_name
3131
32- const handleCompanyChange = ( e ) => {
33- const { value } = e . target
32+ const handleCompanyChange = ( selected ) => {
33+ console . info ( 'handleCompanyChange' , selected )
34+ if ( selected . length === 0 ) return
35+
36+ const { value, label } = selected [ 0 ]
3437 const selectedCustomer = customers . find ( ( customer ) => customer . id === value )
3538
3639 if ( selectedCustomer ) {
3740 setCustomer ( selectedCustomer . attributes )
3841 } else {
39- setCustomer ( {
40- ...EMPTY_ENTITIES . customer ,
41- company_name : value ,
42- } )
42+ setCustomer ( prev => ( { ...prev , company_name : label } ) )
4343 }
4444
45+ setIsNextDisabled ( false )
4546 setErrors ( ( prev ) => ( { ...prev , company_name : '' } ) )
4647 }
4748
48- const handleCompanyInputChange = ( e ) => {
49- const { value } = e . target
49+ const handleCompanyInputChange = ( text , event ) => {
50+ console . info ( 'handleCompanyInputChange' , text , event )
5051
51- if ( value ) {
52+ if ( text ) {
5253 setIsNextDisabled ( false )
5354 setErrors ( ( prev ) => ( { ...prev , company_name : '' } ) )
5455 } else {
5556 setIsNextDisabled ( true )
5657 setErrors ( ( prev ) => ( { ...prev , company_name : 'Company name is required' } ) )
5758 }
59+
60+ setCustomer ( ( prev ) => ( { ...prev , company_name : text } ) )
5861 }
5962
6063 const handleInputChange = ( e ) => {
@@ -70,7 +73,7 @@ export const CustomerForm = () => {
7073 const handleEmailChange = ( e ) => {
7174 const { value } = e . target
7275
73- if ( value && ! INPUT_VALIDATORS . email . test ( value ) ) {
76+ if ( value && ! INPUT_VALIDATORS . emailFormat . test ( value ) ) {
7477 setIsNextDisabled ( true )
7578 setErrors ( ( prev ) => ( { ...prev , email : 'Invalid email format' } ) )
7679 } else {
@@ -95,6 +98,7 @@ export const CustomerForm = () => {
9598 const file = e . target . files [ 0 ]
9699
97100 if ( ! file ) {
101+ setIsNextDisabled ( false )
98102 setErrors ( ( prev ) => ( { ...prev , logo : '' } ) )
99103 return
100104 }
@@ -105,7 +109,7 @@ export const CustomerForm = () => {
105109 logoErrors . push ( 'Logo must be less than 2MB' )
106110 }
107111
108- if ( ! INPUT_VALIDATORS . fileType . includes ( file . type ) ) {
112+ if ( ! INPUT_VALIDATORS . allowedFileTypes . includes ( file . type ) ) {
109113 logoErrors . push ( 'Logo must be a JPEG or PNG file' )
110114 }
111115
@@ -114,12 +118,7 @@ export const CustomerForm = () => {
114118 setErrors ( ( prev ) => ( { ...prev , logo : logoErrors . join ( '\n' ) } ) )
115119 } else {
116120 setIsNextDisabled ( false )
117- setCustomer ( ( prev ) => ( {
118- ...prev ,
119- logo_file : file ,
120- logo_url : URL . createObjectURL ( file ) ,
121- } ) )
122-
121+ setCustomer ( ( prev ) => ( { ...prev , logo_url : URL . createObjectURL ( file ) , } ) )
123122 setErrors ( ( prev ) => ( { ...prev , logo : '' } ) )
124123 }
125124 }
@@ -159,11 +158,11 @@ export const CustomerForm = () => {
159158 < div className = "border rounded border-primary customer-form bg-light w-100 mb-7" >
160159 < Row className = "mb-6" >
161160 < div className = "d-flex flex-column flex-sm-row gap-6" >
162- < Col className = { 'image-placeholder' } >
163- < PcCompanyLogoUploader
161+ < Col className = { 'image-placeholder mx-auto ' } >
162+ < PcLogoUploader
164163 id = "company_logo"
165164 onChange = { handleLogoChange }
166- accept = { INPUT_VALIDATORS . fileType . join ( ',' ) }
165+ accept = { INPUT_VALIDATORS . allowedFileTypes . join ( ',' ) }
167166 logo = { customer . logo_url }
168167 error = { errors . logo } />
169168 </ Col >
@@ -255,7 +254,9 @@ export const CustomerForm = () => {
255254 </ Col >
256255 </ Row >
257256 </ div >
258- < Button type = { 'submit' } className = "pc-btn-next" disabled = { isNextDisabled } >
257+ < Button type = { 'submit' }
258+ className = "pc-btn-next mb-3"
259+ disabled = { isNextDisabled } >
259260 Next
260261 </ Button >
261262 </ Form >
0 commit comments