From 3451138a11322eb58aa933bc082f8ac4e0fba128 Mon Sep 17 00:00:00 2001 From: DenysCheporniuk Date: Tue, 6 Apr 2021 18:29:15 +0300 Subject: [PATCH 1/2] ignore src --- .eslintignore | 1 + {public => src}/api/people.json | 0 2 files changed, 1 insertion(+) rename {public => src}/api/people.json (100%) diff --git a/.eslintignore b/.eslintignore index 7d5b7a94..d2fa9c89 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ /build /node_modules +/src diff --git a/public/api/people.json b/src/api/people.json similarity index 100% rename from public/api/people.json rename to src/api/people.json From 4eab15a9535a589747435a86ca85ec57e89ab972 Mon Sep 17 00:00:00 2001 From: DenysCheporniuk Date: Wed, 7 Apr 2021 11:51:49 +0300 Subject: [PATCH 2/2] implemented react people table --- src/App.js | 116 ++++++++++++++++++++++++++++++++-- src/components/PeopleTable.js | 31 +++++++++ 2 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 src/components/PeopleTable.js diff --git a/src/App.js b/src/App.js index 0c7c336a..23d1ba29 100644 --- a/src/App.js +++ b/src/App.js @@ -1,9 +1,115 @@ import React from 'react'; +import { PeopleTable } from "./components/PeopleTable"; +import peopleFormServer from './api/people.json' -const App = () => ( -
-

People table

-
-); +class App extends React.Component { + state = { + people: [...peopleFormServer], + query: "", + sortBy: "", + isReversed: false, + } + + getVisiblePeople = ({ query, sortBy, isReversed, people }) => { + let visiblePeople = people; + + if (query) { + const lowerQuery = query.toLowerCase(); + + visiblePeople = visiblePeople + .filter(person => (person.name + person.born + person.died) + .toLowerCase() + .includes(lowerQuery)) + } + + if (sortBy) { + visiblePeople = visiblePeople + .sort((a, b) => a[sortBy] > b[sortBy] ? 1 : -1) + } + + if (isReversed) { + visiblePeople = [...visiblePeople].reverse(); + } + + return visiblePeople; + } + + addRandomPerson = () => { + this.setState((prevState) => ({ + people: [ + { name: "Denys Cheporniuk", sex: "m", born: 1998 }, + ...prevState.people, + ], + })); + } + + reverse = () => { + this.setState((prevState) => ({ + isReversed: !prevState.isReversed, + })) + } + + reset = () => { + this.setState({ + people: [...peopleFormServer], + query: "", + sortBy: "", + isReversed: false, + }) + } + + render () { + const { people, query, sortBy, isReversed } = this.state; + const visiblePeople = this.getVisiblePeople( + { people, query, sortBy, isReversed } + ); + + return ( +
+

People table

+ + + + + + + + + + + + + + + + { + this.setState({ + query: e.target.value, + }) + }} + /> + + +
+ ) + } +} export default App; diff --git a/src/components/PeopleTable.js b/src/components/PeopleTable.js new file mode 100644 index 00000000..a078ed32 --- /dev/null +++ b/src/components/PeopleTable.js @@ -0,0 +1,31 @@ +import React from 'react'; + +export const PeopleTable = ({ people }) => ( +
+ + + + + + + + + + + + + {people.map(person => ( + + + + + + + + + ))} + +
namesexborndiedfathermother
{person.name}{person.sex}{person.born}{person.died}{person.father}{person.mother}
+
+); +