{"version":3,"sources":["adalConfig.js","index.js","component/Cards/Cards.js","component/Footers/Footer.js","avatar.svg","man.svg","component/ErrorModal/ErrorModal.js","RPLogotagline-High-Res.png","component/Headers/Headers.js","containers/Landing/Landing.js","containers/ImageCrop/cropImage.js","component/Loader/Loader.js","containers/ImageCrop/ImageCrop.js","containers/Upload/Upload.js","containers/Login/Login.js","containers/Images/white-bg-right.PNG","containers/Images/white-bg-incorrect1.PNG","containers/Images/white-bg-incorrect2.PNG","containers/Images/brightness-incorrect1.PNG","containers/Images/brightness-incorrect2.PNG","containers/Images/focus-incorrect1.PNG","containers/Images/focus-incorrect2.PNG","containers/Images/visibility-incorrect1.PNG","containers/Images/visibility-incorrect2.PNG","containers/Images/shoulders-incorrect.PNG","containers/Images/expression-incorrect.PNG","containers/Images/spectacles-incorrect1.PNG","containers/Images/spectacles-incorrect2.PNG","containers/Images/headgear-right.PNG","containers/Images/headgear-incorrect1.PNG","containers/Images/headgear-incorrect2.PNG","containers/PhotoGuide/PhotoGuide.js","containers/AzureLogin/AzureLogin.js","component/Result/Result.js","component/ErrorModal/NotFound.js","component/PhotoGuideline/Columns.js","component/PhotoGuideline/BasicTable.js","component/PhotoGuideline/PhotoGuideline.js","App.js","serviceWorker.js","indexApp.js"],"names":["adalConfig","tenant","process","clientId","redirectUri","postLogoutRedirectUri","endpoints","api","cacheLocation","authContext","AuthenticationContext","withAdalLoginApi","withAdalLogin","getToken","getCachedToken","clearCache","runWithAdal","require","Cards","props","Card","className","to","url","Row","noGutters","Col","xs","lg","sm","md","xl","src","icon","thumbnail","Body","Title","title","Text","text","Footers","href","target","ErrorModal","Modal","show","onHide","click","Header","closeButton","msg","Footer","showlogout","Button","variant","onClick","logout","headers","form","FormData","userid","localStorage","getItem","append","entries","pair","console","log","axios","post","then","response","clear","logOut","catch","error","Headers","userMenu","Navbar","Toggle","aria-controls","Collapse","id","user","Nav","Link","expand","Container","fluid","Brand","logo","alt","newStudent","currentStudent","Landing","state","closeHandler","setState","LogoutHandler","this","location","errorMsg","history","replace","pathname","CardDeck","avatar","man","Component","createImage","Promise","resolve","reject","image","Image","addEventListener","setAttribute","getRadianAngle","degreeValue","Math","PI","getCroppedImg","imageSrc","pixelCrop","a","rotation","canvas","document","createElement","ctx","getContext","maxSize","max","width","height","safeArea","sqrt","translate","rotate","drawImage","data","getImageData","putImageData","round","x","y","toBlob","file","URL","createObjectURL","Loader","Spinner","animation","style","position","top","left","resizeFile","Resizer","imageFileResizer","uri","ImageCrop","crop","setCrop","zoom","croppedAreaPixels","croppedImage","setCroppedImage","maxZoom","accesstoken","cropSize","value","cropImageParent","React","createRef","addOutline","current","node","querySelector","classList","add","showCroppedImage","imageUrl","setCroppedAreaPixels","documentMode","fetch","r","blob","lastModifiedDate","Date","name","studentID","blobFile","File","type","setCroppedImageFile","onCropChange","onCropComplete","croppedArea","onZoomChange","cropHandler","showImage","showError","disableHandler","img","naturalHeight","naturalWidth","imageURL","size","uploadHandler","event","isLoading","preventDefault","fileExtension","imageName","split","pop","userType","result","uploadStatus","uploadRemarks","push","staffName","role","loggedinUser","status","statusText","message","error1","sliderHandler","e","cancelHandler","returnToUpload","setTimeout","modal","cropper","minZoom","zoomWithScroll","onMediaLoaded","mediaSize","cropHeight","cropWidth","ref","Badge","min","step","onChange","tooltip","onLoad","bind","withRouter","readFile","reader","FileReader","readAsDataURL","dimensions","Upload","StudentID","StaffName","isOHR","isOSE","checkSubmit","onFileChange","files","length","toLowerCase","imageDataUrl","imageFile","inputChanged","isIE","filename","resizefile","disableCrop","disableUpload","showCrop","submit","changeHandler","test","dropdownSelect","previewHandler","errormsg","inputChangedRef","staffpage","Form","Label","Control","required","options","placeholder","uploadFunctions","InputGroup","accept","disabled","displayCropOption","displayUpload","minDeviceWidth","maxDeviceWidth","Login","validated","setValidated","DOB","Email","isValidRecaptcha","SiteKey","handleChange","date","submitHandler","currentTarget","isValidChar","isValidDate","format","checkValidity","stopPropagation","studentInfo","token","recaptchaRef","getValue","isValidStudent","accessToken","validationRemarks","recaptchaHandler","token1","validate","noValidate","onSubmit","Group","controlId","selected","dateFormat","maxDate","subYears","placeholderText","showYearDropdown","yearDropdownItemNumber","scrollableYearDropdown","sitekey","PhotoGuide","navigateToUpload","login","whitebgright","whitebgincorrect1","whitebgincorrect2","brightnessincorrect1","brightnessincorrect2","focusincorrect1","focusincorrect2","visibilityincorrect1","visibilityincorrect2","shouldersincorrect","expressionincorrect","spectaclesincorrect1","spectaclesincorrect2","headgearright","headgearincorrect1","headgearincorrect2","AzureLogin","get","isAuthenticated","usertype","sessionExpired","showText","multiActiveSessions","setItem","Result","body","redirectMsg","uniqueRemarks","map","rem","indexOf","element","dangerouslySetInnerHTML","__html","NotFound","textAlign","COLUMNS","accessor","BasicTable","columns","useMemo","Data","useTable","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","guidelines","MyProtectedPage","App","path","exact","component","render","PhotoGuideline","Boolean","window","hostname","match","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.fa6b5f25.chunk.js","sourcesContent":["import { AuthenticationContext, adalFetch, withAdalLogin } from 'react-adal';\r\n\r\n\r\nexport const adalConfig = {\r\n tenant: process.env.REACT_APP_TENANT,\r\n clientId: process.env.REACT_APP_CLIENTID,\r\n redirectUri: process.env.REACT_APP_REDIRECT_URI,\r\n postLogoutRedirectUri: process.env.REACT_APP_POSTLOGOUTURI,\r\n //redirectUri: 'https://rpsuat.southeastasia.cloudapp.azure.com/PhotoSystemWeb/AzureLogin',\r\n //postLogoutRedirectUri: 'https://rpsuat.southeastasia.cloudapp.azure.com/PhotoSystemWeb',\r\n endpoints: {\r\n api: process.env.REACT_APP_ENDPOINTAPI,\r\n },\r\n cacheLocation: 'localStorage'\r\n};\r\n\r\n\r\nexport const authContext = new AuthenticationContext(adalConfig);\r\n\r\nexport const adalApiFetch = (fetch, url, options) =>\r\n adalFetch(authContext, adalConfig.endpoints.api, fetch, url, options);\r\n \r\nexport const withAdalLoginApi = withAdalLogin(authContext, adalConfig.endpoints.api);\r\n\r\nexport const getToken = () => authContext.getCachedToken(adalConfig.clientId);\r\n\r\nexport const clearCache = () => authContext.clearCache();\r\n\r\nexport const getCachedUser = () => authContext.getCachedUser();\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 'core-js/features/string/repeat';\r\nimport { runWithAdal } from 'react-adal';\r\nimport { authContext } from './adalConfig';\r\n \r\nconst DO_NOT_LOGIN = true;\r\n \r\nrunWithAdal(authContext, () => {\r\n \r\n // eslint-disable-next-line\r\n require('./indexApp.js');\r\n \r\n},DO_NOT_LOGIN);\r\n","import React from 'react';\r\nimport { Card, Col, Row, Image } from 'react-bootstrap';\r\nimport { Link } from \"react-router-dom\";\r\n\r\nconst Cards = props => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.title}\r\n {props.text}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Cards;","import React from 'react';\r\nimport { Button, Nav, Container } from 'react-bootstrap';\r\n\r\nconst Footers = () => {\r\n return (\r\n \r\n \r\n );\r\n}\r\n\r\nexport default Footers;\r\n","export default __webpack_public_path__ + \"static/media/avatar.deb822fe.svg\";","export default __webpack_public_path__ + \"static/media/man.16e5c961.svg\";","import React from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\n\r\nconst ErrorModal = props => {\r\n return (\r\n \r\n \r\n
Error
\r\n
\r\n \r\n

{props.msg}

\r\n
\r\n \r\n { props.showlogout?\r\n : null}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nexport default ErrorModal;\r\n","export default __webpack_public_path__ + \"static/media/RPLogotagline-High-Res.25dfd557.png\";","import React from 'react';\r\nimport { Nav, Container, Navbar } from 'react-bootstrap';\r\nimport logo from '../../RPLogotagline-High-Res.png';\r\nimport { authContext } from \"../../adalConfig\";\r\nimport axios from \"axios\";\r\nimport { Link } from 'react-router-dom';\r\nimport { getToken } from '../../adalConfig';\r\n\r\nconst logout = props => {\r\n const url = process.env.REACT_APP_LOGSIGNOUT\r\n let headers = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${getToken()}`;\r\n\r\n const form = new FormData();\r\n const userid = localStorage.getItem('id');\r\n form.append('userid', userid);\r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, { headers: headers }).then((response) => {\r\n localStorage.clear()\r\n authContext.logOut()\r\n }).catch((error) => {\r\n console.log(error)\r\n localStorage.clear()\r\n authContext.logOut()\r\n });\r\n}\r\n\r\nconst Headers = props => {\r\n\r\n let userMenu =\r\n
\r\n \r\n \r\n \r\n {props.user}\r\n \r\n \r\n Logout\r\n \r\n \r\n
\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \"rp\r\n \r\n \r\n

Photo System

\r\n

Photo System

\r\n {\r\n props.user ? userMenu : null\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Headers;\r\n","import React, { Component } from \"react\";\r\nimport { Container, CardDeck } from 'react-bootstrap';\r\nimport Cards from '../../component/Cards/Cards';\r\nimport Footers from \"../../component/Footers/Footer\";\r\nimport { clearCache } from \"../../adalConfig\";\r\nimport avatar from '../../avatar.svg';\r\nimport man from '../../man.svg'\r\nimport ErrorModal from \"../../component/ErrorModal/ErrorModal\";\r\nimport ConfirmModal from \"../../component/ErrorModal/ConfirmModal\";\r\nimport Headers from '../../component/Headers/Headers';\r\nimport { authContext } from \"../../adalConfig\";\r\n\r\nconst newStudent = {\r\n Title: \"For New RP Student\",\r\n Text: \"\",\r\n Url: '/Login'\r\n};\r\n\r\nconst currentStudent = {\r\n Title: \"For RP Student and Staff\",\r\n Text: \"Login with MYRP account and password\",\r\n Url: '/AzureLogin'\r\n}\r\n\r\nclass Landing extends Component {\r\n state = {\r\n show: false\r\n }\r\n\r\n componentDidMount() {\r\n // To check whether it is routed from failed Azure Login\r\n if (this.props.location) {\r\n if (this.props.location.state) {\r\n console.log(this.props.location.state.error)\r\n //Clear Azure token from failed login via Azure AD\r\n clearCache();\r\n\r\n //Show error emssage from failed Azure Login\r\n this.setState({\r\n show: true,\r\n errorMsg: this.props.location.state.error,\r\n showlogout: this.props.location.state.showlogout\r\n })\r\n\r\n //Set location.state to null to prevent recurring error message when referesh\r\n this.props.history.replace({\r\n pathname: '/',\r\n state: null\r\n })\r\n\r\n\r\n }\r\n }\r\n }\r\n\r\n closeHandler = () => {\r\n this.setState({ show: false })\r\n }\r\n\r\n LogoutHandler = () => {\r\n this.setState({ show: false })\r\n localStorage.clear()\r\n authContext.logOut() \r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n

This website is best viewed in Chrome and Safari

\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n If you have any questions, please contact us via Online Enquiry Form\r\n
\r\n \r\n this.closeHandler()} logout={() => this.LogoutHandler()} />\r\n\r\n
\r\n\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default Landing;","const createImage = url =>\r\n new Promise((resolve, reject) => {\r\n const image = new Image()\r\n image.addEventListener('load', () => resolve(image))\r\n image.addEventListener('error', error => reject(error))\r\n image.setAttribute('crossOrigin', 'anonymous') // needed to avoid cross-origin issues on CodeSandbox\r\n image.src = url\r\n })\r\n\r\nfunction getRadianAngle(degreeValue) {\r\n return (degreeValue * Math.PI) / 180\r\n}\r\n\r\n/**\r\n * This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop\r\n * @param {File} image - Image File url\r\n * @param {Object} pixelCrop - pixelCrop Object provided by react-easy-crop\r\n * @param {number} rotation - optional rotation parameter\r\n */\r\nexport default async function getCroppedImg(imageSrc, pixelCrop, rotation = 0) {\r\n const image = await createImage(imageSrc)\r\n const canvas = document.createElement('canvas')\r\n const ctx = canvas.getContext('2d')\r\n\r\n const maxSize = Math.max(image.width, image.height)\r\n const safeArea = 2 * ((maxSize / 2) * Math.sqrt(2))\r\n\r\n // set each dimensions to double largest dimension to allow for a safe area for the\r\n // image to rotate in without being clipped by canvas context\r\n canvas.width = safeArea\r\n canvas.height = safeArea\r\n\r\n // translate canvas context to a central location on image to allow rotating around the center.\r\n ctx.translate(safeArea / 2, safeArea / 2)\r\n ctx.rotate(getRadianAngle(rotation))\r\n ctx.translate(-safeArea / 2, -safeArea / 2)\r\n\r\n // draw rotated image and store data.\r\n ctx.drawImage(\r\n image,\r\n safeArea / 2 - image.width * 0.5,\r\n safeArea / 2 - image.height * 0.5\r\n )\r\n const data = ctx.getImageData(0, 0, safeArea, safeArea)\r\n\r\n // set canvas width to final desired crop size - this will clear existing context\r\n canvas.width = pixelCrop.width\r\n canvas.height = pixelCrop.height\r\n\r\n // paste generated rotate image with correct offsets for x,y crop values.\r\n ctx.putImageData(\r\n data,\r\n Math.round(0 - safeArea / 2 + image.width * 0.5 - pixelCrop.x),\r\n Math.round(0 - safeArea / 2 + image.height * 0.5 - pixelCrop.y)\r\n )\r\n\r\n // As Base64 string\r\n //return canvas.toDataURL('image/jpeg');\r\n\r\n // As a blob\r\n return new Promise(resolve => {\r\n canvas.toBlob(file => {\r\n resolve(URL.createObjectURL(file))\r\n }, 'image/jpeg')\r\n })\r\n}\r\n","import React from 'react';\r\nimport { Spinner } from 'react-bootstrap'\r\nimport './Loader.css';\r\n\r\nexport default function Loader(props) {\r\n const style = { position: \"fixed\", top: \"50%\", left: \"50%\" };\r\n return (\r\n
\r\n \r\n Loading...\r\n {/* {props.showText? Please wait while : null} */}\r\n
\r\n )\r\n}","import React, { Component } from 'react'\r\nimport Cropper from 'react-easy-crop'\r\nimport { Button, Image, Modal, Col, Row, Badge } from 'react-bootstrap'\r\nimport getCroppedImg from './cropImage'\r\nimport './styles.css'\r\nimport axios from 'axios';\r\nimport Loader from '../../component/Loader/Loader';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ErrorModal from '../../component/ErrorModal/ErrorModal';\r\nimport { authContext } from \"../../adalConfig\";\r\nimport Resizer from 'react-image-file-resizer';\r\nimport RangeSlider from 'react-bootstrap-range-slider';\r\nimport Upload from '../Upload/Upload'\r\n\r\nconst resizeFile = (file, width, height) => new Promise(resolve => {\r\n Resizer.imageFileResizer(file, width, height, 'JPEG', 100, 0,\r\n uri => {\r\n resolve(uri);\r\n }, 'base64', width, height);\r\n});\r\n\r\nclass ImageCrop extends Component {\r\n state = {\r\n crop: {\r\n x: 0,\r\n y: 0\r\n },\r\n setCrop: {\r\n x: 0,\r\n y: 0\r\n },\r\n zoom: 1,\r\n croppedAreaPixels: null,\r\n croppedImage: null,\r\n setCroppedImage: null,\r\n maxZoom: 2,\r\n accesstoken: this.props.accesstoken,\r\n cropSize: {\r\n width: 480,\r\n height: 640\r\n },\r\n show: false,\r\n value: 1\r\n }\r\n\r\n cropImageParent = React.createRef(null);\r\n\r\n addOutline = () => {\r\n if(this.cropImageParent && this.cropImageParent.current){\r\n let node = this.cropImageParent.current.querySelector(\".reactEasyCrop_CropArea\");\r\n if(node) {\r\n node.classList.add(\"outline\");\r\n }\r\n }\r\n }\r\n\r\n componentDidMount(){\r\n setTimeout(this.addOutline,1000);\r\n }\r\n\r\n showCroppedImage = async () => {\r\n try {\r\n let image = this.props.image\r\n if (this.state.imageUrl) {\r\n image = this.state.imageUrl\r\n }\r\n const croppedImage = await getCroppedImg(\r\n image,\r\n this.state.setCroppedAreaPixels,\r\n this.state.rotation\r\n )\r\n\r\n //To detect browser type\r\n const isIE = /*@cc_on!@*/false || !!document.documentMode;\r\n \r\n let file\r\n\r\n if (isIE) {\r\n //File constructor does not exist in IE and hence using blob with last modified date and name\r\n file = await fetch(croppedImage).then(r => r.blob());\r\n file.lastModifiedDate = new Date();\r\n file.name = this.props.studentID + '.jpeg';\r\n } else {\r\n //File constructor works in other browser\r\n file = await fetch(croppedImage).then(r => r.blob()).then(blobFile => new File([blobFile], this.props.studentID + '.jpeg', { type: \"image/jpeg\" }))\r\n /*\r\n file = await fetch(croppedImage).then(r => r.blob());\r\n file.lastModifiedDate = new Date();\r\n file.name = this.props.studentID + '.jpeg';\r\n */\r\n }\r\n\r\n this.setState({\r\n setCroppedImage: croppedImage,\r\n setCroppedImageFile: file\r\n })\r\n\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n onCropChange = crop => {\r\n this.setState({ crop })\r\n }\r\n\r\n onCropComplete = (croppedArea, croppedAreaPixels) => {\r\n this.setState({ setCroppedAreaPixels: croppedAreaPixels })\r\n }\r\n\r\n onZoomChange = zoom => {\r\n this.setState({ zoom })\r\n }\r\n\r\n cropHandler = async () => {\r\n await this.showCroppedImage()\r\n const file = this.state.setCroppedImageFile\r\n\r\n this.setState({ showImage: true, showError: false })\r\n\r\n // if (file.size > 150000) {\r\n // this.setState({\r\n // disableCrop: true,\r\n // disableUpload: true,\r\n // showImage: false,\r\n // showError: true,\r\n // errorMsg: 'Please crop a passport size photo with size less than 150kb'\r\n // })\r\n // } \r\n }\r\n\r\n disableHandler = async ({ target: img }) => {\r\n const height = img.naturalHeight\r\n const width = img.naturalWidth\r\n\r\n console.log('disableHandler', width, height)\r\n\r\n if (height <640 || width <480) {\r\n const imageURL = await resizeFile(this.state.setCroppedImageFile, 480, 640);\r\n\r\n const isIE = /*@cc_on!@*/false || !!document.documentMode;\r\n\r\n let file\r\n\r\n if (isIE) {\r\n //File constructor does not exist in IE and hence using blob with last modified date and name\r\n file = await fetch(imageURL).then(r => r.blob());\r\n file.lastModifiedDate = new Date();\r\n file.name = this.props.studentID + '.jpeg';\r\n } else {\r\n //File constructor works in other browser\r\n file = await fetch(imageURL).then(r => r.blob()).then(blobFile => new File([blobFile], this.props.studentID + '.jpeg', { type: \"image/jpeg\" }))\r\n }\r\n console.log('disableHandler', file.size)\r\n\r\n // if (file.size > 500000) {\r\n // this.setState({\r\n // disableCrop: true,\r\n // disableUpload: true,\r\n // showImage: false,\r\n // showError: true,\r\n // errorMsg: 'Please crop a passport size photo with size less than 500kb'\r\n // })\r\n // return\r\n // }\r\n\r\n this.setState({\r\n setCroppedImage: imageURL,\r\n setCroppedImageFile: file\r\n })\r\n }\r\n\r\n // if (height < 640 || width < 480) {\r\n // this.setState({\r\n // disableCrop: true,\r\n // disableUpload: true,\r\n // showImage: false,\r\n // showError: true,\r\n // errorMsg: 'Please crop a passport size photo with resolution 480x640 or bigger'\r\n // })\r\n // return\r\n // }\r\n }\r\n\r\n closeHandler = () => {\r\n this.setState({ showImage: false, showError: false })\r\n }\r\n\r\n uploadHandler = async (event) => {\r\n this.setState({ isLoading: true })\r\n event.preventDefault();\r\n\r\n // const isIE = /*@cc_on!@*/false || !!document.documentMode;\r\n\r\n // let file\r\n\r\n // if (isIE) {\r\n // //File constructor does not exist in IE and hence using blob with last modified date and name\r\n // file = await fetch(this.state.setCroppedImage).then(r => r.blob());\r\n // file.lastModifiedDate = new Date();\r\n // file.name = this.props.studentID + '.jpeg';\r\n // } else {\r\n // //File constructor works in other browser\r\n // file = await fetch(this.state.setCroppedImage).then(r => r.blob()).then(blobFile => new File([blobFile], this.props.studentID + '.jpeg', { type: \"image/jpeg\" }))\r\n // }\r\n\r\n const url = process.env.REACT_APP_VALIDATEIMAGE\r\n\r\n console.log(this.state.setCroppedImageFile)\r\n \r\n console.log(\"Img size After Resizing : \", this.state.setCroppedImageFile.size);\r\n\r\n if (this.state.setCroppedImageFile.size < 60000){\r\n console.log(\"File size cropped to less than 60kb\");\r\n this.setState({\r\n errorMsg: 'Photo size has reduced below 60kb after cropping, Please re-upload a photo with size more than 60kb',\r\n showError: true,\r\n isLoading: false\r\n })\r\n return\r\n }\r\n\r\n console.log(\"Size validation completed\");\r\n\r\n let headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n if (this.state.accesstoken) {\r\n headers[\"Authorization\"] = `Bearer ${this.state.accesstoken}`;\r\n }\r\n\r\n //Retrieve image base64 string\r\n //var imageBuffer = this.state.setCroppedImage.split(',');\r\n\r\n const fileExtension = this.props.imageName.split('.').pop();\r\n\r\n const form = new FormData();\r\n form.append('byteData', this.state.setCroppedImageFile)\r\n form.append('filename', this.props.studentID + '.' + fileExtension);\r\n form.append('userid', this.props.studentID);\r\n form.append('usertype', this.props.userType);\r\n form.append('loginUserType',this.props.location.state.userType);//20240301\r\n console.log('loginUserType1'+this.props.location.state.userType);\r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, {\r\n headers: headers\r\n }).then((response) => {\r\n const result = response.data;\r\n console.log(result)\r\n if (result.uploadStatus || result.uploadRemarks) {\r\n this.setState({\r\n //showResult: true,\r\n isLoading: false\r\n })\r\n console.log(this.state.isLoading)\r\n this.props.history.push({\r\n pathname: '/Result',\r\n state: {\r\n uploadStatus: result.uploadStatus,\r\n uploadRemarks: result.uploadRemarks,\r\n studentID: this.props.studentID,\r\n staffName: this.props.staffName,\r\n userType: this.props.type,\r\n accesstoken: this.props.accesstoken,\r\n role: this.props.role\r\n }\r\n })\r\n } else {\r\n this.setState({\r\n showError: true,\r\n errorMsg: \"No result available. Please try again or check with the adminstrators\",\r\n isLoading: false\r\n })\r\n }\r\n\r\n }).catch((error) => {\r\n console.log('imagecrop', error)\r\n console.log(this.state.isLoading)\r\n const url = process.env.REACT_APP_LOGEXCEPTION\r\n let headers = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${this.state.accesstoken}`;\r\n\r\n console.log(headers)\r\n\r\n const form = new FormData();\r\n\r\n let loggedinUser = this.props.studentID\r\n\r\n if (this.props.loggedinUser) {\r\n loggedinUser = this.props.loggedinUser\r\n }\r\n form.append('loggedinuserid', loggedinUser)\r\n form.append('student_staff_id', this.props.studentID);\r\n form.append('webapimethodname', process.env.REACT_APP_VALIDATEIMAGE);\r\n form.append('loginUserType',this.props.location.state.userType);//20240301\r\n console.log('loginUserType1'+this.props.location.state.userType);\r\n\r\n if (error.response) {\r\n form.append('error', error.response.status + ' ' + error.response.statusText);\r\n } else {\r\n form.append('error', error.message);\r\n }\r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, { headers: headers }).then((response) => {\r\n if (error.response) {\r\n if (error.response.status === '401') {\r\n this.setState({\r\n errorMsg: 'Your Session has expired. Please login again.',\r\n showError: true,\r\n isLoading: false\r\n })\r\n localStorage.clear()\r\n authContext.logOut()\r\n } else {\r\n this.setState({\r\n errorMsg: error.response.status + ' ' + error.response.statusText,\r\n showError: true,\r\n isLoading: false\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n showError: true,\r\n errorMsg: error.message,\r\n isLoading: false\r\n })\r\n }\r\n }).catch((error1) => {\r\n if (error.response) {\r\n if (error.response.status === '401') {\r\n this.setState({\r\n errorMsg: 'Your Session has expired. Please login again.',\r\n showError: true,\r\n isLoading: false\r\n })\r\n localStorage.clear()\r\n authContext.logOut()\r\n } else {\r\n this.setState({\r\n errorMsg: error.response.status + ' ' + error.response.statusText,\r\n showError: true,\r\n isLoading: false\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n showError: true,\r\n errorMsg: error.message,\r\n isLoading: false\r\n })\r\n }\r\n });\r\n\r\n // this.props.history.push({\r\n // pathname: '/Result',\r\n // state: {\r\n // uploadStatus: true,\r\n // uploadRemarks: 'Success',\r\n // studentID: this.props.studentID,\r\n // userType: this.props.type,\r\n // accesstoken: this.props.accesstoken\r\n // }\r\n // })\r\n\r\n });\r\n }\r\n\r\n sliderHandler = (e) => {\r\n this.setState({\r\n zoom: e.target.value\r\n })\r\n }\r\n\r\n cancelHandler = () => {\r\n this.setState({ returnToUpload: true })\r\n\r\n }\r\n\r\n render() {\r\n if (this.state.returnToUpload) {\r\n return \r\n }\r\n\r\n\r\n let image = this.props.image\r\n if (this.state.imageUrl) {\r\n image = this.state.imageUrl\r\n }\r\n let cropper =\r\n {\r\n this.addOutline();\r\n // Adapt zoom based on media size to fit max height\r\n const cropHeight = mediaSize.height * (640 / mediaSize.naturalHeight)\r\n const cropWidth = mediaSize.width * (480 / mediaSize.naturalWidth)\r\n console.log()\r\n const size = {\r\n width: cropWidth,\r\n height: cropHeight\r\n }\r\n this.setState({ cropSize: size })\r\n //If size smaller than 480 x 640. No cropping\r\n }}\r\n cropSize={this.state.cropSize}\r\n />\r\n\r\n let crop =\r\n
\r\n
\r\n {cropper}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Zoom\r\n \r\n \r\n this.sliderHandler(e)}\r\n variant='success'\r\n tooltip='off'\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 let modal;\r\n if (this.state.showImage) {\r\n modal =\r\n this.closeHandler()}>\r\n \r\n
Cropped Image
\r\n
\r\n \r\n {/* {this.state.imageUrl ? : } */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n }\r\n\r\n if (this.state.showError) {\r\n modal =\r\n this.closeHandler()} />\r\n }\r\n\r\n return (\r\n
\r\n {this.state.isLoading ? : null}\r\n {crop}\r\n {modal}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(ImageCrop)","import React, { Component } from 'react';\r\nimport { Button, Container, Col, Card, Row, InputGroup, Image, Form } from 'react-bootstrap';\r\nimport ImageCrop from '../ImageCrop/ImageCrop';\r\nimport Footers from '../../component/Footers/Footer';\r\nimport avatar from '../../avatar.svg';\r\nimport Loader from '../../component/Loader/Loader';\r\nimport { withRouter } from 'react-router-dom'\r\nimport axios from 'axios';\r\nimport ErrorModal from '../../component/ErrorModal/ErrorModal';\r\nimport Headers from '../../component/Headers/Headers';\r\nimport Dropdown from 'react-dropdown';\r\nimport 'react-dropdown/style.css';\r\nimport MediaQuery from 'react-responsive';\r\nimport { authContext } from \"../../adalConfig\";\r\nimport Resizer from 'react-image-file-resizer';\r\nimport imageCompression from 'browser-image-compression';\r\n\r\nfunction readFile(file) {\r\n return new Promise(resolve => {\r\n const reader = new FileReader()\r\n reader.addEventListener('load', () => resolve(reader.result), false)\r\n reader.readAsDataURL(file)\r\n })\r\n}\r\n\r\nconst resizeFile = (file, dimensions) => new Promise(resolve => {\r\n Resizer.imageFileResizer(file, dimensions.width, dimensions.height, 'JPEG', 100, 0,\r\n uri => {\r\n resolve(uri);\r\n }, 'base64');\r\n});\r\n\r\nconst options = {\r\n maxSizeMB: 0.5,\r\n maxWidthOrHeight: 640,\r\n useWebWorker: true\r\n}\r\n\r\nclass Upload extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.inputChangedRef = React.createRef();\r\n }\r\n state = {\r\n imageUrl: null,\r\n imageName: \"Choose file...\",\r\n StudentID: '',\r\n StaffName: '',\r\n role: 'Student',\r\n isOHR: false,\r\n isOSE: false,\r\n checkSubmit: true\r\n\r\n //isLoading: false\r\n //accesstoken: this.props.location.state.accesstoken,\r\n //studentID: this.props.location.state.studentID\r\n };\r\n\r\n //Validation for onChange in Input File\r\n onFileChange = async e => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n const file = e.target.files[0]\r\n const fileExtension = file.name.split('.').pop().toLowerCase();\r\n\r\n if (file.size < 60000) {\r\n this.setState({\r\n show: true,\r\n isLoading: false,\r\n errorMsg: 'Please upload a photo with a minimum 60kb file size'\r\n })\r\n e.target.value = null;\r\n return\r\n }\r\n\r\n /* if (file.size > 500000) {\r\n this.setState({\r\n show: true,\r\n isLoading: false,\r\n errorMsg: 'Please upload a photo with a maximum 500kb file size'\r\n })\r\n e.target.value = null;\r\n return\r\n }*/\r\n\r\n if (fileExtension === 'jpg' || fileExtension === 'jpeg') {\r\n let imageDataUrl = await readFile(file)\r\n\r\n this.setState({\r\n imageUrl: imageDataUrl,\r\n imageName: file.name,\r\n imageFile: file,\r\n isLoading: false,\r\n checkSubmit: false\r\n // disableCrop: false,\r\n // disableUpload: false,\r\n })\r\n\r\n } else {\r\n this.setState({\r\n // disableCrop: true,\r\n // disableUpload: true,\r\n checkSubmit: true,\r\n isLoading: false,\r\n show: true,\r\n errorMsg: 'Please upload a passport photo of .jpeg or .jpg'\r\n })\r\n }\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n //authenticate whether user has login properly\r\n if (!this.props.location.state) {\r\n this.props.history.push('/')\r\n }\r\n console.log('state', this.props.location.state)\r\n console.log('role', this.props.role)\r\n\r\n //Check whether user type and show different upload page\r\n if (this.props.location.state) {\r\n console.log('userType', this.props.location.state.userType)\r\n if (this.props.location.state.userType === 'OSEAdmin') {\r\n console.log(this.props.staffName, this.props.studentID)\r\n if (this.props.staffName && this.props.studentID && this.props.role) {\r\n this.setState({\r\n StudentID: this.props.studentID,\r\n StaffName: this.props.staffName,\r\n role: this.props.role,\r\n isOSE: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else if (this.props.location.state.staffName && this.props.location.state.studentID && this.props.location.state.role) {\r\n this.setState({\r\n StudentID: this.props.location.state.studentID,\r\n StaffName: this.props.location.state.staffName,\r\n role: this.props.location.state.role,\r\n isOSE: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else {\r\n this.setState({\r\n isOSE: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n }\r\n } else if (this.props.location.state.userType === 'OHRStaff') {\r\n if (this.props.staffName && this.props.studentID) {\r\n this.setState({\r\n StudentID: this.props.studentID,\r\n StaffName: this.props.staffName,\r\n isOHR: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else if (this.props.location.state.staffName && this.props.location.state.studentID && this.props.location.state.userType) {\r\n this.setState({\r\n StudentID: this.props.location.state.studentID,\r\n StaffName: this.props.location.state.staffName,\r\n isOHR: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else {\r\n this.setState({\r\n isOHR: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n userid: localStorage.getItem('id')\r\n })\r\n }\r\n }\r\n\r\n // if (this.props.role) {\r\n // this.setState({\r\n // role: this.props.role\r\n // })\r\n // }\r\n\r\n\r\n\r\n // if (this.props.staffName || this.props.studentID) {\r\n // console.log(this.props.staffName, this.props.studentID)\r\n // if (this.props.userType) {\r\n // this.setState({\r\n // StudentID: this.props.studentID,\r\n // StaffName: this.props.staffName,\r\n // role: this.props.userType\r\n // })\r\n // } else {\r\n // this.setState({\r\n // StudentID: this.props.studentID,\r\n // StaffName: this.props.staffName\r\n // })\r\n // }\r\n\r\n // }\r\n }\r\n\r\n inputChanged = () => {\r\n this.setState({ isLoading: true });\r\n }\r\n\r\n disableHandler = async ({ target: img }) => {\r\n //this.setState({isLoading: false})\r\n const height = img.naturalHeight\r\n const width = img.naturalWidth\r\n console.log(width + 'x' + height)\r\n const file = this.state.imageFile\r\n\r\n let dimensions = {\r\n width: 480,\r\n height: 640\r\n }\r\n\r\n\r\n if (width / height > 0.75) {\r\n console.log('in here')\r\n dimensions.width = 640 * (width / height)\r\n console.log('new dimensions', dimensions)\r\n\r\n } else if (width / height < 0.75) {\r\n dimensions.height = 480 * (height / width)\r\n console.log('new dimensions', dimensions)\r\n }\r\n\r\n if (height > 640 || width > 480) {\r\n const imageURL = await resizeFile(file, dimensions);\r\n // const compressedImageFile = await imageCompression(file, options);\r\n // console.log(compressedImageFile)\r\n // const imageURL = await readFile(compressedImageFile)\r\n \r\n\r\n const isIE = /*@cc_on!@*/false || !!document.documentMode;\r\n\r\n let resizefile\r\n\r\n let filename = this.props.location.state.studentID\r\n filename = filename.split('@')[0]\r\n if (this.state.isOHR || this.state.isOSE) {\r\n filename = this.state.StudentID\r\n }\r\n\r\n if (isIE) {\r\n //File constructor does not exist in IE and hence using blob with last modified date and name\r\n resizefile = await fetch(imageURL).then(r => r.blob());\r\n resizefile.lastModifiedDate = new Date();\r\n resizefile.name = filename + '.jpeg';\r\n } else {\r\n\r\n //File constructor works in other browser\r\n resizefile = await fetch(imageURL).then(r => r.blob()).then(blobFile => new File([blobFile], filename + '.jpeg', { type: \"image/jpeg\" }))\r\n }\r\n\r\n \r\n console.log(resizefile)\r\n\r\n this.setState({ imageUrl: imageURL, imageFile: resizefile })\r\n return;\r\n }\r\n\r\n console.log(width, height)\r\n\r\n //Validate the resolution of the image when onLoad\r\n if (height < 640 || width < 480) {\r\n console.log(width, height)\r\n this.setState({\r\n disableCrop: true,\r\n disableUpload: true,\r\n show: true,\r\n errorMsg: 'Please upload a photo with a minimum 480 x 640 dimension'\r\n })\r\n } else if (height > 640 || width > 480) {\r\n this.setState({\r\n disableCrop: false,\r\n disableUpload: true,\r\n show: true,\r\n errorMsg: 'The uploaded photo is more than 480x640 dimension. Please crop the photo using the crop function'\r\n }) \r\n } else {\r\n this.setState({\r\n disableCrop: false,\r\n disableUpload: false\r\n })\r\n }\r\n }\r\n\r\n cropHandler = () => {\r\n console.log(\"Inside Crop handler\");\r\n if (this.state.role === 'Student' || this.state.role === 'Staff') {\r\n this.setState({\r\n showCrop: true,\r\n userType: this.state.role,\r\n role:this.state.role\r\n }) \r\n } else {\r\n this.setState({\r\n showCrop: true,\r\n role:this.state.role\r\n })\r\n }\r\n\r\n }\r\n\r\n uploadHandler = event => {\r\n this.setState({ isLoading: true });\r\n event.preventDefault();\r\n\r\n const url = process.env.REACT_APP_VALIDATEIMAGE\r\n\r\n let headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n if (this.props.location.state.accesstoken) {\r\n headers[\"Authorization\"] = `Bearer ${this.props.location.state.accesstoken}`;\r\n }\r\n\r\n //Retrieve image base64 string\r\n //var imageBuffer = this.state.imageUrl.split(',');\r\n\r\n const fileExtension = this.state.imageName.split('.').pop();\r\n\r\n let userType = this.props.location.state.userType\r\n let filename = this.props.location.state.studentID\r\n filename = filename.split('@')[0]\r\n let userid = this.props.location.state.studentID\r\n userid = userid.split('@')[0]\r\n\r\n if (this.state.isOHR || this.state.isOSE) {\r\n filename = this.state.StudentID\r\n userid = this.state.StudentID\r\n userType = 'Staff'\r\n }\r\n\r\n if (this.state.role === 'Student' || this.state.role === 'Staff') {\r\n userType = this.state.role\r\n }\r\n\r\n if (this.state.isOHR) {\r\n filename = this.state.StudentID\r\n userid = this.state.StudentID\r\n userType = 'Staff'\r\n }\r\n\r\n console.log(this.state.imageFile)\r\n console.log(\"user type: \"+this.props.location.state.userType)\r\n\r\n const form = new FormData();\r\n form.append('byteData', this.state.imageFile)\r\n form.append('filename', filename + '.' + fileExtension);\r\n form.append('userid', userid);\r\n form.append('usertype', userType);\r\n form.append('loginUserType',this.props.location.state.userType);//20240301\r\n \r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, {\r\n headers: headers\r\n }).then((response) => {\r\n const result = response.data;\r\n console.log(result)\r\n if (result.uploadStatus || result.uploadRemarks) {\r\n this.setState({\r\n //showResult: true,\r\n isLoading: false,\r\n //uploadStatus: result.uploadStatus,\r\n //uploadRemarks: result.uploadRemarks\r\n })\r\n this.props.history.push({\r\n pathname: '/Result',\r\n state: {\r\n uploadStatus: result.uploadStatus,\r\n uploadRemarks: result.uploadRemarks,\r\n studentID: this.props.location.state.studentID,\r\n staffName: this.props.location.state.StaffName,\r\n userType: this.props.location.state.userType,\r\n accesstoken: this.props.location.state.accesstoken,\r\n role: this.props.location.state.role\r\n }\r\n })\r\n } else {\r\n this.setState({\r\n show: true,\r\n errorMsg: \"No result available. Please try again\",\r\n isLoading: false\r\n })\r\n }\r\n }).catch((error) => {\r\n console.log(error)\r\n const url = process.env.REACT_APP_LOGEXCEPTION\r\n let headers = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${this.props.location.state.accesstoken}`;\r\n\r\n const form = new FormData();\r\n form.append('loggedinuserid', this.props.location.state.studentID)\r\n form.append('student_staff_id', userid);\r\n form.append('webapimethodname', process.env.REACT_APP_VALIDATEIMAGE);\r\n\r\n if (error.response) {\r\n form.append('error', error.response.status + ' ' + error.response.statusText);\r\n } else {\r\n form.append('error', error.message);\r\n }\r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, { headers: headers }).then((response) => {\r\n if (error.response) {\r\n if (error.response.status === '401') {\r\n this.setState({\r\n errorMsg: 'Your Session has expired. Please login again.',\r\n show: true,\r\n isLoading: false\r\n })\r\n localStorage.clear()\r\n authContext.logOut()\r\n } else {\r\n this.setState({\r\n errorMsg: error.response.status + ' ' + error.response.statusText,\r\n show: true,\r\n isLoading: false\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n show: true,\r\n errorMsg: error.message,\r\n isLoading: false\r\n })\r\n }\r\n }).catch((error1) => {\r\n if (error.response) {\r\n if (error.response.status === '401') {\r\n this.setState({\r\n errorMsg: 'Your Session has expired. Please login again.',\r\n show: true,\r\n isLoading: false\r\n })\r\n localStorage.clear()\r\n authContext.logOut()\r\n } else {\r\n this.setState({\r\n errorMsg: error.response.status + ' ' + error.response.statusText,\r\n show: true,\r\n isLoading: false\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n show: true,\r\n errorMsg: error.message,\r\n isLoading: false\r\n })\r\n }\r\n });\r\n\r\n\r\n });\r\n }\r\n\r\n closeHandler = () => {\r\n this.setState({ show: false })\r\n }\r\n\r\n cancelHandler = () => {\r\n this.setState({\r\n imageUrl: null,\r\n imageName: \"Choose file...\",\r\n submit: false,\r\n checkSubmit: true,\r\n // StudentID: '',\r\n // StaffName: ''\r\n\r\n })\r\n }\r\n\r\n changeHandler = (e) => {\r\n const target = e.target;\r\n const name = target.name;\r\n\r\n if (name === \"StudentID\") {\r\n const isValidChar = !/[~`!@#$%\\^&*()+=_\\-\\[\\]\\\\';,/{}|\\\\\":<>\\? ]/g.test(e.target.value)\r\n\r\n if (isValidChar && e.target.value.length <= 20) {\r\n this.setState({ StudentID: e.target.value });\r\n }\r\n }\r\n\r\n if (name === \"StaffName\") {\r\n this.setState({ StaffName: e.target.value });\r\n }\r\n }\r\n\r\n dropdownSelect = (e) => {\r\n this.setState({\r\n role: e.value,\r\n StudentID: '',\r\n StaffName: ''\r\n })\r\n }\r\n\r\n previewHandler = () => {\r\n if (this.state.isOHR || this.state.isOSE) {\r\n if (this.state.StudentID === '' || this.state.StaffName === '') {\r\n let errormsg = 'Staff ID and Staff Name are required'\r\n if (this.state.role === 'Student') {\r\n errormsg = 'Student ID and Student Name are required'\r\n }\r\n this.setState({\r\n show: true,\r\n isLoading: false,\r\n errorMsg: errormsg\r\n })\r\n //e.target.value = null;\r\n return\r\n }\r\n\r\n if (this.state.role === 'Select Role' && this.state.isOSE) {\r\n this.setState({\r\n show: true,\r\n isLoading: false,\r\n errorMsg: 'Role needs to be selected'\r\n })\r\n //e.target.value = null;\r\n return\r\n }\r\n }\r\n this.setState({ submit: true })\r\n }\r\n\r\n render() {\r\n if (this.state.imageUrl && this.props.location.state.accesstoken && this.state.showCrop) {\r\n if (this.state.isOHR) {\r\n return ;\r\n } else if (this.state.isOSE) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n }\r\n\r\n let image =\r\n \r\n \r\n \r\n let staffpage = null;\r\n\r\n if (this.state.isOHR) {\r\n staffpage =\r\n
\r\n
\r\n Staff ID:\r\n *\r\n { this.changeHandler(event) }}\r\n />\r\n
\r\n
\r\n Staff Name:\r\n *\r\n { this.changeHandler(event) }}\r\n />\r\n
\r\n
\r\n }\r\n\r\n if (this.state.isOSE) {\r\n staffpage =\r\n
\r\n
\r\n {(this.state.role === 'Student' || this.state.role === 'Staff') ? {this.state.role}: : Student:}\r\n *\r\n this.dropdownSelect(e)} value={this.state.role} placeholder=\"Select an option\" />\r\n
\r\n
\r\n {(this.state.role === 'Student' || this.state.role === 'Staff') ? {this.state.role} ID: : Student ID:}\r\n *\r\n { this.changeHandler(event) }}\r\n />\r\n
\r\n
\r\n {(this.state.role === 'Student' || this.state.role === 'Staff') ? {this.state.role} Name: : Student Name:}\r\n *\r\n { this.changeHandler(event) }}\r\n />\r\n
\r\n\r\n
\r\n }\r\n\r\n\r\n let uploadFunctions =\r\n \r\n {staffpage}\r\n \r\n
\r\n {\r\n this.onFileChange(event)\r\n }}\r\n ref={this.inputChangedRef}\r\n accept=\"image/jpg,image/jpeg\" />\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n\r\n let displayCropOption =\r\n \r\n \r\n
Preview
\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 let displayUpload =\r\n \r\n \r\n \r\n {image}\r\n \r\n\r\n {uploadFunctions}\r\n \r\n \r\n\r\n return (\r\n
\r\n \r\n \r\n {this.state.isLoading ? : null}\r\n \r\n \r\n \r\n {this.state.submit ? displayCropOption : displayUpload}\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 {this.state.submit ? displayCropOption : displayUpload}\r\n \r\n \r\n \r\n\r\n \r\n this.closeHandler()} />\r\n \r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default withRouter(Upload);","import React, { Component } from 'react';\r\nimport { Container, Card, Form, Button, Modal } from 'react-bootstrap';\r\nimport axios from 'axios'\r\nimport { withRouter } from 'react-router-dom';\r\nimport Upload from '../../containers/Upload/Upload';\r\nimport Footers from '../../component/Footers/Footer';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { format, subYears } from 'date-fns';\r\nimport Loader from '../../component/Loader/Loader'\r\nimport Headers from '../../component/Headers/Headers';\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { confirmAlert } from 'react-confirm-alert'; // Import\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport ErrorModal from '../../component/ErrorModal/ErrorModal';\r\n\r\nconst sitekey = process.env.REACT_APP_SITEKEY\r\n\r\nclass Login extends Component {\r\n\r\n \r\n constructor(props) {\r\n super(props)\r\n this.recaptchaRef = React.createRef();\r\n }\r\n\r\n state = {\r\n validated: false,\r\n setValidated: false,\r\n StudentID: '',\r\n DOB: '',\r\n Email: '',\r\n isValidRecaptcha: false,\r\n SiteKey: '',\r\n\r\n }\r\n\r\n //Datepicker onChange\r\n handleChange = date => {\r\n this.setState({\r\n DOB: date\r\n });\r\n };\r\n\r\n //Validation\r\n submitHandler = (e) => {\r\n const form = e.currentTarget;\r\n\r\n //const isValidChar = /^[a-zA-Z0-9]+@(?:[a-zA-Z0-9]+\\.)+[A-Za-z]+$/.test(this.state.Email)\r\n const isValidChar = /(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})+$/.test(this.state.Email)\r\n let isValidDate = false;\r\n\r\n if (this.state.DOB) {\r\n isValidDate = /^(0?[1-9]|[12][0-9]|3[01])[\\/](0?[1-9]|1[012])[\\/]\\d{4}$/.test(format(this.state.DOB, \"dd/MM/yyyy\"))\r\n }\r\n\r\n if (form.checkValidity() === false) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.setState({\r\n errorMsg: 'All fields are required',\r\n show: true\r\n })\r\n } else if (!isValidChar) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.setState({\r\n errorMsg: 'Invalid Email',\r\n show: true\r\n })\r\n } else if (!isValidDate) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.setState({\r\n errorMsg: 'Invalid Date',\r\n show: true\r\n })\r\n } else {\r\n this.setState({ setValidated: true, isLoading: true });\r\n\r\n const studentInfo = {\r\n StudentID: this.state.StudentID,\r\n DOB: format(this.state.DOB, \"dd/MM/yyyy\"),\r\n Email: this.state.Email,\r\n //isValidRecaptcha:this.state.isValidRecaptcha,\r\n token:this.recaptchaRef.current.getValue()\r\n }\r\n\r\n\r\n e.preventDefault();\r\n const url = process.env.REACT_APP_VALIDATESTUDENTINFO\r\n //console.log(studentInfo)\r\n //console.log(sitekey)\r\n axios.post(url, studentInfo)\r\n .then((response) => {\r\n const result = response.data;\r\n //console.log(result)\r\n //console.log(\"remarks \"+result.validationRemarks)\r\n if (result.isValidStudent) {\r\n this.setState({ isLoading: false });\r\n\r\n //Remove Azure token if any when successful login via new student detail\r\n localStorage.clear();\r\n\r\n this.props.history.push({\r\n pathname: '/PhotoGuide',\r\n state: {\r\n accesstoken: result.accessToken,\r\n studentID: this.state.StudentID,\r\n userType: 'Student'\r\n }\r\n })\r\n } \r\n else if (result.validationRemarks===\"Invalid captcha\")\r\n //else if (!result.isValidRecaptcha)\r\n {\r\n this.setState({\r\n isLoading: false,\r\n show: true,\r\n errorMsg: 'Please try again with valid captcha'\r\n })\r\n }\r\n else {\r\n this.setState({\r\n isLoading: false,\r\n show: true,\r\n errorMsg: 'Please try again with valid student information'\r\n })\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(error)\r\n if (error.response) {\r\n this.setState({\r\n isLoading: false,\r\n show: true,\r\n errorMsg: error.response.status + ' ' + error.response.statusText\r\n })\r\n } else {\r\n this.setState({\r\n isLoading: false,\r\n show: true,\r\n errorMsg: error.message\r\n })\r\n }\r\n // this.props.history.push({\r\n // pathname: '/Upload',\r\n // state: {\r\n // accesstoken: 'Student',\r\n // studentID: this.state.StudentID,\r\n // userType: 'Student'\r\n // }\r\n // })\r\n });\r\n }\r\n }\r\n\r\n changeHandler = (e) => {\r\n const target = e.target;\r\n const name = target.name;\r\n\r\n if (name === \"StudentID\") {\r\n //const isValidChar = !/^[a-zA-Z0-9]+@(?:[a-zA-Z0-9]+\\.)+[A-Za-z]+$/.test(e.target.value)\r\n const isValidChar = !/(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})+$/.test(this.state.Email)\r\n if (isValidChar && e.target.value.length <= 20) {\r\n this.setState({ StudentID: e.target.value });\r\n }\r\n }\r\n\r\n if (name === \"Email\") {\r\n this.setState({ Email: e.target.value });\r\n }\r\n }\r\n\r\n recaptchaHandler = value => {\r\n //console.log(\"Captcha value:\", value);\r\n //const captchaRes=value\r\n console.log(\"token\"+ this.recaptchaRef.current.getValue())\r\n //console.log(\"captchaRes:\", captchaRes);\r\n \r\n if (value) {\r\n this.setState({ isValidRecaptcha: true ,token1:value});\r\n } else {\r\n this.setState({ isValidRecaptcha: false })\r\n }\r\n // if value is null recaptcha expired\r\n if (value === null) {\r\n this.setState({ isValidRecaptcha: false })\r\n }\r\n //console.log(\"isValidRecaptcha: \",this.state.isValidRecaptcha);\r\n }\r\n closeHandler = () => {\r\n this.setState({ show: false })\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n {this.state.isLoading ? : null}\r\n \r\n \r\n
Student Information
\r\n
\r\n \r\n
{ this.submitHandler(event) }}>\r\n \r\n Student ID:\r\n *\r\n { this.changeHandler(event) }}\r\n />\r\n {/* {this.state.validationMsg} */}\r\n \r\n \r\n Date Of Birth:\r\n *\r\n \r\n \r\n \r\n Email:\r\n *\r\n { this.changeHandler(event) }}\r\n />\r\n {/* {this.state.validationMsg} */}\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 this.closeHandler()} />\r\n \r\n
\r\n\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default withRouter(Login);","export default __webpack_public_path__ + \"static/media/white-bg-right.8bd769cd.PNG\";","export default __webpack_public_path__ + \"static/media/white-bg-incorrect1.446dd32e.PNG\";","export default __webpack_public_path__ + \"static/media/white-bg-incorrect2.a59f3d7d.PNG\";","export default __webpack_public_path__ + \"static/media/brightness-incorrect1.015afa26.PNG\";","export default __webpack_public_path__ + \"static/media/brightness-incorrect2.4f261346.PNG\";","export default __webpack_public_path__ + \"static/media/focus-incorrect1.d52f0740.PNG\";","export default __webpack_public_path__ + \"static/media/focus-incorrect2.90c2d33b.PNG\";","export default __webpack_public_path__ + \"static/media/visibility-incorrect1.58ed7505.PNG\";","export default __webpack_public_path__ + \"static/media/visibility-incorrect2.a974e590.PNG\";","export default __webpack_public_path__ + \"static/media/shoulders-incorrect.2ef0fda3.PNG\";","export default __webpack_public_path__ + \"static/media/expression-incorrect.6d0e0dc8.PNG\";","export default __webpack_public_path__ + \"static/media/spectacles-incorrect1.c50e8033.PNG\";","export default __webpack_public_path__ + \"static/media/spectacles-incorrect2.258e20dc.PNG\";","export default __webpack_public_path__ + \"static/media/headgear-right.62f87996.PNG\";","export default __webpack_public_path__ + \"static/media/headgear-incorrect1.f6d759f2.PNG\";","export default __webpack_public_path__ + \"static/media/headgear-incorrect2.345629e1.PNG\";","import React, { Component } from 'react';\r\nimport { Button, Container, Col, Card, Row, InputGroup, Image, Form } from 'react-bootstrap';\r\nimport ImageCrop from '../ImageCrop/ImageCrop';\r\nimport Footers from '../../component/Footers/Footer';\r\nimport avatar from '../../avatar.svg';\r\nimport whitebgright from '../../containers/Images/white-bg-right.PNG';\r\nimport whitebgincorrect1 from '../../containers/Images/white-bg-incorrect1.PNG';\r\nimport whitebgincorrect2 from '../../containers/Images/white-bg-incorrect2.PNG';\r\nimport brightnessincorrect1 from '../../containers/Images/brightness-incorrect1.PNG';\r\nimport brightnessincorrect2 from '../../containers/Images/brightness-incorrect2.PNG';\r\nimport focusincorrect1 from '../../containers/Images/focus-incorrect1.PNG';\r\nimport focusincorrect2 from '../../containers/Images/focus-incorrect2.PNG';\r\nimport visibilityincorrect1 from '../../containers/Images/visibility-incorrect1.PNG';\r\nimport visibilityincorrect2 from '../../containers/Images/visibility-incorrect2.PNG';\r\nimport shouldersincorrect from '../../containers/Images/shoulders-incorrect.PNG';\r\nimport expressionincorrect from '../../containers/Images/expression-incorrect.PNG';\r\nimport spectaclesincorrect1 from '../../containers/Images/spectacles-incorrect1.PNG';\r\nimport spectaclesincorrect2 from '../../containers/Images/spectacles-incorrect2.PNG';\r\nimport headgearright from '../../containers/Images/headgear-right.PNG';\r\nimport headgearincorrect1 from '../../containers/Images/headgear-incorrect1.PNG';\r\nimport headgearincorrect2 from '../../containers/Images/headgear-incorrect2.PNG';\r\nimport Loader from '../../component/Loader/Loader';\r\nimport { withRouter } from 'react-router-dom'\r\nimport axios from 'axios';\r\nimport ErrorModal from '../../component/ErrorModal/ErrorModal';\r\nimport Headers from '../../component/Headers/Headers';\r\nimport Dropdown from 'react-dropdown';\r\nimport 'react-dropdown/style.css';\r\nimport MediaQuery from 'react-responsive';\r\nimport { authContext } from \"../../adalConfig\";\r\nimport Resizer from 'react-image-file-resizer';\r\nimport imageCompression from 'browser-image-compression';\r\nimport './PhotoGuide.css';\r\n\r\n\r\nclass PhotoGuide extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.inputChangedRef = React.createRef();\r\n\r\n //this.handleClick = this.handleClick.bind(this);\r\n\r\n this.navigateToUpload = this.navigateToUpload.bind(this);\r\n }\r\n \r\n navigateToUpload() {\r\n // 👇️ navigate to /Upload\r\n let pathUpload = '/Upload'; \r\n //this.props.history.push(pathUpload);\r\n\r\n this.props.history.push({\r\n pathname: '/Upload',\r\n state: {\r\n login: this.props.location.state.login,\r\n studentID: this.props.location.state.studentID,\r\n userType: this.props.location.state.userType,\r\n accesstoken: this.props.location.state.accesstoken\r\n }\r\n })\r\n };\r\n\r\n state = {\r\n imageUrl: null,\r\n imageName: \"Choose file...\",\r\n StudentID: '',\r\n StaffName: '',\r\n role: 'Student',\r\n isOHR: false,\r\n isOSE: false,\r\n checkSubmit: true\r\n\r\n //isLoading: false\r\n //accesstoken: this.props.location.state.accesstoken,\r\n //studentID: this.props.location.state.studentID\r\n };\r\n\r\n componentDidMount() {\r\n //authenticate whether user has login properly\r\n if (!this.props.location.state) {\r\n this.props.history.push('/')\r\n }\r\n //console.log('state', this.props.location.state)\r\n //console.log('role', this.props.role)\r\n\r\n //Check whether user type and show different upload page\r\n if (this.props.location.state) {\r\n console.log('userType', this.props.location.state.userType)\r\n if (this.props.location.state.userType === 'OSEAdmin') {\r\n // console.log(this.props.staffName, this.props.studentID)\r\n if (this.props.staffName && this.props.studentID && this.props.role) {\r\n this.setState({\r\n StudentID: this.props.studentID,\r\n StaffName: this.props.staffName,\r\n role: this.props.role,\r\n isOSE: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else if (this.props.location.state.staffName && this.props.location.state.studentID && this.props.location.state.role) {\r\n this.setState({\r\n StudentID: this.props.location.state.studentID,\r\n StaffName: this.props.location.state.staffName,\r\n role: this.props.location.state.role,\r\n isOSE: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else {\r\n this.setState({\r\n isOSE: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n }\r\n } else if (this.props.location.state.userType === 'OHRStaff') {\r\n if (this.props.staffName && this.props.studentID) {\r\n this.setState({\r\n StudentID: this.props.studentID,\r\n StaffName: this.props.staffName,\r\n isOHR: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else if (this.props.location.state.staffName && this.props.location.state.studentID && this.props.location.state.userType) {\r\n this.setState({\r\n StudentID: this.props.location.state.studentID,\r\n StaffName: this.props.location.state.staffName,\r\n isOHR: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n } else {\r\n this.setState({\r\n isOHR: true,\r\n userid: localStorage.getItem('id')\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n userid: localStorage.getItem('id')\r\n })\r\n }\r\n }\r\n\r\n // if (this.props.role) {\r\n // this.setState({\r\n // role: this.props.role\r\n // })\r\n // }\r\n\r\n\r\n\r\n // if (this.props.staffName || this.props.studentID) {\r\n // console.log(this.props.staffName, this.props.studentID)\r\n // if (this.props.userType) {\r\n // this.setState({\r\n // StudentID: this.props.studentID,\r\n // StaffName: this.props.staffName,\r\n // role: this.props.userType\r\n // })\r\n // } else {\r\n // this.setState({\r\n // StudentID: this.props.studentID,\r\n // StaffName: this.props.staffName\r\n // })\r\n // }\r\n\r\n // }\r\n }\r\n\r\n inputChanged = () => {\r\n this.setState({ isLoading: true });\r\n }\r\n\r\n render() {\r\n \r\n let image =\r\n \r\n \r\n \r\n\r\n return (\r\n
\r\n \r\n \r\n {this.state.isLoading ? : null}\r\n {/* */}\r\n {/* */}\r\n {/* \r\n {this.state.submit ? displayCropOption : displayUpload}\r\n */}\r\n \r\n
\r\n

