Skip to content
Snippets Groups Projects
PublicationsModal.tsx 1.8 KiB
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]);
    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>