{"version":3,"sources":["components/NavMenu/nav-menu.js","layouts/Layout.js","features/uploader/uploadStatuses.js","components/Header.js","styles/colors.js","components/Body.js","AxiosInstance.js","features/uploader/fileStatuses.js","atomic/atm-progress-bar.js","components/Upload.js","pages/Home.js","features/routes.js","pages/Login.js","features/login/post-login.js","pages/RegisterPage.js","features/register/post-register.js","pages/NotFound.js","components/PrivateRoute.js","features/store.js","features/home/get-all-modules.js","App.js","index.js"],"names":["NavMenu","props","toggleNavbar","bind","state","collapsed","this","setState","userName","sessionStorage","getItem","toLowerCase","Navbar","className","light","Container","NavbarBrand","tag","Link","to","NavbarToggler","onClick","Collapse","isOpen","navbar","target","href","Component","displayName","name","Layout","children","useStoreActions","actions","modulesLoad","setModules","uploadStatuses","NONE","FAILED","PENDING","UPLOADED","Header","item","icon","isActive","faCaretDown","faCaretRight","Main","id","Module","type","moduleName","size","styled","div","defaultProps","Body","checkList","onCheckListChange","onCheckBoxChangeHandler","e","currentTarget","map","checkbox","CheckBoxes","key","style","minWidth","status","color","faThumbsDown","colors","faSync","faThumbsUp","readOnly","checked","onChange","htmlFor","rel","axiosInstance","Axios","create","baseURL","interceptors","request","use","config","headers","Authorization","response","res","err","console","warn","ProgressBar","percentage","fileStatus","role","width","aria-valuenow","aria-valuemin","aria-valuemax","fileStatuses","Upload","moduleId","courses","onStatus","useState","revertProgress","setRevertProgress","setPercentage","fileName","setFileName","setFileStatus","files","setFiles","options","onUploadProgress","progressEvent","loaded","total","percent","Math","floor","useDropzone","onDrop","acceptedFiles","multiple","getRootProps","getInputProps","isDragActive","onClickHandler","a","preventDefault","form","FormData","append","JSON","stringify","axios","post","x","parse","data","upload_id","Request","poll","get","pending","length","failed","uploaded","faCloudUploadAlt","Dropzone","Action","disabled","onRevertProgressChange","Home","modules","useStoreState","selectedCourses","modulesLoaded","setCheckbox","setStatus","onStatusHandler","dict","forEach","headerClickHandler","items","i","itm","aria-labelledby","checklist","checkboxId","LoginPage","login","setLogin","password","setPassword","history","useHistory","addToast","useToasts","saveSession","token","user","setItem","onSubmit","routes","postLogin","trim","then","push","catch","error","appearance","autoDismiss","placeholder","required","autoFocus","value","postRegister","code","NotFound","PrivateRoute","rest","isAuth","render","location","pathname","from","store","createStore","action","payload","thunk","module","index","module_id","module_title","course","scorm_page_url","course_title","modId","checkId","itms","m","c","coursesDict","find","computed","found","filter","App","autoDismissTimeout","placement","exact","path","Login","RegisterPage","rootElement","document","getElementById","ReactDOM"],"mappings":"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","file":"static/js/main.1442beec.chunk.js","sourcesContent":["import React, {Component} from 'react'\nimport {\n Collapse,\n Container,\n Navbar,\n NavbarBrand,\n NavbarToggler,\n} from 'reactstrap'\nimport {Link} from 'react-router-dom'\nimport './NavMenu.css'\n\nexport class NavMenu extends Component {\n static displayName = NavMenu.name\n\n constructor(props) {\n super(props)\n\n this.toggleNavbar = this.toggleNavbar.bind(this)\n this.state = {\n collapsed: true,\n }\n }\n\n toggleNavbar() {\n this.setState({\n collapsed: !this.state.collapsed,\n })\n }\n\n render() {\n const userName = sessionStorage.getItem('user')\n const user = sessionStorage.getItem('user').toLowerCase()\n\n return (\n
\n \n \n \n Scorm Uploader\n \n \n \n \n \n \n \n
\n )\n }\n}\n","import React from 'react'\nimport {Container} from 'reactstrap'\nimport {useStoreActions} from 'easy-peasy'\n\nimport {NavMenu} from 'components/NavMenu'\n\nconst Layout = ({children}) => {\n const setModules = useStoreActions((actions) => actions.modulesLoad)\n setModules()\n\n return (\n
\n \n {children}\n
\n )\n}\n\n// Layout.displayName = Layout.name\n\nexport default Layout\n","const uploadStatuses = {\n NONE: 0,\n FAILED: 1,\n PENDING: 2,\n UPLOADED: 3,\n}\n\nexport default uploadStatuses\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport {faCaretRight, faCaretDown} from '@fortawesome/free-solid-svg-icons'\nimport styled from 'styled-components'\n\nconst Header = ({item, onClick}) => {\n const icon = item.isActive === 'show' ? faCaretDown : faCaretRight\n\n return (\n onClick(item.id)}>\n
\n \n {item.moduleName}\n \n
\n \n \n )\n}\n\nconst Main = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n`\n\nconst Module = styled.div`\n width: 100%;\n text-align: left;\n`\n\nHeader.propTypes = {\n item: PropTypes.shape({\n id: PropTypes.string.isRequired,\n moduleName: PropTypes.string.isRequired,\n isActive: PropTypes.string,\n }),\n onClick: PropTypes.func.isRequired,\n}\n\nHeader.defaultProps = {\n isActive: null,\n}\n\nexport default Header\n","export default {\n blue: '#0366D6',\n}\n","import React from 'react'\nimport P from 'prop-types'\nimport styled from 'styled-components'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport {\n faSync,\n faThumbsUp,\n faThumbsDown,\n} from '@fortawesome/free-solid-svg-icons'\n\nimport colors from 'styles/colors'\nimport uploadStatuses from 'features/uploader/uploadStatuses'\n\nconst Body = ({checkList, onCheckListChange}) => {\n const onCheckBoxChangeHandler = (e) => onCheckListChange(e.currentTarget.id)\n\n return (\n
\n {checkList &&\n checkList.map((checkbox) => {\n return (\n \n
\n {checkbox.status === uploadStatuses.FAILED ? (\n \n ) : checkbox.status === uploadStatuses.PENDING ? (\n \n ) : checkbox.status === uploadStatuses.UPLOADED ? (\n \n ) : null}\n
\n
\n \n \n \n {checkbox.name}\n \n
\n \n )\n })}\n
\n )\n}\n\nconst CheckBoxes = styled.div`\n display: flex;\n flex-direction: row;\n`\n\nBody.propTypes = {\n onCheckListChange: P.func,\n checkList: P.arrayOf(\n P.shape({\n id: P.string.isRequired,\n name: P.string.isRequired,\n checked: P.bool.isRequired,\n }),\n ),\n}\n\nBody.defaultProps = {\n onCheckListChange: () => {},\n}\n\nexport default Body\n","import Axios from 'axios'\n\nconst axiosInstance = Axios.create({\n baseURL: '/',\n})\n\naxiosInstance.interceptors.request.use((config) => {\n config.headers.Authorization = `Bearer ${sessionStorage.getItem('token')}`\n return config\n})\n\naxiosInstance.interceptors.response.use(\n (res) => {\n return res\n },\n (err) => {\n console.warn('ERROR', err)\n },\n)\n\nexport default axiosInstance\n","export default {\n NONE: '',\n READY_TO_UPLOAD: 'Ready to upload.',\n UPLOADING: 'Uploading',\n PENDING: 'Pending',\n COMPLETE: 'Complete'\n}\n","import React from 'react'\nimport P from 'prop-types'\n\nimport fileStatuses from 'features/uploader/fileStatuses'\n\nconst ProgressBar = ({percentage, fileStatus}) => {\n return (\n
\n \n {fileStatus === fileStatuses.UPLOADING ? (\n `${percentage}%`\n ) : fileStatus === fileStatuses.PENDING ? (\n
{fileStatus}
\n ) : (\n `${fileStatus}`\n )}\n
\n \n )\n}\n\nProgressBar.propTypes = {\n percentage: P.number.isRequired,\n fileStatus: P.string.isRequired,\n}\n\nexport default ProgressBar\n","import React, {useState} from 'react'\nimport PropTypes from 'prop-types'\nimport axios from 'AxiosInstance'\nimport Request from 'axios-request-handler'\n\nimport styled from 'styled-components'\nimport {useDropzone} from 'react-dropzone'\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\nimport {faCloudUploadAlt} from '@fortawesome/free-solid-svg-icons'\n\nimport fileStatuses from 'features/uploader/fileStatuses'\nimport colors from 'styles/colors'\n\nimport ProgressBar from 'atomic/atm-progress-bar'\n\nconst Upload = ({moduleId, courses, onStatus}) => {\n const [revertProgress, setRevertProgress] = useState(false)\n const [percentage, setPercentage] = useState(0)\n const [fileName, setFileName] = useState('')\n const [fileStatus, setFileStatus] = useState(fileStatuses.NONE)\n const [files, setFiles] = useState([])\n\n const options = {\n onUploadProgress: (progressEvent) => {\n const {loaded, total} = progressEvent\n const percent = Math.floor((loaded * 100) / total)\n\n if (percent < 100) {\n setPercentage(percent)\n }\n },\n }\n\n const onDrop = (acceptedFiles) => {\n setFiles(acceptedFiles)\n setFileName(acceptedFiles[0].name)\n setFileStatus(fileStatuses.READY_TO_UPLOAD)\n setPercentage(0)\n }\n\n const {getRootProps, getInputProps, isDragActive} = useDropzone({\n onDrop,\n multiple: false,\n })\n\n const onClickHandler = async (e) => {\n e.preventDefault()\n\n setFileStatus(fileStatuses.UPLOADING)\n\n const form = new FormData()\n form.append('scorm_module_id', moduleId)\n form.append('scorm_page_urls', JSON.stringify(courses()))\n form.append('revert_progress', revertProgress)\n form.append('file', files[0])\n\n const x = await axios.post('api/modules', form, options)\n\n setPercentage(100)\n setFileStatus(fileStatuses.PENDING)\n\n const id = JSON.parse(x.data.id).upload_id\n\n const reviews = new Request(`api/modules/poll/${id}`, {\n headers: {\n Authorization: `Bearer ${sessionStorage.getItem('token')}`,\n },\n })\n\n reviews.poll(2000).get((response) => {\n const res = response.data\n setFileStatus(\n `Pending: ${res.pending.length}, Failed: ${res.failed.length}, Uploaded: ${res.uploaded.length}`,\n )\n onStatus(res, moduleId)\n if (res.pending.length === 0) {\n setFileStatus(\n `Failed: ${res.failed.length}, Succeed: ${res.uploaded.length}`,\n )\n onStatus(res, moduleId)\n return false\n }\n })\n }\n\n return (\n
\n
\n \n \n \n {isDragActive ? (\n
Drop the files here...
\n ) : !fileStatus ? (\n
Drag'n'drop here or click and select a file to upload.
\n ) : (\n \n )}\n
\n
\n \n
\n \n Start uploading\n \n\n
\n setRevertProgress(!revertProgress)}\n />\n \n
\n
\n {fileName &&
{`${fileName}`}
}\n
\n
\n )\n}\n\nconst Action = styled.div`\n display: flex;\n align-items: baseline;\n flex-direction: column;\n\n button + div {\n margin-left: 20px;\n }\n\n > div:first-child {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n }\n`\n\nconst Main = styled.div`\n display: flex;\n flex-direction: 'row';\n align-items: 'center';\n border: 1px dashed ${colors.blue};\n border-radius: 5px;\n`\nconst Dropzone = styled.div`\n cursor: pointer;\n display: flex;\n align-items: center;\n`\n\nUpload.propTypes = {\n moduleId: PropTypes.string.isRequired,\n courses: PropTypes.func,\n onStatus: PropTypes.func,\n onRevertProgressChange: PropTypes.func,\n}\n\nUpload.defaultProps = {\n courses: () => {},\n onStatus: () => {},\n onRevertProgressChange: () => {},\n}\n\nexport default Upload\n","import React from 'react'\nimport {useStoreState, useStoreActions} from 'easy-peasy'\n\nimport uploadStatuses from 'features/uploader/uploadStatuses'\n\nimport Header from 'components/Header'\nimport Body from 'components/Body'\nimport Upload from 'components/Upload'\n\nconst Home = () => {\n const modules = useStoreState((state) => state.modules)\n const selectedCourses = useStoreState((state) => state.selectedCourses)\n const setModules = useStoreActions((actions) => actions.modulesLoaded)\n const setCheckbox = useStoreActions((actions) => actions.setCheckbox)\n const setStatus = useStoreActions((actions) => actions.setStatus)\n\n const onStatusHandler = (data, moduleId) => {\n const dict = {}\n data.failed.forEach((x) => (dict[x] = uploadStatuses.FAILED))\n data.pending.forEach((x) => (dict[x] = uploadStatuses.PENDING))\n data.uploaded.forEach((x) => (dict[x] = uploadStatuses.UPLOADED))\n setStatus({moduleId: moduleId, courses: dict})\n }\n\n const headerClickHandler = (id) => {\n const items = [...modules.items]\n items.forEach((i) => {\n i.isActive =\n i.id === id ? 'show' : i.isActive === 'show' ? '' : i.isActive\n })\n\n setModules({\n items: items,\n })\n }\n\n return (\n
\n

SCORM Modules

\n
\n {modules &&\n modules.items &&\n modules.items.map((itm) => {\n return (\n
\n
\n \n {itm && itm.isActive === 'show' && (\n <>\n
\n selectedCourses(itm.id)}\n onStatus={onStatusHandler}\n />\n
\n {\n setCheckbox({\n moduleId: itm.id,\n checkboxId: checkboxId,\n })\n }}\n />\n \n )}\n
\n
\n )\n })}\n
\n \n )\n}\n\nexport default Home\n","export default {\n apiRegister: '/api/auth/register',\n apiLogin: '/api/auth/login',\n apiModules: '/api/modules',\n\n home: '/',\n}\n","import React, {useState} from 'react'\nimport {useHistory} from 'react-router-dom'\nimport postLogin from 'features/login/post-login'\nimport {useToasts} from 'react-toast-notifications'\n\nconst LoginPage = (props) => {\n const [login, setLogin] = useState('')\n const [password, setPassword] = useState('')\n const history = useHistory()\n const {addToast} = useToasts()\n\n const saveSession = (token, user) => {\n sessionStorage.setItem('token', token)\n sessionStorage.setItem('user', user)\n }\n\n const onSubmitHandler = (e) => {\n e.preventDefault()\n\n postLogin(login.trim(), password)\n .then(({data}) => {\n saveSession(data.token, login.trim())\n\n history.push('/')\n })\n .catch((x) => {\n setLogin('')\n setPassword('')\n\n saveSession('', '')\n\n console.error('Authentication Error.', props)\n\n addToast('Wrong User name or Password', {\n appearance: 'error',\n autoDismiss: true,\n })\n })\n }\n\n return (\n
\n
\n
\n
\n
\n
Sign In
\n
\n
\n setLogin(e.currentTarget.value)}\n />\n
\n\n
\n setPassword(e.currentTarget.value)}\n />\n
\n\n \n CONTINUE\n \n \n
\n
\n
\n
\n
\n )\n}\n\nexport default LoginPage\n","import axios from 'AxiosInstance'\nimport routes from 'features/routes'\n\nexport default (userName, password) =>\n axios.post(routes.apiLogin, {userName, password})\n","import React, {useState} from 'react'\nimport postRegister from 'features/register/post-register'\nimport {useHistory} from 'react-router-dom'\nimport {useToasts} from 'react-toast-notifications'\nimport routes from 'features/routes'\n\nconst LoginPage = () => {\n const [login, setLogin] = useState('')\n const [password, setPassword] = useState('')\n const history = useHistory()\n const {addToast} = useToasts()\n\n const onSubmitHandler = (e) => {\n e.preventDefault()\n postRegister(login.trim(), password)\n .then((x) => {\n x\n ? addToast(`User '${login.trim()}' saved.`, {\n appearance: 'success',\n autoDismiss: true,\n })\n : addToast(`User '${login.trim()}' cannot change the password.`, {\n appearance: 'warning',\n autoDismiss: true,\n })\n\n history.push(routes.home)\n })\n .catch((e) => {\n console.error('Error: ', e)\n\n addToast(`Error ${e}`, {\n appearance: 'error',\n autoDismiss: true,\n })\n })\n }\n\n return (\n
\n
\n
\n
\n
\n
\n User Registration\n
\n
\n
\n setLogin(e.currentTarget.value)}\n />\n
\n\n
\n setPassword(e.currentTarget.value)}\n />\n
\n\n \n REGISTER\n \n \n
\n
\n
\n
\n
\n )\n}\n\nexport default LoginPage\n","import axios from 'AxiosInstance'\nimport routes from 'features/routes'\n\nexport default (userName, password) =>\n axios.post(routes.apiRegister, {userName, password})\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst NotFound = () => {\n return
404: Not Found.
\n}\n\nconst Main = styled.code`\n min-height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\nexport default NotFound\n","import React from 'react'\nimport {Route, Redirect} from 'react-router-dom'\n\nconst PrivateRoute = ({children, ...rest}) => {\n const isAuth = !!sessionStorage.getItem('token')\n\n return (\n \n isAuth ? (\n children\n ) : (\n \n )\n }\n />\n )\n}\n\nexport default PrivateRoute\n","import {createStore, action, thunk, computed} from 'easy-peasy'\nimport getAllModules from 'features/home/get-all-modules'\n\nconst store = createStore({\n modules: {items: []},\n\n modulesLoaded: action((state, payload) => {\n state.modules = payload\n }),\n\n modulesLoad: thunk(async (actions) => {\n const modules = await getAllModules()\n actions.modulesLoaded(modules)\n\n return modules\n }),\n\n setCheckbox: action((state, payload) => {\n const modId = payload.moduleId\n const checkId = payload.checkboxId\n\n const itms = JSON.parse(JSON.stringify(state.modules.items))\n for (let m of itms) {\n if (m.id === modId) {\n for (let c of m.checklist) {\n if (c.id === checkId) {\n c.checked = !c.checked\n }\n }\n }\n }\n\n state.modules = {items: itms}\n }),\n\n setStatus: action((state, payload) => {\n const moduleId = payload.moduleId\n // dictionary [courseId, status]\n const coursesDict = payload.courses\n\n const ch = state.modules.items.find((x) => x.id === moduleId).checklist\n ch.forEach((x) => {\n x.status = coursesDict[x.id]\n })\n }),\n\n selectedCourses: computed((state) => (moduleId) => {\n const found = state.modules.items.find((x) => x.id === moduleId)\n const selected = (found && found.checklist) || []\n\n return selected.filter((x) => !!x.checked).map((x) => x.id)\n }),\n})\n\nexport default store\n","import axios from 'AxiosInstance'\nimport routes from 'features/routes'\n\nexport default () => {\n return axios\n .get(routes.apiModules)\n .then((res) => res.data)\n .then((data) => {\n const items = data.map((module, index) => {\n return {\n id: module.module_id,\n moduleName: module.module_title,\n isActive: index === 0 ? 'show' : '',\n checklist: module.courses.map((course) => {\n return {\n id: course.scorm_page_url,\n name: course.course_title,\n checked: true,\n }\n }),\n }\n })\n return {items}\n })\n .catch((x) =>\n console.error('Error during getting modules from the server: ', x),\n )\n}\n","import React from 'react'\nimport {\n Switch,\n Route,\n Redirect,\n BrowserRouter as Router,\n} from 'react-router-dom'\nimport {ToastProvider} from 'react-toast-notifications'\nimport {StoreProvider} from 'easy-peasy'\n\nimport './custom.css'\n\nimport Layout from 'layouts/Layout'\nimport Home from 'pages/Home'\nimport LoginPage from 'pages/Login'\nimport RegisterPage from 'pages/RegisterPage'\nimport NotFound from 'pages/NotFound'\nimport PrivateRoute from 'components/PrivateRoute'\n\nimport store from 'features/store'\n\nconst App = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default App\n","import 'bootstrap/dist/css/bootstrap.css'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\n\nconst rootElement = document.getElementById('root')\n\nReactDOM.render(, rootElement)\n"],"sourceRoot":""}