{"version":3,"sources":["Helpers/titleCase.tsx","Store/GlobalStore.ts","Store/CertificateReportStore.ts","Store/PortfolioStore.ts","Store/StoreProvider.tsx","Reports/Components/FrontNav.tsx","App.tsx","index.tsx"],"names":["toTitleCase","str","replace","txt","charAt","toUpperCase","substr","toLowerCase","GlobalStore","axios","initialised","hasError","userInfo","literacyModel","error","loggingIn","getCapsAchieved","caps","map","l","capabilities","c","value","push","name","sort","getCapsExtended","getCapsAchievedOrExtended","concat","getCapsInProgress","getLitsAchieved","filter","achieved","getLitsInProgress","lits","some","b","A","B","a","x","Set","has","setDifference","handleError","runInAction","initialiseAsync","loadUserInfo","get","user","data","setUser","id","studentId","username","firstName","lastName","catch","window","location","href","this","Axios","create","withCredentials","makeObservable","observable","CertificateReportStore","globalStore","model","hasAccess","then","err","response","status","PortfolioStore","microCreds","dateRange","getExperiences","start","startDate","end","endDate","exp","Date","selectAllExperiences","startExps","endExps","today","getFullYear","getMonth","key","action","storesContext","createContext","undefined","useStores","stores","useContext","Error","LoginBlock","observer","children","Container","Row","Col","sm","Card","className","CardHeader","CardBody","Spinner","color","StoreProvider","certificateReportStore","portfolioStore","Provider","FrontNav","useState","isOpen","setIsOpen","url","includes","Navbar","light","expand","NavbarBrand","NavbarToggler","onClick","Collapse","navbar","Nav","NavItem","to","App","useEffect","Font","register","family","fonts","src","fontWeight","fontStyle","registerHyphenationCallback","word","CertificateReport","Render","lazy","PortfolioReport","Filter","NavRouter","withRouter","fallback","showDialog","path","exact","init","dsn","release","process","SENTRYUIRELEASE","environment","hostname","integrations","BrowserTracing","Replay","maskAllText","blockAllMedia","HttpClient","tracesSampleRate","replaysSessionSampleRate","replaysOnErrorSampleRate","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.0b4766bb.chunk.js","sourcesContent":["/* eslint-disable */\n\nfunction toTitleCase(str: string) {\n return str.replace(\n /\\w\\S*/g,\n function(txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n }\n );\n }\n\nexport default toTitleCase;","import { setUser } from '@sentry/react';\nimport Axios, { AxiosInstance } from 'axios';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport UserInfo from '../Models/UserInfo';\nimport LiteracyModel from '../Models/LiteracyModel';\nimport toTitleCase from '../Helpers/titleCase';\n\n/* eslint-disable */\n\nconst setIntersect = (a: any[], b: any[]) => a.filter(x => new Set(b).has(x));\nconst setDifference = (a: any[], b: any[]) => a.filter(x => !(new Set(b).has(x)));\n\nexport default class GlobalStore {\n constructor() {\n this.axios = Axios.create({\n withCredentials: true\n });\n\n makeObservable(this, {\n initialised: observable,\n userInfo: observable,\n literacyModel: observable,\n loggingIn: observable,\n getCapsAchieved: observable,\n getCapsExtended: observable,\n getLitsAchieved: observable,\n getLitsInProgress: observable,\n getCapsInProgress: observable,\n getCapsAchievedOrExtended: observable,\n hasError: observable\n });\n }\n\n readonly axios: AxiosInstance;\n\n initialised = false;\n\n hasError: boolean = false;\n\n userInfo?: UserInfo;\n\n literacyModel?: LiteracyModel[];\n\n error?: Error;\n\n loggingIn = false;\n\n // todo: modularize this; DRY\n getCapsAchieved = () => {\n var caps: string[] = [];\n this.literacyModel?.map(l => {\n l.capabilities.map(c => {\n if (c.value == 3) {\n caps.push(c.name)\n }\n });\n });\n return caps.map(c => toTitleCase(c)).sort();\n }\n\n getCapsExtended = () => {\n var caps: string[] = [];\n this.literacyModel?.map(l => {\n l.capabilities.map(c => {\n if (c.value > 3) {\n caps.push(c.name)\n }\n });\n });\n return caps.map(c => toTitleCase(c)).sort();\n }\n\n getCapsAchievedOrExtended = () => {\n return this.getCapsAchieved().concat(this.getCapsExtended());\n }\n\n getCapsInProgress = () => {\n var caps: string[] = [];\n this.literacyModel?.map(l => {\n l.capabilities.map(c => {\n if (c.value > 0 && c.value < 3) {\n caps.push(c.name)\n }\n });\n });\n return caps.map(c => toTitleCase(c)).sort();\n }\n\n // this is now entirely dependent on the 'literacy achieved' label\n getLitsAchieved = () => {\n return this.literacyModel?.filter(l =>\n l.achieved\n ).map(l =>\n toTitleCase(l.name)\n ).sort() ?? [];\n }\n\n getLitsInProgress = () => {\n var lits: string[] = [];\n this.literacyModel?.map(l => {\n if (l.capabilities.some(c => c.value > 0 && c.value < 3)) {\n lits.push(l.name);\n }\n });\n // litsInProgress may overlap litsAchieved. Return set difference. i.e. B \\ (A ∩ B)\n const A = this.getLitsAchieved();\n const B = lits.map(l => toTitleCase(l)).sort();\n return setDifference(B, setIntersect(A, B));\n }\n\n handleError = (error: Error) => runInAction(() => {\n this.error = error;\n });\n\n initialiseAsync = async () => {\n if (this.initialised) {\n return;\n }\n runInAction(() => {\n this.initialised = true;\n });\n runInAction(() => {\n this.loadUserInfo();\n });\n };\n\n loadUserInfo = () => {\n (async () => {\n // eslint-disable-next-line no-debugger\n const user = await this.axios.get('/api/auth/user');\n runInAction(() => {\n this.userInfo = user.data;\n });\n setUser({\n id: user.data.studentId,\n username: `${user.data.firstName} ${user.data.lastName}`\n });\n })().catch(() => {\n window.location.href = `/api/auth/login?returnUrl=${window.location.href}`;\n runInAction(() => {\n this.loggingIn = true;\n });\n });\n\n (async () => {\n const lits = await this.axios.get('/api/capabilities');\n runInAction(() => {\n this.literacyModel = lits.data;\n });\n })().catch(() => {\n this.hasError = true;\n });\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport GlobalStore from './GlobalStore';\nimport CertificateModel from '../Models/CertificateReportModel';\n\nexport default class CertificateReportStore {\n constructor(globalStore: GlobalStore) {\n this.axios = globalStore.axios;\n this.globalStore = globalStore;\n\n makeObservable(this, {\n model: observable,\n initialised: observable,\n hasAccess: observable\n });\n }\n\n readonly globalStore: GlobalStore;\n\n readonly axios: AxiosInstance;\n\n model?: CertificateModel;\n\n hasAccess = true;\n\n initialised = false;\n\n initialiseAsync = async () => {\n if (this.initialised) {\n return;\n }\n runInAction(() => {\n this.initialised = true;\n });\n\n await this.axios.get('/api/certificate')\n .then(model => {\n this.model = model.data;\n }, err => {\n if (err.response.status === 401) {\n runInAction(() => {\n this.hasAccess = false;\n });\n } else {\n runInAction(() => {\n this.globalStore.hasError = true;\n });\n }\n });\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { action, makeObservable, observable, runInAction } from 'mobx';\nimport { Range } from 'react-date-range';\nimport GlobalStore from './GlobalStore';\nimport PortfolioModel from '../Models/PortfolioModel';\n\nexport default class PortfolioStore {\n constructor(globalStore: GlobalStore) {\n this.axios = globalStore.axios;\n this.globalStore = globalStore;\n\n makeObservable(this, {\n model: observable,\n microCreds: observable,\n initialised: observable,\n dateRange: observable,\n getExperiences: observable,\n selectAllExperiences: action\n });\n }\n\n readonly globalStore: GlobalStore;\n\n axios: AxiosInstance;\n\n model?: PortfolioModel[];\n\n microCreds?: string[];\n\n initialised = false;\n\n dateRange?: Range[];\n\n getExperiences = () => {\n const start = this.dateRange![0].startDate!;\n const end = this.dateRange![0].endDate!;\n return this.model?.filter(exp => (\n new Date(exp.startDate) >= start\n && new Date(exp.endDate) <= end\n ));\n };\n\n selectAllExperiences = () => {\n // sort all experiences by start to get earliest start date\n const startExps = this.model?.sort((a, b) => (a.startDate > b.startDate ? 1 : -1));\n if (startExps) {\n this.dateRange![0].startDate = new Date(startExps[0].startDate);\n }\n\n // sort all experiences by end to get latest end date\n const endExps = this.model?.sort((a, b) => (a.endDate > b.endDate ? -1 : 1));\n if (endExps) {\n this.dateRange![0].endDate = new Date(endExps[0].endDate);\n }\n };\n\n initialiseAsync = async () => {\n if (this.initialised) {\n return;\n }\n runInAction(() => {\n this.initialised = true;\n });\n runInAction(() => {\n const today = new Date();\n const startDate = new Date(\n today.getFullYear(),\n today.getMonth() - 1,\n 1\n );\n this.dateRange = [{\n startDate,\n endDate: today,\n key: 'selection'\n }];\n });\n\n (async () => {\n const model = await this.axios.get('/api/portfolio');\n runInAction(() => {\n this.model = model.data;\n });\n })().catch(() => {\n this.globalStore.hasError = true;\n });\n\n (async () => {\n const microCreds = await this.axios.get('/api/portfolio/microcreds');\n runInAction(() => {\n this.microCreds = microCreds.data;\n });\n })().catch(() => {\n this.globalStore.hasError = true;\n });\n };\n}\n","import { observer } from 'mobx-react-lite';\nimport React, { createContext, PropsWithChildren, useContext } from 'react';\nimport { Card, CardBody, CardHeader, Col, Container, Row, Spinner } from 'reactstrap';\nimport GlobalStore from './GlobalStore';\nimport CertificateReportStore from './CertificateReportStore';\nimport PortfolioStore from './PortfolioStore';\n\nexport interface Stores {\n globalStore: GlobalStore\n certificateReportStore: CertificateReportStore\n portfolioStore: PortfolioStore\n}\n\nexport const storesContext = createContext(undefined);\n\n/** A React Hook to use the app stores inside a provider */\nexport const useStores = () => {\n const stores = useContext(storesContext);\n if (!stores) {\n throw new Error('useStores must be used within a StoreProvider.');\n }\n return stores;\n};\n\nconst LoginBlock = observer(({ children }: PropsWithChildren) => {\n const { globalStore } = useStores();\n\n globalStore.initialiseAsync();\n\n if (globalStore.error) {\n throw globalStore.error;\n }\n\n if (globalStore.userInfo === undefined || globalStore.loggingIn) {\n return \n \n \n \n \n \n {globalStore.loggingIn ? 'Redirecting to login...' : 'Checking if you\\'re logged in...'}\n \n \n \n \n \n \n \n \n ;\n }\n\n return <>{children};\n});\n\nconst StoreProvider = ({ children }: PropsWithChildren) => {\n const globalStore = new GlobalStore();\n const stores = {\n globalStore,\n certificateReportStore: new CertificateReportStore(globalStore),\n portfolioStore: new PortfolioStore(globalStore)\n };\n return (<>\n \n \n {children}\n \n \n );\n};\n\nexport default StoreProvider;\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Navbar, NavbarBrand, Nav, NavItem, Collapse, NavbarToggler } from 'reactstrap';\nimport '../../App.scss';\n\nconst FrontNav = () => {\n const [isOpen, setIsOpen] = useState(false);\n const toggle = () => setIsOpen(!isOpen);\n const url = window.location.href;\n return (\n
\n {url.includes('staging') || url.includes('localhost')\n ? \n Bond Reporting Tool\n \n \n \n \n \n : <>}\n
\n );\n};\n\nexport default FrontNav;\n","import React, { lazy, Suspense, useEffect } from 'react';\nimport * as Sentry from '@sentry/react';\nimport { Spinner } from 'reactstrap';\nimport { BrowserRouter as Router, Redirect, Route, Switch, withRouter } from 'react-router-dom';\nimport { Font } from '@react-pdf/renderer';\nimport StoreProvider from './Store/StoreProvider';\nimport FrontNav from './Reports/Components/FrontNav';\nimport './App.scss';\n\n/* eslint-disable */\n\nconst registerFont = () => {\n Font.register({ family: 'Playfair',\n fonts: [\n { src: 'https://bond-skills-reports-resources.s3.ap-southeast-2.amazonaws.com/fonts/PlayfairDisplay-BlackItalic.ttf', fontWeight: 'black', fontStyle: 'italic' }\n ] });\n Font.register({ family: 'Interstate',\n fonts: [\n { src: 'https://bond-skills-reports-resources.s3.ap-southeast-2.amazonaws.com/fonts/InterstateLight.otf' },\n { src: 'https://bond-skills-reports-resources.s3.ap-southeast-2.amazonaws.com/fonts/InterstateLightItalic.otf', fontStyle: 'italic' },\n { src: 'https://bond-skills-reports-resources.s3.ap-southeast-2.amazonaws.com/fonts/InterstateBold.otf', fontWeight: 'bold' },\n { src: 'https://bond-skills-reports-resources.s3.ap-southeast-2.amazonaws.com/fonts/InterstateBlack.otf', fontWeight: 'black' }\n ] });\n Font.registerHyphenationCallback(word => [word]);\n};\n\nconst App = () => {\n useEffect(() => {\n registerFont();\n }, []);\n\n const CertificateReport = {\n Render: lazy(() => import('./Reports/Certificate/Pages/Render'))\n };\n const PortfolioReport = {\n Filter: lazy(() => import('./Reports/Portfolio/Pages/Filter')),\n Render: lazy(() => import('./Reports/Portfolio/Pages/Render'))\n };\n const NavRouter = withRouter(() => );\n return An error has occured} showDialog>\n \n \n \n Downloading Experiences\n }\n >\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n};\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { HttpClient } from '@sentry/integrations';\nimport '@careerhub/chubby/scss/main.scss';\nimport { BrowserTracing, Replay, init } from '@sentry/react';\nimport App from './App';\nimport './index.scss';\n\ninit({\n dsn: 'https://0438b84b23c14bceb2908a83e99a40eb@errors.careerhub.support/32',\n release: process.env.SENTRYUIRELEASE,\n environment: (() => {\n const hostname = window.location.hostname;\n if (hostname === 'staging.reports.bond.careerhub.com.au') {\n return 'Staging';\n }\n if (hostname === 'reports.bond.careerhub.com.au') {\n return 'Production';\n }\n return 'Development';\n })(),\n integrations: [\n new BrowserTracing(),\n new Replay({\n maskAllText: true,\n blockAllMedia: true\n }),\n new HttpClient()\n ],\n tracesSampleRate: 0.1, // track 10% of transactions\n // only record sessions if an error has occured\n replaysSessionSampleRate: 0,\n replaysOnErrorSampleRate: 1.0\n});\n\nReactDOM.render(\n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}