Photo Guidelines

\r\n
    \r\n
  1. \r\n Photo must be\r\n
      \r\n
    • Taken within the last 1 year.
    • \r\n
    • In colour taken against a full plain white background.
    • \r\n
    • Clear, in sharp focus and not pixelated or distorted.
    • \r\n
    • In JPEG format (.jpeg or .jpg file extension) with minimum 480 x 640 resolution
    • \r\n
    • File size between 60KB and 500KB.
    • \r\n
    \r\n
  2. \r\n
  3. Facial features must be fully visible and taken at the full frontal view with neutral facial expression
  4. \r\n
  5. Spectacles must have clear and non-tinted lenses where eyes are clearly visible
  6. \r\n
  7. Headgear worn in accordance with religious or racial customs is acceptable but must not hide the facial features.
  8. \r\n
\r\n \r\n
\r\n
\r\n

Sample Photo

\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 \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
Photo must be in colour taken against a white background\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Photo taken with even brightness and without shadow\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Photo must be clear, in sharp focus and not pixelated\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Facial features must be fully visible and taken at the full-frontal view\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Shoulders and hair must be fully visible\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Facial expression should be neutral\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Spectacles must have clear and non-tinted lenses where eyes are clearly visible\r\n {/* */}\r\n {image}\r\n {/* */}\r\n \r\n {/* */}\r\n
Headgear worn in accordance with religious or racial customs is acceptable but must not hide the facial features\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 this.closeHandler()} />\r\n \r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default withRouter(PhotoGuide);","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { getToken } from '../../adalConfig';\r\nimport axios from 'axios';\r\nimport Loader from '../../component/Loader/Loader';\r\nimport { authContext } from \"../../adalConfig\";\r\nimport { requestIp } from 'request-ip';\r\n\r\n\r\n\r\nclass AzureLogin extends Component {\r\n\r\n componentDidMount() {\r\n const token = getToken()\r\n if (token) {\r\n const url = process.env.REACT_APP_GETAUTHENTICATED\r\n \r\n \r\n\r\n let headers = {\r\n 'Accept': 'application/json',\r\n 'ClientIP': 'clientIp'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${getToken()}`;\r\n \r\n console.log(headers)\r\n\r\n axios.get(url, { headers }).then((response) => {\r\n const result = response.data;\r\n console.log(result)\r\n if (result.isAuthenticated && result.usertype) {\r\n\r\n if(!result.sessionExpired)\r\n {\r\n if(!result.multiActiveSessions)\r\n {\r\n const url = process.env.REACT_APP_LOGSIGNIN\r\n let headers = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${getToken()}`;\r\n\r\n const form = new FormData();\r\n form.append('userid', result.id);\r\n\r\n // for (var pair of form.entries()) {\r\n // console.log(pair[0] + ', ' + pair[1]);\r\n // }\r\n\r\n axios.post(url, form, { headers: headers }).then((response) => {\r\n console.log('Response Status', response.status)\r\n if (response.status === 200) {\r\n localStorage.setItem('id', result.id)\r\n this.props.history.push({\r\n pathname: '/PhotoGuide',\r\n state: {\r\n login: result.login,\r\n studentID: result.id,\r\n userType: result.usertype,\r\n accesstoken: token\r\n }\r\n })\r\n } else {\r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: 'Unable to Sign in to Sharepoint'\r\n }\r\n })\r\n }\r\n }).catch((error) => {\r\n console.log('error', error)\r\n const url = process.env.REACT_APP_LOGEXCEPTION\r\n let headers = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${getToken()}`;\r\n\r\n const form = new FormData();\r\n form.append('loggedinuserid', localStorage.getItem('id'))\r\n form.append('student_staff_id', localStorage.getItem('id'));\r\n form.append('webapimethodname', url);\r\n\r\n if (error.response) {\r\n form.append('error', error.response.status + ' ' + error.response.statusText);\r\n } else {\r\n form.append('error', error.message);\r\n }\r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, { headers: headers }).then((response) => {\r\n let errorMsg = error.message + \". Unable to Sign in to Sharepoint\";\r\n if (error.response) {\r\n errorMsg = error.response.status + ' ' + error.response.statusText;\r\n }\r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: errorMsg\r\n }\r\n })\r\n }).catch((error) => {\r\n let errorMsg = error.message + \". Unable to Sign in to Sharepoint\";\r\n if (error.response) {\r\n errorMsg = error.response.status + ' ' + error.response.statusText;\r\n }\r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: errorMsg\r\n }\r\n })\r\n });\r\n });\r\n }\r\n else { \r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: 'You already have an Active Session. Please continue the same or log out!',\r\n showlogout: true\r\n },\r\n showText:true,\r\n Loader:false\r\n }) \r\n }\r\n }\r\n else {\r\n \r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: 'Session Expired! Please login again.',\r\n showlogout: false\r\n },\r\n showText:true,\r\n Loader:false\r\n }) \r\n \r\n }\r\n } else { \r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: 'Logged in User is not identified in Photo system'\r\n }\r\n })\r\n }\r\n }).catch((error) => {\r\n console.log('error', error)\r\n const url = process.env.REACT_APP_LOGEXCEPTION\r\n let headers = {\r\n 'Content-Type': 'multipart/form-data'\r\n };\r\n\r\n headers[\"Authorization\"] = `Bearer ${getToken()}`;\r\n\r\n const form = new FormData();\r\n form.append('loggedinuseridstring', this.state.StudentID)\r\n form.append('student_staff_idstring', this.state.StudentID);\r\n form.append('webapimethodnamestring', url);\r\n\r\n if (error.response) {\r\n form.append('errorstring', error.response.status + ' ' + error.response.statusText);\r\n } else {\r\n form.append('errorstring', error.message);\r\n }\r\n\r\n for (var pair of form.entries()) {\r\n console.log(pair[0] + ', ' + pair[1]);\r\n }\r\n\r\n axios.post(url, form, { headers: headers }).then((response) => {\r\n let errorMsg = \"Something went wrong\"\r\n if (error.response) {\r\n errorMsg = error.response.status + ' ' + error.response.statusText;\r\n } else {\r\n if (error.message) {\r\n errorMsg = error.message;\r\n }\r\n }\r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: errorMsg\r\n }\r\n })\r\n }).catch((error) => {\r\n let errorMsg = \"Something went wrong\"\r\n if (error.response) {\r\n errorMsg = error.response.status + ' ' + error.response.statusText;\r\n } else {\r\n if (error.message) {\r\n errorMsg = error.message;\r\n }\r\n }\r\n this.props.history.push({\r\n pathname: '/',\r\n state: {\r\n error: errorMsg\r\n }\r\n })\r\n });\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\nexport default withRouter(AzureLogin);","import React from 'react';\r\nimport Footers from '../Footers/Footer'\r\nimport { Container, Card, Button } from 'react-bootstrap';\r\nimport { Link, Redirect } from \"react-router-dom\";\r\nimport Headers from '../Headers/Headers';\r\n//import Parser from 'html-react-parser';\r\n\r\nfunction closeHandler() { \r\n window.open('','_parent','');\r\n window.close(); \r\n }\r\n\r\nconst Result = props => {\r\n \r\n let body = 'Loading...'\r\n let redirectMsg = null\r\n const userid = localStorage.getItem('id')\r\n console.log(props.location.state)\r\n\r\n if (props.location.state) {\r\n if(props.location.state.userType === \"Student\") { \r\n if(userid) {\r\n redirectMsg = (\r\n

