public/router.js (68 lines of code) (raw):

import React from 'react'; import {Router, Route, IndexRoute, browserHistory} from 'react-router'; import {getStore} from './util/storeAccessor'; import {clearError} from './actions/UIActions/clearError'; import {hasPermission} from './util/verifyPermission'; import ReactApp from './components/ReactApp.react'; import BatchTag from './components/BatchTag.react'; import MergeTag from './components/MergeTag.react'; import MappingManager from './components/MappingManager.react'; import Status from './components/Status.react'; import Audit from './components/Audit.react'; import Unauthorised from './components/Unauthorised.react'; import TagCreate from './components/Tag/Create.react'; import TagDisplay from './components/Tag/Display.react'; import TagSearch from './components/TagSearch.react'; import SectionList from './components/SectionList/SectionList.react'; import SectionDisplay from './components/Section/Display'; import SectionCreate from './components/Section/Create'; import PillarList from './components/Pillar/PillarList.react'; import PillarDisplay from './components/Pillar/Display.react'; import PillarCreate from './components/Pillar/Create.react'; import SponsorshipSearch from './components/SponsorshipSearch.react'; import SponsorshipDisplay from './components/Sponsorship/Display'; import SponsorshipCreate from './components/Sponsorship/Create'; import SpreadsheetBuilder from './components/Spreadsheet/SpreadsheetBuilder.react'; function requirePermission(permissionName, nextState, replaceState) { if (!hasPermission(permissionName)) { replaceState(null, '/unauthorised'); } } function clearErrorBar() { const store = getStore(); store.dispatch(clearError()); } function onRouterUpdate() { const domainMatch = /^.*\.(?<environment>local|code)\.dev-gutools\.co\.uk$|^.*\.gutools\.co\.uk$/ .exec(location.hostname); if (domainMatch) { const stage = (domainMatch.groups?.environment || "PROD"); const telemetryUrl = stage === "PROD" ? "user-telemetry.gutools.co.uk" : `user-telemetry.${stage}.dev-gutools.co.uk` const image = new Image(); image.src = `https://${telemetryUrl}/guardian-tool-accessed?app=tag-manager&stage=${stage.toUpperCase()}&path=${window.location.pathname}`; } } export const router = ( <Router history={browserHistory} onUpdate={onRouterUpdate}> <Route path="/" component={ReactApp}> <Route name="tag" path="/tag/create" component={TagCreate} onEnter={requirePermission.bind(this, 'tag_edit')}/> <Route name="tagCreate" path="/tag/:tagId" component={TagDisplay} onLeave={clearErrorBar.bind(this)} /> <Route name="batch" path="/batch" component={BatchTag}/> <Route name="mapping" path="/mapping" component={MappingManager} /> <Route name="merge" path="/merge" component={MergeTag} onEnter={requirePermission.bind(this, 'tag_admin')}/> <Route name="audit" path="/audit" component={Audit} /> <Route name="status" path="/status" component={Status} /> <Route name="sectionList" path="/section" component={SectionList} onEnter={requirePermission.bind(this, 'tag_admin')} /> <Route name="sectionCreate" path="/section/create" component={SectionCreate} onEnter={requirePermission.bind(this, 'tag_admin')} /> <Route name="sectionEdit" path="/section/:sectionId" component={SectionDisplay} onEnter={requirePermission.bind(this, 'tag_admin')}/> <Route name="sponsorshipSearch" path="/sponsorship" component={SponsorshipSearch} onEnter={requirePermission.bind(this, 'commercial_tags')} /> <Route name="sponsorshipCreate" path="/sponsorship/create" component={SponsorshipCreate} onEnter={requirePermission.bind(this, 'commercial_tags')} /> <Route name="sponsorshipEdit" path="/sponsorship/:sponsorshipId" component={SponsorshipDisplay} onEnter={requirePermission.bind(this, 'commercial_tags')}/> <Route name="pillarList" path="/pillar" component={PillarList} onEnter={requirePermission.bind(this, 'tag_admin')} /> <Route name="pillarCreate" path="/pillar/create" component={PillarCreate} onEnter={requirePermission.bind(this, 'tag_admin')} /> <Route name="pillarEdit" path="/pillar/:pillarId" component={PillarDisplay} onEnter={requirePermission.bind(this, 'tag_admin')}/> <Route name="micrositeList" path="/microsite" component={SectionList} isMicrositeView={true}/> <Route name="micrositeCreate" path="/microsite/create" component={SectionCreate} isMicrositeView={true}/> <Route name="micrositeEdit" path="/microsite/:sectionId" component={SectionDisplay} isMicrositeView={true} /> <Route name="spreadsheetBuilder" path="/spreadsheets" component={SpreadsheetBuilder} /> <Route name="unauthorised" path="/unauthorised" component={Unauthorised} /> <IndexRoute component={TagSearch}/> </Route> </Router> )