App.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. import logoDefault from './logo.svg';
  2. import {useEffect, useState, useRef} from "react";
  3. import React from 'react';
  4. import './App.scss';
  5. import pic1 from './pics/h1.jpg';
  6. import pic2 from './pics/h2.jpg';
  7. import pic3 from './pics/h3.jpg';
  8. import pic4 from './pics/h4.jpg';
  9. const countries = {
  10. "AF": "Afghanistan",
  11. "AX": "Aland Islands",
  12. "AL": "Albania",
  13. "DZ": "Algeria",
  14. "AS": "American Samoa",
  15. "AD": "Andorra",
  16. "AO": "Angola",
  17. "AI": "Anguilla",
  18. "AQ": "Antarctica",
  19. "AG": "Antigua And Barbuda",
  20. "AR": "Argentina",
  21. "AM": "Armenia",
  22. "AW": "Aruba",
  23. "AU": "Australia",
  24. "AT": "Austria",
  25. "AZ": "Azerbaijan",
  26. "BS": "Bahamas",
  27. "BH": "Bahrain",
  28. "BD": "Bangladesh",
  29. "BB": "Barbados",
  30. "BY": "Belarus",
  31. "BE": "Belgium",
  32. "BZ": "Belize",
  33. "BJ": "Benin",
  34. "BM": "Bermuda",
  35. "BT": "Bhutan",
  36. "BO": "Bolivia",
  37. "BA": "Bosnia And Herzegovina",
  38. "BW": "Botswana",
  39. "BV": "Bouvet Island",
  40. "BR": "Brazil",
  41. "IO": "British Indian Ocean Territory",
  42. "BN": "Brunei Darussalam",
  43. "BG": "Bulgaria",
  44. "BF": "Burkina Faso",
  45. "BI": "Burundi",
  46. "KH": "Cambodia",
  47. "CM": "Cameroon",
  48. "CA": "Canada",
  49. "CV": "Cape Verde",
  50. "KY": "Cayman Islands",
  51. "CF": "Central African Republic",
  52. "TD": "Chad",
  53. "CL": "Chile",
  54. "CN": "China",
  55. "CX": "Christmas Island",
  56. "CC": "Cocos (Keeling) Islands",
  57. "CO": "Colombia",
  58. "KM": "Comoros",
  59. "CG": "Congo",
  60. "CD": "Congo, Democratic Republic",
  61. "CK": "Cook Islands",
  62. "CR": "Costa Rica",
  63. "CI": "Cote D\"Ivoire",
  64. "HR": "Croatia",
  65. "CU": "Cuba",
  66. "CY": "Cyprus",
  67. "CZ": "Czech Republic",
  68. "DK": "Denmark",
  69. "DJ": "Djibouti",
  70. "DM": "Dominica",
  71. "DO": "Dominican Republic",
  72. "EC": "Ecuador",
  73. "EG": "Egypt",
  74. "SV": "El Salvador",
  75. "GQ": "Equatorial Guinea",
  76. "ER": "Eritrea",
  77. "EE": "Estonia",
  78. "ET": "Ethiopia",
  79. "FK": "Falkland Islands (Malvinas)",
  80. "FO": "Faroe Islands",
  81. "FJ": "Fiji",
  82. "FI": "Finland",
  83. "FR": "France",
  84. "GF": "French Guiana",
  85. "PF": "French Polynesia",
  86. "TF": "French Southern Territories",
  87. "GA": "Gabon",
  88. "GM": "Gambia",
  89. "GE": "Georgia",
  90. "DE": "Germany",
  91. "GH": "Ghana",
  92. "GI": "Gibraltar",
  93. "GR": "Greece",
  94. "GL": "Greenland",
  95. "GD": "Grenada",
  96. "GP": "Guadeloupe",
  97. "GU": "Guam",
  98. "GT": "Guatemala",
  99. "GG": "Guernsey",
  100. "GN": "Guinea",
  101. "GW": "Guinea-Bissau",
  102. "GY": "Guyana",
  103. "HT": "Haiti",
  104. "HM": "Heard Island & Mcdonald Islands",
  105. "VA": "Holy See (Vatican City State)",
  106. "HN": "Honduras",
  107. "HK": "Hong Kong",
  108. "HU": "Hungary",
  109. "IS": "Iceland",
  110. "IN": "India",
  111. "ID": "Indonesia",
  112. "IR": "Iran, Islamic Republic Of",
  113. "IQ": "Iraq",
  114. "IE": "Ireland",
  115. "IM": "Isle Of Man",
  116. "IL": "Israel",
  117. "IT": "Italy",
  118. "JM": "Jamaica",
  119. "JP": "Japan",
  120. "JE": "Jersey",
  121. "JO": "Jordan",
  122. "KZ": "Kazakhstan",
  123. "KE": "Kenya",
  124. "KI": "Kiribati",
  125. "KR": "Korea",
  126. "KP": "North Korea",
  127. "KW": "Kuwait",
  128. "KG": "Kyrgyzstan",
  129. "LA": "Lao People\"s Democratic Republic",
  130. "LV": "Latvia",
  131. "LB": "Lebanon",
  132. "LS": "Lesotho",
  133. "LR": "Liberia",
  134. "LY": "Libyan Arab Jamahiriya",
  135. "LI": "Liechtenstein",
  136. "LT": "Lithuania",
  137. "LU": "Luxembourg",
  138. "MO": "Macao",
  139. "MK": "Macedonia",
  140. "MG": "Madagascar",
  141. "MW": "Malawi",
  142. "MY": "Malaysia",
  143. "MV": "Maldives",
  144. "ML": "Mali",
  145. "MT": "Malta",
  146. "MH": "Marshall Islands",
  147. "MQ": "Martinique",
  148. "MR": "Mauritania",
  149. "MU": "Mauritius",
  150. "YT": "Mayotte",
  151. "MX": "Mexico",
  152. "FM": "Micronesia, Federated States Of",
  153. "MD": "Moldova",
  154. "MC": "Monaco",
  155. "MN": "Mongolia",
  156. "ME": "Montenegro",
  157. "MS": "Montserrat",
  158. "MA": "Morocco",
  159. "MZ": "Mozambique",
  160. "MM": "Myanmar",
  161. "NA": "Namibia",
  162. "NR": "Nauru",
  163. "NP": "Nepal",
  164. "NL": "Netherlands",
  165. "AN": "Netherlands Antilles",
  166. "NC": "New Caledonia",
  167. "NZ": "New Zealand",
  168. "NI": "Nicaragua",
  169. "NE": "Niger",
  170. "NG": "Nigeria",
  171. "NU": "Niue",
  172. "NF": "Norfolk Island",
  173. "MP": "Northern Mariana Islands",
  174. "NO": "Norway",
  175. "OM": "Oman",
  176. "PK": "Pakistan",
  177. "PW": "Palau",
  178. "PS": "Palestinian Territory, Occupied",
  179. "PA": "Panama",
  180. "PG": "Papua New Guinea",
  181. "PY": "Paraguay",
  182. "PE": "Peru",
  183. "PH": "Philippines",
  184. "PN": "Pitcairn",
  185. "PL": "Poland",
  186. "PT": "Portugal",
  187. "PR": "Puerto Rico",
  188. "QA": "Qatar",
  189. "RE": "Reunion",
  190. "RO": "Romania",
  191. "RU": "Russian Federation",
  192. "RW": "Rwanda",
  193. "BL": "Saint Barthelemy",
  194. "SH": "Saint Helena",
  195. "KN": "Saint Kitts And Nevis",
  196. "LC": "Saint Lucia",
  197. "MF": "Saint Martin",
  198. "PM": "Saint Pierre And Miquelon",
  199. "VC": "Saint Vincent And Grenadines",
  200. "WS": "Samoa",
  201. "SM": "San Marino",
  202. "ST": "Sao Tome And Principe",
  203. "SA": "Saudi Arabia",
  204. "SN": "Senegal",
  205. "RS": "Serbia",
  206. "SC": "Seychelles",
  207. "SL": "Sierra Leone",
  208. "SG": "Singapore",
  209. "SK": "Slovakia",
  210. "SI": "Slovenia",
  211. "SB": "Solomon Islands",
  212. "SO": "Somalia",
  213. "ZA": "South Africa",
  214. "GS": "South Georgia And Sandwich Isl.",
  215. "ES": "Spain",
  216. "LK": "Sri Lanka",
  217. "SD": "Sudan",
  218. "SR": "Suriname",
  219. "SJ": "Svalbard And Jan Mayen",
  220. "SZ": "Swaziland",
  221. "SE": "Sweden",
  222. "CH": "Switzerland",
  223. "SY": "Syrian Arab Republic",
  224. "TW": "Taiwan",
  225. "TJ": "Tajikistan",
  226. "TZ": "Tanzania",
  227. "TH": "Thailand",
  228. "TL": "Timor-Leste",
  229. "TG": "Togo",
  230. "TK": "Tokelau",
  231. "TO": "Tonga",
  232. "TT": "Trinidad And Tobago",
  233. "TN": "Tunisia",
  234. "TR": "Turkey",
  235. "TM": "Turkmenistan",
  236. "TC": "Turks And Caicos Islands",
  237. "TV": "Tuvalu",
  238. "UG": "Uganda",
  239. "UA": "Ukraine",
  240. "AE": "United Arab Emirates",
  241. "GB": "United Kingdom",
  242. "US": "United States",
  243. "UM": "United States Outlying Islands",
  244. "UY": "Uruguay",
  245. "UZ": "Uzbekistan",
  246. "VU": "Vanuatu",
  247. "VE": "Venezuela",
  248. "VN": "Vietnam",
  249. "VG": "Virgin Islands, British",
  250. "VI": "Virgin Islands, U.S.",
  251. "WF": "Wallis And Futuna",
  252. "EH": "Western Sahara",
  253. "YE": "Yemen",
  254. "ZM": "Zambia",
  255. "ZW": "Zimbabwe"
  256. }
  257. const MySelect = ({option=countries, value='ZW', onChange}) => {
  258. //тут отдать value и onChange.
  259. //При изменении во внешний onChange надо передавать
  260. //выбранный ключ из обьекта options
  261. //смочь нарисовать все option c value и текстом
  262. return (
  263. <select value={value} onChange={value => onChange(value.target.value)}>
  264. {Object.entries(option).map(item => <option value={item[0]}>{item[1]}</option>)}
  265. </select>
  266. )
  267. }
  268. const Dots = ({active, count, onClick}) => {
  269. //рисует count точечек
  270. //другим стилем визуально выделяет точечку с номером active
  271. //по клику на точечку запускает onClick и отдает в него номер текущей выбранной
  272. //у компонента State нет (компонент управляемый, рулится из Gallery)
  273. let arr = Array(count).fill(0)
  274. return (
  275. <div className='Dots'>
  276. {arr.map((value, index) =>
  277. <div className={`DotsFon ${index === active && 'DotsFon--active'}`}
  278. onClick={() => onClick(index)}/>
  279. )}
  280. </div>
  281. )
  282. }
  283. const Gallery = ({images=[pic1, pic2, pic3, pic4]})=>{
  284. //придумать состояние и причины для его изменения
  285. //в зависимости от состояния картинка в img должна меняться
  286. //прикрутить точечки для иллюстрации какая картинка сейчас выбрана
  287. //им так же сделать onclick для мгновенного перехода на любую картинку
  288. //тОчечки:
  289. //отдать нужные настройки: count, active, onClick
  290. let [num, setNum] = useState(0);
  291. return(
  292. <div className='Gallery'>
  293. <img src={images[num]}/>
  294. <Dots active={num} count={images.length} onClick={e => setNum(e)}/>
  295. <button onClick={()=>setNum(num <= 0 ? images.length-1 : num - 1)}>предыдущая</button>
  296. <button onClick={()=>setNum(num < images.length-1 ? num + 1 : 0)}>следующая</button>
  297. </div>
  298. )
  299. }
  300. function App() {
  301. const [country, setCountry] = useState('UA');
  302. console.log(country)
  303. return (
  304. <div className="App">
  305. <MySelect value={country} onChange={newCountry => setCountry(newCountry)}/>
  306. <Gallery />
  307. </div>
  308. );
  309. }
  310. export default App;