Please log out before closing the window.

\r\n )\r\n } else {\r\n redirectMsg = (\r\n

Please close this window.

\r\n )\r\n } \r\n } else {\r\n redirectMsg = (\r\n

Please refer to the guidelines or click here to return to upload page.

\r\n )\r\n }\r\n if (props.location.state.uploadStatus) {\r\n body = (\r\n
\r\n

Your photo has been successfully uploaded.

\r\n

RP may contact you if they need you to resubmit your photo.

\r\n {redirectMsg}\r\n
\r\n\r\n );\r\n } else {\r\n // let photoguidelinesreplacetext = guidelines\r\n // let photoguidelinereplacetext = guideline\r\n const uniqueRemarks = []\r\n props.location.state.uploadRemarks.split(',').map(rem => {\r\n if (uniqueRemarks.indexOf(rem) === -1) {\r\n uniqueRemarks.push(rem.replace('|',','))\r\n }\r\n });\r\n body = (\r\n
\r\n
These are the possible reasons for failure:
\r\n
    \r\n {uniqueRemarks.map(element => {\r\n if (element !== \"Success\" || element !== '') {\r\n // if(element.indexOf(\"guidelines\")!=-1)\r\n // {\r\n // return
  • {element.substring(0,element.indexOf(\"guidelines\"))} {photoguidelinesreplacetext}\r\n // {element.substring(element.indexOf(\"guidelines\")+10,element.length )}
  • \r\n // }\r\n // else if(element.indexOf(\"guideline\")!=-1)\r\n // {\r\n // return
  • {element.substring(0,element.indexOf(\"guideline\"))} {photoguidelinereplacetext}\r\n // {element.substring(element.indexOf(\"guideline\")+9,element.length )}
  • \r\n // }\r\n // else\r\n // {\r\n //return
    {element}}} /> \r\n //return
    Parser(element)
    \r\n //let htmlFromBackend = `Hello there, partner!`\r\n\r\nreturn (\r\n
  • \r\n)\r\n }\r\n })}\r\n
\r\n

Please refer to the guidelines or click here to return to upload page.

\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
Result
\r\n
\r\n \r\n {body}\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n return (\r\n // \r\n
\r\n \r\n \r\n \r\n \r\n
Result
\r\n
\r\n \r\n {body}\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 Result;\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst NotFound = () => (\r\n
\r\n

Something went wrong!

\r\n \r\n Go Home\r\n \r\n
\r\n);\r\n\r\nexport default NotFound;","export const {COLUMNS}=[\r\n {\r\n accessor:'Text'\r\n },\r\n {\r\n accessor:'Photo1'\r\n },\r\n {\r\n accessor:'Photo2'\r\n },\r\n {\r\n accessor:'Photo3'\r\n }\r\n]\r\n\r\n","import React,{cloneElement, useMemo} from 'react';\r\nimport { useTable } from 'react-table';\r\nimport Data from './Data.json';\r\nimport {COLUMNS} from './Columns';\r\nimport './TableStyle.css';\r\n\r\nexport const BasicTable=()=>{\r\n const columns=useMemo(()=>COLUMNS,[])\r\n const data=useMemo(()=>Data,[])\r\n\r\n // const tableInstance= useTable({\r\n // columns,\r\n // data\r\n //})\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n prepareRow\r\n }=useTable({\r\n columns,\r\n data\r\n })\r\n return \r\n (\r\n \r\n \r\n {\r\n rows.map((row)=>{\r\n prepareRow(row)\r\n return\r\n (\r\n \r\n {row.cells.map((cell)=>{\r\n return \r\n {cell.render('Cell')}\r\n \r\n \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 { Button, Container, Col, Card, Row, InputGroup, Image, Form } from 'react-bootstrap';\r\nimport Footers from \"../Footers/Footer\";\r\nimport Headers from '../Headers/Headers';\r\nimport {BasicTable} from './BasicTable.js'\r\nfunction guidelines()\r\n{\r\n return(\r\n
\r\n \r\n
\r\n )\r\n}\r\nexport default guidelines;","import 'bootstrap/dist/css/bootstrap.min.css';\r\nimport 'react-bootstrap-range-slider/dist/react-bootstrap-range-slider.css';\r\nimport React from 'react';\r\nimport './App.css';\r\nimport Landing from './containers/Landing/Landing';\r\nimport Login from './containers/Login/Login';\r\nimport Upload from './containers/Upload/Upload';\r\nimport PhotoGuide from './containers/PhotoGuide/PhotoGuide';\r\nimport './site.css';\r\nimport './styles.min.css';\r\nimport {\r\n BrowserRouter,\r\n Switch,\r\n Route\r\n} from \"react-router-dom\";\r\nimport 'blueimp-canvas-to-blob/js/canvas-to-blob';\r\nimport { withAdalLoginApi } from './adalConfig';\r\nimport AzureLogin from './containers/AzureLogin/AzureLogin';\r\nimport Result from './component/Result/Result';\r\nimport NotFound from './component/ErrorModal/NotFound';\r\nimport PhotoGuideline from './component/PhotoGuideline/PhotoGuideline.js';\r\nimport {BasicTable} from './component/PhotoGuideline/BasicTable.js';\r\nconst MyProtectedPage = withAdalLoginApi(AzureLogin, () => , (error) => );\r\n\r\nfunction guidelines()\r\n{\r\n return(\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nfunction App() {\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\n \r\n \r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\nexport default App; \r\n//export default guidelines\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\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 subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\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.0/8 are 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 function register(config) {\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.href);\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/facebook/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. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\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 // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\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, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.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, config);\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\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 'core-js/features/string/repeat';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(\r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}