{"version":3,"sources":["Store/GlobalStore.ts","Store/ReflectionsReportStore.ts","Store/CurricularReportStore.ts","Store/CertificateReportStore.ts","Store/StoreProvider.tsx","Reports/Components/FrontNav.tsx","App.tsx","index.tsx"],"names":["GlobalStore","axios","initialised","userInfo","error","loggingIn","handleError","runInAction","initialiseAsync","a","loadUserInfo","get","user","data","setUser","id","studentId","username","firstName","lastName","catch","window","location","href","this","Axios","create","withCredentials","makeObservable","observable","ReflectionsReportStore","globalStore","experiences","selectedExperienceIds","selectedReflectionIds","selectedSkillNames","selectExperience","includes","filter","x","push","reflections","find","e","forEach","reflection","selectReflection","selected","parent","undefined","selectParent","selectSkill","name","r","skill","skillReflections","toggle","parentExperience","selectAll","length","map","flatMap","allSkills","experience","selectedExperiences","computed","selectedReflections","action","uniq","slice","copy","createViewModel","CcrReportStore","experienceTypes","loaded","response","ex","toggleExperienceSelected","setExperienceSelected","selectExperienceType","every","isExperienceTypeSelected","CertificateReportStore","model","storesContext","createContext","useStores","stores","useContext","Error","LoginBlock","observer","children","Container","Row","Col","sm","Card","className","CardHeader","CardBody","Spinner","color","StoreProvider","reflectionsReportStore","curricularReportStore","CurricularReportStore","certificateReportStore","Provider","value","FrontNav","useState","isOpen","setIsOpen","Navbar","light","expand","NavbarBrand","NavbarToggler","onClick","Collapse","navbar","Nav","NavItem","to","App","useEffect","Font","register","family","fonts","src","fontWeight","fontStyle","registerHyphenationCallback","word","ReflectionsReport","Filter","lazy","Render","CurricularReport","CertificateReport","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.e6fbccbe.chunk.js","sourcesContent":["import { setUser } from '@sentry/react';\nimport Axios, { AxiosInstance } from 'axios';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport UserInfo from '../Models/UserInfo';\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 loggingIn: observable\n });\n }\n\n readonly axios: AxiosInstance;\n\n initialised = false;\n\n userInfo?: UserInfo;\n\n error?: Error;\n\n loggingIn = false;\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}\n","import { AxiosInstance } from 'axios';\nimport { action, computed, makeObservable, observable, runInAction } from 'mobx';\nimport { uniq } from 'lodash';\nimport { createViewModel } from 'mobx-utils/lib/create-view-model';\nimport GlobalStore from './GlobalStore';\nimport ReflectionReportModel from '../Models/ReflectionReportModel';\n\nexport default class ReflectionsReportStore {\n constructor(globalStore: GlobalStore) {\n this.axios = globalStore.axios;\n\n makeObservable(this, {\n experiences: observable,\n initialised: observable,\n selectedExperienceIds: observable,\n selectedReflectionIds: observable,\n selectedSkillNames: observable,\n selectedExperiences: computed,\n selectedReflections: computed,\n selectExperience: action,\n selectReflection: action,\n selectSkill: action,\n selectAll: action\n });\n }\n\n axios: AxiosInstance;\n\n experiences?: ReflectionReportModel[];\n\n selectedExperienceIds: number[] = [];\n\n selectedReflectionIds: number[] = [];\n\n selectedSkillNames: string[] = [];\n\n initialised = false;\n\n get selectedExperiences() {\n return this.experiences?.filter(e => this.selectedExperienceIds.includes(e.id));\n }\n\n get allSkills() {\n if (this.experiences === undefined) {\n return undefined;\n }\n\n return uniq(this.experiences.flatMap(e => e.reflections).map(e => e.skill));\n }\n\n get selectedReflections() {\n return this.experiences?.slice()?.map(e => {\n const copy = createViewModel(e);\n copy.reflections = copy.reflections.filter(r => this.selectedReflectionIds.includes(r.id)) ?? [];\n return copy;\n })?.filter(e => e.reflections.length > 0);\n }\n\n selectExperience = (id: number) => {\n if (this.selectedExperienceIds.includes(id)) {\n this.selectedExperienceIds = this.selectedExperienceIds.filter(x => x !== id);\n } else {\n this.selectedExperienceIds.push(id);\n }\n const reflections = this.experiences?.find(e => e.id === id)?.reflections;\n reflections?.forEach(reflection => this.selectReflection(reflection.id, this.selectedExperienceIds.includes(id)));\n };\n\n selectReflection = (id: number, selected?: boolean, parent?: number | string) => {\n if (this.selectedReflectionIds.includes(id) || selected === false) {\n this.selectedReflectionIds = this.selectedReflectionIds.filter(x => x !== id);\n } else {\n this.selectedReflectionIds.push(id);\n }\n if (parent !== undefined) {\n this.selectParent(parent);\n }\n };\n\n selectSkill = (name: string) => {\n if (this.selectedSkillNames.includes(name)) {\n this.selectedSkillNames = this.selectedSkillNames.filter(x => x !== name);\n } else {\n this.selectedSkillNames.push(name);\n }\n const reflections = this.experiences?.find(e => e.reflections.find(r => r.skill === name))?.reflections;\n const skillReflections = reflections?.filter(x => x.skill === name);\n skillReflections?.forEach(reflection => this.selectReflection(reflection.id, this.selectedSkillNames.includes(name)));\n };\n\n selectParent = (parent: number | string) => {\n let toggle = false;\n if (typeof parent === 'number') {\n const parentExperience = this.experiences?.find(e => e.id === parent);\n parentExperience?.reflections.forEach(reflection => {\n if (this.selectedReflectionIds.find(r => r === reflection.id)) { toggle = true; }\n });\n if (!toggle) { this.selectExperience(parent); }\n } else if (typeof parent === 'string') {\n const reflections = this.experiences?.find(e => e.reflections.find(r => r.skill === parent))?.reflections;\n const skillReflections = reflections?.filter(x => x.skill === parent);\n skillReflections?.forEach(reflection => {\n if (this.selectedReflectionIds.find(r => r === reflection.id)) { toggle = true; }\n });\n if (!toggle) { this.selectSkill(parent); }\n }\n };\n\n selectAll = () => {\n if (this.selectedExperienceIds.length !== (this.experiences?.length ?? 0)) {\n this.selectedExperienceIds = this.experiences?.map(e => e.id) ?? [];\n this.selectedReflectionIds = this.experiences?.flatMap(e => e.reflections).map(r => r.id) ?? [];\n this.selectedSkillNames = this.allSkills ?? [];\n } else {\n this.selectedExperienceIds = [];\n this.selectedReflectionIds = [];\n this.selectedSkillNames = [];\n }\n };\n\n initialiseAsync = async () => {\n if (this.initialised) {\n return;\n }\n runInAction(() => {\n this.initialised = true;\n });\n const experience = await this.axios.get('/api/reflections');\n runInAction(() => {\n this.experiences = experience.data;\n });\n this.selectAll();\n };\n}\n","import { AxiosInstance } from 'axios';\nimport { action, computed, makeObservable, observable, runInAction } from 'mobx';\nimport GlobalStore from './GlobalStore';\nimport CcrExperienceTypeModel from '../Models/CcrExperienceTypeModel';\n\nexport default class CcrReportStore {\n constructor(globalStore: GlobalStore) {\n this.axios = globalStore.axios;\n\n makeObservable(this, {\n experienceTypes: observable,\n loaded: observable,\n selectedExperienceIds: observable,\n error: observable,\n setExperienceSelected: action,\n selectExperienceType: action,\n selectAll: action,\n experiences: computed,\n isExperienceTypeSelected: computed\n });\n }\n\n readonly axios: AxiosInstance;\n\n experienceTypes?: CcrExperienceTypeModel[];\n\n selectedExperienceIds: number[] = [];\n\n loaded = false;\n\n error?: Error;\n\n get experiences() {\n return this.experienceTypes?.flatMap(e => e.experiences) ?? [];\n }\n\n get isExperienceTypeSelected() {\n return (id: number) => this.experienceTypes?.find(e => e.id === id)?.experiences.every(\n experience => this.selectedExperienceIds.includes(experience.id)\n ) ?? false;\n }\n\n initialiseAsync = async () => {\n if (this.loaded) {\n return;\n }\n try {\n const response = await this.axios.get('/api/ccr');\n runInAction(() => {\n this.experienceTypes = response.data;\n this.selectedExperienceIds = this.experienceTypes.flatMap(e => e.experiences).map(ex => ex.id); // default to all selected\n });\n } catch (error) {\n runInAction(() => {\n this.error = error as Error;\n });\n } finally {\n runInAction(() => {\n this.loaded = true;\n });\n }\n };\n\n selectAll = () => {\n if (this.selectedExperienceIds.length !== (this.experienceTypes?.flatMap(e => e.experiences).length ?? 0)) {\n this.selectedExperienceIds = this.experienceTypes?.flatMap(e => e.experiences).map(ex => ex.id) ?? [];\n } else {\n this.selectedExperienceIds = [];\n }\n };\n\n toggleExperienceSelected = (id: number) => {\n if (this.selectedExperienceIds.includes(id)) {\n this.selectedExperienceIds = this.selectedExperienceIds.filter(x => x !== id);\n } else {\n this.selectedExperienceIds = [...this.selectedExperienceIds, id];\n }\n };\n\n setExperienceSelected = (id: number, selected: boolean) => {\n if (selected) {\n this.selectedExperienceIds = [...this.selectedExperienceIds, id];\n } else {\n this.selectedExperienceIds = this.selectedExperienceIds.filter(x => x !== id);\n }\n };\n\n selectExperienceType = (id: number) => {\n const experiences = this.experienceTypes?.find(e => e.id === id)?.experiences;\n // if all experiences are selected, deselect them\n if (experiences?.every(experience => this.selectedExperienceIds.includes(experience.id))) {\n experiences.forEach(experience => this.setExperienceSelected(experience.id, false));\n } else {\n // otherwise, select them\n experiences?.forEach(experience => this.setExperienceSelected(experience.id, 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\n makeObservable(this, {\n model: observable,\n initialised: observable\n });\n }\n\n axios: AxiosInstance;\n\n model?: CertificateModel;\n\n initialised = false;\n\n initialiseAsync = async () => {\n if (this.initialised) {\n return;\n }\n runInAction(() => {\n this.initialised = true;\n });\n const model = await this.axios.get('/api/certificate');\n runInAction(() => {\n this.model = model.data;\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 ReflectionsReportStore from './ReflectionsReportStore';\nimport CurricularReportStore from './CurricularReportStore';\nimport CertificateReportStore from './CertificateReportStore';\n\nexport interface Stores {\n globalStore: GlobalStore\n reflectionsReportStore: ReflectionsReportStore\n curricularReportStore: CurricularReportStore\n certificateReportStore: CertificateReportStore\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 reflectionsReportStore: new ReflectionsReportStore(globalStore),\n curricularReportStore: new CurricularReportStore(globalStore),\n certificateReportStore: new CertificateReportStore(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 {\n Navbar,\n NavbarBrand,\n Nav,\n NavItem,\n Collapse,\n NavbarToggler\n} from 'reactstrap';\nimport '../../App.scss';\n\nconst FrontNav = () => {\n const [isOpen, setIsOpen] = useState(false);\n const toggle = () => setIsOpen(!isOpen);\n return (\n
\n \n Demo Reporting Tool\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\nconst registerFont = () => {\n Font.register({ family: 'Roboto',\n fonts: [\n { src: 'https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Me5Q.ttf' },\n { src: 'https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu52xP.ttf', fontWeight: 400, fontStyle: 'italic' },\n { src: 'https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9vAw.ttf', fontWeight: 'medium' },\n { src: 'https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlvAw.ttf', fontWeight: 'bold' },\n { src: 'https://fonts.gstatic.com/s/roboto/v15/owYYXKukxFDFjr0ZO8NXh6CWcynf_cDxXwCLxiixG1c.ttf',\n fontWeight: 'bold',\n fontStyle: 'italic' }\n ] });\n Font.registerHyphenationCallback(word => [word]);\n};\n\nconst App = () => {\n useEffect(() => {\n registerFont();\n }, []);\n\n const ReflectionsReport = {\n Filter: lazy(() => import('./Reports/Reflections/Pages/Filter')),\n Render: lazy(() => import('./Reports/Reflections/Pages/Render'))\n };\n const CurricularReport = {\n Filter: lazy(() => import('./Reports/Curricular/Pages/Filter')),\n Render: lazy(() => import('./Reports/Curricular/Pages/Render'))\n };\n const CertificateReport = {\n Render: lazy(() => import('./Reports/Certificate/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 \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://eb303079e81d4fb6896c2f25055f5932@errors.careerhub.support/41',\n release: process.env.SENTRYUIRELEASE,\n environment: (() => {\n const hostname = window.location.hostname;\n if (hostname === 'staging.reports.demo.careerhub.com.au') {\n return 'Staging';\n }\n if (hostname === 'reports.demo.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":""}