PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.11.0
GiveWP – Donation Plugin and Fundraising Platform v3.11.0
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / DonationForms / resources / registrars / templates / fields / Phone.tsx
give / src / DonationForms / resources / registrars / templates / fields Last commit date
Amount 2 years ago Consent 2 years ago Checkbox.tsx 2 years ago Date.tsx 2 years ago Email.tsx 2 years ago File.tsx 2 years ago Gateways.tsx 2 years ago Hidden.tsx 2 years ago MultiSelect.tsx 2 years ago Password.tsx 2 years ago Phone.tsx 2 years ago Radio.tsx 2 years ago Select.tsx 2 years ago Text.tsx 2 years ago TextArea.tsx 2 years ago Url.tsx 2 years ago
Phone.tsx
93 lines
1 import {PhoneProps} from '@givewp/forms/propTypes';
2 import {useEffect, useState} from 'react';
3 import IntlTelInput from 'intl-tel-input/react';
4 import 'intl-tel-input/build/css/intlTelInput.css';
5 import InputMask from 'react-input-mask';
6
7 /**
8 * @since 3.9.0
9 */
10 export default function Phone({
11 Label,
12 ErrorMessage,
13 placeholder,
14 description,
15 phoneFormat,
16 inputProps,
17 fieldError,
18 intlTelInputSettings,
19 }: PhoneProps) {
20 const FieldDescription = window.givewp.form.templates.layouts.fieldDescription;
21 const {useFormContext} = window.givewp.form.hooks;
22 const {setValue, setError, trigger} = useFormContext();
23
24 const isIntlTelInput = intlTelInputSettings.initialCountry && intlTelInputSettings.utilsScriptUrl;
25
26 useEffect(() => {
27 if (!isIntlTelInput) {
28 return;
29 }
30
31 // This timeout is necessary to properly load the utilsScript - without this, the autoPlaceholder feature doesn't work.
32 const interval = setTimeout(() => {
33 window.intlTelInputGlobals.loadUtils(intlTelInputSettings.utilsScriptUrl);
34 // It's necessary to fix a missing left padding that can happen in certain cases.
35 document.querySelectorAll('.iti__tel-input').forEach(function (input: HTMLInputElement) {
36 // @ts-ignore
37 const countryContainerWidth = document.querySelector('.iti__country-container').offsetWidth;
38 input.style.paddingLeft = String(countryContainerWidth + 4) + 'px';
39 });
40 }, 100);
41
42 return () => {
43 clearInterval(interval);
44 };
45 }, []);
46
47 const [country, setCountry] = useState<string>(intlTelInputSettings.initialCountry);
48
49 const onChangeNumber = (number: string) => {
50 if (number && !window.intlTelInputUtils.isValidNumber(number, country)) {
51 const errorCode = window.intlTelInputUtils.getValidationError(number, country);
52 setValue(inputProps.name, errorCode);
53 setError(inputProps.name, {type: 'custom', message: intlTelInputSettings.errorMap[errorCode]});
54 } else {
55 setValue(inputProps.name, number);
56 trigger(inputProps.name, {shouldFocus: false});
57 }
58 };
59
60 return (
61 <label>
62 <Label />
63 {description && <FieldDescription description={description} />}
64
65 {isIntlTelInput ? (
66 <>
67 <input type={'hidden'} placeholder={placeholder} {...inputProps} />
68 <IntlTelInput
69 onChangeCountry={setCountry}
70 onChangeNumber={onChangeNumber}
71 initOptions={{
72 initialCountry: intlTelInputSettings.initialCountry,
73 showSelectedDialCode: intlTelInputSettings.showSelectedDialCode,
74 strictMode: intlTelInputSettings.strictMode,
75 i18n: intlTelInputSettings.i18n,
76 useFullscreenPopup: intlTelInputSettings.useFullscreenPopup,
77 }}
78 inputProps={{
79 'aria-invalid': fieldError ? 'true' : 'false',
80 }}
81 />
82 </>
83 ) : phoneFormat === 'domestic' ? (
84 <InputMask type={'phone'} {...inputProps} mask={'(999) 999-9999'} placeholder={placeholder} />
85 ) : (
86 <input type={'phone'} placeholder={placeholder} {...inputProps} />
87 )}
88
89 <ErrorMessage />
90 </label>
91 );
92 }
93