{"version":3,"sources":["components/Header.js","components/Footer.js","components/Layout.js","components/FetchKeys.js","components/FolderSelection.js","components/GenerateKey.js","components/HowToUseKey.js","components/KeyResult.js","components/Faq.js","msal/MsalConfig.js","graph/GraphService.js","msal/MsalAuthProvider.js","App.js","registerServiceWorker.js","index.js"],"names":["Header","props","state","menuActive","isActive","user","auth","userName","addActiveClass","bind","outOffFocusClick","this","getMail","setState","givenName","window","addEventListener","e","target","classList","contains","className","href","id","NavItem","exact","tag","Link","to","activeClassName","pathname","title","aria-label","aria-haspopup","aria-expanded","aria-controls","onClick","data-icon","aria-labelledby","name","onSignOut","Component","displayName","Footer","aria-hidden","viewBox","x","y","role","type","tabIndex","Layout","children","headKeylist","FetchKeys","keyslicenses","loading","mail","NoKeysPageVisible","NoPanoptoUserFoundVisible","handleDelete","handleEdit","LoadNoKeysPage","panoptoUserMail","listKeyData","confirm","fetch","method","headers","then","data","filter","key","history","push","noKeySet","lk","i","findIndex","pinned","response","json","sort","a","b","setTimeout","slice","folderName","keys","keylist","length","map","keylicens","index","sessionName","parseLicense","parseRecordingInfo","handleFavorite","checked","onChange","dummie","htmlFor","open","document","documentElement","style","setProperty","handleCreate","openGuides","contents","renderWorkingOnIt","renderKeylistTable","FolderSelection","abortController","AbortController","handleClick","changeEvent","handleFolderChange","hasSubFolder","options","selectedIndex","dataset","subfolder","text","foldersLoaded","parentElement","getIndex","displayData","getFolders","value","timer","showdata","postVal","query","myFolders","noResultFound","handleSearchChange","abort","m","folderGuid","appendData","signal","res","catch","err","guid","folder","folders","hasSubFolders","data-subfolder","unshift","getTextAreaValue","preventDefault","clearTimeout","renderSelection","head","GenerateKey","handlerecentFolderInputChange","selFolder","prevState","keyData","folderOpt","React","createRef","dateTime","created","duration","sessionType","sessionPublishDate","addPrefixDate","lastUsed","optionSessionType","optionRecordToFolder","optionDoLiveStream","selectedOption2","recentFolders","acceptkey","tabSelection","isHidden","snCounter","addKey","handleInputChange","handleOptionChange","handleClose","keyLicensId","match","params","handleAddPrefixDateChange","handleDurationOptionChange","handleOption2Change","onTabClick","handleOptionRecordToFolderChange","handleOptionDoLiveStreamChange","updateUserOptions","onInfoPathClick","undefined","t","event","nativeEvent","submitter","innerText","isDeleting","FormData","append","set","body","responseJson","showPathInfo","tInput","replace","Number","parseInt","getRecentFolders","renderData","deleteElement","norecentfolderinfo","handleCloseInfo","alt","src","onSubmit","placeholder","maxLength","onKeyPress","data-modal","data-initial-tab","data-focus-onload","display","rFolder","disabled","uniqueArray","forEach","itm","isfound","itm2","HowToUseKey","KeyResult","location","paddingTop","noValidate","showKeyList","Faq","rel","msalConfig","authority","clientId","redirectUri","getElementById","baseURI","graph","require","getGraphClient","accessToken","Client","init","authProvider","done","getUserDetails","client","api","get","msalAuth","UserAgentApplication","App0","localStorage","getItem","appPackageJson","version","caches","names","delete","reload","clear","setItem","path","render","component","HocComponent","App","isAuthenticated","renewIframe","hasError","errorMessage","nokey","accessTokenRequest","scopes","acquireTokenSilent","acquireTokenPopup","user2","handleRedirectCallback","userAccount","getAccount","authErr","accountState","isCallback","hash","loginRedirect","logout","onSignIn","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","log","error","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","basename","URL","process","origin","status","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.b6b83478.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { NavItem } from 'reactstrap';\r\nimport { Link, NavLink } from 'react-router-dom';\r\n\r\nexport class Header extends Component {\r\n static displayName = Header.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n menuActive: 0,\r\n isActive: false,\r\n user: props.auth.user.userName\r\n }\r\n\r\n this.addActiveClass = this.addActiveClass.bind(this);\r\n this.outOffFocusClick = this.outOffFocusClick.bind(this);\r\n\r\n }\r\n\r\n async componentDidMount() {\r\n var m = await this.props.getMail();\r\n if (m) {\r\n this.setState({\r\n givenName: this.props.auth.givenName\r\n }); \r\n window.addEventListener(\"click\", this.outOffFocusClick, false); \r\n } \r\n }\r\n\r\n addActiveClass() {\r\n this.setState({\r\n isActive: !this.state.isActive\r\n })\r\n }\r\n\r\n outOffFocusClick(e) {\r\n if (e.target.classList.contains(\"nav__item--icon\") === false) {\r\n this.setState({\r\n isActive: false\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n\r\n \r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class Footer extends Component {\r\n static displayName = Footer.name;\r\n\r\n render() {\r\n return (\r\n \r\n //\r\n\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n/*import { Container } from 'reactstrap';*/\r\nimport { Header } from './Header';\r\nimport { Footer } from './Footer';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {/**/}\r\n {/* {this.props.children}*/}\r\n {/* */}\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n/*import Customcss from './custom.module.css';*/\r\n\r\n\r\nlet headKeylist =
\r\n
\r\n
Your Keys
\r\n

Panopto keys

\r\n

This is a list of Panopto keys that you have created. Check that Guides to see how to use a key in an auditorium.

\r\n
\r\n
\r\n\r\nexport class FetchKeys extends Component {\r\n static displayName = FetchKeys.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n keyslicenses: [],\r\n loading: true,\r\n user: props.auth.user.userName,\r\n mail: null,\r\n NoKeysPageVisible: false,\r\n NoPanoptoUserFoundVisible: false\r\n };\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleEdit = this.handleEdit.bind(this);\r\n this.LoadNoKeysPage = this.LoadNoKeysPage.bind(this);\r\n\r\n }\r\n\r\n async componentDidMount() {\r\n var m = await this.props.getMail();\r\n if (m) {\r\n this.setState({\r\n mail: this.props.auth.panoptoUserMail\r\n });\r\n this.listKeyData();\r\n }\r\n }\r\n\r\n handleDelete(id) {\r\n if (!window.confirm(\"Do you want to delete this keylicens with Id: \" + id))\r\n return;\r\n else {\r\n fetch('api/Key/' + id, {\r\n method: 'delete',\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n }).then(data => {\r\n this.setState(\r\n {\r\n keyslicenses: this.state.keyslicenses.filter((key) => {\r\n return (key.id !== id);\r\n })\r\n });\r\n });\r\n }\r\n }\r\n\r\n handleEdit(id) {\r\n this.props.history.push(\"/edit-Key/\" + id);\r\n } \r\n\r\n handleCreate() {\r\n this.props.noKeySet(false)\r\n this.props.history.push(\"/generate-Key\");\r\n } \r\n \r\n handleFavorite(id) {\r\n let lk = this.state.keyslicenses;\r\n let i = lk.findIndex(key => key.id === id);\r\n lk[i].pinned = (lk[i].pinned === 1) ? 0 : 1;\r\n\r\n fetch('api/key/Favorite/' + id + '/' + lk[i].pinned, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n\r\n });\r\n \r\n lk.sort(function (a, b) {\r\n return b.pinned - a.pinned;\r\n });\r\n //lk.sort((a, b) => (a.pinned - b.pinned || a.id.localeCompare(b.id)));\r\n\r\n setTimeout(() => {\r\n this.setState(\r\n {\r\n keyslicenses: lk\r\n });\r\n }, 200);\r\n\r\n }\r\n\r\n dummie() {\r\n //console.log('');\r\n }\r\n\r\n parseLicense(e) {\r\n return e.slice(0, 3) + \" \" + e.slice(3, 6) + \" \" + e.slice(6, 9)\r\n //var parsedLicens;\r\n //var p1 = l.slice(0, 3);\r\n //var p2 = l.slice(3, 6);\r\n //var p3 = l.slice(6, 9);\r\n //parsedLicens = p1 + ' ' + p2 + ' ' + p3;\r\n //return parsedLicens;\r\n }\r\n\r\n parseRecordingInfo(key) {\r\n return key.folderName;\r\n }\r\n\r\n renderKeylistTable(keys) {\r\n\r\n keys.sort(function (a, b) {\r\n return b.pinned - a.pinned;\r\n });\r\n let keylist;\r\n\r\n if (keys.length > 0) {\r\n keylist = \r\n } else {\r\n this.LoadNoKeysPage();\r\n }\r\n\r\n return (\r\n
\r\n {headKeylist}\r\n\r\n
\r\n {keylist}\r\n
\r\n
\r\n\r\n\r\n );\r\n }\r\n\r\n openGuides() {\r\n const url = 'https://educate.au.dk/it-i-undervisningen/tekniske-vejledninger/panopto/guide/?g=aud#c455370';\r\n window.open(url, '_blank');\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.NoKeysPageVisible) {\r\n document.documentElement.style.setProperty('--color-background', \"#002241\");\r\n \r\n return (\r\n
\r\n

Welcome to Panopto Keys

\r\n
\r\n \r\n \r\n
\r\n
\r\n /*\r\n
\r\n

Welcome to Panopto Keys

\r\n
\r\n \r\n \r\n
\r\n
\r\n */\r\n //
\r\n //
\r\n //

Welcome to Panopto Keys

\r\n //
\r\n //
\r\n // \r\n //
\r\n //
\r\n // \r\n //
\r\n //
\r\n )\r\n }\r\n\r\n if (this.state.NoPanoptoUserFoundVisible) {\r\n return (\r\n
\r\n
\r\n

You don't have a Panopto user and therefore you cannot use Panoptokeys.

\r\n

Please go to au.cloud.panopto.eu and login, a user will then automatically be created for you.

\r\n

Refresh this page when you have done so, then you can use panoptokeys.

\r\n
\r\n
\r\n\r\n )\r\n }\r\n\r\n let contents = this.state.loading\r\n ? this.renderWorkingOnIt()\r\n : this.renderKeylistTable(this.state.keyslicenses);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n renderWorkingOnIt() {\r\n return (\r\n
\r\n {headKeylist}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n async listKeyData() {\r\n //const response = await fetch('api/Key/' + this.state.user + '/' + this.state.mail);\r\n fetch('api/Key/' + this.state.user + '/' + this.state.mail, {\r\n method: \"GET\",\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState({ keyslicenses: data, loading: false });\r\n });\r\n //const data = await response.json();\r\n //this.setState({ keyslicenses: data, loading: false });\r\n }\r\n\r\n LoadNoKeysPage() {\r\n this.setState({ NoKeysPageVisible: true });\r\n }\r\n\r\n NoPanoptoUserFoundPage() {\r\n this.setState({ NoPanoptoUserFoundVisible: true });\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class FolderSelection extends Component {\r\n static displayName = FolderSelection.name;\r\n \r\n constructor(props) {\r\n super(props);\r\n\r\n this.displayData = [];\r\n this.timer = null;\r\n this.state = {\r\n mail: this.props.mail,\r\n showdata: this.displayData,\r\n postVal: \"\",\r\n query: null,\r\n myFolders: null,\r\n loading: true,\r\n noResultFound: false\r\n }\r\n this.handleSearchChange = this.handleSearchChange.bind(this);\r\n\r\n };\r\n\r\n abortController = new AbortController()\r\n\r\n async componentDidMount() { \r\n this.getFolders(this.state.mail,'*','*');\r\n }\r\n\r\n componentWillUnmount() {\r\n this.abortController.abort();\r\n }\r\n\r\n async getFolders(m, folderGuid, query) {\r\n //console.log('api/GetFolders');\r\n\r\n if (query !== '*') {\r\n //console.log('controller.abort();');\r\n this.abortController.abort();\r\n }\r\n\r\n if (this.state.myFolders != null && folderGuid === '*' && query ==='*') {\r\n //console.log('I already have my initial folder data');\r\n this.appendData(this.state.myFolders, '*');\r\n return;\r\n }\r\n\r\n this.abortController = new AbortController()\r\n \r\n //const response = await fetch('api/GetFolders/' + m + '/' + folderGuid + '/' + query,\r\n // {\r\n // signal: this.abortController.signal,\r\n // headers: {\r\n // \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n // }\r\n // });\r\n //const data = await response.json();\r\n //this.appendData(data, folderGuid);\r\n\r\n //if (this.state.myFolders == null) {\r\n // //console.log('This is first time my folderdata is set');\r\n // this.setState({\r\n // myFolders: data\r\n // });\r\n //}\r\n //================================\r\n\r\n\r\n fetch('api/GetFolders/' + m + '/' + folderGuid + '/' + query,\r\n {\r\n signal: this.abortController.signal,\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n }\r\n )\r\n .then(res => res.json())\r\n .then(data => {\r\n //console.log(data);\r\n this.appendData(data, folderGuid);\r\n if (this.state.myFolders == null) {\r\n //console.log('This is first time my folderdata is set');\r\n this.setState({\r\n myFolders: data\r\n });\r\n }\r\n })\r\n .catch(err => {\r\n //console.log(err);\r\n });\r\n \r\n \r\n \r\n }\r\n\r\n handleClick = changeEvent => {\r\n //console.log('handleClick');\r\n }\r\n\r\n getIndex(guid) {\r\n return this.displayData.findIndex(folder => folder.key === guid);\r\n }\r\n\r\n handleFolderChange = changeEvent => {\r\n \r\n var hasSubFolder = changeEvent.target.options[changeEvent.target.selectedIndex].dataset.subfolder;\r\n\r\n //after we select something, we do not need to see the select guide\r\n if (changeEvent.target.options[0].text === \"Select folder\") {\r\n // changeEvent.target.options.remove(changeEvent.target.options[0]);\r\n }\r\n\r\n //update form event on parent component\r\n this.props.foldersLoaded(changeEvent);\r\n\r\n var id = changeEvent.target.parentElement.id;\r\n var index = this.getIndex(id);\r\n this.displayData = this.displayData.slice(0, index + 1);\r\n\r\n if (hasSubFolder === \"true\") {\r\n this.getFolders(this.state.mail, changeEvent.target.value, '*');\r\n }\r\n \r\n };\r\n\r\n appendData(folders, folderGuid) {\r\n\r\n //console.log('display result from search');\r\n\r\n if (folders.length > 0) {\r\n this.displayData.push(\r\n
\r\n \r\n
);\r\n } else {\r\n \r\n }\r\n\r\n this.setState({\r\n showdata: this.displayData,\r\n postVal: \"\",\r\n loading: false,\r\n noResultFound: folders.length > 0\r\n });\r\n\r\n }\r\n\r\n prependData() {\r\n this.displayData.unshift(
{this.state.postVal}
);\r\n this.setState({\r\n showdata: this.displayData,\r\n postVal: \"\"\r\n });\r\n }\r\n\r\n handleChange(e) {\r\n let getTextAreaValue = e.target.value;\r\n this.setState({\r\n postVal: getTextAreaValue\r\n });\r\n }\r\n\r\n handleSearchChange(e) {\r\n e.preventDefault();\r\n clearTimeout(this.timer); \r\n const query = e.target.value;\r\n\r\n if (this.state.query != null && query.length === 0) {\r\n this.setState({\r\n query: null\r\n });\r\n this.displayData = [];\r\n this.getFolders(this.state.mail, '*', '*');\r\n return;\r\n }\r\n\r\n const m = this;\r\n\r\n this.timer = setTimeout(function () {\r\n //console.log('query: ' + query);\r\n if (query.length > 1) {\r\n m.setState({\r\n query: query\r\n });\r\n m.displayData = [];\r\n m.getFolders(m.state.mail, '*', query);\r\n m.props.foldersLoaded(null);\r\n } \r\n }, 1000);\r\n\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? this.renderWorkingOnIt()\r\n : this.renderSelection();\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n renderWorkingOnIt() {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderSelection() { \r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n No results found, try another keyword\r\n
\r\n {this.displayData}\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport { FolderSelection } from './FolderSelection';\r\nimport { NavItem } from 'reactstrap';\r\nimport { Link, NavLink } from 'react-router-dom';\r\n\r\nlet head =
\r\n
\r\n
Create key
\r\n

Create a recording key

\r\n

In selected auditoriums you can record your lectures. To make a recording you will need a key.
\r\n Here you can name the recordings and select the folder where recordings made with this key should be stored.

\r\n
\r\n
\r\n\r\nexport class GenerateKey extends Component {\r\n static displayName = GenerateKey.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n //var date = new Date();\r\n //var dString = date.getFullYear() + '-' + this.addZero((date.getMonth() + 1)) + '-' + this.addZero(date.getDate()) + ' ' + this.addZero(date.getHours()) + ':' + this.addZero(date.getMinutes()) + ':' + this.addZero(date.getSeconds());\r\n\r\n this.folderOpt = React.createRef();\r\n\r\n this.state = {\r\n keyData: {\r\n user: '',\r\n dateTime: '',\r\n created: '',\r\n folder: '',\r\n folderName: '',\r\n duration: 180,\r\n sessionType: 0,\r\n key: '',\r\n sessionName: '',\r\n sessionPublishDate: '',\r\n addPrefixDate: \"0\",\r\n lastUsed: '',\r\n pinned: 0\r\n },\r\n optionSessionType: -1,\r\n optionRecordToFolder: true,\r\n optionDoLiveStream: false,\r\n selectedOption2: 0,\r\n user: props.auth.user.userName,\r\n mail: null,\r\n recentFolders: null,\r\n folders: null,\r\n acceptkey: \"Create\",\r\n loading: true,\r\n tabSelection: 0,\r\n isHidden: false,\r\n snCounter: 0\r\n };\r\n\r\n this.addKey = this.addKey.bind(this);\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.handleOptionChange = this.handleOptionChange.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleClose = this.handleClose.bind(this);\r\n var keyLicensId = this.props.match.params[\"keyid\"];\r\n\r\n //this.handleAddPrefixDateChange = this.handleAddPrefixDateChange.bind(this);\r\n //this.handleDurationOptionChange = this.handleDurationOptionChange.bind(this);\r\n //this.handleOption2Change = this.handleOption2Change.bind(this);\r\n //this.onTabClick = this.onTabClick.bind(this);\r\n this.handleAddPrefixDateChange = this.handleAddPrefixDateChange.bind(this);\r\n this.handleDurationOptionChange = this.handleDurationOptionChange.bind(this);\r\n this.handleOption2Change = this.handleOption2Change.bind(this);\r\n this.onTabClick = this.onTabClick.bind(this);\r\n this.handleOptionRecordToFolderChange = this.handleOptionRecordToFolderChange.bind(this);\r\n this.handleOptionDoLiveStreamChange = this.handleOptionDoLiveStreamChange.bind(this);\r\n this.updateUserOptions = this.updateUserOptions.bind(this);\r\n this.onInfoPathClick = this.onInfoPathClick.bind(this);\r\n\r\n if (keyLicensId !== undefined) {\r\n // if keyLicensId is above, then we are editing a existing keylicens\r\n fetch('api/Key/' + keyLicensId, {\r\n method: 'GET',\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n } /* fetch('api/key/KeyLicens/' + keyLicensId)*/\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n const t = (data.sessionPublishDate === null) ? 0 : 1;\r\n this.setState({\r\n keyData: data,\r\n optionSessionType: data.sessionType,\r\n selectedOption2: t,\r\n acceptkey: \"Update\",\r\n optionRecordToFolder: data.sessionType < 2,\r\n optionDoLiveStream: data.sessionType > 0\r\n });\r\n this.setState({\r\n snCounter: data.sessionName.length\r\n });\r\n //console.log(\"addPrefixDate: \" + data.addPrefixDate);\r\n //this.setState({\r\n // keyData: data,\r\n // selectedOption: data.sessionType,\r\n // prefixChecked: data.addPrefixDate,\r\n // duration: data.duration,\r\n // selectedOption2: v,\r\n // acceptkey: 'Update'\r\n //});\r\n });\r\n //console.log(\"success fetching one key to edit.\");\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n addKey(event) {\r\n\r\n if (event.nativeEvent.submitter.innerText === 'Cancel') {\r\n this.props.history.push(\"/\");\r\n return;\r\n }\r\n\r\n if (event.nativeEvent.submitter.innerText === 'Delete') {\r\n event.preventDefault();\r\n this.setState({\r\n isDeleting: true\r\n });\r\n return;\r\n }\r\n\r\n // Handling the submit form event for adding a key. \r\n event.preventDefault();\r\n const data = new FormData(event.target);\r\n data.append('User', this.state.user);\r\n\r\n //var folderName = this.state.keyData.folderName;\r\n //data.append('FolderName', folderName);\r\n //data.append('Folder', this.state.keyData.folder);\r\n //data.append('AddPrefixDate', this.state.prefixChecked);\r\n data.append(\"User\", this.state.user);\r\n data.append(\"SessionType\", this.state.keyData.sessionType);\r\n data.append(\"FolderName\", this.state.keyData.folderName);\r\n data.append(\"Folder\", this.state.keyData.folder);\r\n \r\n data.append(\"AddPrefixDate\", this.state.keyData.addPrefixDate);\r\n data.set(\"Key\", this.state.keyData.key);\r\n data.set(\"Id\", this.state.keyData.id);\r\n data.set(\"LastUsed\", this.state.keyData.lastUsed);\r\n\r\n //determine whether it is a new key or existing key to be edited\r\n if (this.state.keyData.key !== '' && this.state.keyData.key !== undefined) {\r\n //console.log(\"edit is selected\");\r\n fetch('api/Key', {\r\n method: 'PUT',\r\n body: data,\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n }).then((response) => response.json())\r\n .then((responseJson) => {\r\n this.props.history.push(\"/\");\r\n })\r\n } else {\r\n fetch('api/Key', {\r\n method: 'POST',\r\n body: data,\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n }).then((response) => response.json())\r\n .then((responseJson) => {\r\n this.props.history.push(\"/key-result\", { key: responseJson });;\r\n })\r\n }\r\n\r\n }\r\n\r\n handleDelete(id) {\r\n //at this point user has already confirmed the deletion of the current key\r\n fetch('api/Key/' + this.state.keyData.id, {\r\n method: \"DELETE\",\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n }).then(data => {\r\n this.props.history.push(\"/\");\r\n });\r\n }\r\n\r\n handleClose() {\r\n this.setState({\r\n isDeleting: false\r\n });\r\n }\r\n\r\n handleCloseInfo() {\r\n this.setState({\r\n showPathInfo: false\r\n });\r\n }\r\n handlerecentFolderInputChange = changeEvent => {\r\n if (changeEvent === null) {\r\n this.setState({\r\n keyData: {\r\n folder: '',\r\n folderName: ''\r\n }\r\n });\r\n return;\r\n }\r\n\r\n var selFolder = changeEvent.target.options[changeEvent.target.selectedIndex].text;\r\n\r\n const value = changeEvent.target.value;\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n folder: value,\r\n folderName: selFolder\r\n }\r\n }))\r\n }\r\n handleFolderChange = changeEvent => {\r\n\r\n if (changeEvent === null) {\r\n this.setState({\r\n keyData: {\r\n folder: '',\r\n folderName: ''\r\n }\r\n });\r\n return;\r\n }\r\n\r\n var selFolder = changeEvent.target.options[changeEvent.target.selectedIndex].text;\r\n\r\n const value = changeEvent.target.value;\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n folder: value,\r\n folderName: selFolder\r\n }\r\n }))\r\n\r\n };\r\n\r\n handleInputChange(event) {\r\n const target = event.target;\r\n const value = target.type === 'checkbox' ? target.checked : target.value;\r\n const name = target.name;\r\n\r\n if (target.type === 'radio') {\r\n //console.log('Target Name: ' + name);\r\n if (target.checked) {\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n sessionType: value\r\n }\r\n }))\r\n }\r\n } else {\r\n\r\n var tInput = value.replace(/(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\u0023-\\u0039]\\ufe0f?\\u20e3|\\u3299|\\u3297|\\u303d|\\u3030|\\u24c2|\\ud83c[\\udd70-\\udd71]|\\ud83c[\\udd7e-\\udd7f]|\\ud83c\\udd8e|\\ud83c[\\udd91-\\udd9a]|\\ud83c[\\udde6-\\uddff]|\\ud83c[\\ude01-\\ude02]|\\ud83c\\ude1a|\\ud83c\\ude2f|\\ud83c[\\ude32-\\ude3a]|\\ud83c[\\ude50-\\ude51]|\\u203c|\\u2049|[\\u25aa-\\u25ab]|\\u25b6|\\u25c0|[\\u25fb-\\u25fe]|\\u00a9|\\u00ae|\\u2122|\\u2139|\\ud83c\\udc04|[\\u2600-\\u26FF]|\\u2b05|\\u2b06|\\u2b07|\\u2b1b|\\u2b1c|\\u2b50|\\u2b55|\\u231a|\\u231b|\\u2328|\\u23cf|[\\u23e9-\\u23f3]|[\\u23f8-\\u23fa]|\\ud83c\\udccf|\\u2934|\\u2935|[\\u2190-\\u21ff])/g, \"\");\r\n //console.log(tInput.length + \"/100\");\r\n this.setState({\r\n snCounter: tInput.length\r\n });\r\n\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n [name]: tInput\r\n }\r\n }))\r\n }\r\n\r\n }\r\n\r\n handleOptionChange(changeEvent) {\r\n //this.setState({\r\n // selectedOption: changeEvent.target.value\r\n //});\r\n //console.log(this.state.keyData.folder);\r\n }\r\n\r\n handleOptionRecordToFolderChange(changeEvent) {\r\n this.setState({\r\n optionRecordToFolder: changeEvent.target.checked\r\n });\r\n }\r\n\r\n handleOptionDoLiveStreamChange(changeEvent) {\r\n this.setState({\r\n optionDoLiveStream: changeEvent.target.checked\r\n });\r\n }\r\n\r\n updateUserOptions(changeEvent) {\r\n var t;\r\n t = -1;\r\n\r\n if (this.state.optionRecordToFolder === false && this.state.optionDoLiveStream === false) {\r\n t = -1;\r\n }\r\n\r\n if (this.state.optionRecordToFolder === true && this.state.optionDoLiveStream === false) {\r\n t = 0;\r\n }\r\n if (this.state.optionRecordToFolder===true && this.state.optionDoLiveStream===true) {\r\n t = 1;\r\n }\r\n if (this.state.optionRecordToFolder===false && this.state.optionDoLiveStream===true) {\r\n t = 2;\r\n }\r\n \r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n sessionType: t\r\n }\r\n }));\r\n\r\n\r\n }\r\n\r\n handleAddPrefixDateChange(changeEvent) {\r\n var state = \"0\";\r\n if (changeEvent.target.checked) {\r\n state = \"1\";\r\n }\r\n //state ? \"1\" : \"0\";\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n addPrefixDate: state\r\n }\r\n }))\r\n }\r\n\r\n handleDurationOptionChange(changeEvent) {\r\n //add auto duration time to recording 180, 360 or 720 minutes\r\n //when expiring, recording will automatically close\r\n var t;\r\n t = Number.parseInt(changeEvent.target.value);\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n duration: t\r\n }\r\n }))\r\n }\r\n\r\n handleOption2Change(changeEvent) {\r\n this.setState({\r\n selectedOption2: Number.parseInt(changeEvent.target.value)//changeEvent.target.value\r\n });\r\n\r\n if (changeEvent.target.value === '0') {\r\n this.setState(prevState => ({\r\n keyData: {\r\n ...prevState.keyData,\r\n sessionPublishDate: ''\r\n }\r\n }))\r\n }\r\n\r\n }\r\n\r\n onTabClick(event) {\r\n //onTabClick = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n isHidden: !this.state.isHidden\r\n });\r\n }\r\n\r\n\r\n // adds zero to make two digits\r\n addZero(e) {\r\n return e < 10 ? e = \"0\" + e : e;\r\n //if (n < 10) {\r\n // n = \"0\" + n;\r\n // return n;\r\n //}\r\n //return n;\r\n }\r\n\r\n showKeyResult() {\r\n\r\n }\r\n\r\n\r\n async componentDidUpdate(e, t) {\r\n t.optionRecordToFolder !== this.state.optionRecordToFolder && this.updateUserOptions();\r\n t.optionDoLiveStream !== this.state.optionDoLiveStream && this.updateUserOptions();\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n //this.getAvaliableDuration();\r\n this.getRecentFolders();\r\n\r\n var m = await this.props.getMail();\r\n if (m) {\r\n this.setState({\r\n mail: this.props.auth.panoptoUserMail\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n document.documentElement.style.setProperty('--color-background', \"#fefefe\");\r\n let contents = (this.state.loading || this.state.mail === null)\r\n ? this.renderWorkingOnIt()\r\n : this.renderData(this.state.recentFolders);\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n renderWorkingOnIt() {\r\n return (\r\n
\r\n {head}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n onInfoPathClick(event) {\r\n //onInfoPathClick = (event) => {\r\n event.preventDefault();\r\n //this.getFolderPath(this.state.keyData.folder);\r\n this.setState({\r\n showPathInfo: true\r\n });\r\n }\r\n\r\n toggleHidden() {\r\n this.setState({\r\n isHidden: !this.state.isHidden\r\n })\r\n }\r\n\r\n renderData(recentFolders) {\r\n\r\n let deleteElement;\r\n let norecentfolderinfo;\r\n if (this.state.acceptkey === 'Update') {\r\n deleteElement = ;\r\n }\r\n\r\n if (this.state.recentFolders.length === 0) {\r\n norecentfolderinfo =

You have no recent folders

;\r\n }\r\n\r\n return (\r\n
\r\n\r\n {/*Deleting*/}\r\n
\r\n
\r\n \r\n
\r\n

Delete key?

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n {/*Info*/}\r\n
\r\n
\r\n \r\n
\r\n

Find your course folder name

\r\n
\r\n

Go to your course in Brightspace and do the following.

\r\n
    \r\n
  1. Select Panopto
  2. \r\n
  3. Find the semester and name that the folder has in Panopto \\u2013 and select the that folder here in Panoptokeys.
  4. \r\n \"\"\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n {head}\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
Name your recording*
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \"Enter\" === e.key && e.preventDefault()} />\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
Select your recording folder*
\r\n
\r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n this.onTabClick(event)}\r\n className={\"nav__item\" + (this.state.isHidden === false ? \" nav__item--active\" : \"\")}\r\n >Search folders\r\n \r\n \r\n this.onTabClick(event)}\r\n className={\"nav__item\" + (this.state.isHidden === true ? \" nav__item--active\" : \"\")}\r\n >Recent folders\r\n \r\n \r\n
\r\n
\r\n
\r\n

...

\r\n \r\n
\r\n
\r\n \r\n \r\n {norecentfolderinfo}\r\n
\r\n \r\n {/*
*/}\r\n {/*

...

*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/* */}\r\n {/* */}\r\n {/*
*/}\r\n {/* No results found, try another keyword*/}\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
\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
\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
\r\n\r\n {/*
*/}\r\n\r\n {/*
*/}\r\n {/* */}{/*

Recording and live streaming

*/}\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 {/* */}{/* avc-future-feature*/}\r\n {/*
*/}\r\n {/* */}{/*

Make recording available

*/}\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\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 \r\n \r\n
\r\n
\r\n {/*
*/}\r\n {/*
You can always stop your recording early. This is just to make sure that if you forget, the recording will stop automatically.
*/}\r\n {/*
*/}\r\n
\r\n\r\n {/*
*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/* */}{/*

System will automatically stop after:

*/}\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 {/*
*/}\r\n {/* You can always stop your recording early. This is just to make sure that if you forget, the recording will stop automatically.*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/*
*/}\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n\r\n \r\n {deleteElement}\r\n
\r\n
\r\n\r\n
\r\n
\r\n );\r\n }\r\n\r\n //async getAvaliableDuration() {\r\n // const response = await fetch('api/AvaliableDuration');\r\n // const data = await response.json();\r\n // this.setState({ avaliableDuration: data, loading: false });\r\n //}\r\n\r\n async getRecentFolders() {\r\n //const response = await fetch('api/RecentFolders/' + this.state.user);\r\n const response = await fetch('api/RecentFolders/' + this.state.user, {\r\n method: 'GET',\r\n headers: {\r\n \"Api-Key\": \"aiMTqdx5BoRIr4iRglQvvuvJ-Zugo3Yu1BmJ8ft2nb6-QqjMN5groWN\"\r\n }\r\n });\r\n const data = await response.json();\r\n //console.log(\"recent folder: \" + JSON.stringify(data));\r\n var uniqueArray = [];\r\n \r\n data.forEach(function (itm) {\r\n var isfound = true;\r\n uniqueArray.forEach(function (itm2) {\r\n if (itm.folderName == itm2.folderName) {\r\n isfound = false;\r\n }\r\n });\r\n if (isfound) uniqueArray.push(itm);\r\n });\r\n\r\n //console.log(\"recent folder: \" + JSON.stringify(uniqueArray));\r\n this.setState({\r\n recentFolders: uniqueArray,\r\n loading: false\r\n });\r\n\r\n }\r\n\r\n foldersLoaded() {\r\n //console.log('foldersLoaded');\r\n }\r\n\r\n}\r\n\r\nexport class KeyLicense {\r\n /* Id = 0; this is auto incremented at sql db serverside*/\r\n user = \"\";\r\n dateTime = \"\";\r\n created = \"\";\r\n folder = \"\";\r\n folderName = \"\";\r\n duration = \"0\";\r\n sessionType = \"0\";\r\n key = \"\";\r\n sessionName;\r\n addPrefixDate = \"0\";\r\n}","import React, { Component } from 'react';\r\n\r\nexport class HowToUseKey extends Component {\r\n static displayName = HowToUseKey.name;\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

\r\n How to use the key

\r\n

Step by step...

\r\n
    \r\n
  1. .
  2. \r\n
  3. ..
  4. \r\n
  5. ...
  6. \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class KeyResult extends Component {\r\n static displayName = KeyResult.name;\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n key: props.location.state.key\r\n };\r\n }\r\n\r\n parseLicense(e) {\r\n return e.slice(0, 3) + \" \" + e.slice(3, 6) + \" \" + e.slice(6, 9);\r\n //var parsedLicens;\r\n //var p1 = l.slice(0, 3);\r\n //var p2 = l.slice(3, 6);\r\n //var p3 = l.slice(6, 9);\r\n //parsedLicens = p1 + ' ' + p2 + ' ' + p3;\r\n //return parsedLicens;\r\n }\r\n\r\n showKeyList(){\r\n this.props.history.push(\"/\");\r\n }\r\n\r\n render() {\r\n //var elements = document.getElementsByClassName('page__content');\r\n //elements[0].style.paddingTop = \"4em\";\r\n \r\n return (\r\n
\r\n \r\n
\r\n\r\n

Your key has been created

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

{this.state.key.sessionName}

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

{this.state.key.folderName}

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

{this.state.key.sessionType > 0 ? \"On\" : \"Off\"}

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

{this.parseLicense(this.state.key.key)}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class Faq extends Component {\r\n static displayName = Faq.name;\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

\r\n Faq ...

\r\n\r\n

Why can't I see my course in the \"Folder\"-dropdown?.

\r\n

You might need to activate the Panopto-folder in the course to be able to access it. Go to Brightspace and select your course. Create a new content item using \"Add existing\", select \"External Tool Activity\" and press \"Panopto video\". Refresh the \"Create key\" page again, and the course should appear.

\r\n \r\n

Why do I need to set a \"max duration\"?

\r\n

The max duration makes sure that the recording stops after a given time. You can always extend or shorten this time in the auditorium using the panel. See instructions for the panel.

\r\n \r\n

Can I record a video to another user's folder?

\r\n

If you want to record to a folder in Panopto that you don't have access to (e.g. another user's personal folder), they can share their key, and then you can use this in the auditorium.

\r\n \r\n

Can I setup a key that only live streams but doesn't record?

\r\n

No, you can't.

\r\n

For more information on how to use Panopto please visit educate.au.dk/en/panopto (LINK: https://educate.au.dk/en/panopto)

\r\n \r\n
\r\n
\r\n );\r\n }\r\n}","export const msalConfig = {\n authority: 'https://login.microsoftonline.com/61fd1d36-fecb-47ca-b7d7-d0df0370a198',\n clientId: 'eb0a608e-a09f-4917-88fa-1c65ecd57462',\n redirectUri: document.getElementById('root').baseURI\n};","var graph = require('@microsoft/microsoft-graph-client');\r\n\r\nfunction getGraphClient(accessToken) {\r\n // Initialize Graph client\r\n const client = graph.Client.init({\r\n // Use the provided access token to authenticate\r\n // requests\r\n authProvider: (done) => {\r\n done(null, accessToken.accessToken);\r\n }\r\n });\r\n\r\n return client;\r\n}\r\n\r\nexport async function getUserDetails(accessToken) {\r\n const client = getGraphClient(accessToken);\r\n return await client.api('/me').get();\r\n}","import React, { Component } from 'react';\nimport { msalConfig } from './MsalConfig';\nimport { UserAgentApplication } from 'msal';\nimport { getUserDetails } from '../graph/GraphService'\n\nexport const msalAuth = new UserAgentApplication({\n auth: msalConfig\n});\n\nexport function withAuth(HocComponent) {\n return class extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isAuthenticated: false,\n user: {},\n renewIframe: false,\n hasError: false,\n errorMessage: null,\n nokey: false\n };\n }\n\n async getMail() {\n\n if (this.state.panoptoUserMail === undefined) {\n \n const accessTokenRequest = {\n scopes: [\"user.read\"]\n }\n var accessToken = null;\n try {\n accessToken = await msalAuth.acquireTokenSilent(accessTokenRequest);\n }\n catch (error) {\n //console.log(\"AquireTokenSilent failure\");\n accessToken = await msalAuth.acquireTokenPopup(accessTokenRequest);\n }\n if (accessToken) {\n var user2 = await getUserDetails(accessToken);\n this.setState({\n panoptoUserMail: user2.mail,\n givenName: user2.givenName\n });\n return this.state;\n }\n\n } else {\n return this.state.panoptoUserMail;\n }\n\n }\n\n async componentDidMount() {\n //async componentWillMount() {\n msalAuth.handleRedirectCallback(() => {\n \n let userAccount = msalAuth.getAccount();\n this.setState({\n isAuthenticated: true,\n user: userAccount\n });\n\n }, (authErr, accountState) => { // on fail\n //console.log(authErr);\n\n this.setState({\n hasError: true,\n errorMessage: authErr.errorMessage\n });\n });\n\n if (msalAuth.isCallback(window.location.hash)) {\n this.setState({\n auth: {\n renewIframe: true\n }\n });\n return;\n }\n\n let userAccount = msalAuth.getAccount();\n if (!userAccount) {\n msalAuth.loginRedirect({});\n return;\n } else {\n this.setState({\n isAuthenticated: true,\n user: userAccount\n });\n }\n }\n\n onSignIn() {\n msalAuth.loginRedirect({});\n }\n\n onSignOut() {\n msalAuth.logout();\n }\n\n noKeySet(e) {\n this.setState({\n nokey: e\n });\n }\n \n //}\n\n render() {\n if (this.state.renewIframe) {\n return
hidden renew iframe - not visible
;\n }\n\n if (this.state.isAuthenticated) {\n return this.noKeySet(e)} getMail={() => this.getMail()} onSignIn={() => this.onSignIn()} onSignOut={() => this.onSignOut() } {...this.props} />;\n }\n\n if (this.state.hasError) {\n return
{this.state.errorMessage}
;\n }\n\n return
Login in progress...
;\n }\n };\n}\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { FetchKeys } from './components/FetchKeys';\r\nimport { GenerateKey } from './components/GenerateKey';\r\nimport { HowToUseKey } from './components/HowToUseKey';\r\nimport { KeyResult } from './components/KeyResult';\r\nimport { Faq } from './components/Faq';\r\nimport { withAuth } from './msal/MsalAuthProvider';\r\nimport appPackageJson from '../package.json';\r\n\r\n/*export default*/\r\nclass App0 extends Component {\r\n static displayName = App0.name;\r\n\r\n componentDidMount() {\r\n\r\n\r\n //console.log({ process.env.REACT_APP_TITLE });\r\n\r\n let appV = localStorage.getItem('version');\r\n if (appV !== appPackageJson.version) {\r\n if ('caches' in window) {\r\n caches.keys().then((names) => {\r\n names.forEach(name => {\r\n caches.delete(name);\r\n })\r\n });\r\n window.location.reload(true);\r\n }\r\n localStorage.clear();\r\n localStorage.setItem('version', appPackageJson.version);\r\n }\r\n }\r\n\r\n render () {\r\n return (\r\n \r\n } />\r\n } />\r\n } />\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\nexport const App = withAuth(App0);","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n if (caches) {\r\n \r\n caches.keys().then(async (names) => {\r\n await Promise.all(names.map(name => caches.delete(name)));\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { App } from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n/*import { unregister } from './registerServiceWorker';*/\r\n\r\n/*import './demo-style.css';*/\r\nimport './custom.css';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n\r\n//unregister();\r\nregisterServiceWorker();\r\n"],"sourceRoot":""}