@taiga-ui/kit
Version:
Taiga UI Angular main components kit
41 lines • 6.82 kB
JavaScript
const countDigits = (value) => value.replaceAll(/\D/g, '').length;
/**
* `InputPhone` component sets country code as non-removable prefix.
* This prefix appears on focus and cannot be erased.
* But users sometimes can copy complete phone number (from any different source)
* and try to insert the whole string inside our `InputPhone` textfield.
* This preprocessor helps to avoid country prefix duplication on paste/drop/autofill events.
*/
export function tuiCreateCompletePhoneInsertionPreprocessor(countryCode, phoneMaskAfterCountryCode) {
const completePhoneLength = (countryCode + phoneMaskAfterCountryCode).replaceAll(/[^#\d]+/g, '').length;
const trimCountryPrefix = (value) => countryCode === '+7'
? value.replace(/^(\+?\s*7?\s?8?)\s?/, '')
: value.replace(new RegExp(`^(\\+?\\s*${countryCode.replace('+', '')}?)\\s?`), '');
return ({ elementState, data }) => {
const { value, selection } = elementState;
return {
elementState: {
selection,
value:
/**
* The only possible case when `value` includes digits more
* than mask expression allows – browser autofill.
* It means that we are inside `input`-event
* and mask are ready to reject "extra" characters.
* We should cut leading country prefix to save trailing characters!
*/
countDigits(value) > completePhoneLength
? trimCountryPrefix(value)
: value,
},
data: countDigits(data) >= completePhoneLength || data.startsWith(countryCode)
? /**
* User tries to insert/drop the complete phone number (with country prefix).
* We should drop already existing non-removable prefix.
*/
trimCountryPrefix(data)
: data,
};
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGUtcGhvbmUtaW5zZXJ0aW9uLXByZXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2lucHV0LXBob25lL3V0aWxzL2NvbXBsZXRlLXBob25lLWluc2VydGlvbi1wcmVwcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUVsRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMkNBQTJDLENBQ3ZELFdBQW1CLEVBQ25CLHlCQUFpQztJQUVqQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsV0FBVyxHQUFHLHlCQUF5QixDQUFDLENBQUMsVUFBVSxDQUM1RSxVQUFVLEVBQ1YsRUFBRSxDQUNMLENBQUMsTUFBTSxDQUFDO0lBRVQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQ2hELFdBQVcsS0FBSyxJQUFJO1FBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDVCxJQUFJLE1BQU0sQ0FBQyxhQUFhLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDN0QsRUFBRSxDQUNMLENBQUM7SUFFWixPQUFPLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBRTtRQUM1QixNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxHQUFHLFlBQVksQ0FBQztRQUV4QyxPQUFPO1lBQ0gsWUFBWSxFQUFFO2dCQUNWLFNBQVM7Z0JBQ1QsS0FBSztnQkFDRDs7Ozs7O21CQU1HO2dCQUNILFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxtQkFBbUI7b0JBQ3BDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxLQUFLO2FBQ2xCO1lBQ0QsSUFBSSxFQUNBLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDcEUsQ0FBQyxDQUFDOzs7cUJBR0c7b0JBQ0gsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUN6QixDQUFDLENBQUMsSUFBSTtTQUNqQixDQUFDO0lBQ04sQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dHlwZSBNYXNraXRvUHJlcHJvY2Vzc29yfSBmcm9tICdAbWFza2l0by9jb3JlJztcblxuY29uc3QgY291bnREaWdpdHMgPSAodmFsdWU6IHN0cmluZyk6IG51bWJlciA9PiB2YWx1ZS5yZXBsYWNlQWxsKC9cXEQvZywgJycpLmxlbmd0aDtcblxuLyoqXG4gKiBgSW5wdXRQaG9uZWAgY29tcG9uZW50IHNldHMgY291bnRyeSBjb2RlIGFzIG5vbi1yZW1vdmFibGUgcHJlZml4LlxuICogVGhpcyBwcmVmaXggYXBwZWFycyBvbiBmb2N1cyBhbmQgY2Fubm90IGJlIGVyYXNlZC5cbiAqIEJ1dCB1c2VycyBzb21ldGltZXMgY2FuIGNvcHkgY29tcGxldGUgcGhvbmUgbnVtYmVyIChmcm9tIGFueSBkaWZmZXJlbnQgc291cmNlKVxuICogYW5kIHRyeSB0byBpbnNlcnQgdGhlIHdob2xlIHN0cmluZyBpbnNpZGUgb3VyIGBJbnB1dFBob25lYCB0ZXh0ZmllbGQuXG4gKiBUaGlzIHByZXByb2Nlc3NvciBoZWxwcyB0byBhdm9pZCBjb3VudHJ5IHByZWZpeCBkdXBsaWNhdGlvbiBvbiBwYXN0ZS9kcm9wL2F1dG9maWxsIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR1aUNyZWF0ZUNvbXBsZXRlUGhvbmVJbnNlcnRpb25QcmVwcm9jZXNzb3IoXG4gICAgY291bnRyeUNvZGU6IHN0cmluZyxcbiAgICBwaG9uZU1hc2tBZnRlckNvdW50cnlDb2RlOiBzdHJpbmcsXG4pOiBNYXNraXRvUHJlcHJvY2Vzc29yIHtcbiAgICBjb25zdCBjb21wbGV0ZVBob25lTGVuZ3RoID0gKGNvdW50cnlDb2RlICsgcGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZSkucmVwbGFjZUFsbChcbiAgICAgICAgL1teI1xcZF0rL2csXG4gICAgICAgICcnLFxuICAgICkubGVuZ3RoO1xuXG4gICAgY29uc3QgdHJpbUNvdW50cnlQcmVmaXggPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgICAgICBjb3VudHJ5Q29kZSA9PT0gJys3J1xuICAgICAgICAgICAgPyB2YWx1ZS5yZXBsYWNlKC9eKFxcKz9cXHMqNz9cXHM/OD8pXFxzPy8sICcnKVxuICAgICAgICAgICAgOiB2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgXihcXFxcKz9cXFxccyoke2NvdW50cnlDb2RlLnJlcGxhY2UoJysnLCAnJyl9PylcXFxccz9gKSxcbiAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICApO1xuXG4gICAgcmV0dXJuICh7ZWxlbWVudFN0YXRlLCBkYXRhfSkgPT4ge1xuICAgICAgICBjb25zdCB7dmFsdWUsIHNlbGVjdGlvbn0gPSBlbGVtZW50U3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVsZW1lbnRTdGF0ZToge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFRoZSBvbmx5IHBvc3NpYmxlIGNhc2Ugd2hlbiBgdmFsdWVgIGluY2x1ZGVzIGRpZ2l0cyBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAqIHRoYW4gbWFzayBleHByZXNzaW9uIGFsbG93cyDigJMgYnJvd3NlciBhdXRvZmlsbC5cbiAgICAgICAgICAgICAgICAgICAgICogSXQgbWVhbnMgdGhhdCB3ZSBhcmUgaW5zaWRlIGBpbnB1dGAtZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICogYW5kIG1hc2sgYXJlIHJlYWR5IHRvIHJlamVjdCBcImV4dHJhXCIgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICAgICAgICogV2Ugc2hvdWxkIGN1dCBsZWFkaW5nIGNvdW50cnkgcHJlZml4IHRvIHNhdmUgdHJhaWxpbmcgY2hhcmFjdGVycyFcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGNvdW50RGlnaXRzKHZhbHVlKSA+IGNvbXBsZXRlUGhvbmVMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJpbUNvdW50cnlQcmVmaXgodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6XG4gICAgICAgICAgICAgICAgY291bnREaWdpdHMoZGF0YSkgPj0gY29tcGxldGVQaG9uZUxlbmd0aCB8fCBkYXRhLnN0YXJ0c1dpdGgoY291bnRyeUNvZGUpXG4gICAgICAgICAgICAgICAgICAgID8gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICogVXNlciB0cmllcyB0byBpbnNlcnQvZHJvcCB0aGUgY29tcGxldGUgcGhvbmUgbnVtYmVyICh3aXRoIGNvdW50cnkgcHJlZml4KS5cbiAgICAgICAgICAgICAgICAgICAgICAgKiBXZSBzaG91bGQgZHJvcCBhbHJlYWR5IGV4aXN0aW5nIG5vbi1yZW1vdmFibGUgcHJlZml4LlxuICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgIHRyaW1Db3VudHJ5UHJlZml4KGRhdGEpXG4gICAgICAgICAgICAgICAgICAgIDogZGF0YSxcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIl19