Olga1108 4 years ago
parent
commit
b03ca75b47

File diff suppressed because it is too large
+ 1 - 0
.eslintcache


+ 29 - 27
src/App.css

@@ -1,38 +1,40 @@
-.App {
-  text-align: center;
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
 }
 
-.App-logo {
-  height: 40vmin;
-  pointer-events: none;
+.wrapper {
+  position: relative;
+  max-width: 100%;
+  overflow: hidden;
 }
 
-@media (prefers-reduced-motion: no-preference) {
-  .App-logo {
-    animation: App-logo-spin infinite 20s linear;
-  }
+.container {
+  width: 100%;
+  max-width: 1400px;
+  margin: 0 auto;
+  padding: 0 15px;
 }
 
-.App-header {
-  background-color: #282c34;
-  min-height: 100vh;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  font-size: calc(10px + 2vmin);
-  color: white;
+body {
+  margin: 0;
 }
 
-.App-link {
-  color: #61dafb;
+img {
+  width: 100px;
 }
 
-@keyframes App-logo-spin {
-  from {
-    transform: rotate(0deg);
-  }
-  to {
-    transform: rotate(360deg);
-  }
+.listOfItems {
+  width: 100%;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+  flex-wrap: wrap;
 }
+
+.item {
+  width: 45%;
+  height: 400px;
+  padding: 10px 20px;
+}

+ 0 - 25
src/App.js

@@ -1,25 +0,0 @@
-import logo from './logo.svg';
-import './App.css';
-
-function App() {
-  return (
-    <div className="App">
-      <header className="App-header">
-        <img src={logo} className="App-logo" alt="logo" />
-        <p>
-          Edit <code>src/App.js</code> and save to reload.
-        </p>
-        <a
-          className="App-link"
-          href="https://reactjs.org"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          Learn React
-        </a>
-      </header>
-    </div>
-  );
-}
-
-export default App;

+ 54 - 0
src/App.jsx

@@ -0,0 +1,54 @@
+import React, {useState} from 'react';
+import {userData} from './userData'
+import Item from './components/Item'
+import Header from './components/Header'
+import Modal from './components/Modal'
+import './App.css';
+
+
+
+
+
+
+
+
+const App = () => {
+
+  const [usersArr, setUsersArr] = useState([...userData]);
+
+  const handleSearchName = (value) => {
+    const foundUserName = usersArr.filter(user => user.name.toLocaleLowerCase().includes(value.toLocaleLowerCase()));
+    setUsersArr(foundUserName);
+  }
+
+  const handleSortAge = (value) => {
+    let sortAge = [...usersArr].sort((a, b) => {
+      if (value === 'ascending') {
+        return a.age - b.age;
+      } else if (value === 'descending') {
+        return b.age - a.age;
+      }
+      return setUsersArr(userData);
+    });
+    setUsersArr(sortAge);
+  }
+
+  const handleRefresh = () => {
+    setUsersArr(userData);
+  }
+  
+  return (
+    <div className="wrapper">
+      <Header handleSearchName={handleSearchName} handleSortAge={handleSortAge} handleRefresh={handleRefresh}/>
+      <div className="listOfItems">
+        {usersArr.map((user) => {
+          return <Item {...user} key={user._id}/>
+        })
+
+        }
+      </div>
+    </div>
+  );
+}
+
+export default App;

+ 0 - 8
src/App.test.js

@@ -1,8 +0,0 @@
-import { render, screen } from '@testing-library/react';
-import App from './App';
-
-test('renders learn react link', () => {
-  render(<App />);
-  const linkElement = screen.getByText(/learn react/i);
-  expect(linkElement).toBeInTheDocument();
-});

+ 35 - 0
src/components/Header/Header.jsx

@@ -0,0 +1,35 @@
+import React from 'react';
+import './header.css';
+
+const Header = ({handleSearchName, handleSortAge, handleRefresh}) => {
+
+const clear = (e) => {
+    handleRefresh ();
+    e.target.closest("form").reset()
+}
+
+return (
+    <header className="container-header">
+        <div className="container">
+            <form>
+                <input 
+                    type="search"
+                    name="search"
+                    placeholder="Enter name"
+                    onChange={(e) => handleSearchName(e.target.value)}
+                />
+                <select name="age" onChange={(e) => handleSortAge(e.target.value)}>
+                    <option value="default">default</option>
+                    <option value="ascending">ascending</option>
+                    <option value="descending">descending</option>
+                </select>
+                <button className="clear" onClick={clear}>Clear</button>
+            </form>
+        </div>
+    </header>
+)
+      
+}
+
+
+export default Header;

+ 0 - 0
src/components/Header/header.css


+ 2 - 0
src/components/Header/index.js

@@ -0,0 +1,2 @@
+import Header from './Header';
+export default Header;

+ 21 - 0
src/components/Item/Item.jsx

@@ -0,0 +1,21 @@
+import React from 'react';
+// import Modal from '../Modal'
+import './item.css';
+const Item = (props) => {
+
+  // const [isOpenModalWindow, setOpenModalWindow] = useState(false);
+  
+    return (
+      
+          <div className="item">
+            <img src={props.picture} alt='#'/>
+            <h2>Name: {props.name}</h2>
+            <p>Age: {props.age}</p>
+            <p>Gender: {props.gender}</p>
+            <p>Balance: {props.balance}</p>
+          </div>
+        
+        );
+  }
+
+  export default Item;

+ 2 - 0
src/components/Item/index.js

@@ -0,0 +1,2 @@
+import Item from './Item'
+export default Item;

+ 6 - 0
src/components/Item/item.css

@@ -0,0 +1,6 @@
+.item {
+    width: 45%;
+    height: 400px;
+    box-sizing: border-box;
+    padding: 10px 20px;
+}

+ 29 - 0
src/components/Modal/Modal.jsx

@@ -0,0 +1,29 @@
+import React from 'react';
+import './modal.css';
+
+const Modal = ({props, handeModal}) => {
+    const closeWindow = (e) => {
+        if (e.target.classList.contains("modal")) {
+            handeModal();
+        }
+    }
+
+    return (
+        <div className="modal_window" onClick={closeWindow}>
+            <span className="close" onClick={handeModal}>X</span>
+            <h3>{props.name}</h3>
+            <p>Age: {props.age}</p>
+            <p>Gender: {props.gender}</p>
+            <p>Balance: {props.balance}</p>
+            <p>Company: {props.company}</p>
+            <p>Email: {props.email}</p>
+            <p>Phone: {props.phone}</p>
+            <p>Address: {props.address}</p>
+            <p>Registered: {props.registered}</p>
+            <p>Eye color: {props.eyeColor}</p>
+            <p>{props.isActive}</p>
+        </div>
+    )
+}
+
+export default Modal;

+ 0 - 0
src/components/Modal/index.js


+ 0 - 0
src/components/Modal/modal.css


+ 0 - 13
src/index.css

@@ -1,13 +0,0 @@
-body {
-  margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-    sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-code {
-  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
-    monospace;
-}

+ 2 - 7
src/index.js

@@ -2,16 +2,11 @@ import React from 'react';
 import ReactDOM from 'react-dom';
 import './index.css';
 import App from './App';
-import reportWebVitals from './reportWebVitals';
+
 
 ReactDOM.render(
   <React.StrictMode>
     <App />
   </React.StrictMode>,
   document.getElementById('root')
-);
-
-// If you want to start measuring performance in your app, pass a function
-// to log results (for example: reportWebVitals(console.log))
-// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
-reportWebVitals();
+);

File diff suppressed because it is too large
+ 0 - 1
src/logo.svg


+ 0 - 13
src/reportWebVitals.js

@@ -1,13 +0,0 @@
-const reportWebVitals = onPerfEntry => {
-  if (onPerfEntry && onPerfEntry instanceof Function) {
-    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
-      getCLS(onPerfEntry);
-      getFID(onPerfEntry);
-      getFCP(onPerfEntry);
-      getLCP(onPerfEntry);
-      getTTFB(onPerfEntry);
-    });
-  }
-};
-
-export default reportWebVitals;

+ 0 - 5
src/setupTests.js

@@ -1,5 +0,0 @@
-// jest-dom adds custom jest matchers for asserting on DOM nodes.
-// allows you to do things like:
-// expect(element).toHaveTextContent(/react/i)
-// learn more: https://github.com/testing-library/jest-dom
-import '@testing-library/jest-dom';

File diff suppressed because it is too large
+ 573 - 0
src/userData.js