Newer
Older
import { useAppDispatch } from '@/redux/hooks/useAppDispatch';
import { getPublications } from '@/redux/publications/publications.thunks';
import { useEffect, useMemo } from 'react';
import { publicationsListDataSelector } from '@/redux/publications/publications.selectors';
import { useAppSelector } from '@/redux/hooks/useAppSelector';
import { modelsNameMapSelector } from '@/redux/models/models.selectors';
import { FIRST_ARRAY_ELEMENT } from '@/constants/common';
import { LoadingIndicator } from '@/shared/LoadingIndicator';
import {
PublicationsTable,
PublicationsTableData,
} from './PublicationsTable/PublicationsTable.component';
import { PublicationsModalLayout } from './PublicationsModalLayout';
export const PublicationsModal = (): JSX.Element => {
const dispatch = useAppDispatch();
const data = useAppSelector(publicationsListDataSelector);
const mapsNames = useAppSelector(modelsNameMapSelector);
const parsedData: PublicationsTableData[] | undefined = useMemo(() => {
const dd = data?.map(item => ({
pubmedId: item.publication.article.pubmedId,
title: item.publication.article.title,
authors: item.publication.article.authors,
journal: item.publication.article.journal,
year: item.publication.article.year,
elementsOnMap: '{link to element on map}',
submaps: mapsNames[item.elements[FIRST_ARRAY_ELEMENT].modelId],
}));
return dd || [];
}, [data, mapsNames]);
useEffect(() => {
if (!data) {
dispatch(getPublications({ params: {} }));
}
}, [data, dispatch]);
<PublicationsModalLayout>
<div className="flex w-full flex-1 flex-col items-center justify-center overflow-hidden bg-white">
{data ? <PublicationsTable data={parsedData} /> : <LoadingIndicator />}
</div>
</PublicationsModalLayout>