@collectionspace/cspace-public-browser 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/LICENSE.md +71 -0
  2. package/README.md +38 -0
  3. package/dist/cspacePublicBrowser.js +4680 -0
  4. package/dist/cspacePublicBrowser.min.js +2 -0
  5. package/dist/cspacePublicBrowser.min.js.LICENSE.txt +56 -0
  6. package/images/check.svg +3 -0
  7. package/images/close.svg +3 -0
  8. package/images/collapse.svg +3 -0
  9. package/images/collapseActive.svg +3 -0
  10. package/images/expand.svg +3 -0
  11. package/images/expandActive.svg +3 -0
  12. package/images/filter.svg +4 -0
  13. package/images/hideLeft.svg +4 -0
  14. package/images/linkBack.svg +4 -0
  15. package/images/linkDown.svg +4 -0
  16. package/images/linkNext.svg +4 -0
  17. package/images/linkPrev.svg +4 -0
  18. package/images/openNew.svg +4 -0
  19. package/images/search.svg +4 -0
  20. package/images/select.svg +4 -0
  21. package/images/top.svg +1 -0
  22. package/lib/actions/detailActions.js +177 -0
  23. package/lib/actions/filterActions.js +16 -0
  24. package/lib/actions/mediaActions.js +63 -0
  25. package/lib/actions/prefsActions.js +84 -0
  26. package/lib/actions/searchActions.js +140 -0
  27. package/lib/actions/searchEntryFormActions.js +19 -0
  28. package/lib/components/App.js +24 -0
  29. package/lib/components/detail/DetailNavBar.js +98 -0
  30. package/lib/components/detail/DetailPanel.js +171 -0
  31. package/lib/components/detail/DetailPanelContainer.js +22 -0
  32. package/lib/components/detail/ExhibitionSection.js +54 -0
  33. package/lib/components/detail/FieldList.js +95 -0
  34. package/lib/components/detail/FieldValueList.js +30 -0
  35. package/lib/components/detail/ImageGallery.js +137 -0
  36. package/lib/components/detail/ImageGalleryContainer.js +19 -0
  37. package/lib/components/detail/InstitutionHoldingList.js +155 -0
  38. package/lib/components/detail/InstitutionHoldingListContainer.js +22 -0
  39. package/lib/components/detail/InstitutionIndex.js +53 -0
  40. package/lib/components/detail/InstitutionIndexContainer.js +15 -0
  41. package/lib/components/detail/InstitutionSection.js +44 -0
  42. package/lib/components/detail/InstitutionSectionContainer.js +15 -0
  43. package/lib/components/layout/Fixed.js +26 -0
  44. package/lib/components/layout/IconButton.js +41 -0
  45. package/lib/components/layout/Panel.js +56 -0
  46. package/lib/components/layout/PanelContainer.js +19 -0
  47. package/lib/components/layout/PanelTitle.js +38 -0
  48. package/lib/components/layout/ScrollTopButton.js +70 -0
  49. package/lib/components/layout/ToggleFilterPanelButton.js +42 -0
  50. package/lib/components/pages/DetailPage.js +93 -0
  51. package/lib/components/pages/DetailPageContainer.js +20 -0
  52. package/lib/components/pages/RootPage.js +41 -0
  53. package/lib/components/pages/SearchPage.js +130 -0
  54. package/lib/components/pages/SearchPageContainer.js +23 -0
  55. package/lib/components/search/entry/SearchEntryForm.js +74 -0
  56. package/lib/components/search/entry/SearchEntryFormContainer.js +20 -0
  57. package/lib/components/search/entry/SearchEntryPanel.js +30 -0
  58. package/lib/components/search/entry/SearchQueryInput.js +89 -0
  59. package/lib/components/search/entry/SearchSubmitButton.js +22 -0
  60. package/lib/components/search/entry/SortSelect.js +89 -0
  61. package/lib/components/search/entry/SortSelectContainer.js +15 -0
  62. package/lib/components/search/result/ClearSearchParamsLink.js +42 -0
  63. package/lib/components/search/result/Filter.js +186 -0
  64. package/lib/components/search/result/FilterContainer.js +22 -0
  65. package/lib/components/search/result/FilterGroup.js +72 -0
  66. package/lib/components/search/result/FilterList.js +48 -0
  67. package/lib/components/search/result/FilterPanel.js +115 -0
  68. package/lib/components/search/result/FilterPanelContainer.js +16 -0
  69. package/lib/components/search/result/FilterSearchInput.js +63 -0
  70. package/lib/components/search/result/RemoveSearchParamLink.js +66 -0
  71. package/lib/components/search/result/SearchError.js +29 -0
  72. package/lib/components/search/result/SearchLoadMore.js +36 -0
  73. package/lib/components/search/result/SearchParamList.js +41 -0
  74. package/lib/components/search/result/SearchPending.js +21 -0
  75. package/lib/components/search/result/SearchResultImage.js +227 -0
  76. package/lib/components/search/result/SearchResultList.js +119 -0
  77. package/lib/components/search/result/SearchResultPanel.js +139 -0
  78. package/lib/components/search/result/SearchResultPanelContainer.js +23 -0
  79. package/lib/components/search/result/SearchResultStats.js +39 -0
  80. package/lib/components/search/result/SearchResultTile.js +61 -0
  81. package/lib/config/anthro.js +123 -0
  82. package/lib/config/bonsai.js +50 -0
  83. package/lib/config/botgarden.js +10 -0
  84. package/lib/config/default.js +530 -0
  85. package/lib/config/fcart.js +36 -0
  86. package/lib/config/herbarium.js +10 -0
  87. package/lib/config/index.js +53 -0
  88. package/lib/config/lhmc.js +10 -0
  89. package/lib/config/materials.js +982 -0
  90. package/lib/config/publicart.js +10 -0
  91. package/lib/constants/actionCodes.js +46 -0
  92. package/lib/constants/ids.js +12 -0
  93. package/lib/helpers/bodyClassName.js +11 -0
  94. package/lib/helpers/esQueryHelpers.js +206 -0
  95. package/lib/helpers/formatHelpers.js +293 -0
  96. package/lib/helpers/searchDimensions.js +28 -0
  97. package/lib/helpers/urlHelpers.js +43 -0
  98. package/lib/index.js +53 -0
  99. package/lib/intl/index.js +16 -0
  100. package/lib/reducers/detailReducer.js +145 -0
  101. package/lib/reducers/filterReducer.js +22 -0
  102. package/lib/reducers/index.js +66 -0
  103. package/lib/reducers/mediaReducer.js +43 -0
  104. package/lib/reducers/prefsReducer.js +27 -0
  105. package/lib/reducers/searchEntryFormReducer.js +24 -0
  106. package/lib/reducers/searchReducer.js +88 -0
  107. package/package.json +118 -0
  108. package/src/actions/detailActions.js +231 -0
  109. package/src/actions/filterActions.js +10 -0
  110. package/src/actions/mediaActions.js +65 -0
  111. package/src/actions/prefsActions.js +95 -0
  112. package/src/actions/searchActions.js +188 -0
  113. package/src/actions/searchEntryFormActions.js +15 -0
  114. package/src/components/App.jsx +18 -0
  115. package/src/components/detail/DetailNavBar.jsx +132 -0
  116. package/src/components/detail/DetailPanel.jsx +215 -0
  117. package/src/components/detail/DetailPanelContainer.js +29 -0
  118. package/src/components/detail/ExhibitionSection.jsx +71 -0
  119. package/src/components/detail/FieldList.jsx +122 -0
  120. package/src/components/detail/FieldValueList.jsx +31 -0
  121. package/src/components/detail/ImageGallery.jsx +153 -0
  122. package/src/components/detail/ImageGalleryContainer.js +17 -0
  123. package/src/components/detail/InstitutionHoldingList.jsx +188 -0
  124. package/src/components/detail/InstitutionHoldingListContainer.js +29 -0
  125. package/src/components/detail/InstitutionIndex.jsx +57 -0
  126. package/src/components/detail/InstitutionIndexContainer.js +11 -0
  127. package/src/components/detail/InstitutionSection.jsx +48 -0
  128. package/src/components/detail/InstitutionSectionContainer.js +11 -0
  129. package/src/components/layout/Fixed.jsx +29 -0
  130. package/src/components/layout/IconButton.jsx +41 -0
  131. package/src/components/layout/Panel.jsx +60 -0
  132. package/src/components/layout/PanelContainer.js +20 -0
  133. package/src/components/layout/PanelTitle.jsx +43 -0
  134. package/src/components/layout/ScrollTopButton.jsx +76 -0
  135. package/src/components/layout/ToggleFilterPanelButton.jsx +43 -0
  136. package/src/components/pages/DetailPage.jsx +101 -0
  137. package/src/components/pages/DetailPageContainer.js +18 -0
  138. package/src/components/pages/RootPage.jsx +37 -0
  139. package/src/components/pages/SearchPage.jsx +160 -0
  140. package/src/components/pages/SearchPageContainer.js +21 -0
  141. package/src/components/search/entry/SearchEntryForm.jsx +82 -0
  142. package/src/components/search/entry/SearchEntryFormContainer.js +22 -0
  143. package/src/components/search/entry/SearchEntryPanel.jsx +28 -0
  144. package/src/components/search/entry/SearchQueryInput.jsx +95 -0
  145. package/src/components/search/entry/SearchSubmitButton.jsx +22 -0
  146. package/src/components/search/entry/SortSelect.jsx +104 -0
  147. package/src/components/search/entry/SortSelectContainer.js +12 -0
  148. package/src/components/search/result/ClearSearchParamsLink.jsx +43 -0
  149. package/src/components/search/result/Filter.jsx +226 -0
  150. package/src/components/search/result/FilterContainer.js +20 -0
  151. package/src/components/search/result/FilterGroup.jsx +83 -0
  152. package/src/components/search/result/FilterList.jsx +51 -0
  153. package/src/components/search/result/FilterPanel.jsx +143 -0
  154. package/src/components/search/result/FilterPanelContainer.js +16 -0
  155. package/src/components/search/result/FilterSearchInput.jsx +68 -0
  156. package/src/components/search/result/RemoveSearchParamLink.jsx +79 -0
  157. package/src/components/search/result/SearchError.jsx +30 -0
  158. package/src/components/search/result/SearchLoadMore.jsx +37 -0
  159. package/src/components/search/result/SearchParamList.jsx +47 -0
  160. package/src/components/search/result/SearchPending.jsx +19 -0
  161. package/src/components/search/result/SearchResultImage.jsx +275 -0
  162. package/src/components/search/result/SearchResultList.jsx +144 -0
  163. package/src/components/search/result/SearchResultPanel.jsx +169 -0
  164. package/src/components/search/result/SearchResultPanelContainer.js +31 -0
  165. package/src/components/search/result/SearchResultStats.jsx +38 -0
  166. package/src/components/search/result/SearchResultTile.jsx +70 -0
  167. package/src/config/anthro.js +153 -0
  168. package/src/config/bonsai.js +50 -0
  169. package/src/config/botgarden.js +3 -0
  170. package/src/config/default.js +604 -0
  171. package/src/config/fcart.js +38 -0
  172. package/src/config/herbarium.js +3 -0
  173. package/src/config/index.js +51 -0
  174. package/src/config/lhmc.js +3 -0
  175. package/src/config/materials.js +1173 -0
  176. package/src/config/publicart.js +3 -0
  177. package/src/constants/actionCodes.js +26 -0
  178. package/src/constants/ids.js +3 -0
  179. package/src/helpers/bodyClassName.js +5 -0
  180. package/src/helpers/esQueryHelpers.js +224 -0
  181. package/src/helpers/formatHelpers.jsx +361 -0
  182. package/src/helpers/searchDimensions.js +21 -0
  183. package/src/helpers/urlHelpers.js +49 -0
  184. package/src/index.jsx +59 -0
  185. package/src/intl/index.js +16 -0
  186. package/src/reducers/detailReducer.js +201 -0
  187. package/src/reducers/filterReducer.js +16 -0
  188. package/src/reducers/index.js +56 -0
  189. package/src/reducers/mediaReducer.js +44 -0
  190. package/src/reducers/prefsReducer.js +24 -0
  191. package/src/reducers/searchEntryFormReducer.js +19 -0
  192. package/src/reducers/searchReducer.js +118 -0
  193. package/styles/colors.css +7 -0
  194. package/styles/cspace/DetailNavBar.css +17 -0
  195. package/styles/cspace/DetailPage.css +3 -0
  196. package/styles/cspace/DetailPanel.css +69 -0
  197. package/styles/cspace/ExhibitionSection.css +9 -0
  198. package/styles/cspace/FieldList.css +15 -0
  199. package/styles/cspace/FieldListField.css +7 -0
  200. package/styles/cspace/FieldListGroup.css +27 -0
  201. package/styles/cspace/FieldValueList.css +19 -0
  202. package/styles/cspace/Filter.css +64 -0
  203. package/styles/cspace/FilterGroup.css +21 -0
  204. package/styles/cspace/FilterPanel.css +45 -0
  205. package/styles/cspace/FilterSearchInput.css +13 -0
  206. package/styles/cspace/Fixed.css +8 -0
  207. package/styles/cspace/IconButton.css +11 -0
  208. package/styles/cspace/ImageGallery.css +43 -0
  209. package/styles/cspace/InstitutionHoldingList.css +109 -0
  210. package/styles/cspace/InstitutionIndex.css +13 -0
  211. package/styles/cspace/InstitutionSection.css +4 -0
  212. package/styles/cspace/Link.css +39 -0
  213. package/styles/cspace/Panel.css +53 -0
  214. package/styles/cspace/PanelTitle.css +48 -0
  215. package/styles/cspace/RemoveSearchParamLink.css +15 -0
  216. package/styles/cspace/RootPage.css +60 -0
  217. package/styles/cspace/ScrollTopButton.css +32 -0
  218. package/styles/cspace/SearchEntryForm.css +4 -0
  219. package/styles/cspace/SearchEntryPanel.css +11 -0
  220. package/styles/cspace/SearchPage.css +2 -0
  221. package/styles/cspace/SearchParamLink.css +21 -0
  222. package/styles/cspace/SearchParamList.css +6 -0
  223. package/styles/cspace/SearchQueryInput.css +30 -0
  224. package/styles/cspace/SearchResultImage.css +29 -0
  225. package/styles/cspace/SearchResultList.css +10 -0
  226. package/styles/cspace/SearchResultPanel.css +31 -0
  227. package/styles/cspace/SearchResultStats.css +4 -0
  228. package/styles/cspace/SearchResultTile.css +67 -0
  229. package/styles/cspace/SearchStatus.css +12 -0
  230. package/styles/cspace/SearchSubmitButton.css +3 -0
  231. package/styles/cspace/SortSelect.css +19 -0
  232. package/styles/cspace/ToggleFilterPanelButton.css +44 -0
  233. package/styles/dimensions.css +9 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = DetailNavBar;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactIntl = require("react-intl");
