114 lines
3.8 KiB
JavaScript
114 lines
3.8 KiB
JavaScript
|
import IntlTel from './intlTelInput';
|
||
|
|
||
|
$(function () {
|
||
|
intlFlag();
|
||
|
});
|
||
|
|
||
|
function setMask(thisInput, mask = "") {
|
||
|
thisInput.inputmask({ mask: mask });
|
||
|
if (thisInput.hasClass("phone_code_field")) {
|
||
|
const countrySelector = $("#personaldata-country_id").find(":selected").val();
|
||
|
let country = "auto";
|
||
|
if (countrySelector == citizenId) {
|
||
|
country = "ru";
|
||
|
}
|
||
|
|
||
|
setFlag(thisInput[0], country);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function intlFlag() {
|
||
|
let country = $("#personaldata-country_id").find(":selected").val();
|
||
|
setCodePhoneValue(country == citizenId);
|
||
|
}
|
||
|
|
||
|
function setFlag(phone, country = "auto") {
|
||
|
const settings = {
|
||
|
autoPlaceholder: "off",
|
||
|
initialCountry: country,
|
||
|
preferredCountries: ["ru", "by", "ua", "kz"], // TODO вынести список "избранных стран" в админку
|
||
|
};
|
||
|
const keys = Object.keys(intlTelInputGlobals.instances);
|
||
|
if (keys.length > 0) {
|
||
|
let hasSamePhone = false;
|
||
|
for (let I = 0; I < keys.length; I++) {
|
||
|
let telInput = intlTelInputGlobals.instances[I].telInput;
|
||
|
|
||
|
const telCode = $(telInput).val().replace("+", "").replace("_", "");
|
||
|
if (
|
||
|
telCode.length > 0 &&
|
||
|
(JSON.stringify(intlTelInputGlobals.instances[I].getSelectedCountryData()) ===
|
||
|
JSON.stringify({}) ||
|
||
|
intlTelInputGlobals.instances[I].getSelectedCountryData().dialCode != telCode)
|
||
|
) {
|
||
|
const countryCode = intlTelInputGlobals.instances[I].countryCodes[telCode]?.shift();
|
||
|
if (countryCode) {
|
||
|
intlTelInputGlobals.instances[I].setCountry(countryCode);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (telInput == phone) {
|
||
|
if (
|
||
|
$(telInput).val().replace("+", "").replace("_", "").length < 1 &&
|
||
|
JSON.stringify(intlTelInputGlobals.instances[I].getSelectedCountryData()) !==
|
||
|
JSON.stringify({})
|
||
|
) {
|
||
|
$(telInput).val(
|
||
|
intlTelInputGlobals.instances[I].getSelectedCountryData().dialCode
|
||
|
);
|
||
|
}
|
||
|
hasSamePhone = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (!hasSamePhone) {
|
||
|
let intlTel = new IntlTel(phone, settings);
|
||
|
intlTel._init();
|
||
|
intlTelInputGlobals.instances[intlTel.id] = intlTel
|
||
|
}
|
||
|
} else {
|
||
|
let intlTel = new IntlTel(phone, settings);
|
||
|
intlTel._init();
|
||
|
intlTelInputGlobals.instances[intlTel.id] = intlTel
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkIfPhoneOtnEmpty(incomingPhone) {
|
||
|
let phones = incomingPhone.parents("div.row").find("input");
|
||
|
if (phones.length > 0) {
|
||
|
let phoneVal = "";
|
||
|
for (let I = 0; I < phones.length; I++) {
|
||
|
let phone = $(phones[I]);
|
||
|
|
||
|
let phoneVal =
|
||
|
phoneVal + phone.val().replace("+", "").replace("(", "").replace(")", "");
|
||
|
}
|
||
|
|
||
|
return phoneVal.length > 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function setCodePhoneValue(isCitizen = true) {
|
||
|
let phones = $(".phone_code_field");
|
||
|
if (phones.length > 0) {
|
||
|
for (let I = 0; I < phones.length; I++) {
|
||
|
let country = "auto";
|
||
|
let phone = $(phones[I]);
|
||
|
const phoneVal = phone.val().replace("+", "");
|
||
|
if (isCitizen && (phoneVal.length < 1 || phoneVal == "7")) {
|
||
|
country = "ru"; // TODO вынести настройку в админку
|
||
|
}
|
||
|
setFlag(phones[I], country);
|
||
|
|
||
|
if (phoneVal.length < 1 || phoneVal == "7") {
|
||
|
setMask(phone, phone.data("mask"));
|
||
|
if (isCitizen || checkIfPhoneOtnEmpty(phone)) {
|
||
|
phone.val("7");
|
||
|
} else {
|
||
|
phone.val("");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|