@collectionspace/cspace-public-browser
Version:
CollectionSpace public browser
71 lines (69 loc) • 2.54 kB
JavaScript
;
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;