Skip to content

Commit

Permalink
Merge pull request #109 from amina-deriv/amina/components_separate
Browse files Browse the repository at this point in the history
Amina/components separate
  • Loading branch information
amina-deriv committed Jun 24, 2024
2 parents a409569 + 4c9cab3 commit e955dd2
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 129 deletions.
4 changes: 3 additions & 1 deletion packages/account/src/Components/forms/form-fields/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import FormInputField from './form-input-field';
import DateOfBirthField from './date-of-birth-field';
import EmploymentStatusField from './employment-status';
import TaxResidenceField from './tax-residence';
import TaxIdentificationNumberField from './tax-indentification-number';

export { FormInputField, DateOfBirthField, EmploymentStatusField };
export { FormInputField, DateOfBirthField, EmploymentStatusField, TaxResidenceField, TaxIdentificationNumberField };
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { Localize, localize } from '@deriv/translations';
import FormInputField from './form-input-field';
import { Popover } from '@deriv/components';
import { isDesktop } from '@deriv/shared';

type TTaxIdentificationNumberFieldProps = {
required?: boolean;
disabled: boolean;
is_tin_popover_open: boolean;
setIsTinPopoverOpen: (is_open: boolean) => void;
setIsTaxResidencePopoverOpen: (is_open: boolean) => void;
};

const TaxIdentificationNumberField = ({
required = false,
is_tin_popover_open,
setIsTinPopoverOpen,
setIsTaxResidencePopoverOpen,
disabled,
}: TTaxIdentificationNumberFieldProps) => (
<div className='details-form__tax'>
<FormInputField
name='tax_identification_number'
label={required ? localize('Tax Identification Number*') : localize('Tax Identification Number')}
placeholder={localize('Tax Identification Number')}
data-testid='tax_identification_number'
disabled={disabled}
required={required}
/>
<div
data-testid='tax_identification_number_pop_over'
onClick={e => {
setIsTaxResidencePopoverOpen(false);
setIsTinPopoverOpen(true);
if ((e.target as HTMLElement).tagName !== 'A') e.stopPropagation();
}}
>
<Popover
alignment={isDesktop() ? 'right' : 'left'}
icon='info'
is_open={is_tin_popover_open}
message={
<Localize
i18n_default_text={
"Don't know your tax identification number? Click <0>here</0> to learn more."
}
components={[
<a
key={0}
className='link link--red'
rel='noopener noreferrer'
target='_blank'
href='https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/'
/>,
]}
/>
}
zIndex='9998'
disable_message_icon
/>
</div>
</div>
);

export default TaxIdentificationNumberField;
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import { Field, FieldProps } from 'formik';
import { ResidenceList } from '@deriv/api-types';
import { DesktopWrapper, MobileWrapper, Autocomplete, SelectNative, Popover } from '@deriv/components';
import { localize } from '@deriv/translations';
import { isDesktop } from '@deriv/shared';
import { useResidenceList } from '@deriv/hooks';

type TTaxResidenceFieldProps = {
required?: boolean;
setIsTaxResidencePopoverOpen: (is_open: boolean) => void;
setIsTinPopoverOpen: (is_open: boolean) => void;
is_tax_residence_popover_open: boolean;
disabled: boolean;
};

const TaxResidenceField = ({
required = false,
setIsTaxResidencePopoverOpen,
setIsTinPopoverOpen,
is_tax_residence_popover_open,
disabled,
}: TTaxResidenceFieldProps) => {
const { data: residence_list } = useResidenceList();
return (
<Field name='tax_residence'>
{({ field, form: { setFieldValue }, meta }: FieldProps) => (
<div className='details-form__tax'>
<DesktopWrapper>
<Autocomplete
{...field}
data-lpignore='true'
autoComplete='none' // prevent chrome autocomplete
label={required ? localize('Tax residence*') : localize('Tax residence')}
error={meta.touched ? meta.error : undefined}
list_items={residence_list}
onItemSelection={(item: ResidenceList[0]) =>
setFieldValue('tax_residence', item.value ? item.text : '', true)
}
list_portal_id='modal_root'
data-testid='tax_residence'
disabled={disabled}
required={required}
/>
</DesktopWrapper>
<MobileWrapper>
<SelectNative
{...field}
placeholder={required ? localize('Tax residence*') : localize('Tax residence')}
name={field.name}
label={required ? localize('Tax residence*') : localize('Tax residence')}
list_items={residence_list}
value={field.value}
use_text
error={meta.touched ? meta.error : ''}
onChange={e => {
field.onChange(e);
setFieldValue('tax_residence', e.target.value, true);
}}
required={required}
data_testid='tax_residence_mobile'
disabled={disabled}
/>
</MobileWrapper>
<div
data-testid='tax_residence_pop_over'
onClick={e => {
setIsTaxResidencePopoverOpen(true);
setIsTinPopoverOpen(false);
e.stopPropagation();
}}
>
<Popover
alignment={isDesktop() ? 'right' : 'left'}
icon='info'
message={localize(
'The country in which you meet the criteria for paying taxes. Usually the country in which you physically reside.'
)}
zIndex='9998'
disable_message_icon
is_open={is_tax_residence_popover_open}
/>
</div>
</div>
)}
</Field>
);
};

