{"version":3,"sources":["webpack:///./js/react/CustomContainerBuilder.ts","webpack:///./js/services/LocalisationService.ts","webpack:///./js/react/hooks/useLocales.ts","webpack:///./js/react/shared/LocalisationProvider.tsx","webpack:///./js/react/CustomDomFactory.tsx","webpack:///./js/react/registrations.ts","webpack:///./js/react/index.ts","webpack:///./js/react/shared/HabitatContext.tsx"],"names":["CustomContainerBuilder","ContainerBuilder","registerIfPresent","operator","key","components","Array","from","document","querySelectorAll","length","this","registerAsync","as","constructor","locales","fetchLocales","once","async","response","fetch","cache","headers","Accept","ok","json","err","console","warn","useLocales","setLocales","useState","useEffect","LocalisationService","load","then","data","LocalisationProvider","children","cultureCode","useHabitat","React","createElement","EOLocale","Provider","language","CustomDomFactory","inject","module","props","target","element","HabitatProvider","habitat","render","dispose","unmountComponentAtNode","registrations","name","component","MyApp","Bootstrapper","super","containerBuilder","factory","forEach","registration","setContainer","build","HabitatContext","createContext","proxy","otherProps","value","useContext"],"mappings":"4GACe,MAAMA,UAA+BC,mBAEhDC,kBAAkBC,EAAUC,GACxB,MAAMC,EAAaC,MAAMC,KAAKC,SAASC,iBAAT,2BAA8CL,EAA9C,QACzBC,GAAeA,EAAWK,QAG/BC,KAAKC,cAAcT,GAAUU,GAAGT,I,sDCmCzB,UAzCf,MACIU,cAIIH,KAAKI,QAAU,GAIfJ,KAAKK,aAAeC,YAAKC,UACrB,MAAMC,QAAiBC,MAXnB,oBAWkC,CAClCC,MAAO,WACPC,QAAS,CACLC,OAAQ,sBAGhB,OAAKJ,EAASK,SAGKL,EAASM,OAFjB,KASnB,aAAa,MACT,aAAId,KAAKI,eAAT,aAAI,EAAcL,OACd,OAAOC,KAAKI,QAEhB,IAEI,OADAJ,KAAKI,cAAgBJ,KAAKK,eACnBL,KAAKI,QAEhB,MAAOW,GAGH,OADAC,QAAQC,KAAKF,GACN,MC5BJG,MATI,KACf,MAAOd,EAASe,GAAcC,mBAAS,IAMvC,OALAC,oBAAU,KACNC,EAAoBC,OAAOC,KAAMC,IAC7BN,EAAWM,MAEhB,IACI,CAACrB,EAASe,ICKNO,MAVe,IAAiB,IAAjB,SAAEC,GAAe,EAC3C,MACMC,EADUC,cACYD,aACrBxB,GAAWc,IAClB,OAAKd,GAAYA,EAAQL,OAIjB+B,IAAMC,cAAcC,IAASC,SAAU,CAAEC,SAAUN,EAAaxB,QAASA,GAAWuB,GAFjF,MCSAQ,MAff,MAEIC,OAAOC,EAAQC,EAAOC,GAClB,GAAIA,EAAQ,CACR,MAAMC,EAAWV,IAAMC,cAAcU,IAAiB,CAAEC,QAASJ,GAC7DR,IAAMC,cAAcL,EAAsB,KAAMI,IAAMC,cAAcM,EAAQC,KAChFK,iBAAOH,EAASD,IAGxBK,QAAQL,GACAA,GACAM,iCAAuBN,KCoCpBO,MAlDO,CAClB,CACIC,KAAM,eACNC,UAAW,IAAM,oEAErB,CACID,KAAM,sBACNC,UAAW,IAAM,6DAErB,CACID,KAAM,yBACNC,UAAW,IAAM,6DAErB,CACID,KAAM,sBACNC,UAAW,IAAM,6DAErB,CACID,KAAM,yBACNC,UAAW,IAAM,6DAErB,CACID,KAAM,4BACNC,UAAW,IAAM,6DAErB,CACID,KAAM,4BACNC,UAAW,IAAM,sDAErB,CACID,KAAM,sCACNC,UAAW,IAAM,sDAErB,CACID,KAAM,4CACNC,UAAW,IAAM,sDAErB,CACID,KAAM,eACNC,UAAW,IAAM,mEAErB,CACID,KAAM,kBACNC,UAAW,IAAM,+BAErB,CACID,KAAM,6BACNC,UAAW,IAAM,sEC5CzB,MAAMC,UAAcC,eAChB/C,cACIgD,QAEA,MAAMC,EAAmB,IAAI/D,EAE7B+D,EAAiBC,QAAU,IAAIlB,EAE/BW,EAAcQ,QAAQC,IAClBH,EAAiB7D,kBAAkBgE,EAAaP,UAAWO,EAAaR,QAG5E/C,KAAKwD,aAAaJ,EAAiBK,UAI5B,cAAIR,G,yfClBnB,MAAMS,EAAiBC,wBAAc,IAKxBlB,EAAmB,IAA0B,IAA1B,SAAEd,EAAF,QAAYe,GAAc,EAEtD,MAAM,MAAEkB,GAAyBlB,EAAfmB,EAAlB,EAAiCnB,EAAjC,WACA,OAAOZ,IAAMC,cAAc2B,EAAezB,SAAU,CAAE6B,MAAOD,GAAclC,IAKxE,SAASE,IACZ,OAAOkC,qBAAWL","file":"app-09dee2d718224c48cb69.js","sourcesContent":["import { ContainerBuilder } from 'react-habitat';\r\nexport default class CustomContainerBuilder extends ContainerBuilder {\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    registerIfPresent(operator, key) {\r\n        const components = Array.from(document.querySelectorAll(`[data-component=\"${key}\"]`));\r\n        if (!components || !components.length) {\r\n            return;\r\n        }\r\n        this.registerAsync(operator).as(key);\r\n    }\r\n}\r\n","import once from 'lodash-es/once';\r\nconst ApiPath = '/api/i18n/strings';\r\nclass LocalisationService {\r\n    constructor() {\r\n        /**\r\n         * The locales collection.\r\n         */\r\n        this.locales = [];\r\n        /**\r\n         * Get locales, use cached request if available.\r\n         */\r\n        this.fetchLocales = once(async () => {\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            if (!response.ok) {\r\n                return [];\r\n            }\r\n            const data = await response.json();\r\n            return data;\r\n        });\r\n    }\r\n    /**\r\n     * Get locales, use cached request if available.\r\n     */\r\n    async load() {\r\n        if (this.locales?.length) {\r\n            return this.locales;\r\n        }\r\n        try {\r\n            this.locales = await this.fetchLocales();\r\n            return this.locales;\r\n        }\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\nexport default new LocalisationService();\r\n","import { useEffect, useState } from 'react';\r\nimport LocalisationService from '@services/LocalisationService';\r\nconst useLocales = () => {\r\n    const [locales, setLocales] = useState([]);\r\n    useEffect(() => {\r\n        LocalisationService.load().then((data) => {\r\n            setLocales(data);\r\n        });\r\n    }, []);\r\n    return [locales, setLocales];\r\n};\r\nexport default useLocales;\r\n","import { EOLocale } from 'eo-locale';\r\nimport React from 'react';\r\nimport useLocales from '@react/hooks/useLocales';\r\nimport { useHabitat } from '@react/shared/HabitatContext';\r\nconst LocalisationProvider = ({ children }) => {\r\n    const habitat = useHabitat();\r\n    const cultureCode = habitat.cultureCode;\r\n    const [locales] = useLocales();\r\n    if (!locales || !locales.length) {\r\n        // @todo: Optionally include loading state here.\r\n        return null;\r\n    }\r\n    return (React.createElement(EOLocale.Provider, { language: cultureCode, locales: locales }, children));\r\n};\r\nexport default LocalisationProvider;\r\n","import React from 'react';\r\nimport { render, unmountComponentAtNode } from 'react-dom';\r\nimport { HabitatProvider } from './shared/HabitatContext';\r\nimport LocalisationProvider from './shared/LocalisationProvider';\r\nclass CustomDomFactory {\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    inject(module, props, target) {\r\n        if (target) {\r\n            const element = (React.createElement(HabitatProvider, { habitat: props },\r\n                React.createElement(LocalisationProvider, null, React.createElement(module, props))));\r\n            render(element, target);\r\n        }\r\n    }\r\n    dispose(target) {\r\n        if (target) {\r\n            unmountComponentAtNode(target);\r\n        }\r\n    }\r\n}\r\nexport default CustomDomFactory;\r\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\r\nconst registrations = [\r\n    {\r\n        name: 'PartnersList',\r\n        component: () => import(/* webpackChunkName: \"partners\" */ './partners/PartnersRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerProjectsList',\r\n        component: () => import(/* webpackChunkName: \"partner-projects-list\" */ './partners/listing/PartnerProjectsListingRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerProjectsAllList',\r\n        component: () => import(/* webpackChunkName: \"partner-projects-all-list\" */ './partners/listing/PartnerProjectsAllListingRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerShowcaseList',\r\n        component: () => import(/* webpackChunkName: \"partner-showcase-list\" */ './partners/listing/PartnerShowcaseListingRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerCaseStudiesList',\r\n        component: () => import(/* webpackChunkName: \"partner-casestudies-list\" */ './partners/listing/PartnerCaseStudiesListingRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerSuccessStoriesList',\r\n        component: () => import(/* webpackChunkName: \"partner-successstories-list\" */ './partners/listing/PartnerSuccessStoriesListingRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerItemsListingFilter',\r\n        component: () => import(/* webpackChunkName: \"partner-items-listing-filter\" */ './partners/listing/PartnerItemsListingFilterRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerProjectsAllListingTagsFilter',\r\n        component: () => import(/* webpackChunkName: \"partner-projects-all-listing-tags-filter\" */ './partners/listing/PartnerProjectsAllListingTagsFilterRoot'),\r\n    },\r\n    {\r\n        name: 'PartnerProjectsAllListingIndustriesFilter',\r\n        component: () => import(/* webpackChunkName: \"partner-projects-all-listing-industries-filter\" */ './partners/listing/PartnerProjectsAllListingIndustriesFilterRoot'),\r\n    },\r\n    {\r\n        name: 'DocumentList',\r\n        component: () => import(/* webpackChunkName: \"document-list\" */ './listing/ListingRoot'),\r\n    },\r\n    {\r\n        name: 'BlogRelatedList',\r\n        component: () => import(/* webpackChunkName: \"document-list-simple\" */ './blog/listing/BlogRelatedListingRoot'),\r\n    },\r\n    {\r\n        name: 'SlidesLivePresentationList',\r\n        component: () => import(/* webpackChunkName: \"slideslive-presentation-list\" */ './listing/presentation/ListingRoot'),\r\n    },\r\n];\r\nexport default registrations;\r\n","import { Bootstrapper } from 'react-habitat';\r\nimport CustomContainerBuilder from './CustomContainerBuilder';\r\nimport CustomDomFactory from './CustomDomFactory';\r\nimport registrations from './registrations';\r\nclass MyApp extends Bootstrapper {\r\n    constructor() {\r\n        super();\r\n        // Create container builder instance.\r\n        const containerBuilder = new CustomContainerBuilder();\r\n        // Set a custom factory to handle any context providers.\r\n        containerBuilder.factory = new CustomDomFactory();\r\n        // Register components - async allows for code splitting.\r\n        registrations.forEach(registration => {\r\n            containerBuilder.registerIfPresent(registration.component, registration.name);\r\n        });\r\n        // Finally, set the container.\r\n        this.setContainer(containerBuilder.build());\r\n    }\r\n}\r\n// Always export a 'new' instance so it immediately evokes\r\nexport default new MyApp();\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { createContext, useContext } from 'react';\r\nconst HabitatContext = createContext({});\r\n/**\r\n * Component to provide access to habitat props.\r\n * @param props\r\n */\r\nexport const HabitatProvider = ({ children, habitat }) => {\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    const { proxy, ...otherProps } = habitat;\r\n    return React.createElement(HabitatContext.Provider, { value: otherProps }, children);\r\n};\r\n/**\r\n * Hook to provide access to habitat props.\r\n */\r\nexport function useHabitat() {\r\n    return useContext(HabitatContext);\r\n}\r\n/**\r\n * HOC to provide access to habitat props.\r\n */\r\nexport function withHabitat(WrappedComponent) {\r\n    const WithHabitat = (props) => (React.createElement(HabitatContext.Consumer, null, (habitat) => React.createElement(WrappedComponent, Object.assign({}, habitat, props))));\r\n    WithHabitat.displayName = getDisplayName(WrappedComponent);\r\n    return WithHabitat;\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"],"sourceRoot":""}