chore: phone number validation added
This commit is contained in:
7
package-lock.json
generated
7
package-lock.json
generated
@@ -16,6 +16,7 @@
|
|||||||
"i18next-browser-languagedetector": "^8.2.0",
|
"i18next-browser-languagedetector": "^8.2.0",
|
||||||
"i18next-http-backend": "^3.0.2",
|
"i18next-http-backend": "^3.0.2",
|
||||||
"iconsax-reactjs": "^0.0.8",
|
"iconsax-reactjs": "^0.0.8",
|
||||||
|
"libphonenumber-js": "^1.12.10",
|
||||||
"react": "^19.1.0",
|
"react": "^19.1.0",
|
||||||
"react-country-flag": "^3.1.0",
|
"react-country-flag": "^3.1.0",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.1.0",
|
||||||
@@ -3306,6 +3307,12 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/libphonenumber-js": {
|
||||||
|
"version": "1.12.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.10.tgz",
|
||||||
|
"integrity": "sha512-E91vHJD61jekHHR/RF/E83T/CMoaLXT7cwYA75T4gim4FZjnM6hbJjVIGg7chqlSqRsSvQ3izGmOjHy1SQzcGQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/lines-and-columns": {
|
"node_modules/lines-and-columns": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"i18next-browser-languagedetector": "^8.2.0",
|
"i18next-browser-languagedetector": "^8.2.0",
|
||||||
"i18next-http-backend": "^3.0.2",
|
"i18next-http-backend": "^3.0.2",
|
||||||
"iconsax-reactjs": "^0.0.8",
|
"iconsax-reactjs": "^0.0.8",
|
||||||
|
"libphonenumber-js": "^1.12.10",
|
||||||
"react": "^19.1.0",
|
"react": "^19.1.0",
|
||||||
"react-country-flag": "^3.1.0",
|
"react-country-flag": "^3.1.0",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.1.0",
|
||||||
|
|||||||
@@ -1,3 +1,250 @@
|
|||||||
{
|
{
|
||||||
"helloWorld": "hello world"
|
"helloWorld": "hello world",
|
||||||
|
"country": {
|
||||||
|
"afghanistan": "Afghanistan",
|
||||||
|
"aland_islands": "Aland islands",
|
||||||
|
"albania": "Albania",
|
||||||
|
"algeria": "Algeria",
|
||||||
|
"american_samoa": "American samoa",
|
||||||
|
"andorra": "Andorra",
|
||||||
|
"angola": "Angola",
|
||||||
|
"anguilla": "Anguilla",
|
||||||
|
"antarctica": "Antarctica",
|
||||||
|
"antigua_and_barbuda": "Antigua and barbuda",
|
||||||
|
"argentina": "Argentina",
|
||||||
|
"armenia": "Armenia",
|
||||||
|
"aruba": "Aruba",
|
||||||
|
"australia": "Australia",
|
||||||
|
"austria": "Austria",
|
||||||
|
"azerbaijan": "Azerbaijan",
|
||||||
|
"bahamas": "Bahamas",
|
||||||
|
"bahrain": "Bahrain",
|
||||||
|
"bangladesh": "Bangladesh",
|
||||||
|
"barbados": "Barbados",
|
||||||
|
"belarus": "Belarus",
|
||||||
|
"belgium": "Belgium",
|
||||||
|
"belize": "Belize",
|
||||||
|
"benin": "Benin",
|
||||||
|
"bermuda": "Bermuda",
|
||||||
|
"bhutan": "Bhutan",
|
||||||
|
"bolivia": "Bolivia",
|
||||||
|
"bosnia_and_herzegovina": "Bosnia and herzegovina",
|
||||||
|
"botswana": "Botswana",
|
||||||
|
"brazil": "Brazil",
|
||||||
|
"british_indian_ocean_territory": "British indian ocean territory",
|
||||||
|
"british_virgin_islands": "British virgin islands",
|
||||||
|
"brunei": "Brunei",
|
||||||
|
"bulgaria": "Bulgaria",
|
||||||
|
"burkina_faso": "Burkina faso",
|
||||||
|
"burundi": "Burundi",
|
||||||
|
"cambodia": "Cambodia",
|
||||||
|
"cameroon": "Cameroon",
|
||||||
|
"canada": "Canada",
|
||||||
|
"cape_verde": "Cape verde",
|
||||||
|
"cayman_islands": "Cayman islands",
|
||||||
|
"central_african_republic": "Central african republic",
|
||||||
|
"chad": "Chad",
|
||||||
|
"chile": "Chile",
|
||||||
|
"china": "China",
|
||||||
|
"christmas_island": "Christmas island",
|
||||||
|
"cocos_keeling_islands": "Cocos keeling islands",
|
||||||
|
"colombia": "Colombia",
|
||||||
|
"comoros": "Comoros",
|
||||||
|
"congo_brazzaville": "Congo brazzaville",
|
||||||
|
"congo_kinshasa": "Congo kinshasa",
|
||||||
|
"cook_islands": "Cook islands",
|
||||||
|
"costa_rica": "Costa rica",
|
||||||
|
"cote_divoire": "Cote divoire",
|
||||||
|
"croatia": "Croatia",
|
||||||
|
"cuba": "Cuba",
|
||||||
|
"curacao": "Curacao",
|
||||||
|
"cyprus": "Cyprus",
|
||||||
|
"czech_republic": "Czech republic",
|
||||||
|
"denmark": "Denmark",
|
||||||
|
"djibouti": "Djibouti",
|
||||||
|
"dominica": "Dominica",
|
||||||
|
"dominican_republic": "Dominican republic",
|
||||||
|
"ecuador": "Ecuador",
|
||||||
|
"egypt": "Egypt",
|
||||||
|
"el_salvador": "El salvador",
|
||||||
|
"equatorial_guinea": "Equatorial guinea",
|
||||||
|
"eritrea": "Eritrea",
|
||||||
|
"estonia": "Estonia",
|
||||||
|
"eswatini": "Eswatini",
|
||||||
|
"ethiopia": "Ethiopia",
|
||||||
|
"falkland_islands": "Falkland islands",
|
||||||
|
"faroe_islands": "Faroe islands",
|
||||||
|
"fiji": "Fiji",
|
||||||
|
"finland": "Finland",
|
||||||
|
"france": "France",
|
||||||
|
"french_guiana": "French guiana",
|
||||||
|
"french_polynesia": "French polynesia",
|
||||||
|
"gabon": "Gabon",
|
||||||
|
"gambia": "Gambia",
|
||||||
|
"georgia": "Georgia",
|
||||||
|
"germany": "Germany",
|
||||||
|
"ghana": "Ghana",
|
||||||
|
"gibraltar": "Gibraltar",
|
||||||
|
"greece": "Greece",
|
||||||
|
"greenland": "Greenland",
|
||||||
|
"grenada": "Grenada",
|
||||||
|
"guadeloupe": "Guadeloupe",
|
||||||
|
"guam": "Guam",
|
||||||
|
"guatemala": "Guatemala",
|
||||||
|
"guernsey": "Guernsey",
|
||||||
|
"guinea": "Guinea",
|
||||||
|
"guinea_bissau": "Guinea bissau",
|
||||||
|
"guyana": "Guyana",
|
||||||
|
"haiti": "Haiti",
|
||||||
|
"honduras": "Honduras",
|
||||||
|
"hong_kong": "Hong kong",
|
||||||
|
"hungary": "Hungary",
|
||||||
|
"iceland": "Iceland",
|
||||||
|
"india": "India",
|
||||||
|
"indonesia": "Indonesia",
|
||||||
|
"iran": "Iran",
|
||||||
|
"iraq": "Iraq",
|
||||||
|
"ireland": "Ireland",
|
||||||
|
"isle_of_man": "Isle of man",
|
||||||
|
"israel": "Israel",
|
||||||
|
"italy": "Italy",
|
||||||
|
"jamaica": "Jamaica",
|
||||||
|
"japan": "Japan",
|
||||||
|
"jersey": "Jersey",
|
||||||
|
"jordan": "Jordan",
|
||||||
|
"kazakhstan": "Kazakhstan",
|
||||||
|
"kenya": "Kenya",
|
||||||
|
"kiribati": "Kiribati",
|
||||||
|
"kosovo": "Kosovo",
|
||||||
|
"kuwait": "Kuwait",
|
||||||
|
"kyrgyzstan": "Kyrgyzstan",
|
||||||
|
"laos": "Laos",
|
||||||
|
"latvia": "Latvia",
|
||||||
|
"lebanon": "Lebanon",
|
||||||
|
"lesotho": "Lesotho",
|
||||||
|
"liberia": "Liberia",
|
||||||
|
"libya": "Libya",
|
||||||
|
"liechtenstein": "Liechtenstein",
|
||||||
|
"lithuania": "Lithuania",
|
||||||
|
"luxembourg": "Luxembourg",
|
||||||
|
"macau": "Macau",
|
||||||
|
"madagascar": "Madagascar",
|
||||||
|
"malawi": "Malawi",
|
||||||
|
"malaysia": "Malaysia",
|
||||||
|
"maldives": "Maldives",
|
||||||
|
"mali": "Mali",
|
||||||
|
"malta": "Malta",
|
||||||
|
"marshall_islands": "Marshall islands",
|
||||||
|
"martinique": "Martinique",
|
||||||
|
"mauritania": "Mauritania",
|
||||||
|
"mauritius": "Mauritius",
|
||||||
|
"mayotte": "Mayotte",
|
||||||
|
"mexico": "Mexico",
|
||||||
|
"micronesia": "Micronesia",
|
||||||
|
"moldova": "Moldova",
|
||||||
|
"monaco": "Monaco",
|
||||||
|
"mongolia": "Mongolia",
|
||||||
|
"montenegro": "Montenegro",
|
||||||
|
"montserrat": "Montserrat",
|
||||||
|
"morocco": "Morocco",
|
||||||
|
"mozambique": "Mozambique",
|
||||||
|
"myanmar": "Myanmar",
|
||||||
|
"namibia": "Namibia",
|
||||||
|
"nauru": "Nauru",
|
||||||
|
"nepal": "Nepal",
|
||||||
|
"netherlands": "Netherlands",
|
||||||
|
"new_caledonia": "New caledonia",
|
||||||
|
"new_zealand": "New zealand",
|
||||||
|
"nicaragua": "Nicaragua",
|
||||||
|
"niger": "Niger",
|
||||||
|
"nigeria": "Nigeria",
|
||||||
|
"niue": "Niue",
|
||||||
|
"norfolk_island": "Norfolk island",
|
||||||
|
"north_korea": "North korea",
|
||||||
|
"north_macedonia": "North macedonia",
|
||||||
|
"northern_mariana_islands": "Northern mariana islands",
|
||||||
|
"norway": "Norway",
|
||||||
|
"oman": "Oman",
|
||||||
|
"pakistan": "Pakistan",
|
||||||
|
"palau": "Palau",
|
||||||
|
"palestine": "Palestine",
|
||||||
|
"panama": "Panama",
|
||||||
|
"papua_new_guinea": "Papua new guinea",
|
||||||
|
"paraguay": "Paraguay",
|
||||||
|
"peru": "Peru",
|
||||||
|
"philippines": "Philippines",
|
||||||
|
"pitcairn_islands": "Pitcairn islands",
|
||||||
|
"poland": "Poland",
|
||||||
|
"portugal": "Portugal",
|
||||||
|
"puerto_rico": "Puerto rico",
|
||||||
|
"qatar": "Qatar",
|
||||||
|
"reunion": "Reunion",
|
||||||
|
"romania": "Romania",
|
||||||
|
"russia": "Russia",
|
||||||
|
"rwanda": "Rwanda",
|
||||||
|
"saint_barthelemy": "Saint barthelemy",
|
||||||
|
"saint_helena": "Saint helena",
|
||||||
|
"saint_kitts_and_nevis": "Saint kitts and nevis",
|
||||||
|
"saint_lucia": "Saint lucia",
|
||||||
|
"saint_martin": "Saint martin",
|
||||||
|
"saint_pierre_and_miquelon": "Saint pierre and miquelon",
|
||||||
|
"saint_vincent_and_the_grenadines": "Saint vincent and the grenadines",
|
||||||
|
"samoa": "Samoa",
|
||||||
|
"san_marino": "San marino",
|
||||||
|
"sao_tome_and_principe": "Sao tome and principe",
|
||||||
|
"saudi_arabia": "Saudi arabia",
|
||||||
|
"senegal": "Senegal",
|
||||||
|
"serbia": "Serbia",
|
||||||
|
"seychelles": "Seychelles",
|
||||||
|
"sierra_leone": "Sierra leone",
|
||||||
|
"singapore": "Singapore",
|
||||||
|
"sint_maarten": "Sint maarten",
|
||||||
|
"slovakia": "Slovakia",
|
||||||
|
"slovenia": "Slovenia",
|
||||||
|
"solomon_islands": "Solomon islands",
|
||||||
|
"somalia": "Somalia",
|
||||||
|
"south_africa": "South africa",
|
||||||
|
"south_georgia_and_south_sandwich_islands": "South georgia and south sandwich islands",
|
||||||
|
"south_korea": "South korea",
|
||||||
|
"south_sudan": "South sudan",
|
||||||
|
"spain": "Spain",
|
||||||
|
"sri_lanka": "Sri lanka",
|
||||||
|
"sudan": "Sudan",
|
||||||
|
"suriname": "Suriname",
|
||||||
|
"svalbard_and_jan_mayen": "Svalbard and jan mayen",
|
||||||
|
"sweden": "Sweden",
|
||||||
|
"switzerland": "Switzerland",
|
||||||
|
"syria": "Syria",
|
||||||
|
"taiwan": "Taiwan",
|
||||||
|
"tajikistan": "Tajikistan",
|
||||||
|
"tanzania": "Tanzania",
|
||||||
|
"thailand": "Thailand",
|
||||||
|
"timor_leste": "Timor leste",
|
||||||
|
"togo": "Togo",
|
||||||
|
"tokelau": "Tokelau",
|
||||||
|
"tonga": "Tonga",
|
||||||
|
"trinidad_and_tobago": "Trinidad and tobago",
|
||||||
|
"tunisia": "Tunisia",
|
||||||
|
"turkey": "Turkey",
|
||||||
|
"turkmenistan": "Turkmenistan",
|
||||||
|
"turks_and_caicos_islands": "Turks and caicos islands",
|
||||||
|
"tuvalu": "Tuvalu",
|
||||||
|
"us_virgin_islands": "Us virgin islands",
|
||||||
|
"uganda": "Uganda",
|
||||||
|
"ukraine": "Ukraine",
|
||||||
|
"united_arab_emirates": "United arab emirates",
|
||||||
|
"united_kingdom": "United kingdom",
|
||||||
|
"united_states": "United states",
|
||||||
|
"uruguay": "Uruguay",
|
||||||
|
"uzbekistan": "Uzbekistan",
|
||||||
|
"vanuatu": "Vanuatu",
|
||||||
|
"vatican_city": "Vatican city",
|
||||||
|
"venezuela": "Venezuela",
|
||||||
|
"vietnam": "Vietnam",
|
||||||
|
"wallis_and_futuna": "Wallis and futuna",
|
||||||
|
"western_sahara": "Western sahara",
|
||||||
|
"yemen": "Yemen",
|
||||||
|
"zambia": "Zambia",
|
||||||
|
"zimbabwe": "Zimbabwe"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,188 @@
|
|||||||
"labels": {
|
"labels": {
|
||||||
"search": "جست و جو"
|
"search": "جست و جو"
|
||||||
},
|
},
|
||||||
"country"
|
"country": {
|
||||||
|
"afghanistan": "افغانستان",
|
||||||
|
"aland_islands": "جزایر آلند",
|
||||||
|
"albania": "آلبانی",
|
||||||
|
"algeria": "الجزایر",
|
||||||
|
"american_samoa": "ساموای آمریکایی",
|
||||||
|
"andorra": "آندورا",
|
||||||
|
"angola": "آنگولا",
|
||||||
|
"anguilla": "آنگویلا",
|
||||||
|
"antarctica": "جنوبگان",
|
||||||
|
"antigua_and_barbuda": "آنتیگوا و باربودا",
|
||||||
|
"argentina": "آرژانتین",
|
||||||
|
"armenia": "ارمنستان",
|
||||||
|
"aruba": "آروبا",
|
||||||
|
"australia": "استرالیا",
|
||||||
|
"austria": "اتریش",
|
||||||
|
"azerbaijan": "آذربایجان",
|
||||||
|
"bahamas": "باهاما",
|
||||||
|
"bahrain": "بحرین",
|
||||||
|
"bangladesh": "بنگلادش",
|
||||||
|
"barbados": "باربادوس",
|
||||||
|
"belarus": "بلاروس",
|
||||||
|
"belgium": "بلژیک",
|
||||||
|
"belize": "بلیز",
|
||||||
|
"benin": "بنین",
|
||||||
|
"bermuda": "برمودا",
|
||||||
|
"bhutan": "بوتان",
|
||||||
|
"bolivia": "بولیوی",
|
||||||
|
"bosnia_and_herzegovina": "بوسنی و هرزگوین",
|
||||||
|
"botswana": "بوتسوانا",
|
||||||
|
"brazil": "برزیل",
|
||||||
|
"british_virgin_islands": "جزایر ویرجین بریتانیا",
|
||||||
|
"brunei": "برونئی",
|
||||||
|
"bulgaria": "بلغارستان",
|
||||||
|
"burkina_faso": "بورکینافاسو",
|
||||||
|
"burundi": "بوروندی",
|
||||||
|
"cambodia": "کامبوج",
|
||||||
|
"cameroon": "کامرون",
|
||||||
|
"canada": "کانادا",
|
||||||
|
"cape_verde": "کیپ ورد",
|
||||||
|
"cayman_islands": "جزایر کیمن",
|
||||||
|
"central_african_republic": "جمهوری آفریقای مرکزی",
|
||||||
|
"chad": "چاد",
|
||||||
|
"chile": "شیلی",
|
||||||
|
"china": "چین",
|
||||||
|
"colombia": "کلمبیا",
|
||||||
|
"comoros": "کومور",
|
||||||
|
"costa_rica": "کاستاریکا",
|
||||||
|
"cote_divoire": "ساحل عاج",
|
||||||
|
"croatia": "کرواسی",
|
||||||
|
"cuba": "کوبا",
|
||||||
|
"cyprus": "قبرس",
|
||||||
|
"czech_republic": "جمهوری چک",
|
||||||
|
"denmark": "دانمارک",
|
||||||
|
"djibouti": "جیبوتی",
|
||||||
|
"dominica": "دومینیکا",
|
||||||
|
"dominican_republic": "جمهوری دومینیکن",
|
||||||
|
"ecuador": "اکوادور",
|
||||||
|
"egypt": "مصر",
|
||||||
|
"el_salvador": "السالوادور",
|
||||||
|
"equatorial_guinea": "گینه استوایی",
|
||||||
|
"eritrea": "اریتره",
|
||||||
|
"estonia": "استونی",
|
||||||
|
"eswatini": "سوازیلند",
|
||||||
|
"ethiopia": "اتیوپی",
|
||||||
|
"fiji": "فیجی",
|
||||||
|
"finland": "فنلاند",
|
||||||
|
"france": "فرانسه",
|
||||||
|
"gabon": "گابن",
|
||||||
|
"gambia": "گامبیا",
|
||||||
|
"georgia": "گرجستان",
|
||||||
|
"germany": "آلمان",
|
||||||
|
"ghana": "غنا",
|
||||||
|
"greece": "یونان",
|
||||||
|
"guatemala": "گواتمالا",
|
||||||
|
"guinea": "گینه",
|
||||||
|
"guinea_bissau": "گینه بیسائو",
|
||||||
|
"guyana": "گویان",
|
||||||
|
"haiti": "هائیتی",
|
||||||
|
"honduras": "هندوراس",
|
||||||
|
"hungary": "مجارستان",
|
||||||
|
"iceland": "ایسلند",
|
||||||
|
"india": "هندوستان",
|
||||||
|
"indonesia": "اندونزی",
|
||||||
|
"iran": "ایران",
|
||||||
|
"iraq": "عراق",
|
||||||
|
"ireland": "ایرلند",
|
||||||
|
"israel": "اسرائیل",
|
||||||
|
"italy": "ایتالیا",
|
||||||
|
"jamaica": "جامائیکا",
|
||||||
|
"japan": "ژاپن",
|
||||||
|
"jordan": "اردن",
|
||||||
|
"kazakhstan": "قزاقستان",
|
||||||
|
"kenya": "کنیا",
|
||||||
|
"kuwait": "کویت",
|
||||||
|
"kyrgyzstan": "قرقیزستان",
|
||||||
|
"laos": "لائوس",
|
||||||
|
"latvia": "لتونی",
|
||||||
|
"lebanon": "لبنان",
|
||||||
|
"lesotho": "لسوتو",
|
||||||
|
"liberia": "لیبریا",
|
||||||
|
"libya": "لیبی",
|
||||||
|
"luxembourg": "لوکزامبورگ",
|
||||||
|
"malaysia": "مالزی",
|
||||||
|
"maldives": "مالدیو",
|
||||||
|
"mali": "مالی",
|
||||||
|
"malta": "مالت",
|
||||||
|
"mauritania": "موریتانی",
|
||||||
|
"mauritius": "موریس",
|
||||||
|
"mexico": "مکزیک",
|
||||||
|
"moldova": "مولداوی",
|
||||||
|
"monaco": "موناکو",
|
||||||
|
"mongolia": "مغولستان",
|
||||||
|
"morocco": "مراکش",
|
||||||
|
"mozambique": "موزامبیک",
|
||||||
|
"myanmar": "میانمار",
|
||||||
|
"namibia": "نامیبیا",
|
||||||
|
"nepal": "نپال",
|
||||||
|
"netherlands": "هلند",
|
||||||
|
"new_zealand": "نیوزیلند",
|
||||||
|
"nicaragua": "نیکاراگوئه",
|
||||||
|
"niger": "نیجر",
|
||||||
|
"nigeria": "نیجریه",
|
||||||
|
"north_korea": "کره شمالی",
|
||||||
|
"north_macedonia": "مقدونیه",
|
||||||
|
"norway": "نروژ",
|
||||||
|
"oman": "عمان",
|
||||||
|
"pakistan": "پاکستان",
|
||||||
|
"palau": "پالائو",
|
||||||
|
"panama": "پاناما",
|
||||||
|
"papua_new_guinea": "پاپوآ گینه نو",
|
||||||
|
"paraguay": "پاراگوئه",
|
||||||
|
"peru": "پرو",
|
||||||
|
"philippines": "فیلیپین",
|
||||||
|
"poland": "لهستان",
|
||||||
|
"portugal": "پرتغال",
|
||||||
|
"qatar": "قطر",
|
||||||
|
"romania": "رومانی",
|
||||||
|
"russia": "روسیه",
|
||||||
|
"rwanda": "رواندا",
|
||||||
|
"saudi_arabia": "عربستان سعودی",
|
||||||
|
"senegal": "سنگال",
|
||||||
|
"serbia": "صربستان",
|
||||||
|
"seychelles": "سیشل",
|
||||||
|
"sierra_leone": "سیرالئون",
|
||||||
|
"singapore": "سنگاپور",
|
||||||
|
"south_africa": "آفریقای جنوبی",
|
||||||
|
"south_korea": "کره جنوبی",
|
||||||
|
"south_sudan": "سودان جنوبی",
|
||||||
|
"spain": "اسپانیا",
|
||||||
|
"sri_lanka": "سریلانکا",
|
||||||
|
"sudan": "سودان",
|
||||||
|
"suriname": "سورینام",
|
||||||
|
"sweden": "سوئد",
|
||||||
|
"switzerland": "سوئیس",
|
||||||
|
"syria": "سوریه",
|
||||||
|
"taiwan": "تایوان",
|
||||||
|
"tajikistan": "تاجیکستان",
|
||||||
|
"tanzania": "تانزانیا",
|
||||||
|
"thailand": "تایلند",
|
||||||
|
"timor_leste": "تیمور شرقی",
|
||||||
|
"togo": "توگو",
|
||||||
|
"tonga": "تونگا",
|
||||||
|
"trinidad_and_tobago": "ترینیداد و توباگو",
|
||||||
|
"tunisia": "تونس",
|
||||||
|
"turkey": "ترکیه",
|
||||||
|
"turkmenistan": "ترکمنستان",
|
||||||
|
"tuvalu": "تووالو",
|
||||||
|
"uganda": "اوگاندا",
|
||||||
|
"ukraine": "اوکراین",
|
||||||
|
"united_arab_emirates": "امارات متحده عربی",
|
||||||
|
"united_kingdom": "انگلستان",
|
||||||
|
"united_states": "ایالات متحده آمریکا",
|
||||||
|
"uruguay": "اروگوئه",
|
||||||
|
"uzbekistan": "ازبکستان",
|
||||||
|
"vanuatu": "وانواتو",
|
||||||
|
"venezuela": "ونزوئلا",
|
||||||
|
"vietnam": "ویتنام",
|
||||||
|
"yemen": "یمن",
|
||||||
|
"zambia": "زامبیا",
|
||||||
|
"zimbabwe": "زیمبابوه"
|
||||||
|
},
|
||||||
"messages": {
|
"messages": {
|
||||||
"noResualtFound": "نتیجه ای یافت نشد."
|
"noResualtFound": "نتیجه ای یافت نشد."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ export function CountryCodeSelector({
|
|||||||
() =>
|
() =>
|
||||||
countries.filter(
|
countries.filter(
|
||||||
(country) =>
|
(country) =>
|
||||||
|
t(country.label).toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
country.label.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
country.label.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
country.phone.includes(searchTerm),
|
country.phone.includes(searchTerm),
|
||||||
),
|
),
|
||||||
@@ -205,7 +206,7 @@ export function CountryCodeSelector({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
<ListItemText primary={country.label} />
|
<ListItemText primary={t(country.label)} />
|
||||||
<Typography color="text.secondary">
|
<Typography color="text.secondary">
|
||||||
{country.phone}
|
{country.phone}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
import { Box, Button, Stack, TextField, Typography } from '@mui/material';
|
|
||||||
import { useRef, useState } from 'react';
|
|
||||||
import { useTranslation } from 'react-i18next';
|
|
||||||
import { CountryCodeSelector } from './CountryCodeSelector';
|
|
||||||
import { Google } from 'iconsax-reactjs';
|
|
||||||
import { isNumeric } from '@/utils/regexes/isNumeric';
|
|
||||||
|
|
||||||
export function LoginForm() {
|
|
||||||
const { t, i18n } = useTranslation('authentication');
|
|
||||||
const [value, setValue] = useState('');
|
|
||||||
const [countryCode, setCountryCode] = useState('+41');
|
|
||||||
const [inputType, setInputType] = useState<'phone' | 'email'>('phone');
|
|
||||||
const textFieldRef = useRef<HTMLDivElement>(null);
|
|
||||||
const inputRef = useRef<HTMLInputElement>(null);
|
|
||||||
const dir = i18n.dir();
|
|
||||||
|
|
||||||
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
||||||
const newValue = event.target.value;
|
|
||||||
setValue(newValue);
|
|
||||||
|
|
||||||
// If the new value contains only digits (or is empty), it's a phone number
|
|
||||||
if (isNumeric(newValue)) {
|
|
||||||
setInputType('phone');
|
|
||||||
} else {
|
|
||||||
setInputType('email');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleBlur = () => {
|
|
||||||
// setTouched(true);
|
|
||||||
// setError(validate(value, inputType));
|
|
||||||
};
|
|
||||||
|
|
||||||
const showAdornment = inputType === 'phone' && value.length > 0;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box sx={{ width: '100%' }}>
|
|
||||||
<Stack spacing={1}>
|
|
||||||
<Typography variant="h5">{t('loginForm.title')}</Typography>
|
|
||||||
<Typography variant="body2" color="text.secondary">
|
|
||||||
{t('loginForm.description')}
|
|
||||||
</Typography>
|
|
||||||
</Stack>
|
|
||||||
|
|
||||||
<TextField
|
|
||||||
ref={textFieldRef}
|
|
||||||
inputRef={inputRef}
|
|
||||||
label={t('loginForm.emailOrPhoneLabel')}
|
|
||||||
value={value}
|
|
||||||
onChange={handleInputChange}
|
|
||||||
onBlur={handleBlur}
|
|
||||||
// error={touched && !!error}
|
|
||||||
autoFocus
|
|
||||||
slotProps={{
|
|
||||||
htmlInput: { dir: 'auto', sx: { lineHeight: 1.5, paddingX: 0 } },
|
|
||||||
input: {
|
|
||||||
startAdornment: dir === 'ltr' && (
|
|
||||||
<CountryCodeSelector
|
|
||||||
value={countryCode}
|
|
||||||
onChange={setCountryCode}
|
|
||||||
show={showAdornment}
|
|
||||||
menuAnchor={textFieldRef.current}
|
|
||||||
onCloseFocusRef={inputRef}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
endAdornment: dir === 'rtl' && (
|
|
||||||
<CountryCodeSelector
|
|
||||||
value={countryCode}
|
|
||||||
onChange={setCountryCode}
|
|
||||||
show={showAdornment}
|
|
||||||
menuAnchor={textFieldRef.current}
|
|
||||||
onCloseFocusRef={inputRef}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
sx={{ my: 4 }}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<Stack spacing={2}>
|
|
||||||
<Button onClick={() => inputRef.current?.focus()}>
|
|
||||||
{t('loginForm.submitButton')}
|
|
||||||
</Button>
|
|
||||||
<Button variant="outlined" startIcon={<Google variant="Bold" />}>
|
|
||||||
{t('loginForm.loginWithGoogle')}
|
|
||||||
</Button>
|
|
||||||
</Stack>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@ import { Google } from 'iconsax-reactjs';
|
|||||||
import { isNumeric } from '@/utils/regexes/isNumeric';
|
import { isNumeric } from '@/utils/regexes/isNumeric';
|
||||||
import type { AuthMode, AuthType } from '../types/auth-types';
|
import type { AuthMode, AuthType } from '../types/auth-types';
|
||||||
import { isEmail } from '@/utils/regexes/isEmail';
|
import { isEmail } from '@/utils/regexes/isEmail';
|
||||||
|
import parsePhoneNumberFromString from 'libphonenumber-js';
|
||||||
|
|
||||||
export interface LoginRegisterFormProps {
|
export interface LoginRegisterFormProps {
|
||||||
authType: AuthType;
|
authType: AuthType;
|
||||||
@@ -49,13 +50,19 @@ export function LoginRegisterForm({
|
|||||||
setError(t('loginForm.thisFieldIsRequired'));
|
setError(t('loginForm.thisFieldIsRequired'));
|
||||||
} else if (authType === 'email' && !isEmail(value)) {
|
} else if (authType === 'email' && !isEmail(value)) {
|
||||||
setError(t('loginForm.emailIsInvalid'));
|
setError(t('loginForm.emailIsInvalid'));
|
||||||
} else if (authType === 'phone' && false /* TODO */) {
|
} else if (authType === 'phone' && !isPhoneValid(countryCode, value)) {
|
||||||
setError(t('loginForm.emailIsInvalid'));
|
setError(t('loginForm.phoneNumberIsInvalid'));
|
||||||
} else {
|
} else {
|
||||||
setError(undefined);
|
setError(undefined);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isPhoneValid = (code: string, phone: string) => {
|
||||||
|
const phoneNumber = parsePhoneNumberFromString(code + phone);
|
||||||
|
|
||||||
|
return phoneNumber && phoneNumber.isValid();
|
||||||
|
};
|
||||||
|
|
||||||
const isInputValid = (value: string, authType: AuthType): boolean => {
|
const isInputValid = (value: string, authType: AuthType): boolean => {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return false;
|
return false;
|
||||||
@@ -65,7 +72,7 @@ export function LoginRegisterForm({
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (authType === 'phone' && false /* TODO */) {
|
if (authType === 'phone' && !isPhoneValid(countryCode, value)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,16 +111,7 @@ export function LoginRegisterForm({
|
|||||||
slotProps={{
|
slotProps={{
|
||||||
htmlInput: { dir: 'auto', sx: { lineHeight: 1.5, paddingX: 0 } },
|
htmlInput: { dir: 'auto', sx: { lineHeight: 1.5, paddingX: 0 } },
|
||||||
input: {
|
input: {
|
||||||
startAdornment: dir === 'ltr' && (
|
endAdornment: (
|
||||||
<CountryCodeSelector
|
|
||||||
value={countryCode}
|
|
||||||
onChange={setCountryCode}
|
|
||||||
show={showAdornment}
|
|
||||||
menuAnchor={textFieldRef.current}
|
|
||||||
onCloseFocusRef={inputRef}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
endAdornment: dir === 'rtl' && (
|
|
||||||
<CountryCodeSelector
|
<CountryCodeSelector
|
||||||
value={countryCode}
|
value={countryCode}
|
||||||
onChange={setCountryCode}
|
onChange={setCountryCode}
|
||||||
|
|||||||
Reference in New Issue
Block a user