App.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import logo from "./logo.svg";
  2. import React, { useState } from "react";
  3. import "./App.css";
  4. const LoginForm = () => {
  5. const [login, setLogin] = useState("");
  6. const [password, setPassword] = useState("");
  7. const onLogin = () => {
  8. return !(login !== "" && password.match(/\w{8,30}$/));
  9. };
  10. return (
  11. <div className="formBlock">
  12. <p>Enter login:</p>
  13. <input
  14. type="text"
  15. value={login}
  16. onChange={(e) => setLogin(e.target.value)}
  17. />
  18. <p>Enter password:</p>
  19. <input
  20. type="password"
  21. value={password}
  22. onChange={(e) => setPassword(e.target.value)}
  23. />
  24. <button disabled={onLogin()}>Log In</button>
  25. </div>
  26. );
  27. };
  28. const cat = [
  29. {
  30. "_id": "62d57ab8b74e1f5f2ec1a148",
  31. "name": "Motorola Razr 5G 8/256GB Graphite",
  32. "price": 3500,
  33. },
  34. {
  35. "_id": "62d57c4db74e1f5f2ec1a14a",
  36. "name": "Смартфон Google Pixel 6 Pro 12/128GB Stormy Black",
  37. "price": 2800,
  38. },
  39. {
  40. "_id": "62d58318b74e1f5f2ec1a14e",
  41. "name": "Microsoft Surface Duo 2 8GB/256GB",
  42. "price": 4500,
  43. },
  44. {
  45. "_id": "62d5869bb74e1f5f2ec1a150",
  46. "name": "Смартфон Poco F3 6/128GB EU Arctic White",
  47. "price": 1800,
  48. },
  49. {
  50. "_id": "62d58810b74e1f5f2ec1a152",
  51. "name": "Мобильный телефон Xiaomi Redmi Note 9 4G (Redmi 9t EU)",
  52. "price": 800,
  53. },
  54. {
  55. "_id": "62d5a7deb74e1f5f2ec1a154",
  56. "name": "LG V50 black REF",
  57. "price": 900,
  58. }
  59. ]
  60. const rootCats = [
  61. {
  62. "name": "test3"
  63. },
  64. {
  65. "name": "Tools"
  66. },
  67. {
  68. "name": "Tomatoes"
  69. },
  70. {
  71. "name": "123"
  72. },
  73. {
  74. "name": "iPhone"
  75. },
  76. {
  77. "name": "Samsung"
  78. },
  79. {
  80. "name": "Smartphone"
  81. },
  82. {
  83. "name": "Large home appliances"
  84. },
  85. {
  86. "name": "Garden"
  87. },
  88. {
  89. "name": "Children's products"
  90. },
  91. {
  92. "name": " Hobbies and sports"
  93. },
  94. {
  95. "name": "Sale"
  96. }
  97. ]
  98. const CategoryMenu = () => {
  99. return (
  100. <>
  101. <aside id='aside'>
  102. <ul>
  103. {rootCats.map(cat => <CategoryMenuItem name={cat.name}/>)}
  104. </ul>
  105. </aside>
  106. </>
  107. );
  108. };
  109. const CategoryMenuItem = ({name}) => {
  110. return (
  111. <>
  112. <h2>{name}</h2>
  113. </>
  114. );
  115. };
  116. const Category = () => {
  117. return (
  118. <div className="cardBlock">
  119. {cat.map(item => <GoodCard name={item.name} price={item.price}/>)}
  120. </div>
  121. );
  122. };
  123. const GoodCard = ({name, price}) => {
  124. return (
  125. <div className='card'>
  126. <h3>{name}</h3>
  127. <h4>{price}</h4>
  128. </div>
  129. );
  130. };
  131. function App() {
  132. return (
  133. <div className="App">
  134. <LoginForm />
  135. <CategoryMenu />
  136. <Category />
  137. </div>
  138. );
  139. }
  140. export default App;