UNPKG

@collectionspace/cspace-public-browser

Version:
71 lines (69 loc) 2.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setMedia = exports.findMedia = void 0; var _get = _interopRequireDefault(require("lodash/get")); var _config = _interopRequireDefault(require("../config")); var _reducers = require("../reducers"); var _actionCodes = require("../constants/actionCodes"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /* global fetch */ // TODO: this should not be hardcoded here. Check deriving from plugin or shared lib const sortParams = { updatedAt: 'collectionspace_core:updatedAt', identificationNumber: 'media_common:identificationNumber', title: 'media_common:title' }; const setMedia = (referenceValue, institutionId, mediaCsids, mediaAltTexts) => ({ type: _actionCodes.SET_MEDIA, payload: { csids: mediaCsids, altTexts: mediaAltTexts }, meta: { institutionId, referenceValue } }); exports.setMedia = setMedia; const findMedia = (referenceValue, institutionId) => (dispatch, getState) => { if ((0, _reducers.getMedia)(getState(), referenceValue, institutionId)) { return Promise.resolve(); } let gatewayUrl; if (institutionId === null) { gatewayUrl = _config.default.get('gatewayUrl'); } else { gatewayUrl = _config.default.get(['institutions', institutionId, 'gatewayUrl']); } const url = `${gatewayUrl}/es/doc/_search`; const referenceField = _config.default.get('referenceField'); const sortField = Object.keys(_config.default.get('mediaSnapshotSort'))[0]; const sortDirection = _config.default.get('mediaSnapshotSort')[sortField]; const query = { _source: [referenceField, 'media_common:altText'], query: { terms: { 'collectionspace_denorm:objectCsid': [referenceValue] } }, sort: { [sortParams[sortField]]: sortDirection }, size: 10000 // TODO: check if we should use scroll API instead of hardcoding the size }; return fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(query) }).then(response => response.json()).then(data => { const hits = (0, _get.default)(data, ['hits', 'hits'], []); const mediaCsids = hits.map(hit => (0, _get.default)(hit, ['_source', referenceField], '')); const mediaAltTexts = hits.map(hit => (0, _get.default)(hit, ['_source', 'media_common:altText'], '')); return dispatch(setMedia(referenceValue, institutionId, mediaCsids, mediaAltTexts)); }); }; exports.findMedia = findMedia;