import './App.css'; import { useEffect, useState } from 'react'; let countries = { "AF": "Afghanistan", "AX": "Ă…land Islands", "AL": "Albania", "DZ": "Algeria", "AS": "American Samoa", "AD": "AndorrA", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarctica", "AG": "Antigua and Barbuda", "AR": "Argentina", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "AZ": "Azerbaijan", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BY": "Belarus", "BE": "Belgium", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnia and Herzegovina", "BW": "Botswana", "BV": "Bouvet Island", "BR": "Brazil", "IO": "British Indian Ocean Territory", "BN": "Brunei Darussalam", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "KH": "Cambodia", "CM": "Cameroon", "CA": "Canada", "CV": "Cape Verde", "KY": "Cayman Islands", "CF": "Central African Republic", "TD": "Chad", "CL": "Chile", "CN": "China", "CX": "Christmas Island", "CC": "Cocos (Keeling) Islands", "CO": "Colombia", "KM": "Comoros", "CG": "Congo", "CD": "Congo, Democratic Republic", "CK": "Cook Islands", "CR": "Costa Rica", "CI": "Cote D\"Ivoire", "HR": "Croatia", "CU": "Cuba", "CY": "Cyprus", "CZ": "Czech Republic", "DK": "Denmark", "DJ": "Djibouti", "DM": "Dominica", "DO": "Dominican Republic", "EC": "Ecuador", "EG": "Egypt", "SV": "El Salvador", "GQ": "Equatorial Guinea", "ER": "Eritrea", "EE": "Estonia", "ET": "Ethiopia", "FK": "Falkland Islands (Malvinas)", "FO": "Faroe Islands", "FJ": "Fiji", "FI": "Finland", "FR": "France", "GF": "French Guiana", "PF": "French Polynesia", "TF": "French Southern Territories", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "DE": "Germany", "GH": "Ghana", "GI": "Gibraltar", "GR": "Greece", "GL": "Greenland", "GD": "Grenada", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard Island and Mcdonald Islands", "VA": "Holy See (Vatican City State)", "HN": "Honduras", "HK": "Hong Kong", "HU": "Hungary", "IS": "Iceland", "IN": "India", "ID": "Indonesia", "IR": "Iran", "IQ": "Iraq", "IE": "Ireland", "IM": "Isle of Man", "IL": "Israel", "IT": "Italy", "JM": "Jamaica", "JP": "Japan", "JE": "Jersey", "JO": "Jordan", "KZ": "Kazakhstan", "KE": "Kenya", "KI": "Kiribati", "KP": "Korea (North)", "KR": "Korea (South)", "XK": "Kosovo", "KW": "Kuwait", "KG": "Kyrgyzstan", "LA": "Laos", "LV": "Latvia", "LB": "Lebanon", "LS": "Lesotho", "LR": "Liberia", "LY": "Libyan Arab Jamahiriya", "LI": "Liechtenstein", "LT": "Lithuania", "LU": "Luxembourg", "MO": "Macao", "MK": "Macedonia", "MG": "Madagascar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldives", "ML": "Mali", "MT": "Malta", "MH": "Marshall Islands", "MQ": "Martinique", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexico", "FM": "Micronesia", "MD": "Moldova", "MC": "Monaco", "MN": "Mongolia", "MS": "Montserrat", "MA": "Morocco", "MZ": "Mozambique", "MM": "Myanmar", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NL": "Netherlands", "AN": "Netherlands Antilles", "NC": "New Caledonia", "NZ": "New Zealand", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "NF": "Norfolk Island", "MP": "Northern Mariana Islands", "NO": "Norway", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PS": "Palestinian Territory, Occupied", "PA": "Panama", "PG": "Papua New Guinea", "PY": "Paraguay", "PE": "Peru", "PH": "Philippines", "PN": "Pitcairn", "PL": "Poland", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "RE": "Reunion", "RO": "Romania", "RU": "Russian Federation", "RW": "Rwanda", "SH": "Saint Helena", "KN": "Saint Kitts and Nevis", "LC": "Saint Lucia", "PM": "Saint Pierre and Miquelon", "VC": "Saint Vincent and the Grenadines", "WS": "Samoa", "SM": "San Marino", "ST": "Sao Tome and Principe", "SA": "Saudi Arabia", "SN": "Senegal", "RS": "Serbia", "ME": "Montenegro", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapore", "SK": "Slovakia", "SI": "Slovenia", "SB": "Solomon Islands", "SO": "Somalia", "ZA": "South Africa", "GS": "South Georgia and the South Sandwich Islands", "ES": "Spain", "LK": "Sri Lanka", "SD": "Sudan", "SR": "Suriname", "SJ": "Svalbard and Jan Mayen", "SZ": "Swaziland", "SE": "Sweden", "CH": "Switzerland", "SY": "Syrian Arab Republic", "TW": "Taiwan, Province of China", "TJ": "Tajikistan", "TZ": "Tanzania", "TH": "Thailand", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad and Tobago", "TN": "Tunisia", "TR": "Turkey", "TM": "Turkmenistan", "TC": "Turks and Caicos Islands", "TV": "Tuvalu", "UG": "Uganda", "UA": "Ukraine", "AE": "United Arab Emirates", "GB": "United Kingdom", "US": "United States", "UM": "United States Minor Outlying Islands", "UY": "Uruguay", "UZ": "Uzbekistan", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Viet Nam", "VG": "Virgin Islands, British", "VI": "Virgin Islands, U.S.", "WF": "Wallis and Futuna", "EH": "Western Sahara", "YE": "Yemen", "ZM": "Zambia", "ZW": "Zimbabwe" } const MySelect = ({ options = countries, value = 'YE', onChange }) => { return ( ) } const PhoneBookEntry = ({ data: { name, phone } = { name: '', phone: '' }, key='', onChange, onMoveUp, onMoveDown, onDelete, onAdd }) => <> onChange({name:e.target.value, phone})} /> onChange({name, phone:e.target.value})} />
const defaultPeople = [ { name: 'John', phone: '102' }, { name: 'Paul', phone: '103' }, { name: 'Bob', phone: '111' }, { name: 'Marshall', phone: '313' } ] const PhoneBook = ({ people = defaultPeople}) => { const [ppl, setPpl] = useState(people) const [keys, setKeys] = useState(people.map(() => Math.random())) const [name, setName] = useState('') const [phone, setPhone] = useState('') useEffect(() => { setPpl(people) setKeys(keys) }, [keys, people]) const onChange = (newData, i) => { let newPpl = [] ppl.forEach((item, index) => { if(index === i) { newPpl.push(newData) } else { newPpl.push(item) } }) setPpl(newPpl) } const onAdd = (newData, i) => { let newArr = [] ppl.forEach(item => newArr.push(item)) i === 'start'? newArr.unshift(newData) : newArr.splice(i+1, 0, newData) setPpl(newArr) keys.splice(i ,0, Math.random()) } const onDelete = (i) => { setPpl(ppl.filter((item)=> item.name !== i.name && item.phone !== i.phone ) ) keys.splice(i.key,1) } const onMoveUp = (index) => { let newArr = [] ppl.forEach(item => newArr.push(item)) let temp = newArr[index] let tempKey = keys[index] if(index === 0) { newArr[index] = newArr[newArr.length - 1] newArr[newArr.length - 1] = temp keys[index] = keys[0] keys[0] = tempKey } else { newArr[index] = newArr[index - 1] newArr[index - 1] = temp keys[index] = keys[index - 1] keys[index - 1] = tempKey } setPpl(newArr) } const onMoveDown = (index) => { let newArr = [] ppl.forEach(item => newArr.push(item)) let temp = newArr[index] let tempKey = keys[index] if(index === newArr.length - 1) { newArr[index] = newArr[0] newArr[0] = temp keys[index] = keys[0] keys[0] = tempKey } else { newArr[index] = newArr[index + 1] newArr[index + 1] = temp keys[index] = keys[index + 1] keys[index + 1] = tempKey } setPpl(newArr) } console.log('keys',keys) console.log('people',ppl) return ( <> setName(e.target.value)} /> setPhone(e.target.value)} />
{ppl.map((data,index) => onChange(data, index)} onDelete={() => onDelete(data)} onAdd={() => onAdd({name, phone}, index)} onMoveDown={() => onMoveDown(index)} onMoveUp={() => onMoveUp(index)} />) }
) } function App() { const [code, setCode] = useState("UA") return (
setCode(item)} />

{code}

); } export default App;