-1

Basicaly all I want to do is say is if region = "Europe" or "other" then the field is required, did go through the formik documentation but not finding anything.

<Formik
enableReinitialize={true}
initialValues={{
    name: currentBankData.name || '',
    address: currentBankData.address || '',
    country: currentBankData.country || '',
    region: currentBankData.region || '',
    city: currentBankData.city || '',
    swiftCode: currentBankData.swiftCode || '',
    routeCode: currentBankData.routeCode || '',
}}
validationSchema={Yup.object().shape({
    name: Yup.string().min(3).required('Name is required.'),
    address: Yup.string().required('Address is required.'),
    country: Yup.string().required('Country is required.'),
    region: Yup.string().required('Region is required.'),
    city: Yup.string().required('City is required.'),

    swiftCode: Yup.string().when('region', {
        is: 'Europe' || 'other,      //Would like to do something like this but 
                                     doesnt work :)

        then: Yup.string()
            .required('SwiftCode is required.')
            .matches(
                /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,
                'This is not the correct Swift Code'
            ),
    }),

    routeCode: Yup.string().when('region', {
        is: 'USA',
        then: Yup.string().required('RouteCode is required.'),
    }),

    verified: Yup.bool(),
})}
Dharman
  • 30,962
  • 25
  • 85
  • 135
ChrisJnr Potgieter
  • 141
  • 1
  • 2
  • 13
  • This response will probably help you [check it](https://stackoverflow.com/questions/49394391/conditional-validation-in-yup) – Hamza AZIZ Sep 19 '20 at 17:44

2 Answers2

0

try this by using the mixe oneOf

validationSchema={Yup.object().shape({
                    name: Yup.string().min(3).required('Name is required.'),
                    address: Yup.string().required('Address is required.'),
                    country: Yup.string().required('Country is required.'),
                    region: Yup.string().required('Region is required.'),
                    city: Yup.string().required('City is required.'),

                    swiftCode: Yup.string().when('region', {
                        is: oneOf(['Europe', 'Europe', 'other'] as const),
                                                 

                        then: Yup.string()
                            .required('SwiftCode is required.')
                            .matches(
                                /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,
                                'This is not the correct Swift Code'
                            ),
                    }),

                    routeCode: Yup.string().when('region', {
                        is: 'USA',
                        then: Yup.string().required('RouteCode is required.'),
                    }),

                    verified: Yup.bool(),
                })}
Hamza AZIZ
  • 2,582
  • 1
  • 9
  • 18
0
    Finally Works
validationSchema={Yup.object().shape({
                    name: Yup.string().required('Name is required.'),
                    address: Yup.string().required('Address is required.'),
                    country: Yup.string().required('Country is required.'),
                    region: Yup.string().required('Region is required.'),
                    city: Yup.string().required('City is required.'),

                    swiftCode: Yup.string().when('region', (region, schema) => {
                        return ['Europe', 'other'].includes(region)
                            ? schema
                                    .required('SwiftCode is required.')
                                    .matches(
                                        /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,
                                        'This is not the correct Swift Code'
                                    )
                            : schema.matches(
                                    /[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,
                                    'This is not the correct Swift Code'
                              );
                    }),

                    routeCode: Yup.string().when('region', {
                        is: 'USA',
                        then: Yup.string().required('RouteCode is required.'),
                    }),

                    verified: Yup.bool()
ChrisJnr Potgieter
  • 141
  • 1
  • 2
  • 13