10
+ var _reactRouterDom = require("react-router-dom");
11
+ var _immutable = _interopRequireDefault(require("immutable"));
12
+ var _get = _interopRequireDefault(require("lodash/get"));
13
+ var _config = _interopRequireDefault(require("../../config"));
14
+ var _urlHelpers = require("../../helpers/urlHelpers");
15
+ var _DetailNavBar = _interopRequireDefault(require("../../../styles/cspace/DetailNavBar.css"));
16
+ var _Link = _interopRequireDefault(require("../../../styles/cspace/Link.css"));
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ const propTypes = {
19
+ params: _propTypes.default.instanceOf(_immutable.default.Map).isRequired,
20
+ prev: _propTypes.default.shape({
21
+ 'ecm:name': _propTypes.default.string
22
+ }),
23
+ next: _propTypes.default.shape({
24
+ 'ecm:name': _propTypes.default.string
25
+ })
26
+ };
27
+ const defaultProps = {
28
+ prev: undefined,
29
+ next: undefined
30
+ };
31
+ const messages = (0, _reactIntl.defineMessages)({
32
+ search: {
33
+ "id": "detailNavBar.search",
34
+ "defaultMessage": "Return to search"
35
+ },
36
+ prev: {
37
+ "id": "detailNavBar.prev",
38
+ "defaultMessage": "Previous"
39
+ },
40
+ next: {
41
+ "id": "detailNavBar.next",
42
+ "defaultMessage": "Next"
43
+ }
44
+ });
45
+ function DetailNavBar(props) {
46
+ const {
47
+ params,
48
+ prev,
49
+ next
50
+ } = props;
51
+ const index = params.get('index');
52
+ const searchParams = params.get('searchParams');
53
+ if (!searchParams || typeof index === 'undefined') {
54
+ return null;
55
+ }
56
+ const searchParamsObj = searchParams.toJS();
57
+ const detailPath = _config.default.get('detailPath');
58
+ let prevLink;
59
+ let nextLink;
60
+ if (prev) {
61
+ const csid = (0, _get.default)(prev, 'ecm:name');
62
+ prevLink = /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
63
+ className: _Link.default.prev,
64
+ to: {
65
+ pathname: `/${detailPath}/${csid}`,
66
+ state: {
67
+ index: index - 1,
68
+ searchParams: searchParamsObj
69
+ }
70
+ }
71
+ }, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.prev)));
72
+ }
73
+ if (next) {
74
+ const csid = (0, _get.default)(next, 'ecm:name');
75
+ nextLink = /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
76
+ className: _Link.default.next,
77
+ to: {
78
+ pathname: `/${detailPath}/${csid}`,
79
+ state: {
80
+ index: index + 1,
81
+ searchParams: searchParamsObj
82
+ }
83
+ }
84
+ }, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.next)));
85
+ }
86
+ const queryString = (0, _urlHelpers.searchParamsToQueryString)(searchParams);
87
+ return /*#__PURE__*/_react.default.createElement("nav", {
88
+ className: _DetailNavBar.default.common
89
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
90
+ className: _Link.default.back,
91
+ to: {
92
+ pathname: '/search',
93
+ search: `?${queryString}`
94
+ }
95
+ }, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.search))), /*#__PURE__*/_react.default.createElement("div", null, prevLink, nextLink));
96
+ }
97
+ DetailNavBar.propTypes = propTypes;
98
+ DetailNavBar.defaultProps = defaultProps;
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactHelmet = _interopRequireDefault(require("react-helmet"));
10
+ var _immutable = _interopRequireDefault(require("immutable"));
11
+ var _FieldList = _interopRequireDefault(require("./FieldList"));
12
+ var _DetailNavBar = _interopRequireDefault(require("./DetailNavBar"));
13
+ var _ImageGalleryContainer = _interopRequireDefault(require("./ImageGalleryContainer"));
14
+ var _InstitutionIndexContainer = _interopRequireDefault(require("./InstitutionIndexContainer"));
15
+ var _InstitutionSectionContainer = _interopRequireDefault(require("./InstitutionSectionContainer"));
16
+ var _ExhibitionSection = _interopRequireDefault(require("./ExhibitionSection"));
17
+ var _config = _interopRequireDefault(require("../../config"));
18
+ var _DetailPanel = _interopRequireDefault(require("../../../styles/cspace/DetailPanel.css"));
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
+ const propTypes = {
23
+ adjacents: _propTypes.default.shape({
24
+ prev: _propTypes.default.object,
25
+ next: _propTypes.default.object
26
+ }),
27
+ data: _propTypes.default.shape({
28
+ 'collectionspace_core:refName': _propTypes.default.string,
29
+ 'collectionspace_denorm:title': _propTypes.default.string,
30
+ 'collectionspace_denorm:exhibition': _propTypes.default.array,
31
+ 'collectionobjects_common:objectHistoryNote': _propTypes.default.string,
32
+ 'collectionobjects_common:ownersContributionNote': _propTypes.default.string,
33
+ 'collectionobjects_common:viewersContributionNote': _propTypes.default.string
34
+ }),
35
+ params: _propTypes.default.instanceOf(_immutable.default.Map).isRequired,
36
+ readDetail: _propTypes.default.func
37
+ };
38
+ const defaultProps = {
39
+ adjacents: {},
40
+ data: undefined,
41
+ readDetail: () => undefined
42
+ };
43
+ class DetailPanel extends _react.Component {
44
+ componentDidMount() {
45
+ this.readDetail();
46
+ }
47
+ componentDidUpdate(prevProps) {
48
+ const {
49
+ params
50
+ } = this.props;
51
+ const {
52
+ params: prevParams
53
+ } = prevProps;
54
+ if (params.get('csid') !== prevParams.get('csid')) {
55
+ this.readDetail();
56
+ }
57
+ }
58
+ readDetail() {
59
+ const {
60
+ readDetail
61
+ } = this.props;
62
+ readDetail();
63
+ }
64
+ renderDescription() {
65
+ const {
66
+ data
67
+ } = this.props;
68
+ const descFormatter = _config.default.get('detailDescription');
69
+ const desc = descFormatter && descFormatter(data);
70
+ return /*#__PURE__*/_react.default.createElement("p", null, desc);
71
+ }
72
+ renderFieldList() {
73
+ const {
74
+ data
75
+ } = this.props;
76
+ return /*#__PURE__*/_react.default.createElement(_FieldList.default, {
77
+ config: _config.default.get('detailFields'),
78
+ data: data
79
+ });
80
+ }
81
+ renderHeader() {
82
+ const {
83
+ adjacents,
84
+ data,
85
+ params
86
+ } = this.props;
87
+ const titleFormatter = _config.default.get('detailTitle');
88
+ const title = titleFormatter && titleFormatter(data);
89
+ const subtitleFormatter = _config.default.get('detailSubtitle');
90
+ const subtitle = subtitleFormatter && subtitleFormatter(data);
91
+ const {
92
+ 'collectionspace_core:refName': refName
93
+ } = data;
94
+ return /*#__PURE__*/_react.default.createElement("header", null, /*#__PURE__*/_react.default.createElement(_DetailNavBar.default, {
95
+ params: params,
96
+ prev: adjacents.prev,
97
+ next: adjacents.next
98
+ }), title && /*#__PURE__*/_react.default.createElement("h1", null, title), subtitle && /*#__PURE__*/_react.default.createElement("h2", null, subtitle), /*#__PURE__*/_react.default.createElement(_InstitutionIndexContainer.default, {
99
+ refName: refName
100
+ }));
101
+ }
102
+ renderImageGallery() {
103
+ const {
104
+ data
105
+ } = this.props;
106
+ const referenceField = _config.default.get('referenceField');
107
+ const referenceValue = data[referenceField];
108
+ return /*#__PURE__*/_react.default.createElement(_ImageGalleryContainer.default, {
109
+ referenceValue: referenceValue
110
+ });
111
+ }
112
+ renderPageTitle() {
113
+ const {
114
+ data
115
+ } = this.props;
116
+ const {
117
+ 'collectionspace_denorm:title': title
118
+ } = data;
119
+ return /*#__PURE__*/_react.default.createElement(_reactHelmet.default, null, /*#__PURE__*/_react.default.createElement("title", null, title));
120
+ }
121
+ renderInstitutions() {
122
+ const {
123
+ data,
124
+ params
125
+ } = this.props;
126
+ const institutionsConfig = _config.default.get('institutions');
127
+ if (!institutionsConfig) {
128
+ return null;
129
+ }
130
+ const selectedInstitutionId = params.get('#');
131
+ const referenceField = _config.default.get('referenceField');
132
+ const referenceValue = data[referenceField];
133
+ return /*#__PURE__*/_react.default.createElement(_InstitutionSectionContainer.default, {
134
+ config: institutionsConfig,
135
+ selectedInstitutionId: selectedInstitutionId,
136
+ referenceValue: referenceValue
137
+ });
138
+ }
139
+ renderExhibition() {
140
+ const {
141
+ data
142
+ } = this.props;
143
+ const exhibition = data['collectionspace_denorm:exhibition'];
144
+ if (exhibition && exhibition.length > 0) {
145
+ const historyNote = data['collectionobjects_common:objectHistoryNote'];
146
+ const ownerConrtibutionNote = data['collectionobjects_common:ownersContributionNote'];
147
+ const viewerContributionNote = data['collectionobjects_common:viewersContributionNote'];
148
+ return /*#__PURE__*/_react.default.createElement(_ExhibitionSection.default, {
149
+ exhibition: exhibition[0],
150
+ historyNote: historyNote,
151
+ ownerConrtibutionNote: ownerConrtibutionNote,
152
+ viewerContributionNote: viewerContributionNote
153
+ });
154
+ }
155
+ return null;
156
+ }
157
+ render() {
158
+ const {
159
+ data
160
+ } = this.props;
161
+ if (!data) {
162
+ return null;
163
+ }
164
+ return /*#__PURE__*/_react.default.createElement("div", {
165
+ className: _DetailPanel.default.common
166
+ }, this.renderPageTitle(), this.renderHeader(), this.renderDescription(), this.renderImageGallery(), this.renderFieldList(), this.renderInstitutions(), this.renderExhibition());
167
+ }
168
+ }
169
+ exports.default = DetailPanel;
170
+ DetailPanel.propTypes = propTypes;
171
+ DetailPanel.defaultProps = defaultProps;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactRedux = require("react-redux");
8
+ var _DetailPanel = _interopRequireDefault(require("./DetailPanel"));
9
+ var _detailActions = require("../../actions/detailActions");
10
+ var _reducers = require("../../reducers");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const mapStateToProps = state => ({
13
+ adjacents: (0, _reducers.getDetailAdjacents)(state),
14
+ data: (0, _reducers.getDetailData)(state),
15
+ error: (0, _reducers.getDetailError)(state),
16
+ isPending: (0, _reducers.isDetailPending)(state)
17
+ });
18
+ const mapDispatchToProps = {
19
+ readDetail: _detailActions.readDetail
20
+ };
21
+ var _default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_DetailPanel.default);
22
+ exports.default = _default;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ExhibitionSection;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactIntl = require("react-intl");
10
+ var _ExhibitionSection = _interopRequireDefault(require("../../../styles/cspace/ExhibitionSection.css"));
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const propTypes = {
13
+ exhibition: _propTypes.default.shape({
14
+ title: _propTypes.default.string,
15
+ generalNote: _propTypes.default.string,
16
+ curatorialNote: _propTypes.default.string
17
+ }),
18
+ historyNote: _propTypes.default.string,
19
+ ownerConrtibutionNote: _propTypes.default.string,
20
+ viewerContributionNote: _propTypes.default.string
21
+ };
22
+ const defaultProps = {
23
+ exhibition: undefined,
24
+ historyNote: undefined,
25
+ ownerConrtibutionNote: undefined,
26
+ viewerContributionNote: undefined
27
+ };
28
+ const messages = (0, _reactIntl.defineMessages)({
29
+ objectStoryHeader: {
30
+ "id": "exhibitionSection.objectStoryHeader",
31
+ "defaultMessage": "Object Story"
32
+ },
33
+ donorStoryHeader: {
34
+ "id": "exhibitionSection.donorStoryHeader",
35
+ "defaultMessage": "Donor Story"
36
+ },
37
+ curatorialStoryHeader: {
38
+ "id": "exhibitionSection.curatorialStoryHeader",
39
+ "defaultMessage": "Curatorial Story"
40
+ }
41
+ });
42
+ function ExhibitionSection(props) {
43
+ const {
44
+ exhibition,
45
+ historyNote,
46
+ viewerContributionNote,
47
+ ownerConrtibutionNote
48
+ } = props;
49
+ return /*#__PURE__*/_react.default.createElement("div", {
50
+ className: _ExhibitionSection.default.common
51
+ }, /*#__PURE__*/_react.default.createElement("hr", null), /*#__PURE__*/_react.default.createElement("h1", null, exhibition.title), /*#__PURE__*/_react.default.createElement("div", null), /*#__PURE__*/_react.default.createElement("h2", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.objectStoryHeader)), /*#__PURE__*/_react.default.createElement("div", null, historyNote), /*#__PURE__*/_react.default.createElement("h2", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.donorStoryHeader)), /*#__PURE__*/_react.default.createElement("div", null, ownerConrtibutionNote), /*#__PURE__*/_react.default.createElement("div", null, exhibition.generalNote), /*#__PURE__*/_react.default.createElement("h2", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.curatorialStoryHeader)), /*#__PURE__*/_react.default.createElement("div", null, viewerContributionNote), /*#__PURE__*/_react.default.createElement("div", null, exhibition.curatorialNote));
52
+ }
53
+ ExhibitionSection.propTypes = propTypes;
54
+ ExhibitionSection.defaultProps = defaultProps;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = FieldList;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactIntl = require("react-intl");
10
+ var _classnames = _interopRequireDefault(require("classnames"));
11
+ var _FieldList = _interopRequireDefault(require("../../../styles/cspace/FieldList.css"));
12
+ var _FieldListGroup = _interopRequireDefault(require("../../../styles/cspace/FieldListGroup.css"));
13
+ var _FieldListField = _interopRequireDefault(require("../../../styles/cspace/FieldListField.css"));
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ const propTypes = {
16
+ config: _propTypes.default.shape({
17
+ fields: _propTypes.default.object.isRequired,
18
+ groups: _propTypes.default.object.isRequired,
19
+ layout: _propTypes.default.object.isRequired
20
+ }).isRequired,
21
+ data: _propTypes.default.shape({
22
+ 'collectionspace_core:refName': _propTypes.default.string,
23
+ 'collectionspace_denorm:title': _propTypes.default.string
24
+ }).isRequired
25
+ };
26
+ const renderField = (id, fieldConfig, data) => {
27
+ const {
28
+ className,
29
+ field,
30
+ format,
31
+ label,
32
+ messages
33
+ } = fieldConfig;
34
+ const title = messages
35
+ // eslint-disable-next-line react/jsx-props-no-spreading
36
+ ? /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.label) : label;
37
+ const value = data[field];
38
+ const formattedValue = format && value ? format(value, id) : value;
39
+ if (!formattedValue) {
40
+ return null;
41
+ }
42
+ if (title) {
43
+ const classes = (0, _classnames.default)(_FieldListField.default[className]);
44
+ const classProp = classes ? {
45
+ className: classes
46
+ } : undefined;
47
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
48
+ key: id
49
+ }, /*#__PURE__*/_react.default.createElement("div", classProp, title), /*#__PURE__*/_react.default.createElement("div", classProp, formattedValue));
50
+ }
51
+ const classes = (0, _classnames.default)(_FieldListField.default.unlabeled, _FieldListField.default[className]);
52
+ return /*#__PURE__*/_react.default.createElement("div", {
53
+ className: classes,
54
+ key: id
55
+ }, formattedValue);
56
+ };
57
+ const renderGroup = (id, groupConfig, config, data) => {
58
+ const {
59
+ className,
60
+ fields,
61
+ label,
62
+ messages
63
+ } = groupConfig;
64
+ const title = messages
65
+ // eslint-disable-next-line react/jsx-props-no-spreading
66
+ ? /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.label) : label;
67
+ const fieldsConfig = config.fields;
68
+ const renderedFields = fields.map(fieldId => renderField(fieldId, fieldsConfig[fieldId], data)).filter(renderedField => !!renderedField);
69
+ if (renderedFields.length === 0) {
70
+ return null;
71
+ }
72
+ const classes = (0, _classnames.default)(_FieldListGroup.default.common, _FieldListGroup.default[className]);
73
+ return /*#__PURE__*/_react.default.createElement("div", {
74
+ className: classes,
75
+ key: id
76
+ }, title && /*#__PURE__*/_react.default.createElement("h3", null, title), /*#__PURE__*/_react.default.createElement("div", null, renderedFields));
77
+ };
78
+ function FieldList(props) {
79
+ const {
80
+ config,
81
+ data
82
+ } = props;
83
+ const {
84
+ groups,
85
+ layout
86
+ } = config;
87
+ return Object.keys(layout).map(layoutId => /*#__PURE__*/_react.default.createElement("div", {
88
+ className: _FieldList.default.common,
89
+ key: layoutId,
90
+ style: {
91
+ gridArea: layoutId
92
+ }
93
+ }, layout[layoutId].map(groupId => renderGroup(groupId, groups[groupId], config, data))));
94
+ }
95
+ FieldList.propTypes = propTypes;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = FieldValueList;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _FieldValueList = _interopRequireDefault(require("../../../styles/cspace/FieldValueList.css"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ const propTypes = {
12
+ children: _propTypes.default.node,
13
+ inline: _propTypes.default.bool
14
+ };
15
+ const defaultProps = {
16
+ children: undefined,
17
+ inline: false
18
+ };
19
+ function FieldValueList(props) {
20
+ const {
21
+ children,
22
+ inline
23
+ } = props;
24
+ const className = inline ? _FieldValueList.default.inline : _FieldValueList.default.common;
25
+ return /*#__PURE__*/_react.default.createElement("ul", {
26
+ className: className
27
+ }, children);
28
+ }
29
+ FieldValueList.propTypes = propTypes;
30
+ FieldValueList.defaultProps = defaultProps;
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactIntl = require("react-intl");
10
+ var _immutable = _interopRequireDefault(require("immutable"));
11
+ var _reactImageGallery = _interopRequireDefault(require("react-image-gallery"));
12
+ require("react-image-gallery/styles/css/image-gallery.css");
13
+ var _config = _interopRequireDefault(require("../../config"));
14
+ var _urlHelpers = require("../../helpers/urlHelpers");
15
+ var _ImageGallery = _interopRequireDefault(require("../../../styles/cspace/ImageGallery.css"));
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+ const propTypes = {
20
+ findMedia: _propTypes.default.func,
21
+ institutionId: _propTypes.default.string,
22
+ intl: _propTypes.default.shape({
23
+ formatMessage: _propTypes.default.func.isRequired
24
+ }).isRequired,
25
+ media: _propTypes.default.instanceOf(_immutable.default.Map),
26
+ referenceValue: _propTypes.default.string.isRequired
27
+ };
28
+ const defaultProps = {
29
+ institutionId: undefined,
30
+ media: undefined,
31
+ findMedia: () => undefined
32
+ };
33
+ const messages = (0, _reactIntl.defineMessages)({
34
+ defaultAltText: {
35
+ "id": "imageGallery.defaultAltText",
36
+ "defaultMessage": "Image {num}"
37
+ },
38
+ titledAltText: {
39
+ "id": "imageGallery.titledAltText",
40
+ "defaultMessage": "{title} Image {num}"
41
+ },
42
+ thumbnailAltText: {
43
+ "id": "imageGallery.thumbnailAltText",
44
+ "defaultMessage": "Thumbnail: {altText}"
45
+ }
46
+ });
47
+ const getInstitutionIds = () => {
48
+ const institutionsConfig = _config.default.get('institutions');
49
+ return institutionsConfig ? Object.keys(institutionsConfig) : [];
50
+ };
51
+ class ImageGallery extends _react.Component {
52
+ componentDidMount() {
53
+ this.findMedia();
54
+ }
55
+ componentDidUpdate(prevProps) {
56
+ const {
57
+ referenceValue
58
+ } = this.props;
59
+ const {
60
+ referenceValue: prevReferenceValue
61
+ } = prevProps;
62
+ if (referenceValue !== prevReferenceValue) {
63
+ this.findMedia();
64
+ }
65
+ }
66
+ findMedia() {
67
+ const {
68
+ findMedia,
69
+ institutionId,
70
+ media,
71
+ referenceValue
72
+ } = this.props;
73
+ const institutionIds = typeof institutionId === 'undefined' ? [null, ...getInstitutionIds()] : [institutionId];
74
+ institutionIds.forEach(instId => {
75
+ if (!media || !media.get(instId)) {
76
+ findMedia(referenceValue, instId);
77
+ }
78
+ });
79
+ }
80
+ render() {
81
+ const {
82
+ institutionId,
83
+ intl,
84
+ media
85
+ } = this.props;
86
+ if (!media) {
87
+ return null;
88
+ }
89
+ const institutionIds = typeof institutionId === 'undefined' ? [null, ...getInstitutionIds()] : [institutionId];
90
+ const items = [];
91
+ institutionIds.forEach(instId => {
92
+ const mediaMap = media.get(instId) || _immutable.default.Map();
93
+ const title = mediaMap.get('title');
94
+ const mediaCsids = mediaMap.get('csids') || _immutable.default.List();
95
+ const mediaAltTexts = mediaMap.get('altTexts') || _immutable.default.List();
96
+ if (mediaCsids && mediaCsids.size > 0) {
97
+ const gatewayUrl = instId ? _config.default.get(['institutions', instId, 'gatewayUrl']) : _config.default.get('gatewayUrl');
98
+ mediaCsids.forEach((mediaCsid, index) => {
99
+ let altText = mediaAltTexts.get(index);
100
+ if (!altText) {
101
+ const num = index + 1;
102
+ altText = title ? intl.formatMessage(messages.titledAltText, {
103
+ title,
104
+ num
105
+ }) : intl.formatMessage(messages.defaultAltText, {
106
+ num
107
+ });
108
+ }
109
+ items.push({
110
+ original: (0, _urlHelpers.blobUrl)(gatewayUrl, mediaCsid, _config.default.get('detailImageDerivative')),
111
+ thumbnail: (0, _urlHelpers.blobUrl)(gatewayUrl, mediaCsid, 'Thumbnail'),
112
+ originalAlt: altText,
113
+ thumbnailAlt: intl.formatMessage(messages.thumbnailAltText, {
114
+ altText
115
+ })
116
+ });
117
+ });
118
+ }
119
+ });
120
+ if (items.length > 0) {
121
+ return /*#__PURE__*/_react.default.createElement("div", {
122
+ className: _ImageGallery.default.common
123
+ }, /*#__PURE__*/_react.default.createElement(_reactImageGallery.default, {
124
+ disableArrowKeys: true,
125
+ items: items,
126
+ showFullscreenButton: false,
127
+ showPlayButton: false,
128
+ showThumbnails: items.length > 1
129
+ }));
130
+ }
131
+ return /*#__PURE__*/_react.default.createElement("div", null);
132
+ }
133
+ }
134
+ ImageGallery.propTypes = propTypes;
135
+ ImageGallery.defaultProps = defaultProps;
136
+ var _default = (0, _reactIntl.injectIntl)(ImageGallery);
137
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactRedux = require("react-redux");
8
+ var _ImageGallery = _interopRequireDefault(require("./ImageGallery"));
9
+ var _mediaActions = require("../../actions/mediaActions");
10
+ var _reducers = require("../../reducers");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ const mapStateToProps = (state, ownProps) => ({
13
+ media: (0, _reducers.getMedia)(state, ownProps.referenceValue)
14
+ });
15
+ const mapDispatchToProps = {
16
+ findMedia: _mediaActions.findMedia
17
+ };
18
+ var _default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_ImageGallery.default);
19
+ exports.default = _default;