|
1 | 1 | import React from 'react'; |
2 | 2 | import PropTypes from 'prop-types'; |
3 | 3 | import { FormattedMessage } from 'react-intl'; |
| 4 | +import { useHistory } from 'react-router-dom'; |
| 5 | +import { AppIcon } from '@folio/stripes/core'; |
4 | 6 | import { |
5 | 7 | Col, |
6 | 8 | Headline, |
| 9 | + InfoPopover, |
7 | 10 | KeyValue, |
8 | 11 | NoValue, |
9 | 12 | Row, |
| 13 | + TextLink |
10 | 14 | } from '@folio/stripes/components'; |
11 | 15 |
|
12 | 16 | import { resourceTypes } from '../../constants'; |
@@ -37,39 +41,67 @@ const propTypes = { |
37 | 41 | value: PropTypes.string, |
38 | 42 | }), |
39 | 43 | }).isRequired, |
| 44 | + showLink: PropTypes.bool, |
40 | 45 | }; |
41 | 46 |
|
42 | 47 | const RelatedTitleInfo = ({ |
43 | | - relatedTitle |
44 | | -}) => ( |
45 | | - <div data-test-related-titles> |
46 | | - <div className={css.separator} /> |
47 | | - <Headline data-test-title-instance-name size="large" tag="h3"> |
48 | | - <FormattedMessage id="ui-agreements.eresources.relatedTitle" values={{ name: relatedTitle.name }} /> |
49 | | - </Headline> |
50 | | - <Row> |
51 | | - <Col xs={3}> |
52 | | - <KeyValue label={<FormattedMessage id="ui-agreements.eresources.materialType" />}> |
53 | | - <div data-test-title-instance-sub-type>{relatedTitle.subType?.label ?? <NoValue />}</div> |
54 | | - </KeyValue> |
55 | | - </Col> |
56 | | - {relatedTitle.type.value === resourceTypes.MONOGRAPH || relatedTitle.type.value === resourceTypes.BOOK ? |
57 | | - <> |
58 | | - <EResourceIdentifier titleInstance={relatedTitle} type="isbn" /> |
59 | | - <EResourceIdentifier titleInstance={relatedTitle} type="doi" /> |
60 | | - </> |
61 | | - : |
62 | | - <> |
63 | | - <EResourceIdentifier titleInstance={relatedTitle} type="ezb" /> |
64 | | - <EResourceIdentifier titleInstance={relatedTitle} type="zdb" /> |
65 | | - <EResourceIdentifier titleInstance={relatedTitle} type="eissn" /> |
66 | | - <EResourceIdentifier titleInstance={relatedTitle} type="pissn" /> |
67 | | - <EResourceIdentifier titleInstance={relatedTitle} type="issn" /> |
68 | | - </> |
| 48 | + relatedTitle, |
| 49 | + showLink = false |
| 50 | +}) => { |
| 51 | + const { location: { search: searchString } } = useHistory(); |
| 52 | + |
| 53 | + const renderElectronicLink = () => { |
| 54 | + const relatedTitleLink = `${relatedTitle.id}${searchString}`; |
| 55 | + return ( |
| 56 | + <Row> |
| 57 | + <Col xs={12}> |
| 58 | + <AppIcon |
| 59 | + app="agreements" |
| 60 | + iconAlignment="baseline" |
| 61 | + iconKey="title" |
| 62 | + size="small" |
| 63 | + > |
| 64 | + <TextLink to={relatedTitleLink}><FormattedMessage id="ui-agreements.eresources.electronicTitle" values={{ name: relatedTitle.name }} /></TextLink> |
| 65 | + <InfoPopover |
| 66 | + content={<FormattedMessage id="ui-agreements.eresources.relatedTitle.infoPopover" />} |
| 67 | + /> |
| 68 | + </AppIcon> |
| 69 | + </Col> |
| 70 | + </Row> |
| 71 | + ); |
| 72 | + }; |
| 73 | + |
| 74 | + return ( |
| 75 | + <div data-test-related-titles> |
| 76 | + <div className={css.separator} /> |
| 77 | + <Headline data-test-title-instance-name size="large" tag="h3"> |
| 78 | + <FormattedMessage id="ui-agreements.eresources.relatedTitle" values={{ name: relatedTitle.name }} /> |
| 79 | + </Headline> |
| 80 | + <Row> |
| 81 | + <Col xs={3}> |
| 82 | + <KeyValue label={<FormattedMessage id="ui-agreements.eresources.materialType" />}> |
| 83 | + <div data-test-title-instance-sub-type>{relatedTitle.subType?.label ?? <NoValue />}</div> |
| 84 | + </KeyValue> |
| 85 | + </Col> |
| 86 | + {relatedTitle.type.value === resourceTypes.MONOGRAPH || relatedTitle.type.value === resourceTypes.BOOK ? |
| 87 | + <> |
| 88 | + <EResourceIdentifier titleInstance={relatedTitle} type="isbn" /> |
| 89 | + <EResourceIdentifier titleInstance={relatedTitle} type="doi" /> |
| 90 | + </> |
| 91 | + : |
| 92 | + <> |
| 93 | + <EResourceIdentifier titleInstance={relatedTitle} type="ezb" /> |
| 94 | + <EResourceIdentifier titleInstance={relatedTitle} type="zdb" /> |
| 95 | + <EResourceIdentifier titleInstance={relatedTitle} type="eissn" /> |
| 96 | + <EResourceIdentifier titleInstance={relatedTitle} type="pissn" /> |
| 97 | + <EResourceIdentifier titleInstance={relatedTitle} type="issn" /> |
| 98 | + </> |
69 | 99 | } |
70 | | - </Row> |
71 | | - </div> |
72 | | -); |
| 100 | + </Row> |
| 101 | + {showLink && renderElectronicLink()} |
| 102 | + </div> |
| 103 | + ); |
| 104 | +}; |
73 | 105 |
|
74 | 106 | RelatedTitleInfo.propTypes = propTypes; |
75 | 107 | export default RelatedTitleInfo; |
0 commit comments