Skip to content
Snippets Groups Projects
Select Git revision
  • e9b7e9832fdbee08c725ea89f39a46342c1cc0ad
  • mui5-annotation-on-video-stable default
  • get_setter_canvasSizeInformations
  • fix-error-div-into-p
  • annotation-on-video-v2
  • detached
  • annotation-on-video-r17
  • mui5
  • mui5-react-18
  • jacob-test
  • annotation-on-video protected
  • master
  • test-antoinev1
  • 20-fetch-thumbnail-on-annotation
  • add-research-field
  • Save
  • add-plugin
  • 14-wip-no-seek-to
  • 14-bug-on-video-time-control
  • 9_wip_videotests
  • _upgrade_material_ui
  • latest-tetras-16
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v3.0.0-rc.7
  • v3.0.0-rc.6
  • v3.0.0-rc.5
  • v3.0.0-rc.4
  • v3.0.0-rc.3
  • v3.0.0-rc.2
  • v3.0.0-rc.1
  • v3.0.0-beta.10
  • v3.0.0-beta.9
  • v3.0.0-beta.8
  • v3.0.0-beta.7
  • v3.0.0-beta.6
  • v3.0.0-beta.5
  • v3.0.0-beta.3
41 results

infoResponse.js

Blame
  • infoResponse.js 2.77 KiB
    import { fetch } from 'vedavaapi-web';
    import { Utils } from 'manifesto.js/dist-esmodule/Utils';
    import ActionTypes from './action-types';
    
    /**
     * requestInfoResponse - action creator
     *
     * @param  {String} infoId
     * @memberof ActionCreators
     */
    export function requestInfoResponse(infoId) {
      return {
        infoId,
        type: ActionTypes.REQUEST_INFO_RESPONSE,
      };
    }
    
    /**
     * receiveInfoResponse - action creator
     *
     * @param  {String} infoId
     * @param  {Object} manifestJson
     * @memberof ActionCreators
     */
    export function receiveInfoResponse(infoId, infoJson, ok) {
      return {
        infoId,
        infoJson,
        ok,
        type: ActionTypes.RECEIVE_INFO_RESPONSE,
      };
    }
    
    /**
     * receiveInfoResponseFailure - action creator
     *
     * @param  {String} infoId
     * @param  {String} error
     * @memberof ActionCreators
     */
    export function receiveInfoResponseFailure(infoId, error) {
      return {
        error,
        infoId,
        type: ActionTypes.RECEIVE_INFO_RESPONSE_FAILURE,
      };
    }
    /** @private */
    function getAccessToken({ accessTokens }, iiifService) {
      if (!iiifService) return undefined;
    
      const services = Utils.getServices(iiifService).filter(s => s.getProfile().match(/http:\/\/iiif.io\/api\/auth\/1\//));
    
      for (let i = 0; i < services.length; i += 1) {
        const authService = services[i];
        const accessTokenService = Utils.getService(authService, 'http://iiif.io/api/auth/1/token');
        const token = accessTokens[accessTokenService.id];
        if (token && token.json) return token.json.accessToken;
      }
    
      return undefined;
    }
    
    /**
     * fetchInfoResponse - action creator
     *
     * @param  {String} infoId
     * @memberof ActionCreators
     */
    export function fetchInfoResponse({ imageId, imageResource }) {
      return ((dispatch, getState) => {
        const state = getState();
        const infoId = imageId || `${
          imageResource.getServices()[0].id.replace(/\/$/, '')
        }`;
        const headers = {};
    
        const infoResponse = infoId
          && state.infoResponses
          && state.infoResponses[infoId]
          && !state.infoResponses[infoId].isFetching
          && state.infoResponses[infoId].json;
    
        const token = getAccessToken(
          getState(),
          infoResponse || (imageResource && imageResource.getServices()[0]),
        );
    
        if (token) {
          headers.Authorization = `Bearer ${token}`;
        }
    
        dispatch(requestInfoResponse(infoId));
    
        return fetch(`${infoId}/info.json`, { headers })
          .then(response => response.json().then(json => ({ json, ok: response.ok })))
          .then(({ json, ok }) => dispatch(receiveInfoResponse(infoId, json, ok)))
          .catch(error => dispatch(receiveInfoResponseFailure(infoId, error)));
      });
    }
    
    /**
     * removeInfoResponse - action creator
     *
     * @param  {String} infoId
     * @memberof ActionCreators
     */
    export function removeInfoResponse(infoId) {
      return { infoId, type: ActionTypes.REMOVE_INFO_RESPONSE };
    }