UNPKG

mirador

Version:

An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.

87 lines (73 loc) 3.15 kB
import { connect } from 'react-redux'; import { compose } from 'redux'; import { Utils } from 'manifesto.js'; import { withPlugins } from '../extend/withPlugins'; import * as actions from '../state/actions'; import { getAuth, getAuthProfiles, selectCurrentAuthServices, getAccessTokens } from '../state/selectors'; import { IIIFAuthentication } from '../components/IIIFAuthentication'; /** * mapStateToProps - to hook up connect * @memberof FullScreenButton * @private */ // eslint-disable-next-line complexity const mapStateToProps = (state, { windowId }) => { const services = selectCurrentAuthServices(state, { windowId }); // TODO: get the most actionable auth service... const service = services[0]; const accessTokenService = service && (Utils.getService(service, 'http://iiif.io/api/auth/1/token') || Utils.getService(service, 'http://iiif.io/api/auth/0/token')); const logoutService = service && (Utils.getService(service, 'http://iiif.io/api/auth/1/logout') || Utils.getService(service, 'http://iiif.io/api/auth/0/logout')); const authStatuses = getAuth(state); const authStatus = service && authStatuses[service.id]; const accessTokens = getAccessTokens(state); const accessTokenStatus = accessTokenService && accessTokens[accessTokenService.id]; let status = null; if (!authStatus) { status = null; } else if (authStatus.isFetching) { if (authStatus.windowId === windowId) status = 'cookie'; } else if (accessTokenStatus && accessTokenStatus.isFetching) { if (authStatus.windowId === windowId) status = 'token'; } else if (authStatus.ok) { status = 'ok'; } else if (authStatus.ok === false) { status = 'failed'; } const authProfiles = getAuthProfiles(state); const profile = service && service.getProfile(); const isInteractive = authProfiles.some((config) => config.profile === profile && !(config.external || config.kiosk)); return { accessTokenServiceId: accessTokenService && accessTokenService.id, authServiceId: service && service.id, confirm: service && service.getConfirmLabel(), description: service && service.getDescription(), failureDescription: service && service.getFailureDescription(), failureHeader: service && service.getFailureHeader(), header: service && service.getHeader(), isInteractive, label: service && service.getLabel()[0].value, logoutConfirm: logoutService && logoutService.getLabel()[0] && logoutService.getLabel()[0].value, logoutServiceId: logoutService && logoutService.id, profile, status, }; }; /** * mapDispatchToProps - used to hook up connect to action creators * @memberof ManifestListItem * @private */ const mapDispatchToProps = { handleAuthInteraction: actions.addAuthenticationRequest, resetAuthenticationState: actions.resetAuthenticationState, resolveAccessTokenRequest: actions.resolveAccessTokenRequest, resolveAuthenticationRequest: actions.resolveAuthenticationRequest, }; const enhance = compose(connect(mapStateToProps, mapDispatchToProps), withPlugins('IIIFAuthentication')); export default enhance(IIIFAuthentication);