PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.5
GiveWP – Donation Plugin and Fundraising Platform v4.16.5
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 1 month ago Consent 1 year ago utils 1 year ago Checkbox.tsx 1 year ago Date.tsx 1 year ago Email.tsx 1 year ago File.tsx 1 year ago Gateways.tsx 1 year ago Hidden.tsx 2 years ago Honeypot.tsx 1 year ago MultiSelect.tsx 2 years ago Password.tsx 2 years ago Phone.tsx 1 year ago Radio.tsx 2 years ago Select.tsx 1 year ago Text.tsx 1 year ago TextArea.tsx 2 years ago Url.tsx 2 years ago
Phone.tsx
96 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 import autoCompleteAttr from '@givewp/forms/registrars/templates/fields/utils/autoCompleteAttr';
7
8 /**
9 * @since 4.3.0 Add autoComplete support
10 * @since 3.9.0
11 */
12 export default function Phone({
13 Label,
14 ErrorMessage,
15 placeholder,
16 description,
17 phoneFormat,
18 inputProps,
19 fieldError,
20 intlTelInputSettings,
21 }: PhoneProps) {
22 const autoComplete = autoCompleteAttr(inputProps?.name);
23 const FieldDescription = window.givewp.form.templates.layouts.fieldDescription;
24 const {useFormContext} = window.givewp.form.hooks;
25 const {setValue, setError, trigger} = useFormContext();
26
27 const isIntlTelInput = intlTelInputSettings.initialCountry && intlTelInputSettings.utilsScriptUrl;
28
29 useEffect(() => {
30 if (!isIntlTelInput) {
31 return;
32 }
33
34 // This timeout is necessary to properly load the utilsScript - without this, the autoPlaceholder feature doesn't work.
35 const interval = setTimeout(() => {
36 window.intlTelInputGlobals.loadUtils(intlTelInputSettings.utilsScriptUrl);
37 // It's necessary to fix a missing left padding that can happen in certain cases.
38 document.querySelectorAll('.iti__tel-input').forEach(function (input: HTMLInputElement) {
39 // @ts-ignore
40 const countryContainerWidth = document.querySelector('.iti__country-container').offsetWidth;
41 input.style.paddingLeft = String(countryContainerWidth + 4) + 'px';
42 });
43 }, 100);
44
45 return () => {
46 clearInterval(interval);
47 };
48 }, []);
49
50 const [country, setCountry] = useState<string>(intlTelInputSettings.initialCountry);
51
52 const onChangeNumber = (number: string) => {
53 if (number && !window.intlTelInputUtils.isValidNumber(number, country)) {
54 const errorCode = window.intlTelInputUtils.getValidationError(number, country);
55 setValue(inputProps.name, errorCode);
56 setError(inputProps.name, {type: 'custom', message: intlTelInputSettings.errorMap[errorCode]});
57 } else {
58 setValue(inputProps.name, number);
59 trigger(inputProps.name, {shouldFocus: false});
60 }
61 };
62
63 return (
64 <label>
65 <Label />
66 {description && <FieldDescription description={description} />}
67
68 {isIntlTelInput ? (
69 <>
70 <input type={'hidden'} placeholder={placeholder} {...inputProps} />
71 <IntlTelInput
72 onChangeCountry={setCountry}
73 onChangeNumber={onChangeNumber}
74 initOptions={{
75 initialCountry: intlTelInputSettings.initialCountry,
76 showSelectedDialCode: intlTelInputSettings.showSelectedDialCode,
77 strictMode: intlTelInputSettings.strictMode,
78 i18n: intlTelInputSettings.i18n,
79 useFullscreenPopup: intlTelInputSettings.useFullscreenPopup,
80 }}
81 inputProps={{
82 'aria-invalid': fieldError ? 'true' : 'false',
83 }}
84 />
85 </>
86 ) : phoneFormat === 'domestic' ? (
87 <InputMask type={'phone'} {...inputProps} mask={'(999) 999-9999'} placeholder={placeholder} />
88 ) : (
89 <input type={'phone'} placeholder={placeholder} {...inputProps} autoComplete={autoComplete} />
90 )}
91
92 <ErrorMessage />
93 </label>
94 );
95 }
96