forked from deriv-com/deriv-app
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtax-residence.tsx
104 lines (99 loc) · 4.53 KB
/
tax-residence.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/* eslint-disable @typescript-eslint/ban-ts-comment */
//@ts-nocheck [TODO] - Need to fix typescript errors in Autocomplete & SelectNative components
import { ChangeEvent } from 'react';
import { Field, FieldProps } from 'formik';
import { ResidenceList } from '@deriv/api-types';
import { Autocomplete, SelectNative, Popover } from '@deriv/components';
import { useResidenceList } from '@deriv/hooks';
import { TItem } from '@deriv/components/src/components/dropdown-list';
import { useTranslations } from '@deriv-com/translations';
import { useDevice } from '@deriv-com/ui';
import clsx from 'clsx';
type TTaxResidenceFieldProps = {
required?: boolean;
setIsTaxResidencePopoverOpen: (is_open: boolean) => void;
setIsTinPopoverOpen: (is_open: boolean) => void;
is_tax_residence_popover_open: boolean;
disabled: boolean;
fieldFocused?: boolean;
};
const TaxResidenceField = ({
required = false,
setIsTaxResidencePopoverOpen,
setIsTinPopoverOpen,
is_tax_residence_popover_open,
disabled,
fieldFocused,
}: TTaxResidenceFieldProps) => {
const { data: residence_list } = useResidenceList();
const { isDesktop } = useDevice();
const { localize } = useTranslations();
return (
<Field name='tax_residence'>
{({ field, form: { setFieldValue }, meta }: FieldProps) => (
<div className='details-form__tax'>
{isDesktop ? (
<Autocomplete
{...field}
data-lpignore='true'
autoComplete='off' // prevent chrome autocomplete
label={required ? localize('Tax residence*') : localize('Tax residence')}
error={meta.touched ? meta.error : undefined}
list_items={residence_list}
onItemSelection={(item: TItem) => {
setFieldValue(
'tax_residence',
(item as ResidenceList[0]).value ? (item as ResidenceList[0]).text : '',
true
);
}}
data-testid='tax_residence'
disabled={disabled}
required={required}
className={clsx({ 'focus-field': fieldFocused })}
/>
) : (
<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: ChangeEvent<HTMLSelectElement>) => {
field.onChange(e);
setFieldValue('tax_residence', e.target.value, true);
}}
required={required}
data_testid='tax_residence_mobile'
disabled={disabled}
className={clsx({ 'focus-field': fieldFocused })}
/>
)}
<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;