-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathreference.tsx
44 lines (38 loc) · 2.09 KB
/
reference.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { Author, Reference as ReferenceData } from '../../../types';
import './reference.scss';
const formatName = (author: Author) => `${author.familyNames?.join(' ')} ${author.givenNames?.join(' ')}`;
export const ReferenceBody = ({ reference, isReferenceList = false }: { reference: ReferenceData, isReferenceList: boolean }): JSX.Element => {
const referenceJournal = reference.isPartOf?.isPartOf?.name ?? reference.isPartOf?.name;
const referenceVolume = reference.isPartOf?.isPartOf?.volumeNumber ?? reference.isPartOf?.volumeNumber;
const doiIdentifier = reference.identifiers?.find((identifier) => identifier.name === 'doi');
return (
<>
{ (isReferenceList && reference.meta?.label) && <span className="reference__label">{reference.meta.label}</span>}
<ol className="reference__authors_list">
{reference.authors.map((author, index) => (
<li key={index} className="reference__author">
{formatName(author)}
</li>
))}
</ol>
<span className="reference__authors_list_suffix">{new Date(reference.datePublished).getFullYear()}</span>
<span className="reference__title">{reference.title}</span>
<span className="reference__origin">
{referenceJournal ? <i>{referenceJournal} </i> : ''}
{referenceVolume ? <b>{referenceVolume}:</b> : ''}
{reference.pageStart}{reference.pageEnd ? `–${reference.pageEnd}` : ''}
</span>
{doiIdentifier && <span className="reference__doi">
{isReferenceList ?
<a href={`https://doi.org/${doiIdentifier.value}`} className="reference__doi_link">
https://doi.org/{doiIdentifier.value}
</a> : `https://doi.org/${doiIdentifier.value}`}
</span>
}
</>
);
};
export const Reference = ({ reference, isReferenceList = false }: { reference: ReferenceData, isReferenceList: boolean }): JSX.Element => (isReferenceList ?
<li className="reference" id={reference.id}>{ReferenceBody({ reference, isReferenceList })}</li> :
<div className="reference" id={reference.id}>{ReferenceBody({ reference, isReferenceList })}</div>
);