export default TaxResidenceField;
137 changes: 9 additions & 128 deletions packages/account/src/Components/forms/personal-details-form.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,21 @@ import {
Dropdown,
InlineMessage,
MobileWrapper,
Popover,
RadioGroup,
SelectNative,
Text,
} from '@deriv/components';
import { getLegalEntityName, isDesktop, isMobile, routes, validPhone } from '@deriv/shared';
import { getLegalEntityName, isMobile, routes, validPhone } from '@deriv/shared';
import { Localize, localize } from '@deriv/translations';
import { isFieldImmutable, verifyFields } from '../../Helpers/utils';
import FormBodySection from '../form-body-section';
import { DateOfBirthField, FormInputField, EmploymentStatusField } from './form-fields';
import {
DateOfBirthField,
FormInputField,
EmploymentStatusField,
TaxResidenceField,
TaxIdentificationNumberField,
} from './form-fields';
import FormSubHeader from '../form-sub-header';
import InlineNoteWithIcon from '../inline-note-with-icon';

Expand Down Expand Up @@ -421,13 +426,11 @@ const PersonalDetailsForm = props => {
<FormSubHeader title={localize('Tax information')} />
{'tax_residence' in values && (
<TaxResidenceField
setFieldValue={setFieldValue}
disabled={isFieldImmutable('tax_residence', editable_fields)}
residence_list={residence_list}
required
setIsTaxResidencePopoverOpen={setIsTaxResidencePopoverOpen}
setIsTinPopoverOpen={setIsTinPopoverOpen}
is_tax_residence_popover_open={is_tax_residence_popover_open}
disabled={isFieldImmutable('tax_residence', editable_fields)}
/>
)}
{'tax_identification_number' in values && (
Expand Down Expand Up @@ -636,128 +639,6 @@ const PlaceOfBirthField = ({ handleChange, setFieldValue, disabled, residence_li
</Field>
);

const TaxResidenceField = ({
setFieldValue,
residence_list,
required = false,
setIsTaxResidencePopoverOpen,
setIsTinPopoverOpen,
is_tax_residence_popover_open,
disabled,
}) => (
<Field name='tax_residence'>
{({ field, meta }) => (
<div className='details-form__tax'>
<DesktopWrapper>
<Autocomplete
{...field}
data-lpignore='true'
autoComplete='none' // prevent chrome autocomplete
type='text'
label={required ? localize('Tax residence*') : localize('Tax residence')}
error={meta.touched && meta.error}
list_items={residence_list}
onItemSelection={({ value, text }) => setFieldValue('tax_residence', value ? text : '', true)}
list_portal_id='modal_root'
data-testid='tax_residence'
disabled={disabled}
required={required}
/>
</DesktopWrapper>
<MobileWrapper>
<SelectNative
placeholder={required ? localize('Tax residence*') : localize('Tax residence')}
name={field.name}
label={required ? localize('Tax residence*') : localize('Tax residence')}
list_items={residence_list}
value={field.value}
use_text
error={meta.touched && meta.error}
onChange={e => {
field.onChange(e);
setFieldValue('tax_residence', e.target.value, true);
}}
{...field}
required={required}
data_testid='tax_residence_mobile'
disabled={disabled}
/>
</MobileWrapper>
<div
data-testid='tax_residence_pop_over'
onClick={e => {
setIsTaxResidencePopoverOpen(true);
setIsTinPopoverOpen(false);
e.stopPropagation();
}}
>
<Popover
alignment={isDesktop() ? 'right' : 'left'}
icon='info'
message={localize(
'The country in which you meet the criteria for paying taxes. Usually the country in which you physically reside.'
)}
zIndex={9998}
disable_message_icon
is_open={is_tax_residence_popover_open}
/>
</div>
</div>
)}
</Field>
);

const TaxIdentificationNumberField = ({
is_tin_popover_open,
setIsTinPopoverOpen,
setIsTaxResidencePopoverOpen,
disabled,
required = false,
}) => (
<div className='details-form__tax'>
<FormInputField
name='tax_identification_number'
label={required ? localize('Tax Identification Number*') : localize('Tax Identification Number')}
placeholder={localize('Tax Identification Number')}
data-testid='tax_identification_number'
disabled={disabled}
required={required}
/>
<div
data-testid='tax_identification_number_pop_over'
onClick={e => {
setIsTaxResidencePopoverOpen(false);
setIsTinPopoverOpen(true);
if (e.target.tagName !== 'A') e.stopPropagation();
}}
>
<Popover
alignment={isDesktop() ? 'right' : 'left'}
icon='info'
is_open={is_tin_popover_open}
message={
<Localize
i18n_default_text={
"Don't know your tax identification number? Click <0>here</0> to learn more."
}
components={[
<a
key={0}
className='link link--red'
rel='noopener noreferrer'
target='_blank'
href='https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/'
/>,
]}
/>
}
zIndex={9998}
disable_message_icon
/>
</div>
</div>
);

const AccountOpeningReasonField = ({ no_header, required, account_opening_reason_list, setFieldValue, disabled }) => (
<React.Fragment>
{!no_header && <FormSubHeader title={localize('Account opening reason')} />}
Expand Down

0 comments on commit e955dd2

Please sign in to comment.