UNPKG

@artmajeur/react-native-paper-phone-number-input

Version:

A performant phone number input component for react-native-paper with country picker

53 lines (52 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCountrySearch = void 0; var _react = require("react"); var _translatedCountries = _interopRequireDefault(require("../data/translatedCountries")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const removeAccents = str => str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); const useCountrySearch = ({ searchQuery, countriesList, lang }) => { return (0, _react.useMemo)(() => { if (!searchQuery) { return countriesList; } const lowerCaseQuery = removeAccents(searchQuery.toLowerCase()); const filteredAndSorted = countriesList.map(country => { const translatedName = removeAccents(_translatedCountries.default.getName(country.code, lang)?.toLowerCase() || country.name.toLowerCase()); const lowerCaseCode = country.code.toLowerCase(); const dialCode = country.dialCode; let score = 0; if (lowerCaseCode === lowerCaseQuery) { score = 5; // Exact code match } else if (dialCode.includes(lowerCaseQuery)) { score = 4; // Dial code match } else if (translatedName.startsWith(lowerCaseQuery)) { score = 3; // Translated name prefix match } else if (lowerCaseCode.startsWith(lowerCaseQuery)) { score = 2; // Code prefix match } else if (translatedName.includes(lowerCaseQuery)) { score = 1; // Translated name inclusion match } return { ...country, score }; }).filter(country => country.score > 0).sort((a, b) => { if (a.score !== b.score) { return b.score - a.score; } const translatedA = _translatedCountries.default.getName(a.code, lang) || a.name; const translatedB = _translatedCountries.default.getName(b.code, lang) || b.name; return translatedA.localeCompare(translatedB); }); return filteredAndSorted; }, [searchQuery, countriesList, lang]); }; exports.useCountrySearch = useCountrySearch; //# sourceMappingURL=useCountrySearch.js.map