mirror of
https://github.com/bakhirev/assayo.git
synced 2025-04-08 02:39:14 +00:00
104 lines
3.2 KiB
TypeScript
104 lines
3.2 KiB
TypeScript
import React, { useMemo, useState } from 'react';
|
|
import { observer } from 'mobx-react-lite';
|
|
|
|
import dataGripStore from 'ts/store/DataGrip';
|
|
|
|
import ICommonPageProps from 'ts/components/Page/interfaces/CommonPageProps';
|
|
import DataLoader from 'ts/components/DataLoader';
|
|
import Pagination from 'ts/components/DataLoader/components/Pagination';
|
|
import { getFakeLoader } from 'ts/components/DataLoader/helpers/formatter';
|
|
import NothingFound from 'ts/components/NothingFound';
|
|
import Title from 'ts/components/Title';
|
|
import Countries from './components/Countries';
|
|
import CountryCharts from './components/Charts';
|
|
import fullScreen from 'ts/store/FullScreen';
|
|
|
|
import IFilters from './interfaces/Filters';
|
|
import Filters from './components/Filters';
|
|
import Travel from './components/Travel';
|
|
import CustomMap from './components/Map';
|
|
|
|
import { getCountryByAuthors, getDefaultFilters, getFilterForAuthors } from './helpers';
|
|
|
|
const Country = observer(({
|
|
mode,
|
|
}: ICommonPageProps): React.ReactElement | null => {
|
|
const [filters, setFilters] = useState<IFilters>(getDefaultFilters());
|
|
|
|
const dataGripAuthors = dataGripStore.dataGrip.author.statistic;
|
|
const authors = useMemo(() => (
|
|
dataGripAuthors.filter(getFilterForAuthors(filters))
|
|
), [dataGripAuthors, filters.hash]);
|
|
|
|
const dataGripCountries = dataGripStore.dataGrip.country.statistic;
|
|
const countries = useMemo(() => (
|
|
dataGripCountries.map(getCountryByAuthors(authors)).filter((v: any) => v)
|
|
), [dataGripCountries, filters.hash]);
|
|
|
|
const travel = useMemo(() => (
|
|
authors
|
|
.filter((dot: any) => dot?.country?.length)
|
|
.sort((a: any, b: any) => b?.country?.length - a?.country?.length)
|
|
), [authors, filters.hash]);
|
|
|
|
const canShowByCountries = (!fullScreen.isOpen || fullScreen.mode === 'countries');
|
|
const canShowByTravel = (!fullScreen.isOpen || fullScreen.mode === 'travel') && travel.length;
|
|
|
|
if (!dataGripCountries?.length) {
|
|
return mode !== 'print' ? (<NothingFound/>) : null;
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{!fullScreen.isOpen && (
|
|
<>
|
|
<Filters
|
|
filters={filters}
|
|
onChange={setFilters}
|
|
/>
|
|
<CustomMap authors={authors} />
|
|
<CountryCharts
|
|
authors={authors}
|
|
countries={countries}
|
|
/>
|
|
</>
|
|
)}
|
|
|
|
{canShowByCountries ? (
|
|
<>
|
|
<Title title="page.team.country.table.title"/>
|
|
<DataLoader
|
|
to="response"
|
|
loader={getFakeLoader(countries, mode)}
|
|
watch={`${mode}${dataGripStore.hash}${filters.hash}`}
|
|
>
|
|
<Countries
|
|
mode={mode}
|
|
rowsForExcel={countries}
|
|
/>
|
|
<Pagination/>
|
|
</DataLoader>
|
|
</>
|
|
) : null}
|
|
|
|
{canShowByTravel ? (
|
|
<>
|
|
<Title title="page.team.country.travel.title"/>
|
|
<DataLoader
|
|
to="response"
|
|
loader={getFakeLoader(travel, mode)}
|
|
watch={`${mode}${dataGripStore.hash}${filters.hash}`}
|
|
>
|
|
<Travel
|
|
mode={mode}
|
|
rowsForExcel={countries}
|
|
/>
|
|
<Pagination/>
|
|
</DataLoader>
|
|
</>
|
|
) : null}
|
|
</>
|
|
);
|
|
});
|
|
|
|
export default Country;
|