{"version":3,"sources":["webpack:///./js/react/CustomContainerBuilder.js","webpack:///./js/react/shared/LocalizationProvider.jsx","webpack:///./js/react/CustomDomFactory.jsx","webpack:///./js/react/registrations.js","webpack:///./js/react/index.js","webpack:///./js/react/shared/HabitatContext.jsx","webpack:///./js/services/GlobalizationService.js","webpack:///./js/react/hooks/useLocales.js"],"names":["CustomContainerBuilder","ContainerBuilder","componentImportFunc","componentName","document","querySelectorAll","concat","this","registerAsync","as","LocalizationProvider","_ref","children","cultureCode","useHabitat","locales","useLocales","length","react_default","a","createElement","index_es","Provider","language","propTypes","PropTypes","node","isRequired","CustomDomFactory","module","props","arguments","undefined","target","habitatProps","_objectSpread","proxy","root","HabitatContext","habitat","shared_LocalizationProvider","React","render","unmountComponentAtNode","registrations","name","component","Promise","all","__webpack_require__","e","then","bind","MyApp","_this","react_classCallCheck","react_possibleConstructorReturn","react_getPrototypeOf","call","containerBuilder","factory","forEach","registration","registerIfPresent","setContainer","build","Bootstrapper","__webpack_exports__","createContext","HabitatProvider","react__WEBPACK_IMPORTED_MODULE_1___default","value","object","defaultProps","useContext","ApiPath","cachedRequest","fetchLocales","_callee3","regeneratorRuntime","wrap","_context3","prev","next","abrupt","_asyncToGenerator","mark","_callee2","resolve","response","data","_context2","fetch","cache","headers","Accept","sent","ok","json","stop","_x","apply","services_GlobalizationService","console","warn","_context","t0","_useState2","_slicedToArray","useState","setLocales","_useState4","defaultLocale","setDefaultLocale","useEffect","GlobalizationService","load","deLocale","find","d","toLowerCase"],"mappings":"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","file":"app-69a30707d731f848a28f.js","sourcesContent":["import { ContainerBuilder } from 'react-habitat';\r\n\r\nclass CustomContainerBuilder extends ContainerBuilder {\r\n /** Register component if it is present in html. */\r\n registerIfPresent(componentImportFunc, componentName) {\r\n const components = document.querySelectorAll(\r\n `[data-component=\"${componentName}\"]`,\r\n );\r\n\r\n if (!components) {\r\n return;\r\n }\r\n\r\n this.registerAsync(componentImportFunc).as(componentName);\r\n }\r\n}\r\n\r\nexport default CustomContainerBuilder;\r\n","import { EOLocale } from 'eo-locale';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\nimport useLocales from '@react/hooks/useLocales';\r\nimport { useHabitat } from '@react/shared/HabitatContext';\r\n\r\nconst LocalizationProvider = ({ children }) => {\r\n const { cultureCode } = useHabitat();\r\n const { locales } = useLocales();\r\n if (!locales || !locales.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nLocalizationProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n};\r\n\r\nexport default LocalizationProvider;\r\n","import React from 'react';\r\nimport { render, unmountComponentAtNode } from 'react-dom';\r\n\r\nimport { HabitatProvider } from '@react/shared/HabitatContext';\r\nimport LocalizationProvider from '@react/shared/LocalizationProvider';\r\n\r\nclass CustomDomFactory {\r\n inject(module, props = {}, target) {\r\n if (target) {\r\n const habitatProps = { ...props };\r\n\r\n // Remove reference to proxy dom element.\r\n delete habitatProps.proxy;\r\n\r\n const root = (\r\n \r\n {React.createElement(module, props)}\r\n \r\n );\r\n\r\n render(root, target);\r\n }\r\n }\r\n\r\n dispose(target) {\r\n if (target) {\r\n unmountComponentAtNode(target);\r\n }\r\n }\r\n}\r\n\r\nexport default CustomDomFactory;\r\n","/** React components to be registered with react-habitat. */\r\nexport default [\r\n // Registrations for the main site.\r\n {\r\n name: 'article-list',\r\n component: () => import(/* webpackChunkName: \"articles\" */ './articles/ArticlesRoot'),\r\n },\r\n {\r\n name: 'award-list',\r\n component: () => import(/* webpackChunkName: \"awards\" */ './awards/AwardsRoot'),\r\n },\r\n {\r\n name: 'cta-banner',\r\n component: () =>\r\n import(/* webpackChunkName: \"cta-banner\" */ './cta-banner/CtaBannerSearchRoot'),\r\n },\r\n {\r\n name: 'event-list',\r\n component: () => import(/* webpackChunkName: \"events\" */ './events/EventsRoot'),\r\n },\r\n {\r\n name: 'pb-editor',\r\n component: () =>\r\n import(/* webpackChunkName: \"pb-editor\" */ './pinboards/edit/PinboardEditRoot'),\r\n },\r\n {\r\n name: 'pb-toolbar',\r\n component: () => import(/* webpackChunkName: \"pb-toolbar\" */ './pinboards/toolbar/ToolbarRoot'),\r\n },\r\n {\r\n name: 'profile-list',\r\n component: () => import(/* webpackChunkName: \"profiles\" */ './profiles/ProfilesRoot'),\r\n },\r\n {\r\n name: 'search-overlay',\r\n component: () => import(/* webpackChunkName: \"search\" */ './search/SearchRoot'),\r\n },\r\n // Test registrations for the style guide.\r\n {\r\n name: 'test-article-list',\r\n component: () => import(/* webpackChunkName: \"test-articles\" */ './articles/TestArticles'),\r\n },\r\n {\r\n name: 'menu-list',\r\n component: () => import(/* webpackChunkName: \"menu-list\" */ './menu/MenuRoot'),\r\n },\r\n];\r\n","import { Bootstrapper } from 'react-habitat';\r\n\r\nimport CustomContainerBuilder from '@react/CustomContainerBuilder';\r\nimport CustomDomFactory from '@react/CustomDomFactory';\r\nimport registrations from '@react/registrations';\r\n\r\nclass MyApp extends Bootstrapper {\r\n constructor() {\r\n super();\r\n\r\n // Create container builder instance.\r\n const containerBuilder = new CustomContainerBuilder();\r\n\r\n // Set a custom factory to handle any context providers.\r\n containerBuilder.factory = new CustomDomFactory();\r\n\r\n // Register components - async allows for code splitting.\r\n registrations.forEach((registration) => {\r\n containerBuilder.registerIfPresent(\r\n registration.component,\r\n registration.name,\r\n );\r\n });\r\n\r\n // Finally, set the container.\r\n this.setContainer(containerBuilder.build());\r\n }\r\n}\r\n\r\n// Always export a 'new' instance so it immediately evokes\r\nexport default new MyApp();\r\n","import PropTypes from 'prop-types';\r\nimport React, { useContext } from 'react';\r\n\r\nconst HabitatContext = React.createContext({});\r\n\r\n/** Provide the habitat props to child components. */\r\nconst HabitatProvider = ({ children, habitat }) => (\r\n {children}\r\n);\r\n\r\nHabitatProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n // eslint-disable-next-line react/forbid-prop-types\r\n habitat: PropTypes.object,\r\n};\r\n\r\nHabitatProvider.defaultProps = {\r\n habitat: {},\r\n};\r\n\r\n/** Hook to inject habitat data. */\r\nexport const useHabitat = () => useContext(HabitatContext);\r\n\r\n/**\r\n * HOC to inject habitat data.\r\n * @description https://reactjs.org/docs/higher-order-components.html\r\n */\r\nconst withHabitat = (WrappedComponent) => {\r\n const WithHabitat = ({ ...otherProps }) => (\r\n \r\n {habitatProps => }\r\n \r\n );\r\n\r\n WithHabitat.displayName = `WithHabitat(${getDisplayName(WrappedComponent)})`;\r\n\r\n return WithHabitat;\r\n};\r\n\r\n/** Get the display name for the component. */\r\nfunction getDisplayName(WrappedComponent) {\r\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n}\r\n\r\nexport { HabitatProvider, withHabitat };\r\n","const ApiPath = '/api/i18n/strings';\r\n\r\n// Cached locales store.\r\nlet locales = null;\r\n\r\n// Cached request promise - should only need one request per session.\r\nlet cachedRequest = null;\r\n\r\n/**\r\n * Get locales, use cached request if available.\r\n */\r\nasync function fetchLocales() {\r\n if (cachedRequest) {\r\n return cachedRequest;\r\n }\r\n\r\n cachedRequest = new Promise(async resolve => {\r\n const response = await fetch(ApiPath, {\r\n cache: 'no-cache',\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n resolve([]);\r\n return;\r\n }\r\n\r\n const data = await response.json();\r\n\r\n resolve(data);\r\n });\r\n\r\n return cachedRequest;\r\n}\r\n\r\nclass GlobalizationService {\r\n async load() {\r\n if (locales && locales.length) {\r\n return locales;\r\n }\r\n\r\n try {\r\n locales = await fetchLocales();\r\n return locales;\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.warn(err);\r\n return [];\r\n }\r\n }\r\n}\r\n\r\nexport default new GlobalizationService();\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport GlobalizationService from '@services/GlobalizationService';\r\n\r\nconst useLocales = () => {\r\n const [locales, setLocales] = useState();\r\n const [defaultLocale, setDefaultLocale] = useState();\r\n\r\n useEffect(() => {\r\n GlobalizationService.load().then(data => {\r\n setLocales(data);\r\n const deLocale = data?.find(d => d.language.toLowerCase() === 'en-gb');\r\n setDefaultLocale(deLocale);\r\n });\r\n }, []);\r\n\r\n return { locales, setLocales, defaultLocale };\r\n};\r\n\r\nexport default useLocales;\r\n"],"sourceRoot":""}