-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
table_advansed #639
table_advansed #639
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
export const HomePage = () => { | ||
return ( | ||
<h1 className="title">Home Page</h1> | ||
); | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
export const NotFoundPage = () => { | ||
return ( | ||
<h1 className="title">Page not found</h1> | ||
); | ||
}; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,12 +1,102 @@ | ||||||||||||||||||||||||||||||||||||
import { useEffect, useState } from 'react'; | ||||||||||||||||||||||||||||||||||||
import { useParams, useSearchParams } from 'react-router-dom'; | ||||||||||||||||||||||||||||||||||||
import { PeopleFilters } from './PeopleFilters'; | ||||||||||||||||||||||||||||||||||||
import { Loader } from './Loader'; | ||||||||||||||||||||||||||||||||||||
import { PeopleTable } from './PeopleTable'; | ||||||||||||||||||||||||||||||||||||
import { PersonType } from '../types'; | ||||||||||||||||||||||||||||||||||||
import { getPeople } from '../api'; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const peopleOnServer = (people: PersonType[]) => { | ||||||||||||||||||||||||||||||||||||
return people.map(person => { | ||||||||||||||||||||||||||||||||||||
const mother = people.find(pers => pers.name === person.motherName); | ||||||||||||||||||||||||||||||||||||
const father = people.find(pers => pers.name === person.fatherName); | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
return ({ | ||||||||||||||||||||||||||||||||||||
...person, | ||||||||||||||||||||||||||||||||||||
mother, | ||||||||||||||||||||||||||||||||||||
father, | ||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
export const PeoplePage = () => { | ||||||||||||||||||||||||||||||||||||
const [people, setPeople] = useState<PersonType[]>([]); | ||||||||||||||||||||||||||||||||||||
const [loading, setLoading] = useState(false); | ||||||||||||||||||||||||||||||||||||
const [error, setError] = useState(false); | ||||||||||||||||||||||||||||||||||||
const [searchParams] = useSearchParams(); | ||||||||||||||||||||||||||||||||||||
const { slug } = useParams(); | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
useEffect(() => { | ||||||||||||||||||||||||||||||||||||
setLoading(true); | ||||||||||||||||||||||||||||||||||||
getPeople() | ||||||||||||||||||||||||||||||||||||
.then(peopleOnServer) | ||||||||||||||||||||||||||||||||||||
.then(preparedPeople => setPeople(preparedPeople)) | ||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
we can simplify it |
||||||||||||||||||||||||||||||||||||
.catch(() => setError(true)) | ||||||||||||||||||||||||||||||||||||
.finally(() => setLoading(false)); | ||||||||||||||||||||||||||||||||||||
}, []); | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const preparedPeople = () => { | ||||||||||||||||||||||||||||||||||||
const sort = searchParams.get('sort'); | ||||||||||||||||||||||||||||||||||||
const order = searchParams.get('order'); | ||||||||||||||||||||||||||||||||||||
const sex = searchParams.get('sex'); | ||||||||||||||||||||||||||||||||||||
const query = searchParams.get('query')?.trim().toLocaleLowerCase(); | ||||||||||||||||||||||||||||||||||||
const centuries = searchParams.getAll('centuries'); | ||||||||||||||||||||||||||||||||||||
let prepared = [...people]; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
if (query) { | ||||||||||||||||||||||||||||||||||||
prepared = prepared.filter(elem => elem.name.toLowerCase() | ||||||||||||||||||||||||||||||||||||
.includes(query) | ||||||||||||||||||||||||||||||||||||
|| elem.motherName?.toLowerCase().includes(query) | ||||||||||||||||||||||||||||||||||||
|| elem.fatherName?.toLowerCase().includes(query)); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
if (sex) { | ||||||||||||||||||||||||||||||||||||
prepared = prepared.filter(elem => elem.sex === sex); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
if (centuries && centuries.length > 0) { | ||||||||||||||||||||||||||||||||||||
prepared = prepared.filter(elem => ( | ||||||||||||||||||||||||||||||||||||
centuries?.includes(Math.ceil(elem.born / 100).toString()))); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
if (sort) { | ||||||||||||||||||||||||||||||||||||
switch (sort) { | ||||||||||||||||||||||||||||||||||||
case 'name': | ||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||
prepared.sort((a, b) => a.name.localeCompare(b.name)); | ||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
case 'sex': | ||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||
prepared.sort((a, b) => a.sex.localeCompare(b.sex)); | ||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
you can group some cases |
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
case 'born': { | ||||||||||||||||||||||||||||||||||||
prepared.sort((a, b) => a.born - b.born); | ||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
case 'died': { | ||||||||||||||||||||||||||||||||||||
prepared.sort((a, b) => a.died - b.died); | ||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same here |
||||||||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
if (order) { | ||||||||||||||||||||||||||||||||||||
prepared.reverse(); | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
return prepared; | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||
<> | ||||||||||||||||||||||||||||||||||||
<h1 className="title">People Page</h1> | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
<div className="block"> | ||||||||||||||||||||||||||||||||||||
<div className="columns is-desktop is-flex-direction-row-reverse"> | ||||||||||||||||||||||||||||||||||||
<div className="column is-7-tablet is-narrow-desktop"> | ||||||||||||||||||||||||||||||||||||
|
@@ -15,17 +105,29 @@ export const PeoplePage = () => { | |||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
<div className="column"> | ||||||||||||||||||||||||||||||||||||
<div className="box table-container"> | ||||||||||||||||||||||||||||||||||||
<Loader /> | ||||||||||||||||||||||||||||||||||||
{loading && ( | ||||||||||||||||||||||||||||||||||||
<Loader /> | ||||||||||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
<p data-cy="peopleLoadingError">Something went wrong</p> | ||||||||||||||||||||||||||||||||||||
{error && ( | ||||||||||||||||||||||||||||||||||||
<p data-cy="peopleLoadingError" className="has-text-danger"> | ||||||||||||||||||||||||||||||||||||
Something went wrong | ||||||||||||||||||||||||||||||||||||
</p> | ||||||||||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
<p data-cy="noPeopleMessage"> | ||||||||||||||||||||||||||||||||||||
There are no people on the server | ||||||||||||||||||||||||||||||||||||
</p> | ||||||||||||||||||||||||||||||||||||
{!loading && !people.length && ( | ||||||||||||||||||||||||||||||||||||
<p data-cy="noPeopleMessage"> | ||||||||||||||||||||||||||||||||||||
There are no people on the server | ||||||||||||||||||||||||||||||||||||
</p> | ||||||||||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
<p>There are no people matching the current search criteria</p> | ||||||||||||||||||||||||||||||||||||
{(!preparedPeople().length && !loading) && ( | ||||||||||||||||||||||||||||||||||||
<p>There are no people matching the current search criteria</p> | ||||||||||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
<PeopleTable /> | ||||||||||||||||||||||||||||||||||||
{people.length > 0 && ( | ||||||||||||||||||||||||||||||||||||
<PeopleTable people={preparedPeople()} Slug={slug} /> | ||||||||||||||||||||||||||||||||||||
MaksymKos marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggest to make enum for all possible searchParams