UNPKG

@collectionspace/cspace-public-browser

Version:
60 lines (47 loc) 1.63 kB
/* global document, window */ import React from 'react'; import { render } from 'react-dom'; import { RawIntlProvider } from 'react-intl'; import { applyMiddleware, compose, createStore } from 'redux'; import { Provider as StoreProvider } from 'react-redux'; import thunk from 'redux-thunk'; import warning from 'warning'; import { loadPrefs } from './actions/prefsActions'; import config from './config'; import App from './components/App'; import { createIntl } from './intl'; import reducer from './reducers'; import * as formatters from './helpers/formatHelpers'; const cspacePublicBrowser = (...customConfigs) => { config.merge(...customConfigs); const container = config.get('container'); const mountNode = document.querySelector(container); warning( mountNode, `No container element was found using the selector '${container}'. The CollectionSpace collection browser will not be rendered.`, ); if (!mountNode) { return; } // eslint-disable-next-line no-underscore-dangle const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const store = createStore(reducer, composeEnhancers(applyMiddleware(thunk))); store.dispatch(loadPrefs()); const locale = config.get('locale'); const messages = config.get('messages'); const intl = createIntl({ locale, messages, defaultLocale: 'en-US', }); render( <RawIntlProvider value={intl}> <StoreProvider store={store}> <App /> </StoreProvider> </RawIntlProvider>, mountNode, ); }; cspacePublicBrowser.formatters = formatters; export default cspacePublicBrowser;