{"version":3,"sources":["assets/oruk_logo_green.svg","components/footer/LinkExternal.js","components/navigator/Navigator.js","components/header/Header.js","assets/oruk_logo_white.svg","components/banner/index.js","components/footer/tiles/index.js","components/links/LinkListItem.js","components/footer/column/FooterLinksSection.js","components/footer/column/index.js","components/artefacts/stakeholder/index.js","components/home/images/index.js","components/shared/logocardlist/index.js","components/footer/Footer.js","components/genericcontentpage/BackButton.js","components/errorpage/index.js","components/shared/errorpage/errorpagegeneric.js","helpers/ContentConsumer.js","helpers/dataFetch.js","components/section/index.js","components/home/badges/index.js","components/home/card/index.js","components/home/Who/index.js","components/home/InjectHtml.js","components/artefacts/logo/index.js","components/shared/mapping/index.js","components/shared/bodytextlist/index.js","components/shared/title/index.js","components/whoisusing/Card.js","components/cardlist/index.js","components/readnext/index.js","components/home/sidebyside/index.js","components/shared/video/index.js","components/genericcontentpage/PageTitle.js","components/home/index.js","components/genericlandingpage/ArticleListPage.js","components/genericlandingpage/GenericLandingPage.js","components/whoisusing/badge/index.js","components/sidemenu/index.js","components/whoisusing/Cards/Card.js","components/whoisusing/Cards/CardList.js","components/whoisusing/LinkWithTitleSection.js","components/whoisusing/index.js","components/htmlsection/index.js","components/genericcontentpage/ReadNextLink.js","components/genericcontentpage/GenericContent.js","components/genericcontentpage/GenericContentContainer.js","components/genericcontentpage/GenericContentPage.js","components/genericcontentpage/CaseStudyRelatedLink.js","components/genericcontentpage/CaseStudy.js","components/genericcontentpage/CaseStudyPage.js","components/genericcontentpage/RegisterContent.js","components/genericcontentpage/RegisterPage.js","components/casestudies/CaseStudyOverview.js","components/casestudies/LandingPage.js","components/header/SkipToContent.js","components/dashboard/checkbox.js","components/dashboard/apiLink.js","components/dashboard/utilities.js","components/dashboard/lastChecked.js","components/dashboard/labelLink.js","components/dashboard/title.js","components/dashboard/summaryButton.js","components/dashboard/item.js","components/dashboard/items.js","components/dashboard/row.js","components/dashboard/table.js","components/dashboard/dashboard.js","components/dashboard/mockData.js","components/preview/preview.js","components/shared/cookiebanner/index.js","App.js","components/navigator/ScrollToTop.js","reportWebVitals.js","components/banner/ErrorFallback.js","index.js"],"names":["LinkExternal","link","target","styleName","rel","anchorLink","length","href","url","className","TextToDisplay","propType","PropTypes","string","isRequired","Navigator","mainMenu","menuButton","onClick","forumLink","developersLink","menuItems","map","name","index","cssClass","window","location","indexOf","lastMatch","i","isLongestMatch","to","label","Header","topMenuId","labelText","external","useState","isActive","setActive","toggleClass","src","logo","alt","aria-label","width","height","viewBox","fill","xmlns","d","toString","Banner","Title","title","LinkListItem","linkElToRender","isExternal","id","FooterLinksSection","links","FooterColumn","subSection","CompanyLogo","BASE_URL","process","formats","alternativeText","logoUrl","thumbnail","style","backgroundImage","ImageCard","CardList","itemList","BuildList","styles","logosHolder","list","item","caption","Footer","footerProps","about","setAboutLinks","howItWorks","setHowItWorksLinks","community","setCommunityLinks","involved","setInvolvedLinks","contactUs","setContactLink","technicalFeedback","setTechnicalFeedback","technicalSection","setTechnicalSection","governanceBoardLogos","setGovernanceBoardLogos","setGovernanceBoardId","useEffect","aboutLinks","howItWorksLinks","communityLinks","getInvolved","contact","technicalFeedbackLink","governanceBoardSection","Object","keys","externalLink","BackButton","parent","path","NotFound","contentRef","ref","GenericErrorPage","useOukapi","urlParam","data","setData","isError","setIsError","isFetching","setIsFetching","setUrl","a","fetch","response","status","json","console","log","fetchContent","Section","headingText","bodyText","Badge","OrganisationsIntroText","numbers","linkTitle","numbersAray","filter","n","number","paddingItem","flexible","push","addPadding","Who","InjectHtml","html","dirtyUnsafe","paragraphText","itemKey","paragraphHeader","sectionClassName","headerString","ReactDOMServer","renderToStaticMarkup","dangerouslySetInnerHTML","__html","DOMPurify","sanitize","replace","MappableList","mapList","BodyTextList","textList","benefitText","Card","cardImage","itemLinks","contentImage","paragraphTextList","benefit","ReadNextItem","linkItem","TwoColumnGrid","leftSideContent","rightSideContent","Video","source","allow","allowFullScreen","mainTitle","PageTitle","useLocation","document","ga","page","pathname","dataLayer","event","page_title","HomePage","homePageProps","classname","heroBanner","body","quote","PullQuote","BenefitsAndOpportunities","introParagraph","caseStudiesLink","benefitsSection","readNextLinks","Attribution","CommunityStatsBox","benefits","icon","next","ArticleListPage","article","GenericLandingPage","cmsLocation","articleType","setArticle","URL","then","res","jsonRes","catch","err","Array","isArray","pageData","Numbers","key","SideMenu","subMenu","menuItem","organisation","orgTitle","organisationLogo","orgLinks","orgLink","organisationList","LinkWithTitle","WhoIsUsing","pageTitle","orgSections","underNumbersText","registerLink","registerLinkWithTitle","org","getObjects","getGroups","Organisation","type","LinkWithTitleSection","covertHeadingToIdentifier","heading","toLowerCase","HtmlSection","section","children","header","sectionHeading","sectionBody","HtmlSections","sections","ReadNextLink","GenericContent","description","showDescription","articleClassName","Sections","RelatedLink","sectionHeadings","GenericContentContainer","ContentComponent","NotFoundComponent","isNotFound","setIsNotFound","setDescription","slugfield","setSlugfield","props","GenericContentPage","CaseStudyRelatedLinkContent","class","CaseStudyRelatedLink","CaseStudy","CaseStudyPage","slugField","ResponseMessage","success","error","errors","aria-live","message","FieldClassName","field","KeepInformedSection","RegisterYourOrganisation","setResponse","action","method","onSubmit","e","preventDefault","form","URLSearchParams","FormData","mode","cache","headers","onSubmitSetResponse","htmlFor","required","value","RegisterSections","identifier","RegisterContent","RegisterPage","CaseStudyOverview","LandingPage","setTitle","setIntroParagraph","landingData","isLandingError","isFeatchingLanding","casesData","isCasesError","isFeatchingCases","hasOwnProperty","caseStudyOverviewElements","caseStudy","SkipToContent","skipLink","useRef","current","blur","focus","LinkLabel","Checked","cssClassName","PartialChecked","tabIndex","Unchecked","Checkbox","isChecked","positiveMessage","negativeMessage","errorMessage","successMessage","undefined","IsServicesValidCheckbox","isServicesValid","servicesMessage","IsServiceExampleValidCheckbox","isServiceExampleValid","serviceExampleMessage","serviceExampleIdentifier","cleanTestName","IsSearchEnabled","searchResults","sort","b","testName","localeCompare","r","every","some","ApiLink","getTimeMessage","singular","Math","round","months","formatNumber","getDateText","utcDate","localDate","Date","year","getFullYear","month","getMonth","day","getDate","hour","getHours","minute","getMinutes","second","getSeconds","LastChecked","dbString","checkIsRunning","lastCheck","timeTaken","utcLastCheck","parse","date","diff","seconds","now","minutes","hours","days","getTimeDiffMessage","time","milliseconds","toFixed","getTimeTaken","getUrlAndLabel","prefix","LabelLink","OrganisationLabel","DeveloperLabel","help","SummaryButton","summary","rowNum","isOpen","setIsOpen","closeRef","overflow","dialogId","role","aria-labelledby","aria-modal","Item","isUp","Items","Row","Table","scope","contentSlugfield","contentPath","helpSlugfield","helpPath","compareLabels","sortData","fetchData","Dashboard","overrideData","content","setContent","setHelp","lastFetched","setLastFetched","newData","organisationLabel","setTimeout","contentArray","find","c","s","footer","parseContent","helpArray","reduce","accumulator","parseHelp","mockData","Page","Content","Preview","search","qs","CookieBanner","isVisible","accept","reject","initGoogleAnalytics","w","l","getTime","f","getElementsByTagName","j","createElement","async","parentNode","insertBefore","initGoogleAnalyticsIfCookie","RegExp","exec","cookie","App","homeProps","setHomeProps","setTopMenuId","setMainMenu","useCookies","cookies","setCookie","showBanner","setShowBanner","routes","exact","render","match","params","substring","top_menu","hash","element","getElementById","scrollIntoView","setDate","expires","ScrollToTop","scrollTo","top","left","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ErrorFallback","ReactDOM","StrictMode","fallbackRender"],"mappings":"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","file":"static/js/main.a570380f.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/oruk_logo_green.4e4eae95.svg\";","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst LinkExternal = ({link, target, styleName}) => {\r\n\r\n let rel = target && target === \"_blank\" ? \"noreferrer noopener\" : \"\";\r\n\r\n let anchorLink = rel.length > 0? {link.TextToDisplay}\r\n : {link.TextToDisplay}\r\n \r\n return (\r\n <>\r\n {link && anchorLink}\r\n \r\n )\r\n}\r\n\r\nLinkExternal.propType = {\r\n link: PropTypes.string.isRequired,\r\n target: PropTypes.string.isRequired,\r\n}\r\n\r\nexport default LinkExternal;","import { Link } from \"react-router-dom\";\r\nimport { PropTypes } from \"prop-types\";\r\nimport LinkExternal from \"../footer/LinkExternal\";\r\n\r\nconst Navigator = ({\r\n mainMenu,\r\n menuButton,\r\n onClick,\r\n forumLink,\r\n developersLink,\r\n}) => {\r\n const isLongestMatch = (mainMenu, index) => {\r\n if (window.location.href.indexOf(mainMenu[index].link) === -1) {\r\n return false;\r\n }\r\n let lastMatch = mainMenu[index].link.length;\r\n for (let i = 0; i < mainMenu.length; i++) {\r\n if (\r\n i !== index &&\r\n window.location.href.indexOf(mainMenu[i].link) > -1 &&\r\n lastMatch < mainMenu[i].link.length\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n const menuItems = mainMenu.map(function (name, index) {\r\n let cssClass = \"nav-link\";\r\n\r\n // apply active class if we are on the current\r\n if (mainMenu[index] != null && isLongestMatch(mainMenu, index)) {\r\n cssClass += \" active\";\r\n }\r\n\r\n return (\r\n
  • \r\n \r\n {mainMenu[index].label}\r\n \r\n
  • \r\n );\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n
      {menuItems}
    \r\n \r\n );\r\n};\r\nNavigator.propTypes = {\r\n mainMenu: PropTypes.array.isRequired,\r\n topMenuId: PropTypes.string.isRequired,\r\n menuButton: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n};\r\n\r\nexport default Navigator;\r\n","import logo from \"../../assets/oruk_logo_green.svg\";\r\nimport { useState } from \"react\";\r\nimport Navigator from \"../navigator/Navigator\";\r\nimport { Link } from \"react-router-dom\";\r\nimport LinkExternal from \"../footer/LinkExternal\";\r\n\r\nconst Header = ({ mainMenu, topMenuId }) => {\r\n const forumLink = {\r\n url: \"https://forum.openreferral.org/\",\r\n TextToDisplay: \"Forum\",\r\n labelText: \"Forum\",\r\n external: true,\r\n };\r\n\r\n const developersLink = {\r\n url: \"https://developers.openreferraluk.org\",\r\n TextToDisplay: \"For developers\",\r\n labelText: \"For developers\",\r\n external: true,\r\n };\r\n\r\n const [isActive, setActive] = useState(false);\r\n\r\n const toggleClass = () => {\r\n setActive(!isActive);\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \"Open\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isActive ? \"Close\" : \"Menu\"}\r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default Header;\r\n","export default __webpack_public_path__ + \"static/media/oruk_logo_white.29db5fe2.svg\";","import logo from \"../../assets/oruk_logo_white.svg\"\r\nimport { Link } from \"react-router-dom\";\r\nimport LinkExternal from \"../footer/LinkExternal\";\r\n\r\n\r\nconst Banner = () => {\r\n\r\n const developersLink = {\r\n url: \"https://developers.openreferraluk.org\",\r\n TextToDisplay: \"For developers\",\r\n labelText: \"For developers\",\r\n external: true\r\n };\r\n\r\n const forumLink = {\r\n url: \"https://forum.openreferral.org/\",\r\n TextToDisplay: \"Forum\",\r\n labelText: \"Forum\",\r\n external: true\r\n };\r\n\r\n return (\r\n
    \r\n \"Open\r\n {/**extract to small component for header and footer */}\r\n \r\n \r\n
    \r\n )\r\n}\r\nexport default Banner;\r\n","import React from 'react';\r\n\r\n\r\nconst Title = ({title}) => {\r\n //style should really live with caller\r\n return

    {title}

    \r\n\r\n}\r\nexport default Title;","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport LinkExternal from '../footer/LinkExternal';\r\n\r\nconst LinkListItem = ({ link }) => {\r\n\tif (!link) return null;\r\n\r\n\tlet linkElToRender;\r\n\r\n\tif (link.isExternal) {\r\n\t\tlinkElToRender = \r\n\t} else {\r\n\t\tlinkElToRender = {link.TextToDisplay}\r\n\t}\r\n\r\n\treturn
  • \r\n\t\t{linkElToRender}\r\n\t
  • ;\r\n}\r\n\r\nexport default LinkListItem;\r\n","import Title from '../tiles';\r\nimport LinkListItem from '../../links/LinkListItem';\r\n\r\nconst FooterLinksSection = ({title, links}) => {\r\n return (\r\n <>\r\n \r\n <ul>\r\n {\r\n links.map(link => {\r\n return <LinkListItem key={link.id} link={link} />\r\n })}\r\n </ul>\r\n </>\r\n )\r\n}\r\n\r\nexport default FooterLinksSection;","import React from 'react';\r\nimport FooterLinksSection from \"./FooterLinksSection\";\r\n\r\nconst FooterColumn = ({ title, links, subSection }) => {\r\n\r\n return (\r\n <div className=\"footer__column\">\r\n <FooterLinksSection title={title} links={links}/>\r\n {subSection}\r\n </div>\r\n )\r\n\r\n}\r\nexport default FooterColumn;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n\r\nconst CompanyLogo = ({logo}) => {\r\n \r\n const BASE_URL = process.env.REACT_APP_BASE_URL\r\n const { formats, alternativeText, /*height, width,*/ id} = logo;\r\n \r\n let logoUrl = BASE_URL ? `${BASE_URL}${logo.CompanyLogo.formats.thumbnail.url }`:\"\";\r\n\r\n //thumbnail does not work well for large screen spit out different image for large `formats.small ? ${BASE_URL}${formats.small.url}` : `${BASE_URL}${formats.thumbnail.url }`\r\n //massive refactor required \r\n return (\r\n <>\r\n { formats && (formats.thumbnail) ? <p key={id}><div className=\"CompanyLogo\" style={{ backgroundImage: `url(${logoUrl})` }} title={alternativeText ? alternativeText : \"company_logo\"}/></p>\r\n : (<div key={id} className=\"CompanyLogo\" style={{ backgroundImage: `url(${logoUrl})` }} title={alternativeText ? alternativeText : \"\"} ></div>) }\r\n </>\r\n )\r\n}\r\n\r\nCompanyLogo.propTypes = {\r\n logos: PropTypes.object\r\n}\r\n\r\nexport default CompanyLogo;\r\n","import React from 'react';\r\nimport CompanyLogo from '../../artefacts/stakeholder';\r\n\r\n//use generic\r\n \r\nconst ImageCard = ({logo, id, styleName}) => {\r\n /* return one org a single card */\r\n /* variation in api properties */\r\n \r\n return (\r\n <div key={id} className={styleName}>\r\n {logo && <CompanyLogo logo={logo}/>}\r\n \r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageCard;","import ImageCard from '../../home/images'; //can move to shared folder\r\n\r\nconst CardList = ({ id, itemList, styles }) => {\r\n\r\n const BuildList = ({ list }) => {\r\n\r\n const logosHolder = list.map((item, index) => {\r\n if (item.CompanyLogo) {\r\n return (\r\n <li key={item.id ? `${item.id}_itemcard` : \"\"}\r\n className=\"img\">\r\n <a href={item.link} \r\n className=\"link-with-image\"\r\n aria-label={item.CompanyLogo.caption}>\r\n <ImageCard id={id} logo={item} styleName=\"\" />\r\n </a>\r\n </li>\r\n )\r\n } else {\r\n return <li key={index} className=\"img\"></li>\r\n }\r\n })\r\n return <ul className=\"home-card-content\">{logosHolder}</ul>\r\n }\r\n return (\r\n (itemList && itemList.length > 0) ? <BuildList list={itemList}/> :\r\n null\r\n )\r\n}\r\n\r\nexport default CardList;\r\n","\r\nimport Banner from '../banner';\r\nimport Title from './tiles';\r\nimport { useEffect, useState } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport FooterColumn from './column';\r\nimport FooterLinksSection from './column/FooterLinksSection';\r\nimport CardList from '../shared/logocardlist';\r\n//review refactor\r\n//todo - terms and conditions policy to go into grid\r\n\r\nconst Footer = ({ footerProps, styleName }) => {\r\n\r\n const [about, setAboutLinks] = useState({});\r\n const [howItWorks, setHowItWorksLinks] = useState({});\r\n const [community, setCommunityLinks] = useState({});\r\n const [involved, setInvolvedLinks] = useState({});\r\n const [contactUs, setContactLink] = useState({});\r\n const [technicalFeedback, setTechnicalFeedback] = useState(null);\r\n const [technicalSection, setTechnicalSection] = useState(null);\r\n const [governanceBoardLogos, setGovernanceBoardLogos] = useState([]);\r\n const [id, setGovernanceBoardId] = useState(101);\r\n\r\n\r\n useEffect(() => {\r\n\r\n if (footerProps) {\r\n\r\n if (footerProps.aboutLinks) setAboutLinks(footerProps.aboutLinks);\r\n if (footerProps.howItWorksLinks) setHowItWorksLinks(footerProps.howItWorksLinks);\r\n if (footerProps.communityLinks) setCommunityLinks(footerProps.communityLinks);\r\n if (footerProps.getInvolved) setInvolvedLinks(footerProps.getInvolved);\r\n if (footerProps.contact) setContactLink(footerProps.contact);\r\n if (footerProps.technicalFeedbackLink) setTechnicalFeedback(footerProps.technicalFeedbackLink);\r\n if (footerProps.governanceBoardSection) setGovernanceBoardId(footerProps.governanceBoardSection.id)\r\n if (footerProps.governanceBoardSection && footerProps.governanceBoardSection.governanceBoardLogos) setGovernanceBoardLogos(footerProps.governanceBoardSection.governanceBoardLogos);\r\n\r\n }\r\n }, [footerProps]);\r\n\r\n useEffect(() => {\r\n if (technicalFeedback) {\r\n setTechnicalSection((\r\n <div className=\"footer__column__subsection\">\r\n <FooterLinksSection links={[technicalFeedback.link]} title={technicalFeedback.title} />\r\n </div>\r\n ))\r\n }\r\n }, [technicalFeedback]);\r\n\r\n // there is an id property if needed when refactored\r\n\r\n return (\r\n Object.keys(about).length > 0 &&\r\n (<footer className={styleName}>\r\n\r\n <div className=\"page-container\">\r\n <div className=\"footer__top\">\r\n <Banner />\r\n\r\n <div className=\"footerwrapper\">\r\n <div className=\"footer__column\">\r\n <Title title=\"Our stakeholders\" />\r\n {/*is id actually needed upstream? */}\r\n <CardList id={id} itemList={governanceBoardLogos} /> \r\n </div>\r\n\r\n <FooterColumn links={[{ ...involved.link, external: true }]} title={involved.title} externalLink={true} />\r\n <FooterColumn links={[contactUs.link]} title={contactUs.title} subSection={technicalSection} />\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div className=\"footer__bottom\">\r\n <div className=\"page-container\">\r\n <div className=\"footerwrapper\">\r\n <FooterColumn links={about.links} title={about.title} />\r\n <FooterColumn links={howItWorks.links} title={howItWorks.title} />\r\n <FooterColumn links={community.links} title={community.title} />\r\n </div>\r\n\r\n <div className=\"footnotegrid\">\r\n <p>\r\n <small>Copyright © 2019–2021 Open Referral UK</small>\r\n </p>\r\n <ul>\r\n <li key=\"0\"><a href=\"https://datastudio.google.com/u/0/reporting/42d2977d-50c8-4ef0-b35d-b1e8f531c4a8/page/uASQC?s=o3Lxx3np8YE\"><small>Website analytics</small></a></li>\r\n <li key=\"1\"><Link to=\"/accessibility-statement\"><small>Accessibility statement</small></Link></li>\r\n <li key=\"2\"><Link to=\"/terms-conditions\"><small>Terms & Conditions</small></Link></li>\r\n <li key=\"3\"><Link to=\"/privacy-policy\"><small>Privacy Policy</small></Link></li>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </footer>)\r\n );\r\n\r\n}\r\n\r\nexport default Footer;\r\n","import { Link } from \"react-router-dom\";\r\n\r\nconst BackButton = ({ parent }) => {\r\n if (!parent) return null;\r\n\r\n return (\r\n <Link\r\n className=\"button button-tertiary button-back\"\r\n to={parent.path}\r\n aria-label={`Back to ${parent.title}`}\r\n >\r\n {parent.title}\r\n </Link>\r\n );\r\n};\r\n\r\nexport default BackButton;\r\n","import React from 'react';\r\nimport BackButton from '../genericcontentpage/BackButton';\r\n\r\nconst NotFound = ({ parent, contentRef }) => <main id=\"content\" className=\"main-container\" ref={contentRef} >\r\n <div className=\"page-container flex-container\">\r\n <article className=\"flex-right\">\r\n <BackButton parent={parent} />\r\n\t\t\t<h1>Page not found</h1>\r\n <p>\r\n If you typed the web address, check it is correct.\r\n </p>\r\n <p>\r\n If you pasted the web address, check you copied the entire address.\r\n </p>\r\n <p>\r\n Or, you can navigate to the <a href=\"/\">homepage</a> and find the page in the website's menu.\r\n </p>\r\n <p>\r\n If you're still not able to find what you need, <a href=\"mailto:hello@openreferraluk.org\">contact us</a> for help.\r\n </p>\r\n </article>\r\n </div>\r\n</main>;\r\n\r\nexport default NotFound;","import React from 'react';\r\n\r\n\r\nconst GenericErrorPage = ({contentRef}) => {\r\n return <main id='content' className='main-container' ref={contentRef}>\r\n <p>Something went wrong</p>\r\n </main>;\r\n}\r\nexport default GenericErrorPage","//lets refactor this we can look at together but I have made this env var change because the url is likely to change\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL || 'https://admin.beta.openreferraluk.org';\r\nconst LANDING_PAGE_URI = '/home-page';\r\nconst MENU_URI = '/top-menus';\r\nconst SUB_MENU_URI = '/sub-menus/';\r\n\r\n//const BASE_URL = process.env.REACT_APP_BASE_URL;\r\n//const LANDING_PAGE_URI = process.env.REACT_APP_HOME_PAGE_URI;\r\n//const MENU_URI = process.env.;\r\n\r\n\r\nexport const fetchLandingPageContent = () => {\r\n //consider using nlogge\r\n\r\n return fetch(BASE_URL + LANDING_PAGE_URI)\r\n .then(async res => {\r\n if (res.status === 200) {\r\n return await res.json();\r\n } else {\r\n console.log(\"An exception occurred within the application, please contact the administrator.\");\r\n }\r\n }).catch(err => console.log(\"An exception occurred within the application, please contact the administrator.\"));\r\n}\r\n\r\nexport const fetchMainMenuItems = () => {\r\n return fetch(BASE_URL + MENU_URI)\r\n .then(async res => {\r\n\r\n if (res.status === 200) {\r\n return await res.json();\r\n } else {\r\n console.log(\"An exception occurred within the application, please contact the administrator.\");\r\n }\r\n\r\n })\r\n}\r\n\r\nexport const fetchSubMenuItems = subMenuId => {\r\n return fetch(BASE_URL + SUB_MENU_URI + subMenuId)\r\n .then(res => res.json()).catch(err => { throw new Error(\"Network time out\") });\r\n}","import { useEffect, useState } from \"react\";\r\n\r\n\r\n//build in caching\r\nconst useOukapi = (urlParam) => {\r\n\r\n const [data, setData] = useState({});\r\n const [isError, setIsError] = useState(false);\r\n const [isFetching, setIsFetching] = useState(true);\r\n const [url, setUrl] = useState(urlParam);\r\n\r\n useEffect(() => {\r\n const fetchContent = async () => {\r\n setIsError(false);\r\n\r\n //value not set checks call error page\r\n try {\r\n const response = await fetch(url);\r\n if (response.status === 200) {\r\n setData(await response.json());\r\n setIsFetching(false);\r\n }\r\n } catch (error) {\r\n console.log(\"An exception occurred within the application, please contact the administrator.\")\r\n setIsError(true);\r\n setIsFetching(false);\r\n }\r\n };\r\n \r\n fetchContent();\r\n\r\n }, [url, urlParam]);\r\n\r\n return [{ data, isError }, isFetching, setUrl];\r\n};\r\n\r\nexport default useOukapi;","import ReactMarkdown from 'react-markdown';\r\n\r\n\r\nconst Section = ({ headingText, bodyText }) => {\r\n\r\n return (\r\n <>\r\n <section className=\"hero-container\">\r\n <div>\r\n <h1>{headingText}</h1>\r\n <ReactMarkdown>{bodyText}</ReactMarkdown>\r\n </div>\r\n </section>\r\n </>\r\n\r\n )\r\n}\r\nexport default Section;","import React from \"react\";\r\n\r\nconst Badge = ({\r\n OrganisationsIntroText,\r\n numbers,\r\n title,\r\n linkTitle,\r\n label,\r\n}) => {\r\n //return a single badge pass params\r\n //to be generic version\r\n\r\n const keyArray = Object.keys(numbers).filter((n) => n !== \"id\");\r\n\r\n const numbersAray = keyArray.map((number) => {\r\n return (\r\n <li className=\"numbers\" key={number}>\r\n <span>{numbers[number]}</span> {number}\r\n </li>\r\n );\r\n });\r\n\r\n return (\r\n numbers && (\r\n <>\r\n <ul className=\"numbers-container\">{numbersAray}</ul>\r\n <a\r\n href=\"/register\"\r\n className=\"button button-primary\"\r\n >\r\n {label}\r\n </a>\r\n </>\r\n )\r\n );\r\n};\r\nexport default Badge;\r\n","import ImageCard from \"../images/\";\r\n\r\nconst CardList = ({ id, itemList, styles }) => {\r\n let i = 1000;\r\n const addPadding = () => {\r\n if (itemList.length && itemList.length % 4 !== 0) {\r\n //pad out images for even distribution\r\n const paddingItem = {\r\n flexible: \"\",\r\n id: i,\r\n };\r\n i = i + 1;\r\n itemList.push(paddingItem);\r\n }\r\n };\r\n\r\n const BuildList = ({ list }) => {\r\n addPadding();\r\n const logosHolder = list\r\n .filter((item) => !!item.CompanyLogo)\r\n .map((item) => {\r\n if (item.CompanyLogo) {\r\n return (\r\n <li key={item.id ? `${item.id}_itemcard` : \"\"} className=\"img\">\r\n <a\r\n href={item.link}\r\n className=\"link-with-image\"\r\n aria-label={item.CompanyLogo.caption}\r\n >\r\n <ImageCard id={id} logo={item} styleName=\"\" />\r\n </a>\r\n </li>\r\n );\r\n } else {\r\n return <li key={i++} className=\"img\"></li>;\r\n }\r\n });\r\n\r\n return <ul className=\"home-card-content\">{logosHolder}</ul>;\r\n };\r\n\r\n if (!itemList || !itemList.length) return null;\r\n\r\n return <BuildList list={itemList} />;\r\n};\r\nexport default CardList;\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport Badge from \"../badges/\"\r\nimport CardList from '../card/';\r\n\r\nconst Who = ({ CompanyLogo, id, OrganisationsIntroText, numbers, title, linkTitle }) => {\r\n\r\n return (\r\n <div className=\"who who--homepage\">\r\n <h2>{title}</h2>\r\n <div>\r\n <Badge numbers={numbers} label=\"Feature your organisation\" />\r\n </div>\r\n <p>{OrganisationsIntroText}</p>\r\n <div>\r\n <CardList id={id} itemList={CompanyLogo} />\r\n </div>\r\n {\r\n (linkTitle = true && (\r\n <Link className=\"nav-link\" to=\"/community/standard-community\">\r\n View all of the organisations in our community\r\n </Link>\r\n ))\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nexport default Who;","import React from \"react\";\r\nimport ReactDOMServer from \"react-dom/server\";\r\nimport PropTypes from \"prop-types\";\r\nimport DOMPurify from \"dompurify\";\r\n\r\nconst BASE_URL =\r\n process.env.REACT_APP_BASE_URL || \"https://admin.beta.openreferraluk.org\";\r\n\r\nconst cleanMarkup = (dirtyUnsafe) => {\r\n const sanitizedParam = DOMPurify.sanitize(dirtyUnsafe);\r\n return sanitizedParam;\r\n};\r\n\r\nconst correctImgPath = (html) =>\r\n html.replace(/src=\"\\/uploads\\/(.*)\"/gm, `src=\"${BASE_URL}/uploads/$1\"`);\r\n\r\nconst InjectHtml = ({\r\n paragraphText,\r\n itemKey,\r\n paragraphHeader,\r\n sectionClassName = \"format\",\r\n}) => {\r\n const headerString = ReactDOMServer.renderToStaticMarkup(paragraphHeader);\r\n return (\r\n <section\r\n key={itemKey}\r\n className={sectionClassName}\r\n dangerouslySetInnerHTML={{\r\n __html: correctImgPath(cleanMarkup(headerString + paragraphText)),\r\n }}\r\n ></section>\r\n );\r\n};\r\n\r\nInjectHtml.propTypes = {\r\n paragraphText: PropTypes.string,\r\n};\r\n\r\nexport default InjectHtml;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n\r\nconst CompanyLogo = ({logo}) => {\r\n const BASE_URL = process.env.REACT_APP_BASE_URL\r\n const { formats } = logo;\r\n //thumbnail does not work well for large screen spit out different image for large `formats.small ? ${BASE_URL}${formats.small.url}` : `${BASE_URL}${formats.thumbnail.url }`\r\n\r\n let logoUrl = BASE_URL ? `${BASE_URL}${formats.thumbnail.url }`:\"\";\r\n\r\n return (\r\n <>\r\n {formats && formats.thumbnail && (\r\n <div className=\"CompanyLogo\" style={{ backgroundImage: `url(${logoUrl})` }} />\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nCompanyLogo.propTypes = {\r\n logos: PropTypes.object\r\n}\r\n\r\nexport default CompanyLogo;\r\n","import LinkListItem from '../../links/LinkListItem';\r\n\r\nconst MappableList = ({mapList, id, styleName}) => {\r\n return (\r\n mapList && mapList.map(item => {\r\n return <LinkListItem key={`${id}${item.id}`} styleName={styleName} link={item}/>\r\n}) \r\n )\r\n}\r\n\r\nexport default(MappableList);","\r\nconst BodyTextList = ({textList}) => {\r\n \r\n return (\r\n\r\n <p key={textList.id}>{textList.benefitText}</p>\r\n )\r\n\r\n}\r\nexport default BodyTextList;","import React from 'react';\r\nimport { PropTypes } from 'prop-types';\r\n\r\n\r\nconst Title = ({title, id, }) => {\r\n\r\n return <h2 id={id}>{title}</h2>\r\n\r\n}\r\n\r\nTitle.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n id: PropTypes.string\r\n}\r\nexport default Title;","import React from 'react';\r\nimport CompanyLogo from '../artefacts/logo';\r\n//import Logo from '../logo';\r\nimport MappableList from \"../shared/mapping/\";\r\nimport BodyTextList from \"../shared/bodytextlist/\"\r\nimport Title from '../shared/title/';\r\n\r\n\r\nconst Card = ({title, bodyText, cardImage, id, itemLinks, paragraphText, styleName}) => {\r\n /* return one org a single card text, image, title and links could be optional*/\r\n \r\n //const { id, orgTitle, organisationLogo, orgLinks} = organisation\r\n return (\r\n <div key={id} className={styleName}>\r\n {cardImage && <CompanyLogo logo={cardImage}/>}\r\n { title && <Title title={title}/> }\r\n { bodyText && <p>{bodyText}</p> }\r\n \r\n { paragraphText && <BodyTextList textList={paragraphText}/> }\r\n\r\n \r\n <ul className=\"listnostyle\">\r\n { itemLinks && <MappableList mapList={itemLinks} id={id} styleName=\"listnostyle\" /> }\r\n </ul>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Card;","import Card from \"../whoisusing/Card\"\r\nconst CardList = ({ title, bodyText, contentImage, id, itemList, paragraphTextList, styles }) => {\r\n\r\n return (\r\n \r\n itemList && itemList.length > 0 ? itemList.map(item => \r\n {\r\n return <Card key={`${id}_itemcard`} id={item.id} cardImage={contentImage} itemLinks={itemList} styleName=\"card-content\"/>\r\n }) :\r\n\r\n paragraphTextList && paragraphTextList.length > 0 && paragraphTextList.map(benefit => {\r\n return <Card key={`${benefit.id}_card`} title={title} bodyText={bodyText} paragraphText={benefit} styleName=\"card-content\" />\r\n })\r\n )\r\n \r\n}\r\nexport default CardList;\r\n","import React from 'react';\r\nimport LinkListItem from '../links/LinkListItem';\r\n\r\n\r\nconst ReadNextItem = ({ linkItem, styleName }) => {\r\n\r\n return (\r\n <LinkListItem key={linkItem.id} styleName={styleName} link={linkItem}/>\r\n );\r\n};\r\n\r\nexport default ReadNextItem;","import React from 'react';\r\n\r\n\r\nconst TwoColumnGrid = ({id, leftSideContent, rightSideContent}) => {\r\n \r\n return(\r\n <div className=\"gridRow\">\r\n <div className=\"gridColumn\">\r\n {leftSideContent}\r\n </div>\r\n { rightSideContent && <div id={id} className=\"gridColumn\">{ rightSideContent}</div> }\r\n </div>\r\n )\r\n}\r\nexport default TwoColumnGrid;","\r\n\r\nconst Video = ({ name, width, height, source }) => {\r\n\r\n return( \r\n <>\r\n <iframe id=\"videobox\" height={height} src=\"https://www.youtube.com/embed/dn1ryloOLvk\" title=\"YouTube video player\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowFullScreen></iframe>\r\n {/* this will ideally need adding to the backend to remove hard-coding*/}\r\n <div id=\"video-link\"><a href=\"https://openreferraluk.org/open-referral-uk-video-transcript\">View the full video transcript including visual description</a></div>\r\n </>\r\n \r\n )\r\n}\r\nexport default Video;\r\n\r\n","import { useEffect, } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst mainTitle = `Open Referral UK`;\r\n\r\nconst PageTitle = ({ title }) => {\r\n const location = useLocation();\r\n\r\n useEffect(() => {\r\n document.title = `${!!title ? `${title} | ` : ''}${mainTitle}`;\r\n\r\n if (!!window.ga) {\r\n window.ga('send', 'pageview', { page: location.pathname, title: document.title });\r\n }\r\n\r\n if (!!window.dataLayer) {\r\n const dataLayer = window.dataLayer;\r\n dataLayer.push({ \r\n event: 'page-changed',\r\n url: location.pathname,\r\n page_title: document.title\r\n });\r\n }\r\n\r\n return () => {\r\n document.title = mainTitle;\r\n //window.ga('send', 'pageview', { page: location.pathname, title: document.title });\r\n };\r\n }, [title, location]);\r\n\r\n return <></>;\r\n};\r\n\r\nexport default PageTitle;","import React from \"react\";\r\nimport Section from \"../section/index\";\r\nimport Who from \"./Who\";\r\nimport InjectHtml from \"./InjectHtml\";\r\nimport PropTypes from \"prop-types\";\r\nimport CardList from \"../cardlist/\";\r\nimport Title from \"../shared/title\";\r\nimport { Link } from \"react-router-dom\";\r\nimport ReadNextItem from \"../readnext\";\r\nimport TwoColumnGrid from \"./sidebyside/\";\r\nimport Video from \"../shared/video\";\r\nimport PageTitle from \"../genericcontentpage/PageTitle\";\r\n//refactoring\r\n//look at structure of api response for page\r\n//remove env var setting and checks for now as I cannot pick them up on the server at the moment\r\n\r\nfunction HomePage({ homePageProps, contentRef, classname }) {\r\n const {\r\n heroBanner: { body, title },\r\n PullQuote: { quote },\r\n BenefitsAndOpportunities,\r\n introParagraph,\r\n caseStudiesLink,\r\n benefitsSection,\r\n readNextLinks,\r\n } = homePageProps;\r\n\r\n let caseStudyLinks = [];\r\n caseStudyLinks.push(caseStudiesLink);\r\n\r\n return (\r\n <main id=\"content\" ref={contentRef} className=\"main-container\">\r\n <PageTitle title={\"\"} />\r\n\r\n <div className=\"page-container\">\r\n <Section headingText={title} bodyText={body} styleName=\"section\" />\r\n <TwoColumnGrid\r\n id=\"right\"\r\n leftSideContent={<InjectHtml paragraphText={introParagraph} />}\r\n rightSideContent={<Video name=\"oruk-video\" height=\"250\" />}\r\n />\r\n {caseStudiesLink && caseStudiesLink.id && (\r\n <p id=\"case-studies\" className=\"card-content\">\r\n <Link to={caseStudiesLink.url}>\r\n {caseStudiesLink.TextToDisplay}\r\n </Link>\r\n </p>\r\n )}\r\n  \r\n </div>\r\n\r\n {quote && (\r\n <section className=\"figure-block\">\r\n <figure className=\"page-container\">\r\n <blockquote className=\"format\">\r\n {homePageProps.PullQuote.quote}\r\n </blockquote>\r\n <figcaption>\r\n {homePageProps.PullQuote.Attribution &&\r\n homePageProps.PullQuote.Attribution}\r\n </figcaption>\r\n </figure>\r\n </section>\r\n )}\r\n\r\n <div className=\"page-container\">\r\n {BenefitsAndOpportunities && (\r\n <InjectHtml\r\n paragraphText={BenefitsAndOpportunities}\r\n sectionClassName=\"format list-items-boxed benefits\"\r\n />\r\n )}\r\n\r\n {homePageProps.CommunityStatsBox &&\r\n homePageProps.CommunityStatsBox.title && (\r\n <Who {...homePageProps.CommunityStatsBox} />\r\n )}\r\n\r\n {benefitsSection && benefitsSection.title && (\r\n <Title title={benefitsSection.title} />\r\n )}\r\n {benefitsSection &&\r\n benefitsSection.introParagraph &&\r\n benefitsSection.benefits && <p>{benefitsSection.introParagraph}</p>}\r\n {benefitsSection && benefitsSection.benefits && (\r\n <div id={`${benefitsSection.id}_title`} className=\"cardgrid\">\r\n <CardList\r\n key={benefitsSection.id}\r\n bodyText={benefitsSection.benefits.benefitText}\r\n paragraphTextList={benefitsSection.benefits}\r\n contentImage={benefitsSection.benefits.icon}\r\n />\r\n </div>\r\n )}\r\n <hr />\r\n {readNextLinks && (\r\n <div>\r\n <ul className=\"listnostyle readlinkscard\">\r\n {readNextLinks.map((next, index) => {\r\n return (\r\n <ReadNextItem\r\n key={index}\r\n linkItem={next}\r\n styleName=\"listnostyle readlinksitem\"\r\n />\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n </main>\r\n );\r\n}\r\n\r\nHomePage.propTypes = {\r\n links: PropTypes.array,\r\n};\r\n\r\nexport default HomePage;\r\n","import React from 'react';\r\nimport ReadNextItem from '../readnext';\r\n\r\nconst ArticleListPage = ({article}) => {\r\n\r\n return (\r\n article.links &&\r\n <ul className=\"card-link-container listnostyle\">\r\n {article.links.map ((link, index) => {\r\n return <ReadNextItem key={link.id ? link.id : index} linkItem={link} styleName=\"test\" />\r\n })}\r\n </ul>\r\n )\r\n\r\n }\r\n export default ArticleListPage;\r\n\r\n","import { useState, useEffect } from 'react';\r\nimport ArticleListPage from './ArticleListPage';\r\nimport InjectHtml from \"../home/InjectHtml\";\r\nimport PageTitle from '../genericcontentpage/PageTitle';\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL;\r\n\r\nconst GenericLandingPage = ({ cmsLocation, articleType, contentRef }) => {\r\n\r\n const [article, setArticle] = useState(null);\r\n const [data, setData] = useState(null);\r\n const [isError, setIsError] = useState(null);\r\n \r\n useEffect(() => {\r\n fetch(new URL(cmsLocation, BASE_URL).href)\r\n .then(res => res.json())\r\n .then(jsonRes => setData(jsonRes))\r\n .catch(err => setIsError(err))\r\n }, [cmsLocation]);\r\n\r\n useEffect(() => {\r\n // check we have data, no error, and if data is array, array has elements\r\n if (data && !isError && (!Array.isArray(data) || data.length)) {\r\n const pageData = Array.isArray(data) ? data[0] : data;\r\n setArticle(pageData[articleType])\r\n };\r\n\r\n }, [article, data, isError, articleType]);\r\n\r\n if (isError || !article) return null;\r\n\r\n return <div className=\"page-container\">\r\n <main className=\"main-container\" ref={contentRef} id=\"content\">\r\n <PageTitle title={article.title} />\r\n <h1>{article.title}</h1>\r\n <InjectHtml paragraphText={article.introParagraph} />\r\n <ArticleListPage article={article} />\r\n </main>\r\n </div>;\r\n};\r\n\r\nexport default GenericLandingPage;","import React from \"react\";\r\n\r\nconst Numbers = ({ numbers }) => {\r\n if (!numbers) return null;\r\n\r\n //return a single badge pass params\r\n\r\n const keyArray = Object.keys(numbers).filter((n) => n !== \"id\");\r\n\r\n const numbersAray = keyArray.map((key) => {\r\n return (\r\n <li className=\"numbers\" key={key}>\r\n <span>{numbers[key]}</span> {key}\r\n </li>\r\n );\r\n });\r\n\r\n return (\r\n <div className=\"who\">\r\n <ul className=\"numbers-container\">{numbersAray}</ul>\r\n </div>\r\n );\r\n};\r\nexport default Numbers;\r\n","import AnchorLink from 'react-anchor-link-smooth-scroll';\r\n\r\nconst SideMenu = ({ subMenu }) => {\r\n\t// don't render sidebar unless we have at least one section that has a title\r\n\tif (!subMenu || subMenu.length === 0 || (subMenu.length === 1 && !subMenu[0])) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t//TO DO select the active sub menu item probably based off the URL passed to the API\r\n\r\n\t\t<>\r\n\t\t\t<aside className=\"sidebar flex-left\">\r\n\t\t\t\t<h2 className=\"sidebar__heading\">On this page</h2>\r\n\t\t\t\t<nav>\r\n\t\t\t\t\t<ul>\r\n\t\t\t\t\t\t{subMenu.map((menuItem, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<li key={index}>\r\n\t\t\t\t\t\t\t\t\t<AnchorLink href={`#section-${index + 1}-heading`}>\r\n\t\t\t\t\t\t\t\t\t\t{menuItem}\r\n\t\t\t\t\t\t\t\t\t</AnchorLink>\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t</nav>\r\n\t\t\t</aside>\r\n\t\t</>\r\n\t)\r\n}\r\n\r\n\r\nexport default SideMenu;\r\n","import React from 'react';\r\nimport CompanyLogo from '../../artefacts/logo';\r\n\r\nimport LinkListItem from '../../links/LinkListItem';\r\n//use generic\r\n\r\nconst Card = ({organisation, styleName}) => {\r\n /* return one single card */\r\n \r\n const { id, orgTitle, organisationLogo, orgLinks} = organisation\r\n \r\n let logo = <></>;\r\n\r\n if (organisationLogo && organisationLogo.CompanyLogo) {\r\n logo = (\r\n <div className=\"card__img-container\">\r\n <CompanyLogo logo={organisationLogo.CompanyLogo} />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <li key={id} className={styleName}>\r\n {logo}\r\n <h3>{orgTitle}</h3>\r\n <ul className=\"listnostyle card__sub-list\">\r\n {orgLinks &&\r\n Object.keys(orgLinks).length > 0 &&\r\n orgLinks.map((orgLink) => {\r\n orgLink.external = true;\r\n return <LinkListItem key={`${id}${orgLink.id}`} link={orgLink} />;\r\n })}\r\n </ul>\r\n </li>\r\n );\r\n};\r\n\r\nexport default Card;","import Card from \"./Card\"\r\n//refactored\r\nconst CardList = ({ organisationList, id, styles }) => {\r\n\r\n return (\r\n \r\n organisationList && organisationList.length > 0 && organisationList.map(organisation => \r\n {\r\n \r\n return <Card key={organisation.id} organisation={organisation} styleName=\"card-content listnostyle\"/>\r\n \r\n })\r\n )\r\n \r\n}\r\nexport default CardList;","import LinkExternal from '../footer/LinkExternal';\r\n\r\nconst LinkWithTitle = ({ link, title }) => {\r\n if (!link) return null;\r\n\r\n return (\r\n <>\r\n <hr />\r\n <section>\r\n {link.TextToDisplay && <h3>{title}</h3> }\r\n <p>\r\n <LinkExternal link={link} styleName=\"\"/> \r\n </p>\r\n </section>\r\n </>\r\n )\r\n}\r\n\r\nexport default LinkWithTitle;","import { Fragment } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport Numbers from './badge/'\r\nimport SideMenu from \"../sidemenu/\";\r\nimport useOukapi from '../../helpers/dataFetch';\r\nimport CardList from './Cards/CardList';\r\nimport Title from '../shared/title';\r\nimport LinkWithTitleSection from \"./LinkWithTitleSection\";\r\nimport BackButton from '../genericcontentpage/BackButton';\r\n\r\n//build a picture\r\nconst WhoIsUsing = ({ parent, contentRef }) => {\r\n\r\n //use styles prop\r\n\r\n const getObjects = (orgSections) => {\r\n\r\n let titles = orgSections.filter(org => org.title);\r\n\r\n return titles.map(title => {\r\n return title.title\r\n });\r\n }\r\n\r\n const getGroups = (orgSections) => {\r\n\r\n let orgTitles = orgSections.filter(org => org.title);\r\n return orgTitles;\r\n\r\n }\r\n\r\n const BASE_URL = process.env.REACT_APP_BASE_URL;\r\n const REACT_APP_WHO_IS_USING_PAGE = process.env.REACT_APP_WHO_IS_USING_PAGE;\r\n\r\n const [{ data, isError }, isFetching] = useOukapi(`${BASE_URL}${REACT_APP_WHO_IS_USING_PAGE}`);\r\n const {\r\n pageTitle,\r\n numbers,\r\n id,\r\n orgSections,\r\n caseStudiesLink,\r\n underNumbersText,\r\n registerLink,\r\n registerLinkWithTitle\r\n } = data\r\n\r\n //need id make sure all keys set\r\n console.log(id);\r\n\r\n if (isFetching || isError)\r\n return null;\r\n\r\n return (\r\n <main id=\"content\" className=\"main-container\" ref={contentRef}>\r\n <div className=\"page-container flex-container\">\r\n <SideMenu subMenu={getObjects(orgSections)} />\r\n <article className=\"flex-right\"> \r\n <BackButton parent={parent} />\r\n\r\n <h1>{pageTitle}</h1>\r\n\r\n <Numbers numbers={numbers} />\r\n <p>{underNumbersText}</p>\r\n\r\n <a href={registerLink.url} className=\"button button-primary\">\r\n {registerLink.TextToDisplay}\r\n </a>\r\n\r\n <p>\r\n <Link to={caseStudiesLink.url} >{caseStudiesLink.TextToDisplay}</Link>\r\n </p>\r\n\r\n {orgSections && getGroups(orgSections).map((organisation, index) => {\r\n return <Fragment key={`${organisation.id}grouptitle}`}>\r\n <Title title={organisation.title} id={`section-${index + 1}-heading`} />\r\n <ul id={`${organisation.id}_title`} className=\"cardgrid\">\r\n <CardList key={organisation.id} organisationList={organisation.Organisation} type=\"org\" />\r\n </ul>\r\n </Fragment>\r\n })}\r\n\r\n <LinkWithTitleSection {...registerLinkWithTitle} />\r\n\r\n </article>\r\n\r\n </div>\r\n\r\n </main>\r\n )\r\n\r\n}\r\nexport default WhoIsUsing;\r\n\r\n","import InjectHtml from \"../home/InjectHtml\";\r\n\r\nexport const covertHeadingToIdentifier = (heading) => {\r\n if (!heading || typeof heading !== \"string\") return null;\r\n return heading.toLowerCase().replace(/\\s/g, \"-\");\r\n};\r\n\r\nexport const HtmlSection = ({ section, index, children }) => {\r\n const header = section.sectionHeading ? (\r\n <h2 id={`section-${index + 1}-heading`}>{section.sectionHeading}</h2>\r\n ) : null;\r\n\r\n const sectionClassName = covertHeadingToIdentifier(section.sectionHeading);\r\n\r\n return (\r\n <div className={sectionClassName}>\r\n <InjectHtml\r\n itemKey={`${index}body`}\r\n paragraphText={section.sectionBody}\r\n paragraphHeader={header}\r\n />\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nconst HtmlSections = ({ sections }) =>\r\n sections.map((section, index) => (\r\n <HtmlSection key={section.id} index={index} section={section} />\r\n ));\r\n\r\nexport default HtmlSections;\r\n","import { Link } from 'react-router-dom';\r\n\r\nconst ReadNextLink = ({ link }) => {\r\n if (!link)\r\n return null;\r\n\r\n return <Link to={link.url}>\r\n {link.TextToDisplay}\r\n </Link>;\r\n};\r\n\r\nexport default ReadNextLink;","import HtmlSections from '../htmlsection';\r\nimport SideMenu from '../sidemenu';\r\nimport PageTitle from './PageTitle';\r\nimport BackButton from './BackButton';\r\nimport ReadNextLink from './ReadNextLink';\r\n\r\nconst GenericContent = ({ description, showDescription = false, article, articleClassName, parent, contentRef, Sections = HtmlSections, RelatedLink = ReadNextLink }) => {\r\n\r\n if (!article)\r\n return null;\r\n\r\n const { title, sections = [], ReadNextLink: link } = article;\r\n\r\n const sectionHeadings = sections.map(section => section.sectionHeading);\r\n\r\n return <main id=\"content\" ref={contentRef} className=\"main-container\">\r\n <PageTitle title={title} />\r\n <div className={`page-container flex-container`}>\r\n <SideMenu subMenu={sectionHeadings} />\r\n <article className={`flex-right ${articleClassName}`}>\r\n <BackButton parent={parent} />\r\n <h1>{title}</h1>\r\n {showDescription && !!description && <p><small>{description}</small></p>}\r\n <div className=\"body\">\r\n <Sections sections={sections} />\r\n </div>\r\n {!!link && <hr />}\r\n <RelatedLink link={link} />\r\n </article>\r\n </div>\r\n </main>;\r\n};\r\n\r\nexport default GenericContent;","import { useState, useEffect } from 'react';\r\nimport NotFound from '../errorpage';\r\nimport GenericContent from './GenericContent';\r\n\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL;\r\n\r\nconst GenericContentContainer = ({ cmsLocation, articleType, parent = null, contentRef, articleClassName = null, ContentComponent = GenericContent, NotFoundComponent = NotFound }) => {\r\n const [article, setArticle] = useState(null);\r\n const [isNotFound, setIsNotFound] = useState(false);\r\n const [data, setData] = useState(null);\r\n const [isError, setIsError] = useState(null);\r\n const [description, setDescription] = useState(null);\r\n const [slugfield, setSlugfield] = useState(null);\r\n\r\n useEffect(() => {\r\n fetch(new URL(cmsLocation, BASE_URL).href)\r\n .then(res => res.json())\r\n .then(jsonRes => setData(jsonRes))\r\n .catch(err => setIsError(err))\r\n }, [cmsLocation]);\r\n\r\n useEffect(() => {\r\n // check we have data, no error, and if data is array, array has elements\r\n\r\n if (data && !isError) {\r\n if ((!Array.isArray(data) || data.length)) {\r\n const pageData = Array.isArray(data) ? data[0] : data;\r\n setArticle(pageData[articleType]);\r\n setIsNotFound(false);\r\n setDescription(pageData.description);\r\n setSlugfield(pageData.slugfield);\r\n }\r\n else {\r\n setIsNotFound(true);\r\n }\r\n };\r\n }, [article, data, isError, articleType]);\r\n\r\n if (isError || isNotFound)\r\n return !!NotFoundComponent ? <NotFoundComponent parent={parent} /> : null;\r\n\r\n if (!article)\r\n return null;\r\n\r\n const props = {\r\n slugfield,\r\n description,\r\n article,\r\n parent,\r\n contentRef,\r\n articleClassName\r\n };\r\n\r\n return <ContentComponent {...props} />;\r\n};\r\n\r\nexport default GenericContentContainer;","import GenericContentContainer from './GenericContentContainer';\r\nimport GenericContent from './GenericContent';\r\n\r\nconst GenericContentPage = (props) => <GenericContentContainer {...props} ContentComponent={GenericContent} />;\r\n\r\nexport default GenericContentPage;","import GenericContentContainer from './GenericContentContainer';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst CaseStudyRelatedLinkContent = ({ slugfield = '', description, showDescription = false, article }) => {\r\n\r\n if (!article)\r\n return null;\r\n\r\n const { title } = article;\r\n\r\n return <div>\r\n <h2 className='case-study-heading'>Other relevent case studies</h2>\r\n \r\n <div class='case-study-related'>\r\n <Link to={`/community/case-studies/${slugfield}`}><h3>{title}</h3></Link>\r\n <p>\r\n {description}\r\n </p>\r\n </div>\r\n </div>;\r\n};\r\n\r\nconst CaseStudyRelatedLink = ({ link }) => {\r\n if (!link)\r\n return null;\r\n\r\n return <>\r\n <GenericContentContainer \r\n cmsLocation={`/case-studies?slugfield=${link.url}`}\r\n articleType=\"CaseStudy\"\r\n ContentComponent={CaseStudyRelatedLinkContent}\r\n NotFoundComponent={null}\r\n />\r\n <div>\r\n <h2 className='case-study-heading'>Share your case study about adopting Open Referral UK?</h2>\r\n \r\n <div>\r\n <a href=\"mailto:hello@openreferraluk.org\" class=\"button button-primary\">Contact us to share your case studies</a> \r\n </div>\r\n </div>\r\n </>;\r\n};\r\n\r\nexport default CaseStudyRelatedLink;","import CaseStudyRelatedLink from './CaseStudyRelatedLink';\r\nimport GenericContent from './GenericContent';\r\n\r\nconst CaseStudy = (props) => <GenericContent {...props} showDescription={true} RelatedLink={CaseStudyRelatedLink} />;\r\n\r\nexport default CaseStudy;","import CaseStudy from './CaseStudy';\r\nimport GenericContentContainer from './GenericContentContainer';\r\n\r\nconst CaseStudyPage = ({ slugField, contentRef }) => <GenericContentContainer \r\n articleClassName=\"case-study\" \r\n cmsLocation={`/case-studies?slugfield=${slugField}`}\r\n articleType=\"CaseStudy\"\r\n parent={{ path: `/community/case-studies`, title: `Case studies` }}\r\n ContentComponent={CaseStudy}\r\n contentRef={contentRef}\r\n/>;\r\n\r\nexport default CaseStudyPage;","import { covertHeadingToIdentifier, HtmlSection } from '../htmlsection';\r\nimport { useState } from 'react';\r\nimport GenericContent from './GenericContent';\r\nimport InjectHtml from '../home/InjectHtml';\r\nimport 'formdata-polyfill';\r\n\r\nconst apiUrl = 'https://validator.openreferraluk.org/api';\r\n\r\nconst onSubmitSetResponse = (e, setResponse) => {\r\n e.preventDefault();\r\n\r\n const form = e.target;\r\n const data = new URLSearchParams(new FormData(form));\r\n\r\n fetch(form.action, {\r\n method: form.method,\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\r\n //credentials: 'same-origin', // include, *same-origin, omit\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n //redirect: 'follow', // manual, *follow, error\r\n //referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url\r\n body: data\r\n })\r\n .then(async response => setResponse(await response.json()))\r\n .catch(error => {\r\n console.log(error);\r\n setResponse({ success: false });\r\n });\r\n};\r\n\r\nconst ResponseMessage = ({ response }) => {\r\n const { success, error, errors } = response;\r\n\r\n if (success !== true && success !== false)\r\n return null;\r\n\r\n if (success)\r\n return <div className=\"alert alert-success mt-1rem\" aria-live=\"polite\">Registered successfully</div>;\r\n\r\n if (errors)\r\n return <div className=\"alert alert-danger mt-1rem\" aria-live=\"polite\">{errors.map(error => <div>{error.message}</div>)}</div>;\r\n\r\n if (error)\r\n return <div className=\"alert alert-danger mt-1rem\" aria-live=\"polite\">{error}</div>;\r\n \r\n return <div className=\"alert alert-danger mt-1rem\" aria-live=\"polite\">Registration unsuccessful</div>;\r\n};\r\n\r\nconst FieldClassName = (field, response) => {\r\n const { errors = [] } = response;\r\n return `${errors.filter(error => error.field === field).length > 0 ? 'error': ''}`;\r\n};\r\n\r\nconst KeepInformedSection = ({ section, index }) => {\r\n //const [response, setResponse] = useState({});\r\n //const onSubmit = e => onSubmitSetResponse(e, setResponse);\r\n\r\n return <HtmlSection key={section.id} index={index} section={section}>\r\n <div className=\"mt-1rem\">\r\n <a href=\"https://openreferraluk.us1.list-manage.com/subscribe?u=9cdac16b200ed03ca1159653a&id=00056900bd\" className=\"button button-primary\">\r\n Subscribe to the Open Referral UK mailing list\r\n </a>\r\n </div>\r\n {/* <form className=\"form-section\" action={`${apiUrl}/registerUser`} method=\"post\" onSubmit={onSubmit}>\r\n <h3>Sign up to our news letter</h3>\r\n <label className=\"required\">Email address</label>\r\n <div className=\"input-with-button\">\r\n <input type=\"email\" id=\"email-address\" name=\"email_address\" className={FieldClassName('email_address', response)} required />\r\n <button type=\"submit\" className=\"button button-primary\">Subscribe</button>\r\n </div>\r\n <ResponseMessage response={response} />\r\n </form> */}\r\n </HtmlSection>;\r\n};\r\n\r\nconst RegisterYourOrganisation = ({ section, index }) => { \r\n const [response, setResponse] = useState({});\r\n const onSubmit = e => onSubmitSetResponse(e, setResponse);\r\n \r\n return <form className=\"form-section\" action={`${apiUrl}/registerOrganisation`} method=\"post\" onSubmit={onSubmit}>\r\n <h3>{section.sectionHeading}</h3>\r\n <InjectHtml itemKey={`${index}body`} paragraphText={section.sectionBody} />\r\n\r\n <div className=\"form-item\">\r\n <label htmlFor=\"organisation-name\" className=\"required\">Organisation name</label>\r\n <input type=\"text\" id=\"organisation-name\" name=\"organisation_name\" className={FieldClassName('organisation_name', response)} required />\r\n </div>\r\n\r\n <div className=\"form-item\">\r\n <label htmlFor=\"organisation-type\" className=\"required\">Organisation type</label>\r\n <input type=\"text\" id=\"organisation-type\" name=\"organisation_type\" list=\"organisation-types\" className={FieldClassName('organisation_type', response)} required />\r\n <datalist id=\"organisation-types\">\r\n <option value=\"Commissioning a directory of services\" />\r\n <option value=\"Supplying directory software and API\" />\r\n <option value=\"Consuming an Open Referral UK compliant API\" />\r\n <option value=\"Maintaining service data\" />\r\n </datalist>\r\n </div>\r\n\r\n <div className=\"form-item\">\r\n <label className=\"required\">Organisation adoption stage</label>\r\n <div className={`check-list ${FieldClassName('adoptation_stage', response)}`}>\r\n <div className=\"check-item\">\r\n <input type=\"radio\" id=\"adoption-considering\" name=\"adoptation_stage\" value=\"Considering\" /> <label htmlFor=\"adoption-considering\">Considering</label>\r\n </div>\r\n <div className=\"check-item\">\r\n <input type=\"radio\" id=\"adoption-adopting\" name=\"adoptation_stage\" value=\"Adopting\" /> <label htmlFor=\"adoption-adopting\">Adopting</label>\r\n </div>\r\n <div className=\"check-item\">\r\n <input type=\"radio\" id=\"adoption-adopted\" name=\"adoptation_stage\" value=\"Adopted\" /> <label htmlFor=\"adoption-adopted\">Adopted</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"form-item\">\r\n <label htmlFor=\"url\">\r\n Web link URL (optional)\r\n <small>Provide a link for people to read about your adoption or organisation.</small>\r\n </label>\r\n <input type=\"text\" id=\"url\" name=\"url\" />\r\n </div>\r\n\r\n <div className=\"form-item\">\r\n <label htmlFor=\"private-email-address\">\r\n <span className=\"required\">Private email address</span>\r\n <small>So that we can follow-up with you to verify your organisation. Will not be shared.</small>\r\n </label>\r\n <input type=\"email\" id=\"private-email-address\" name=\"private_email_address\" className={FieldClassName('private_email_address', response)} required />\r\n </div>\r\n\r\n <div className=\"form-item\">\r\n <label htmlFor=\"public-email-address\">\r\n Public email address (optional)\r\n <small>Will be shared alongside your organisation on our Who's using page.</small>\r\n </label>\r\n <input type=\"email\" id=\"public-email-address\" name=\"public_email_address\" />\r\n </div>\r\n\r\n <div className=\"form-item\">\r\n <br />\r\n <button type=\"submit\" className=\"button button-primary\">Register organisation</button>\r\n </div>\r\n \r\n <ResponseMessage response={response} />\r\n </form>;\r\n};\r\n\r\nconst RegisterSections = ({ sections }) => sections.map((section, index) => {\r\n const identifier = covertHeadingToIdentifier(section.sectionHeading);\r\n\r\n if (identifier === `keep-informed`)\r\n return <KeepInformedSection key={section.id} index={index} section={section} />;\r\n\r\n if (identifier === `register-your-organisation`)\r\n return <RegisterYourOrganisation key={section.id} index={index} section={section} />;\r\n\r\n return <HtmlSection key={section.id} index={index} section={section} />;\r\n});\r\n\r\nconst RegisterContent = (props) => <GenericContent {...props} showDescription={false} Sections={RegisterSections} />;\r\n\r\nexport default RegisterContent;","import RegisterContent from './RegisterContent';\r\nimport GenericContentContainer from './GenericContentContainer';\r\n\r\nconst RegisterPage = (props) => <GenericContentContainer \r\n {...props}\r\n articleClassName='register-page'\r\n parent={{ path: `/community`, title: `Community` }}\r\n ContentComponent={RegisterContent}\r\n/>;\r\n\r\nexport default RegisterPage;","import { Link } from \"react-router-dom\";\r\n\r\nconst CaseStudyOverview = ({ CaseStudy, description, slugfield }) => {\r\n const { title } = CaseStudy;\r\n\r\n return (\r\n <li>\r\n <Link to={`case-studies/${slugfield}`}>\r\n {title}\r\n </Link>\r\n <p className=\"case-study-description\">{description}</p>\r\n </li>\r\n )\r\n};\r\n\r\nexport default CaseStudyOverview;","import { useState, useEffect } from 'react';\r\nimport CaseStudyOverview from './CaseStudyOverview';\r\nimport InjectHtml from \"../home/InjectHtml\";\r\nimport useOukapi from '../../helpers/dataFetch';\r\nimport PageTitle from '../genericcontentpage/PageTitle';\r\nimport BackButton from '../genericcontentpage/BackButton';\r\nimport NotFound from '../errorpage';\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL;\r\nconst CASE_STUDIES_LANDING_PAGE = process.env.REACT_APP_CASE_STUDIES_LANDING_PAGE;\r\nconst CASE_STUDIES = process.env.REACT_APP_CASE_STUDIES;\r\n\r\nconst LandingPage = ({ parent, contentRef }) => {\r\n\tconst [title, setTitle] = useState(\"\");\r\n\tconst [introParagraph, setIntroParagraph] = useState(\"\");\r\n\r\n\tconst [{ data: landingData, isError: isLandingError }, isFeatchingLanding] = useOukapi(new URL(CASE_STUDIES_LANDING_PAGE, BASE_URL).href);\r\n\tconst [{ data: casesData, isError: isCasesError}, isFeatchingCases] = useOukapi(new URL(CASE_STUDIES, BASE_URL).href);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (landingData.hasOwnProperty(\"title\") && landingData.hasOwnProperty(\"introParagraph\")) {\r\n\t\t\tsetTitle(landingData.title);\r\n\t\t\tsetIntroParagraph(landingData.introParagraph)\r\n\t\t}\r\n\t}, [landingData]);\r\n\r\n\tif (isFeatchingLanding || isFeatchingCases)\r\n\t\treturn null;\r\n\r\n\tif (isLandingError || isCasesError || !landingData || !casesData)\r\n\t\treturn <NotFound />;\r\n\r\n\tconst caseStudyOverviewElements = casesData.map(caseStudy => {\r\n\t\treturn <CaseStudyOverview {...caseStudy} key={caseStudy.id} />\r\n\t});\r\n\r\n\treturn (\r\n <div className=\"page-container\" ref={contentRef}>\r\n <main id=\"content\" className=\"main-container\">\r\n <PageTitle title={title} />\r\n <BackButton parent={parent} />\r\n <h1>{title}</h1>\r\n <InjectHtml paragraphText={introParagraph} />\r\n <ul className=\"card-link-container listnostyle\">\r\n {caseStudyOverviewElements}\r\n </ul>\r\n </main>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LandingPage;","import { Link } from \"react-router-dom\";\r\nimport { useRef } from 'react';\r\n\r\nconst SkipToContent = ({ contentRef }) => {\r\n const skipLink = useRef(null);\r\n\r\n return (\r\n <Link ref={skipLink} to=\"#content\" onClick={() => { if (skipLink.current && contentRef.current) { skipLink.current.blur(); contentRef.current.focus()}}} className=\"skiplink\">Skip to main content</Link>\r\n )\r\n};\r\n\r\nexport default SkipToContent;","const LinkLabel = ({ label, url }) => !!url ? <a href={url} target='_blank' rel='noreferrer'>{label}</a> : <span>{label}</span>;\r\n\r\nconst Checked = ({ label, url, message, cssClassName = '' }) => <div className={`checked ${cssClassName}`}><LinkLabel {...{ label, url }} /> {!!message && <div className='message'>{message}</div>}</div>;\r\nconst PartialChecked = ({ label, url, message, cssClassName = '' }) => <div className={`partial-checked ${cssClassName}`} tabIndex='0'><LinkLabel {...{ label, url }} /> {!!message && <div className='message'>{message}</div>}</div>;\r\nconst Unchecked = ({ label, url, message, cssClassName = '' }) => <div className={`unchecked ${cssClassName}`} tabIndex='0'><LinkLabel {...{ label, url }} /> {!!message && <div className='message'>{message}</div>}</div>;\r\n\r\nconst Checkbox = ({ isChecked, positiveMessage, negativeMessage, url, errorMessage, successMessage = undefined }) =>\r\n isChecked\r\n ? <Checked label={positiveMessage || 'Yes'} message={successMessage} url={url} />\r\n : <Unchecked label={negativeMessage || 'No'} message={errorMessage} url={url} />;\r\n\r\nexport default Checkbox;\r\n\r\nexport const IsServicesValidCheckbox = ({ item }) =>\r\n <Checkbox isChecked={item.isServicesValid} errorMessage={item.servicesMessage} positiveMessage={'Valid'} url={`${item.url}/services`} />;\r\n\r\nexport const IsServiceExampleValidCheckbox = ({ item }) =>\r\n <Checkbox isChecked={item.isServiceExampleValid} errorMessage={item.serviceExampleMessage} positiveMessage={'Valid'} url={!!item.serviceExampleIdentifier ? `${item.url}/services/${item.serviceExampleIdentifier}` : undefined} />;\r\n\r\nconst cleanTestName = (name = '') => name.replace(/ Test/gi, '').replace(/ Search/gi, '');\r\n\r\nexport const IsSearchEnabled = ({ item }) => {\r\n const searchResults = item.searchResults || [];\r\n searchResults.sort((a, b) => cleanTestName(a.testName).localeCompare(cleanTestName(b.testName)));\r\n\r\n const message = <ul>\r\n {searchResults.map(r => <li key={r.testName}>{cleanTestName(r.testName)}: {r.success ? 'Yes' : r.errorMessage}</li>)}\r\n </ul>;\r\n\r\n const allSuccess = searchResults.every(r => r.success);\r\n if (allSuccess)\r\n return <Checked label={'Yes'} message={message} />;\r\n\r\n const partialSuccess = searchResults.some(r => r.success);\r\n if (partialSuccess)\r\n return <PartialChecked label={'Partial'} message={message} />;\r\n\r\n return <Unchecked label={'No'} message={message} />;\r\n};","const ApiLink = ({item}) => <>\r\n <a href={`https://tools.openreferraluk.org/ApiQuery/?endpoint=${item.url}`}>API</a>{' '}\r\n <a href={`https://validator.openreferraluk.org/?endpoint=${item.url}`}>Validation</a>\r\n</>;\r\n\r\nexport default ApiLink;","const getTimeMessage = (n, singular) => Math.round(n) === 1 ? `${Math.round(n)} ${singular} ago` : `${Math.round(n)} ${singular}s ago`;\r\n\r\nexport const getTimeDiffMessage = (lastCheck) => {\r\n const now = Date.now();\r\n const timestamp = lastCheck;\r\n const diff = now - timestamp;\r\n\r\n const seconds = diff / 1000;\r\n\r\n if (Math.round(seconds) < 60)\r\n return getTimeMessage(seconds < 0 ? 0 : seconds, 'second');\r\n\r\n const minutes = seconds / 60;\r\n\r\n if (Math.round(minutes) < 60)\r\n return getTimeMessage(minutes, 'minute');\r\n\r\n const hours = minutes / 60;\r\n\r\n if (Math.round(hours) < 24)\r\n return getTimeMessage(hours, 'hour');\r\n\r\n const days = hours / 24;\r\n\r\n if (Math.round(days) < 365)\r\n return getTimeMessage(days, 'day');\r\n\r\n const years = days / 365;\r\n\r\n return getTimeMessage(years, 'year');\r\n};\r\n\r\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\nconst formatNumber = (n) => (n < 10) ? `0${n}` : `${n}`;\r\n\r\nexport const getDateText = (utcDate) => {\r\n const localDate = new Date(utcDate);\r\n\r\n const year = localDate.getFullYear();\r\n const month = months[localDate.getMonth()];\r\n const day = localDate.getDate();\r\n const hour = formatNumber(localDate.getHours());\r\n const minute = formatNumber(localDate.getMinutes());\r\n const second = formatNumber(localDate.getSeconds());\r\n\r\n return `${day} ${month} ${year} ${hour}:${minute}:${second}`;\r\n};\r\n\r\nexport const getTimeTaken = milliseconds => {\r\n const seconds = (milliseconds / 1000).toFixed(2);\r\n\r\n if (milliseconds < 60000)\r\n return `${seconds} second${seconds === 1 ? '' : 's'}`;\r\n\r\n const minutes = Math.round(milliseconds / 60000);\r\n\r\n return `${minutes} minute${minutes === 1 ? '' : 's'}`;\r\n};\r\n\r\nexport const dbStringToUtc = dbString => Date.parse(`${dbString}.000Z`);","import { getTimeDiffMessage, getDateText, getTimeTaken, dbStringToUtc } from './utilities';\r\n\r\nconst LastChecked = ({ item }) => {\r\n\r\n const { checkIsRunning, lastCheck, timeTaken } = item;\r\n const utcLastCheck = dbStringToUtc(lastCheck);\r\n const date = getDateText(utcLastCheck);\r\n const diff = getTimeDiffMessage(utcLastCheck);\r\n const time = getTimeTaken(timeTaken);\r\n\r\n if (checkIsRunning || !lastCheck)\r\n return <span title={`Started check at ${date} (${diff}).`}>Checking...</span>;\r\n\r\n if (utcLastCheck < new Date(2019, 0, 1))\r\n return <span>Not run yet</span>;\r\n\r\n return <span title={`${date} (took: ${time})`}>{diff}</span>;\r\n};\r\n\r\nexport default LastChecked;","export const getUrlAndLabel = (item, prefix) => {\r\n const url = item[`${prefix}Url`];\r\n const label = item[`${prefix}Label`];\r\n return { url, label };\r\n};\r\n\r\nconst LabelLink = ({ url, label }) =>\r\n !!url\r\n ? <a href={url} target='_blank' rel='noopener noreferrer'>{label}</a>\r\n : <span>{label}</span>;\r\n\r\nexport default LabelLink;\r\n\r\nexport const OrganisationLabel = ({ item }) => LabelLink(getUrlAndLabel(item, 'organisation'));\r\n\r\nexport const DeveloperLabel = ({ item }) => LabelLink(getUrlAndLabel(item, 'developer'));","import InjectHtml from '../home/InjectHtml';\r\n\r\nconst Title = ({ children, help }) =>\r\n !!help[children]\r\n ? <span className='with-help'>{children}<span className='help' tabIndex='0'><span className='help-text'><InjectHtml sectionClassName='' itemKey={`help-${children}`} paragraphText={help[children]} /></span></span></span>\r\n : <span>{children}</span>;\r\n\r\nexport default Title;","import { useState, useRef, useEffect } from \"react\";\r\n\r\nconst SummaryButton = ({ summary, rowNum }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n //const readRef = useRef(null);\r\n const closeRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n closeRef.current.focus();\r\n } else {\r\n document.body.style.overflow = \"scroll\";\r\n //readRef.current.focus();\r\n }\r\n }, [isOpen]);\r\n\r\n if (!summary) return <span>-</span>;\r\n\r\n const dialogId = `dialog${rowNum}content`;\r\n\r\n return (\r\n <>\r\n <button\r\n className=\"button-link\"\r\n onClick={() => setIsOpen(true)}\r\n //ref={readRef}\r\n >\r\n Read\r\n </button>\r\n <div className={`modal-background ${isOpen ? \"visible\" : \"\"}`}>\r\n <div\r\n className={`modal ${isOpen ? \"visible\" : \"\"}`}\r\n role=\"dialog\"\r\n aria-labelledby={dialogId}\r\n aria-modal=\"true\"\r\n >\r\n <button\r\n className=\"close-button button-link\"\r\n onClick={() => setIsOpen(false)}\r\n ref={closeRef}\r\n >\r\n close\r\n </button>\r\n <p id={dialogId}>{summary}</p>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default SummaryButton;\r\n","import Checkbox, { IsServicesValidCheckbox, IsServiceExampleValidCheckbox, IsSearchEnabled } from './checkbox';\r\nimport ApiLink from './apiLink';\r\nimport LastChecked from './lastChecked';\r\nimport { OrganisationLabel, DeveloperLabel } from './labelLink';\r\nimport Title from './title';\r\nimport SummaryButton from './summaryButton';\r\n\r\nconst Item = ({ item, help }) => <div className=\"item\">\r\n <h3><OrganisationLabel item={item} /></h3>\r\n\r\n <div className=\"developer\">\r\n <div className=\"label\"><Title help={help}>Developer\r\n \r\n \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n
    Endpoint up
    \r\n \r\n
    \r\n
    \r\n
    Services feed
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    {`Service {id} feed`}
    \r\n \r\n
    \r\n
    \r\n
    Searchable
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    Last checked
    \r\n \r\n
    \r\n
    \r\n
    Summary
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    Explore
    \r\n \r\n
    \r\n
    \r\n;\r\n\r\nexport default Item;","import Item from './item';\r\n\r\nconst Items = ({ data, help }) =>
    \r\n {data.map(item => )}\r\n
    ;\r\n\r\nexport default Items;","import Checkbox, { IsServicesValidCheckbox, IsServiceExampleValidCheckbox, IsSearchEnabled } from './checkbox';\r\nimport ApiLink from './apiLink';\r\nimport LastChecked from './lastChecked';\r\nimport { OrganisationLabel, DeveloperLabel } from './labelLink';\r\nimport SummaryButton from './summaryButton';\r\n\r\nconst Row = ({ item, index }) => \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n;\r\n\r\nexport default Row;","import Row from \"./row\";\r\nimport Title from \"./title\";\r\n\r\nconst Table = ({ data, help }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {data.map((item, index) => (\r\n \r\n ))}\r\n \r\n
    \r\n Organisation\r\n \r\n Developer\r\n \r\n Endpoint up\r\n \r\n Services feed\r\n \r\n {`Service {id} feed`}\r\n \r\n Searchable\r\n \r\n Last checked\r\n \r\n Summary\r\n \r\n Explore\r\n
    \r\n);\r\n\r\nexport default Table;\r\n","import Items from './items';\r\nimport Table from './table';\r\nimport { getDateText } from './utilities';\r\nimport { useEffect, useState } from 'react';\r\nimport InjectHtml from '../home/InjectHtml';\r\nimport PageTitle from '../genericcontentpage/PageTitle';\r\n\r\nconst apiUrl = 'https://validator.openreferraluk.org/api';\r\n\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL;\r\nconst contentSlugfield = `dashboard-content`;\r\nconst contentPath = `/pages?slugfield=${contentSlugfield}`;\r\nconst helpSlugfield = `dashboard-help`;\r\nconst helpPath = `/pages?slugfield=${helpSlugfield}`;\r\n\r\nconst compareLabels = (a, b) => (a.label || '').localeCompare(b.label);\r\n\r\nconst sortData = (data) => {\r\n data.sort(compareLabels);\r\n return data;\r\n};\r\n\r\nconst fetchData = async () => {\r\n try {\r\n const response = await fetch(apiUrl);\r\n if (response.status === 200)\r\n return response.json();\r\n return [];\r\n }\r\n catch (err) {\r\n console.log('error ', err);\r\n return [];\r\n }\r\n};\r\n\r\nconst parseContent = (contentArray) => {\r\n const content = contentArray.find(c => c.slugfield === contentSlugfield) || {};\r\n const { title, sections } = content.page;\r\n const header = (sections.find(s => s.sectionHeading === 'header') || {}).sectionBody;\r\n const footer = (sections.find(s => s.sectionHeading === 'footer') || {}).sectionBody;\r\n return { title, header, footer };\r\n};\r\n\r\nconst parseHelp = (contentArray, slugfield) => {\r\n const content = contentArray.find(c => c.slugfield === slugfield) || {};\r\n const { title, sections = [] } = content.page;\r\n return sections.reduce((accumulator, s) => { accumulator[s.sectionHeading] = s.sectionBody; return accumulator; }, { title });\r\n};\r\n\r\nconst Dashboard = ({ overrideData = undefined, contentRef }) => {\r\n const [data, setData] = useState(overrideData || []);\r\n const [content, setContent] = useState({});\r\n const [help, setHelp] = useState({});\r\n const [lastFetched, setLastFetched] = useState(Date.now());\r\n\r\n useEffect(() => {\r\n if (!!overrideData)\r\n return;\r\n\r\n (async () => {\r\n const newData = sortData((await fetchData()) || []);\r\n newData.sort((a, b) => (a.organisationLabel || '').localeCompare(b.organisationLabel || ''));\r\n\r\n const isRunning = newData.some(d => d.checkIsRunning);\r\n\r\n if (isRunning) {\r\n setTimeout(() => setLastFetched(Date.now()), 60000);\r\n }\r\n \r\n setData(overrideData || newData);\r\n })();\r\n }, [overrideData, lastFetched]);\r\n\r\n useEffect(() => {\r\n fetch(new URL(contentPath, BASE_URL).href)\r\n .then(res => res.json())\r\n .then(contentArray => setContent(parseContent(contentArray)))\r\n .catch(err => console.error(err))\r\n }, []);\r\n\r\n useEffect(() => {\r\n fetch(new URL(helpPath, BASE_URL).href)\r\n .then(res => res.json())\r\n .then(helpArray => setHelp(parseHelp(helpArray, helpSlugfield)))\r\n .catch(err => console.error(err))\r\n }, []);\r\n\r\n return
    \r\n
    \r\n \r\n
    \r\n

    {content.title}

    \r\n \r\n
    \r\n\r\n \r\n \r\n\r\n
    \r\n {`Data fetched: ${getDateText(lastFetched)}`}\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n \r\n ;\r\n};\r\n\r\nexport default Dashboard;","const mockData = [\r\n {\r\n \"url\": \"https://blackburn.openplace.directory/o/ServiceDirectoryService/v2\",\r\n \"label\": \"Blackburn with Darwen Council\",\r\n \"summary\": \"Live Blackburn with Darwen Council services data\",\r\n \"organisationLabel\": \"Blackburn with Darwen Council\",\r\n \"organisationUrl\": \"http://www.blackburn.gov.uk\",\r\n \"developerLabel\": \"Placecube\",\r\n \"developerUrl\": \"https://www.placecube.com/platforms/open-place-directory/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 14316,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"ba937898-6117-fc2e-6d44-3b6dbc44de24\",\r\n \"serviceExampleMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=WA4+4AB\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Postcode Search failed. When tested using /services?proximity=100&postcode=WA4+4AB\\\"},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": false,\r\n \"errorMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=WA4+4AB\"\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [\r\n \"ChildChildTaxonomyTerm\",\r\n \"ChildTaxonomyTerm\",\r\n \"Coverage\",\r\n \"Day\",\r\n \"EndTime\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"StartTime\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://bristol.openplace.directory/o/ServiceDirectoryService/v2\",\r\n \"label\": \"Bristol Council\",\r\n \"summary\": \"Services for Brisol and South Gloucestershire service finders\",\r\n \"organisationLabel\": \"Bristol Council\",\r\n \"organisationUrl\": \"https://www.bristol.gov.uk\",\r\n \"developerLabel\": \"Placecube\",\r\n \"developerUrl\": \"https://www.placecube.com/platforms/open-place-directory/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": \"Placecube\",\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 65597,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"ee206d77-98f4-eec4-3575-912145f8b70f\",\r\n \"serviceExampleMessage\": \"\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [\r\n \"Coverage\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://api.familyinfo.buckinghamshire.gov.uk/api/v1\",\r\n \"label\": \"Buckinghamshire Council\",\r\n \"summary\": \"Buckinghamshire Family Information Service\",\r\n \"organisationLabel\": \"Buckinghamshire Council\",\r\n \"organisationUrl\": \"https://www.buckinghamshire.gov.uk/\",\r\n \"developerLabel\": \"FutureGov\",\r\n \"developerUrl\": \"https://wearefuturegov.com/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 20946016,\r\n \"isUp\": true,\r\n \"isServicesValid\": false,\r\n \"servicesMessage\": \"Missing search method paginaton metadata at the begining of the JSON payload. Required: \\\"number\\\"; \\\"first\\\"; \\\"last\\\". It is case sensitive, and should be in the following format: {\\\"totalElements\\\":nn,\\\"totalPages\\\":nn,\\\"number\\\":nn,\\\"size\\\":nn,\\\"first\\\":bb,\\\"last\\\":bb\\\",\\\"content\\\":[{},{}]...\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"527\",\r\n \"serviceExampleMessage\": \"Text Test failed. When tested using /services?text=Youth+Drop-In+%7c+Chesham\\nTime Search Test failed. When tested using /services?start_time=07%3a45&end_time=08%3a45\",\r\n \"isSearchEnabled\": false,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Text Test failed. When tested using /services?text=Youth+Drop-In+%7c+Chesham\\\"},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Age Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Postcode Search test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Taxonomy Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Time Search Test failed. When tested using /services?start_time=07%3a45&end_time=08%3a45\\\"}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Text Test failed. When tested using /services?text=Youth+Drop-In+%7c+Chesham\"\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Age Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Postcode Search test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Taxonomy Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Time Search Test failed. When tested using /services?start_time=07%3a45&end_time=08%3a45\"\r\n }\r\n ],\r\n \"filters\": [\r\n \"Coverage\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": false\r\n },\r\n {\r\n \"url\": \"https://api.porism.com/ServiceDirectoryServiceCQC\",\r\n \"label\": \"Care Quality Commission\",\r\n \"summary\": \"Open source transformation run daily from Care Quality Commission locations feed from https://api.cqc.org.uk/public/v1/locations/ into an instance of the open source directory\",\r\n \"organisationLabel\": \"Care Quality Commission\",\r\n \"organisationUrl\": \"https://www.cqc.org.uk\",\r\n \"developerLabel\": \"CQC/ORUK\",\r\n \"developerUrl\": \"https://github.com/OpenReferralUK/human-services/tree/master/Utilities/CQCImport\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 115209,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"6e94e58a-d9e9-4946-90d7-80704a5ad3b1\",\r\n \"serviceExampleMessage\": \"\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Age Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Time Search Test test due to lack of data.\\\"}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Age Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Time Search Test test due to lack of data.\"\r\n }\r\n ],\r\n \"filters\": [\r\n \"ChildChildTaxonomyTerm\",\r\n \"ChildTaxonomyTerm\",\r\n \"Coverage\",\r\n \"Day\",\r\n \"EndTime\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"StartTime\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://openreferral.localgovdrupal.org/openreferral/v1\",\r\n \"label\": \"Cumbria Council\",\r\n \"summary\": \"Sample directory from the open source LocalGov Drupal project. See https://deploy-preview-55--trusting-noyce-aebebc.netlify.app/blog/openreferral.html\",\r\n \"organisationLabel\": \"Cumbria Council\",\r\n \"organisationUrl\": \"https://www.cumbria.gov.uk/\",\r\n \"developerLabel\": \"LG Drupal\",\r\n \"developerUrl\": \"https://localgovdrupal.org/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-22T10:32:02\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 1781,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"7acd885a-da61-438d-b60f-1028fab696a6\",\r\n \"serviceExampleMessage\": \"\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Age Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Time Search Test test due to lack of data.\\\"}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Age Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Time Search Test test due to lack of data.\"\r\n }\r\n ],\r\n \"filters\": [],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://elmbridge.openplace.directory/o/ServiceDirectoryService/v2\",\r\n \"label\": \"Elmbridge Council\",\r\n \"summary\": \"Live Elmbridge Council services data\",\r\n \"organisationLabel\": \"Elmbridge Council\",\r\n \"organisationUrl\": \"https://www.elmbridge.gov.uk\",\r\n \"developerLabel\": \"Placecube\",\r\n \"developerUrl\": \"https://www.placecube.com/platforms/open-place-directory/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 8483,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"60354a53-3f6c-46e2-99a6-3cd15cc35c9d\",\r\n \"serviceExampleMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=KT8+9LU\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Age Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Postcode Search failed. When tested using /services?proximity=100&postcode=KT8+9LU\\\"},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Taxonomy Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Age Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": false,\r\n \"errorMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=KT8+9LU\"\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Taxonomy Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [\r\n \"Coverage\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://fyldecoast.openplace.directory/o/ServiceDirectoryService/v2\",\r\n \"label\": \"Fylde Coast Council\",\r\n \"summary\": \"Live Fylde Coast Council services data\",\r\n \"organisationLabel\": \"Fylde Coast Council\",\r\n \"organisationUrl\": \"https://new.fylde.gov.uk\",\r\n \"developerLabel\": \"Placecube\",\r\n \"developerUrl\": \"https://www.placecube.com/platforms/open-place-directory/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 4741,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"e042e78e-8b0c-6c85-121f-f1824c9ea0a3\",\r\n \"serviceExampleMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=PR5+6AW\\nAge Test failed. When tested using /services?minimum_age=0&maximum_age=0\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Age Test failed. When tested using /services?minimum_age=0&maximum_age=0\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Postcode Search failed. When tested using /services?proximity=100&postcode=PR5+6AW\\\"},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Age Test failed. When tested using /services?minimum_age=0&maximum_age=0\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": false,\r\n \"errorMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=PR5+6AW\"\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [\r\n \"ChildChildTaxonomyTerm\",\r\n \"ChildTaxonomyTerm\",\r\n \"Coverage\",\r\n \"Day\",\r\n \"EndTime\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"StartTime\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://lgaapi.connecttosupport.org\",\r\n \"label\": \"Hull City Council\",\r\n \"summary\": \"Live Hull City Council services data\",\r\n \"organisationLabel\": \"Hull City Council\",\r\n \"organisationUrl\": \"http://www.hull.gov.uk\",\r\n \"developerLabel\": \"Public Partnerships\",\r\n \"developerUrl\": \"https://www.publicconsultinggroup.co.uk/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 7045,\r\n \"isUp\": true,\r\n \"isServicesValid\": false,\r\n \"servicesMessage\": \"Missing search method paginaton metadata at the begining of the JSON payload. Required: \\\"totalElements\\\"; \\\"totalPages\\\". It is case sensitive, and should be in the following format: {\\\"totalElements\\\":nn,\\\"totalPages\\\":nn,\\\"number\\\":nn,\\\"size\\\":nn,\\\"first\\\":bb,\\\"last\\\":bb\\\",\\\"content\\\":[{},{}]...\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"8eec60e4-ed84-413d-9971-ab5200fedf1a\",\r\n \"serviceExampleMessage\": \"Text Test failed. When tested using /services?text=LGA+Test+Entry\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Text Test failed. When tested using /services?text=LGA+Test+Entry\\\"},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Age Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Text Test failed. When tested using /services?text=LGA+Test+Entry\"\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Age Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [\r\n \"ChildTaxonomyTerm\",\r\n \"Coverage\",\r\n \"Day\",\r\n \"Keywords\",\r\n \"Proximity\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": false\r\n },\r\n {\r\n \"url\": \"https://northlincs.openplace.directory/o/ServiceDirectoryService/v2\",\r\n \"label\": \"North Lincolnshire Council\",\r\n \"summary\": \"New so no useful data yet\",\r\n \"organisationLabel\": \"North Lincolnshire Council\",\r\n \"organisationUrl\": \"https://www.northlincs.gov.uk/\",\r\n \"developerLabel\": \"Placecube\",\r\n \"developerUrl\": \"https://www.placecube.com/platforms/open-place-directory/\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 964,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"6be38184-13d5-fd10-f13a-04ba5b6f7850\",\r\n \"serviceExampleMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=DN20+9JH\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Could not run Age Test test due to lack of data.\\\"},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Postcode Search failed. When tested using /services?proximity=100&postcode=DN20+9JH\\\"},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": false,\r\n \"errorMessage\": \"Could not run Age Test test due to lack of data.\"\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": false,\r\n \"errorMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=DN20+9JH\"\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [\r\n \"ChildChildTaxonomyTerm\",\r\n \"ChildTaxonomyTerm\",\r\n \"Coverage\",\r\n \"Day\",\r\n \"EndTime\",\r\n \"Keywords\",\r\n \"maxAge\",\r\n \"minAge\",\r\n \"Proximity\",\r\n \"StartTime\",\r\n \"TaxonomyTerm\",\r\n \"TaxonomyType\",\r\n \"Vocabulary\"\r\n ],\r\n \"isCompleteSuccess\": true\r\n },\r\n {\r\n \"url\": \"https://api.porism.com/ServiceDirectoryServiceOpenActiveAggregated\",\r\n \"label\": \"OpenActive\",\r\n \"summary\": \"Open source transformation run daily from OpenActive sports and wellbeing activities feeds aggregated by Imin - https://www.imin.co into an instance of the open source directory.\",\r\n \"organisationLabel\": \"OpenActive\",\r\n \"organisationUrl\": \"https://www.openactive.io/\",\r\n \"developerLabel\": \"Imin / ORUK\",\r\n \"developerUrl\": \"https://github.com/OpenReferralUK/human-services/tree/master/Utilities/OpenActiveFireHose\",\r\n \"servicePathOverride\": \"\",\r\n \"schemaType\": null,\r\n \"lastCheck\": \"2021-07-21T18:00:03\",\r\n \"checkIsRunning\": false,\r\n \"timeTaken\": 395433,\r\n \"isUp\": true,\r\n \"isServicesValid\": true,\r\n \"servicesMessage\": \"\",\r\n \"isServiceExampleValid\": true,\r\n \"serviceExampleIdentifier\": \"a65dfa69-4382-468b-a1cf-787fdfe37696\",\r\n \"serviceExampleMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=IP31+1RU\",\r\n \"isSearchEnabled\": true,\r\n \"searchEnabledMessage\": \"[{\\\"TestName\\\":\\\"Text Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Age Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Postcode Search\\\",\\\"Success\\\":false,\\\"ErrorMessage\\\":\\\"Postcode Search failed. When tested using /services?proximity=100&postcode=IP31+1RU\\\"},{\\\"TestName\\\":\\\"Taxonomy Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null},{\\\"TestName\\\":\\\"Time Search Test\\\",\\\"Success\\\":true,\\\"ErrorMessage\\\":null}]\",\r\n \"searchResults\": [\r\n {\r\n \"testName\": \"Text Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Age Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Postcode Search\",\r\n \"success\": false,\r\n \"errorMessage\": \"Postcode Search failed. When tested using /services?proximity=100&postcode=IP31+1RU\"\r\n },\r\n {\r\n \"testName\": \"Taxonomy Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n },\r\n {\r\n \"testName\": \"Time Search Test\",\r\n \"success\": true,\r\n \"errorMessage\": null\r\n }\r\n ],\r\n \"filters\": [],\r\n \"isCompleteSuccess\": true\r\n }\r\n];\r\n\r\nmockData.sort((a, b) => (a.organisationLabel || '').localeCompare(b.organisationLabel || ''));\r\n\r\nexport default mockData;","import { useEffect, useState } from 'react';\r\nimport * as qs from 'query-string';\r\nimport InjectHtml from '../home/InjectHtml';\r\n\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL;\r\n\r\nconst Section = ({ section }) => {\r\n return
    \r\n

    {section.sectionHeading}

    \r\n \r\n
    ;\r\n};\r\n\r\nconst Page = ({ page }) => {\r\n return
    \r\n

    {page.title}

    \r\n {page.sections.map(section =>
    )}\r\n
    ;\r\n};\r\n\r\nconst Content = ({ slugfield, content }) => {\r\n if (!slugfield)\r\n return

    Provide the slugfield in they query string (?slugfield={`{slugfield}`})

    ;\r\n\r\n if (!content || !content.length)\r\n return

    No content found with the slugfield {slugfield}

    ;\r\n\r\n return content.map(c => );\r\n};\r\n\r\nconst Preview = ({contentRef}) => {\r\n const [content, setContent] = useState({});\r\n const search = window.location.search;\r\n const params = qs.parse(search);\r\n const slugfield = params.slugfield;\r\n const contentPath = `/pages?slugfield=${slugfield}`;\r\n\r\n useEffect(() => {\r\n if (!slugfield)\r\n return;\r\n\r\n fetch(new URL(contentPath, BASE_URL).href)\r\n .then(res => res.json())\r\n .then(contentArray => setContent(contentArray))\r\n .catch(err => console.error(err))\r\n }, [slugfield, contentPath]);\r\n\r\n return
    \r\n
    \r\n
    \r\n

    Preview

    \r\n \r\n
    \r\n
    \r\n
    ;\r\n};\r\n\r\nexport default Preview;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n//required accept and reject functions\r\n\r\nconst CookieBanner = ({ isVisible, onClick }) => {\r\n\r\n return isVisible ? (<>\r\n
    \r\n
    \r\n
    \r\n

    Cookies on Open Referral UK

    \r\n

    We use some essential cookies to make this service work.

    \r\n\r\n

    We'd also like to use analytics cookies so we can understand how you use the service and make improvements.

    \r\n
    \r\n \r\n \r\n
    \r\n

    View cookies

    \r\n
    \r\n
    \r\n
    \r\n\r\n ) : null\r\n}\r\n\r\nCookieBanner.propTypes = {\r\n onClick: PropTypes.shape({\r\n accept: PropTypes.func.isRequired,\r\n reject: PropTypes.func.isRequired,\r\n\r\n })\r\n}\r\nexport default CookieBanner;","import { useState, useEffect, useRef } from 'react';\r\nimport { Route, Switch, Redirect, useLocation } from 'react-router-dom';\r\nimport Header from './components/header/Header';\r\nimport Footer from './components/footer/Footer';\r\nimport NotFound from './components/errorpage/'\r\nimport GenericErrorPage from './components/shared/errorpage/errorpagegeneric';\r\nimport '../src/styles/sass/styles.scss';\r\nimport {\r\n fetchLandingPageContent,\r\n fetchMainMenuItems\r\n} from './helpers/ContentConsumer';\r\nimport useOukapi from './helpers/dataFetch';\r\nimport HomePage from \"./components/home\";\r\nimport GenericLandingPage from \"./components/genericlandingpage/GenericLandingPage\";\r\nimport WhoIsUsing from \"./components/whoisusing\";\r\nimport GenericContentPage from './components/genericcontentpage/GenericContentPage';\r\nimport CaseStudyPage from './components/genericcontentpage/CaseStudyPage';\r\nimport RegisterPage from './components/genericcontentpage/RegisterPage';\r\nimport LandingPage from './components/casestudies/LandingPage';\r\nimport SkipToContent from './components/header/SkipToContent';\r\nimport Dashboard from './components/dashboard/dashboard';\r\nimport mockData from './components/dashboard/mockData';\r\nimport Preview from './components/preview/preview';\r\nimport CookieBanner from './components/shared/cookiebanner/';\r\nimport { useCookies } from 'react-cookie';\r\n\r\nconst cookieExists = (name) => {\r\n var re = new RegExp(name + '=');\r\n var value = re.exec(document.cookie);\r\n return (value !== null);\r\n};\r\n\r\nconst initGoogleAnalytics = () => {\r\n (function (w, d, s, l, i) {\r\n w[l] = w[l] || []; w[l].push({\r\n 'gtm.start':\r\n new Date().getTime(), event: 'gtm.js'\r\n }); var f = d.getElementsByTagName(s)[0],\r\n j = d.createElement(s), dl = l !== 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =\r\n 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);\r\n })(window, document, 'script', 'dataLayer', 'GTM-T869DN6');\r\n};\r\n\r\nconst initGoogleAnalyticsIfCookie = () => {\r\n if (!cookieExists('openreferralukorg'))\r\n return;\r\n initGoogleAnalytics();\r\n};\r\n\r\n//refactor\r\n//pull data as needed perhaps on first call of page?\r\nfunction App() {\r\n const contentRef = useRef();\r\n useEffect(() => {\r\n initGoogleAnalyticsIfCookie();\r\n }, []);\r\n\r\n const location = useLocation();\r\n\r\n const [homeProps, setHomeProps] = useState({});\r\n const [topMenuId, setTopMenuId] = useState('');\r\n const [mainMenu, setMainMenu] = useState([]);\r\n\r\n const BASE_URL = process.env.REACT_APP_BASE_URL;\r\n const ABOUT_PAGE = process.env.REACT_APP_ABOUT_PAGE_URI;\r\n const CONTACT_PAGE = process.env.REACT_APP_CONTACT_PAGE;\r\n const REACT_APP_FOOTER = process.env.REACT_APP_FOOTER;\r\n \r\n const [cookies, setCookie] = useCookies(['']);\r\n const [showBanner, setShowBanner] = useState(true);\r\n \r\n const handleAccept = () => {\r\n var date = new Date();\r\n date.setDate(date.getDate()+365);\r\n setCookie(\"openreferralukorg\",\"\", { path: '/', expires: date} );\r\n setShowBanner(false);\r\n initGoogleAnalytics();\r\n }\r\n \r\n const handleReject = () => {\r\n var date = new Date();\r\n date.setDate(date.getDate()+365);\r\n setCookie(\"hidecookienotify\",\"\", { path: '/', expires: date} );\r\n setShowBanner(false);\r\n }\r\n \r\n useEffect(() => {\r\n if (cookies && (cookies.hasOwnProperty(\"openreferralukorg\") || cookies.hasOwnProperty(\"hidecookienotify\"))) {\r\n setShowBanner(false);\r\n }\r\n \r\n },[cookies, setShowBanner]);\r\n\r\n let [{ data, isFetching, isError }] = useOukapi(`${BASE_URL}${REACT_APP_FOOTER}`)\r\n const footerProps = data;\r\n\r\n const routes = [\r\n { exact: true, path: \"/\", render: () => () },\r\n { path: \"/about-standard\", render: () => },\r\n { path: \"/how-it-works/:slugField\", render: ({ match }) => },\r\n { path: \"/how-it-works\", render: () => },\r\n { path: \"/community/case-studies/:slugField\", render: ({ match }) => },\r\n { path: \"/community/case-studies\", render: () => },\r\n { path: \"/community/standard-community\", render: () => },\r\n { path: \"/community\", render: () => },\r\n { path: \"/contact-us\", render: () => },\r\n { path: \"/accessibility-statement\", render: ({ location }) => },\r\n { path: \"/privacy-policy\", render: ({ location }) => },\r\n { path: \"/terms-conditions\", render: ({ location }) => },\r\n { path: \"/show-error\", render: () => },\r\n { path: \"/open-referral-uk-video-transcript\", render: ({ location }) => },\r\n { path: \"/dashboard\", render: () => },\r\n { path: \"/devdashboard\", render: () => },\r\n { path: \"/register\", render: ({ location }) => },\r\n { path: \"/preview\", render: () => },\r\n { path: \"/404\", render: () => }\r\n ];\r\n\r\n useEffect(() => {\r\n // fetch from strapi\r\n fetchLandingPageContent()\r\n .then((data) => {\r\n // set data from strapi to state vars\r\n setHomeProps((data));\r\n // setBodyText(data.projectOverview);\r\n if (data.top_menu) {\r\n setTopMenuId(data.top_menu.id);\r\n }\r\n\r\n }).catch(err => console.log(\"An exception occurred within the application, please contact the administrator.\"));\r\n\r\n fetchMainMenuItems()\r\n .then((data) => {\r\n setMainMenu(data)\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (location.hash === '') {\r\n return;\r\n }\r\n setTimeout(() => {\r\n const id = location.hash.replace('#', '');\r\n const element = document.getElementById(id);\r\n if (element) {\r\n element.scrollIntoView();\r\n }\r\n }, 1000);\r\n }, [location]);\r\n\r\n //now can use iserror instead of object keys\r\n return (\r\n !isFetching && !isError && Object.keys(homeProps).length > 0 &&\r\n\r\n (<>\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n {routes.map(r => )}\r\n \r\n \r\n
    \r\n
    \r\n )\r\n );\r\n}\r\n\r\nexport default App;\r\n","import { useEffect } from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nexport default function ScrollToTop() {\r\n\r\n const location = useLocation();\r\n\r\n useEffect(() => {\r\n window.scrollTo({ top: 0, left: 0 });\r\n }, [location]);\r\n\r\n return null;\r\n}","const reportWebVitals = onPerfEntry => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","const ErrorFallback = ({ error }) => {\r\n return (\r\n
    \r\n
    \r\n

    Something went wrong

    \r\n

    Unable to load the requested page click to try again. \r\n If problem persists please contact the site administrator at hello@openreferraluk.org

    \r\n Open Referral UK Home\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default ErrorFallback;\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 'core-js/features/string/repeat';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport ScrollToTop from './components/navigator/ScrollToTop';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\nimport ErrorFallback from \"./components/banner/ErrorFallback\";\r\nimport { ErrorBoundary } from \"react-error-boundary\";\r\n\r\nReactDOM.render(\r\n \r\n } >\r\n \r\n \r\n \r\n \r\n \r\n ,\r\n \r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}