{"version":3,"sources":["components/Space.js","actions/portal/getCategories.js","actions/portal/getCourses.js","actions/portal/getCourse.js","actions/portal/getScopedCourse.js","actions/portal/getChapters.js","actions/portal/getScopedChapter.js","actions/portal/selectCategory.js","actions/portal/selectCourse.js","actions/portal/paragraphs/getParagraph.js","actions/portal/paragraphs/getScopedParagraph.js","actions/portal/paragraphs/selectParagraph.js","actions/portal/paragraphs/updateLikes.js","actions/portal/paragraphs/getPopularParagraphs.js","actions/portal/comments/getComments.js","actions/portal/comments/createComment.js","actions/portal/comments/createScopedComment.js","actions/portal/comments/getRecentComments.js","actions/portal/user.js","context/GlobalContext.js","components/Notifications.js","components/IconButton.js","components/LoadingContainer.js","containers/Public/Link.js","serviceWorker.js","containers/index.js","index.js","reducers/portal/user.js","reducers/portal/settings.js","reducers/portal/categories.js","reducers/portal/courses.js","reducers/portal/chapters.js","reducers/portal/paragraphs.js","reducers/portal/comments.js","reducers/admin/errors.js","reducers/admin/frontpageVideos.js","reducers/admin/roles.js","reducers/admin/categories.js","reducers/admin/courses.js","reducers/admin/chapters.js","reducers/admin/paragraphs.js","reducers/index.js","reducers/admin/customers.js","reducers/admin/licenses.js","reducers/admin/users.js","store.js","helpers/request.js","helpers/emailValidation.js","helpers/mediaQueries.js","helpers/minRole.js","helpers/languages/index.js","helpers/languages/danish.js","helpers/format.js","helpers/isOwner.js","helpers/keyframes.js","helpers/styles.js","helpers/fadeIn.js","helpers/theme.js","components/Typography.js","components/Loading.js","components/View.js"],"names":["Space","size","children","className","css","height","width","getCategories","dispatch","request","get","then","response","type","payload","getCourses","getCourse","courseId","data","getScopedCourse","courseFriendlyName","getChapters","course","url","FriendlyName","childCourse","Parent","url1","parentCourse","childCourseId","Id","catch","error","getScopedChapter","ChapterId","CourseId","Chapter","selectCategory","categoryId","subcategoryId","selectCourse","getParagraph","omitStats","getScopedParagraph","selectParagraph","paragraphId","updateLikes","post","getPopularParagraphs","getComments","createComment","ParagraphId","Name","Email","Text","ParentId","createScopedComment","getRecentComments","signIn","username","password","axios","method","apiDomain","headers","signInLink","LinkId","a","scoped","Error","getUserInfo","refreshToken","signOut","showMenu","hideMenu","GlobalContext","React","createContext","GlobalProvider","notifications","useRef","Fragment","Notifications","add","current","Provider","value","createError","message","isCancel","createSuccess","useGlobals","useContext","id","config","tension","friction","precision","timeout","useState","WeakMap","refMap","cancelMap","items","setItems","transitions","useTransition","item","key","from","opacity","marginTop","life","enter","next","offsetHeight","leave","cancel","set","onRest","state","filter","i","duration","useEffect","msg","Container","map","props","style","Icon","ErrorIcon","CheckIcon","color","div","boxSizing","position","overflow","borderRadius","ref","background","borderLeft","padding","fontSize","display","flexDirection","flex","alignItems","maxHeight","pointerEvents","icon","Close","onClick","e","stopPropagation","has","zIndex","top","bottom","margin","left","right","userSelect","IconButton","title","disabled","undefined","placement","LoadingContainer","justifyContent","in","transitionDelay","Link","UID","this","match","params","history","push","Type","replace","scopes","AccessScopes","length","paragraph","find","scope","Key","redirectURL","Value","Course","setState","variant","Component","connect","user","actions","isLocalhost","Boolean","window","location","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","log","onUpdate","onSuccess","Application","lazy","Public","App","token","exact","path","render","withRouter","ReactDOM","store","theme","Suspense","fallback","document","getElementById","URL","process","href","origin","addEventListener","fetch","contentType","status","indexOf","ready","unregister","reload","checkValidServiceWorker","defaultState","is_scoped","scopeId","BestRole","intialState","selectedCategoryId","selectedSubcategoryId","byId","categories","action","parentCategories","forEach","category","parent","child","Children","sort","b","Sort","selectedId","courses","Chapters","mapKeys","initialState","byCourseId","byPopularity","paragraphs","newState","parentCourseId","parentCourseParagraphs","ParentParagraph","childCourseParagraphs","childCourseParagraphsWithParent","byChapterId","byParentParagraphId","lodash","forIn","isVisible","InvisibleForCourses","c","AfterParentParagraph","paragraph1","paragraph2","item2","Likes","Liked","newComment","comments","Comments","comment","ParentCommentId","byCreatedDate","byParagraphId","byCustomerId","byName","reducers","combineReducers","userInfo","Roles","role","Active","access_token","Token","sessionStorage","clear","settings","chapters","childChapters","parentChapters","chapter1","chapter2","chapter","beforeChildChapters","ParentChapter","AfterParentChapter","afterChildChapters","adminErrors","show","Message","nextId","Object","keys","adminFrontpageVideos","createdVideo","videoId3","videoId","homeVideo","pickBy","video","VideoId","newItems","changedObject","reduce","accumulator","theHomeVideoId","homeVideoId","theResponse","InVisibleForCustomers","isInvisibleFor","omit","customerId","items1","customerId1","createdVideo1","customerId6","obj","videoId5","Name5","customerId5","newItems1","vid","customerId2","videoId2","adminCustomers","createdCustomer","updatedCustomer","customer","Customer","updatedItem","Logo","adminLicenses","licenseId","StartDate","startDate","EndDate","endDate","createdItem","Courses","meta","newCourse","License","adminUsers","x","r","UserId","userId","RoleId","createdUser","User","adminRoles","adminCategories","adminCourses","merge","newItem","adminChapters","createdChapter","updatedChapter","chapterId","newItemsFix","newChap","ParentChapter_Id","changedObject1","adminParagraphs","newPara","ParentParagraph_Id","createdParagraph","RecommendedParagraphs","Files","updatedParagraph","paragraphId5","File","file","paragraphId2","fileId2","fileId","paragraphId3","recommendedParagraph","paragraphId4","recommendedId","recommended","rootReducer","middleware","applyMiddleware","thunk","promise","enhancer","compose","persistState","createStore","cancelRequestFetch","emailValidation","email","atpos","dotpos","lastIndexOf","alert","getState","appDomain","Authorization","identity","cancelToken","CancelToken","delete","patch","put","mediaQueries","phone","tablet","desktop","minRole","requiredRole","priority","language","search","searchForParagraphsOrCourses","activity","popularParagraphs","newComments","welcomeTo","showParagraphs","hideParagraphs","previous","share","files","relatedParagraphs","subscribeMailtips","like","format","isOwner","monthNames","weekdayNames","date","newDate","Date","weekday","getDay","day","getDate","monthNumber","getMonth","month","year","getFullYear","hours","getHours","minutes","getMinutes","shortDate","substring","toLowerCase","fullDate","time","keyframes","fadeIn","emotionKeyframes","howtodo","colors","primary","secondary","tertiary","quaternary","fadeInUp","transform","animation","createMuiTheme","typography","useNextVariants","palette","light","styles","main","dark","Typography","fontWeight","Loading","thickness","View"],"mappings":"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","file":"static/js/main.0e9eb3c0.chunk.js","sourcesContent":["import React from 'react'\nimport { css } from 'emotion'\n\nexport default function Space({ size = 25, children }) {\n return
{children}
\n}\n","import { request } from 'helpers'\n\nconst getCategories = () => dispatch =>\n request\n .get(\n 'odata/Categories?$expand=Parent,Parent/Publisher,Parent/Customer&$orderby=Name&$select=*,Parent/*,Parent/Publisher/Id,Parent/Customer/Id'\n )\n .then(response =>\n dispatch({\n type: 'GET_CATEGORIES',\n payload: response\n })\n )\n\nexport default getCategories\n","import { request } from 'helpers'\n\nconst getCourses = () => dispatch =>\n request\n .get(\n `odata/Courses?$expand=Category,Parent,Icon&$orderby=Name&$filter=Type eq 'Standard'`\n )\n .then(response =>\n dispatch({\n type: 'GET_COURSES',\n payload: response\n })\n )\n\nexport default getCourses\n","import { request } from 'helpers'\n\nconst getCourse = courseId => dispatch =>\n request.get(`api/ParsedCourses/${courseId}`, 'ParsedCourses').then(response =>\n dispatch({\n type: 'GET_COURSE',\n payload: response.data\n })\n )\n\nexport default getCourse\n","import { request } from 'helpers'\n\nconst getScopedCourse = courseFriendlyName => dispatch =>\n request\n .get(`api/Courses/${courseFriendlyName}/info`, 'ScopedCourse')\n .then(response =>\n dispatch({\n type: 'GET_COURSE',\n payload: response.data\n })\n )\n\nexport default getScopedCourse\n","import { request } from 'helpers'\n\nconst getChapters = course => {\n return dispatch => {\n const url = `odata/Chapters?$filter=Course/FriendlyName eq '${\n course.FriendlyName\n }'&$expand=Course,Course/Parent,ParentChapter,InvisibleForCourses&$select=Course/Id,Course/Parent/Id,Course/Parent/FriendlyName,Id,Name,FriendlyName,Sort,AfterParentChapter,ParentChapter/Id,InvisibleForCourses/Id`\n return request\n .get(url, 'odata/Chapters')\n .then(childCourse => {\n if (course.Parent) {\n const url1 = `odata/Chapters?$filter=Course/FriendlyName eq '${\n course.Parent.FriendlyName\n }'&$expand=Course,Course/Parent,ParentChapter,InvisibleForCourses&$select=Course/Id,Course/Parent/Id,Id,Name,FriendlyName,Sort,AfterParentChapter,ParentChapter/Id,InvisibleForCourses/Id`\n return request.get(url1, 'odata/Chapters2').then(parentCourse => {\n dispatch({\n type: 'GET_CHAPTERS',\n payload: { childCourseId: course.Id, childCourse, parentCourse }\n })\n })\n } else {\n dispatch({\n type: 'GET_CHAPTERS',\n payload: { parentCourse: childCourse }\n })\n }\n })\n .catch(error => {\n dispatch({\n type: 'ERROR',\n payload: error\n })\n })\n }\n}\n\nexport default getChapters\n","import { request } from 'helpers'\n\nconst getScopedChapter = (ChapterId, CourseId) => dispatch =>\n request\n .get(`api/ParsedChapters/${ChapterId}`, 'ParsedChapters')\n .then(response =>\n dispatch({\n type: 'GET_SCOPED_CHAPTER',\n payload: { Chapter: response.data, CourseId }\n })\n )\n\nexport default getScopedChapter\n","const selectCategory = (categoryId, subcategoryId) => dispatch =>\n dispatch({\n type: 'SELECT_CATEGORY',\n payload: { categoryId, subcategoryId }\n })\n\nexport default selectCategory\n","const selectCourse = courseId => dispatch =>\n dispatch({\n type: 'SELECT_COURSE',\n payload: courseId\n })\n\nexport default selectCourse\n","import { request } from 'helpers'\n\nconst getParagraph = (courseId, FriendlyName, omitStats = false) => {\n const url = `api/Courses/${courseId}/Paragraphs/${FriendlyName}${\n omitStats ? '?omitStats=true' : ''\n }`\n\n return dispatch => {\n return request.get(url, 'Paragraphs').then(response =>\n dispatch({\n type: 'GET_PARAGRAPH',\n payload: response.data\n })\n )\n }\n}\n\nexport default getParagraph\n","import { request } from 'helpers'\n\nconst getScopedParagraph = FriendlyName => {\n const url = `api/Paragraphs/${FriendlyName}`\n\n return dispatch => {\n return request.get(url).then(response =>\n dispatch({\n type: 'GET_PARAGRAPH',\n payload: response.data\n })\n )\n }\n}\n\nexport default getScopedParagraph\n","const selectParagraph = paragraphId => {\n return {\n type: 'SELECT_PARAGRAPH',\n payload: paragraphId\n }\n}\n\nexport default selectParagraph\n","import { request } from 'helpers'\n\nconst updateLikes = paragraphId => {\n const url = `api/Paragraphs(${paragraphId})/Like`\n\n return dispatch => {\n return request\n .post(url)\n .then(response => {\n dispatch({\n type: 'UPDATE_LIKES',\n payload: response\n })\n })\n .catch(error => {\n dispatch({\n type: 'ERROR',\n payload: error\n })\n })\n }\n}\n\nexport default updateLikes\n","import { request } from 'helpers'\n\nconst getPopularParagraphs = () => {\n const url = 'api/MostLikedParagraphs'\n\n return dispatch => {\n return request\n .get(url, 'PopularParagraphs')\n .then(response => {\n dispatch({\n type: 'GET_POPULAR_PARAGRAPHS',\n payload: response\n })\n })\n .catch(error => {\n dispatch({\n type: 'ERROR',\n payload: error\n })\n })\n }\n}\n\nexport default getPopularParagraphs\n","import { request } from 'helpers'\n\nconst getComments = paragraphId => {\n const url = `odata/Comments?$filter=Paragraph/Id eq ${paragraphId} and Parent eq null&$expand=Children/Parent,Children,Paragraph,Paragraph/Course&$select=Id,Name,CreatedDate,Text,Children/Parent,Children,Paragraph/Id,Paragraph/FriendlyName,Paragraph/Name,Paragraph/Course/FriendlyName,Paragraph/Course/Name`\n\n return dispatch => {\n return request\n .get(url, 'odata/Comments')\n .then(response => {\n dispatch({\n type: 'GET_COMMENTS',\n payload: { response, paragraphId }\n })\n })\n .catch(error => {\n dispatch({\n type: 'ERROR',\n payload: error\n })\n })\n }\n}\n\nexport default getComments\n","import { request } from 'helpers'\n\nconst createComment = (ParagraphId, Name, Email, Text, ParentId = null) => {\n // const url = `odata/Comments?$expand=Parent,Children,Paragraph/Course`\n const url = `api/Paragraphs/${ParagraphId}/Comments`\n\n const data = {\n Name,\n Email,\n Text,\n ParentId,\n ParagraphId\n }\n\n return dispatch => {\n return request\n .post(url, data)\n .then(response => {\n dispatch({\n type: 'CREATE_COMMENT',\n payload: {\n response: { data },\n paragraphId: ParagraphId\n }\n })\n })\n .catch(error => {\n dispatch({\n type: 'ERROR',\n payload: error\n })\n })\n }\n}\n\nexport default createComment\n","import { request } from 'helpers'\n\nconst createScopedComment = (paragraphId, data) => {\n const url = `api/Paragraphs/${paragraphId}/Comments`\n\n return dispatch => {\n return request.post(url, data).then(response => {\n dispatch({\n type: 'CREATE_SCOPED_COMMENT',\n payload: { data, paragraphId }\n })\n })\n }\n}\n\nexport default createScopedComment\n","import { request } from 'helpers'\n\nconst getRecentComments = () => dispatch => {\n // const url = 'odata/Comments?$orderby=CreatedDate desc&$top=5&$expand=Paragraph,Paragraph/Course,Paragraph/Course/Category&$select=Id,Name,CreatedDate,Text,Paragraph/FriendlyName,Paragraph/Id,Paragraph/Name,Paragraph/Course/FriendlyName,Paragraph/Course/Name,Paragraph/Course/Category/FriendlyName'\n const url = 'api/Comments'\n\n return request\n .get(url)\n .then(response => {\n dispatch({\n type: 'GET_RECENT_COMMENTS',\n payload: response\n })\n })\n .catch(error => {\n dispatch({\n type: 'ERROR',\n payload: error\n })\n })\n}\n\nexport default getRecentComments\n","import axios from 'axios'\nimport { request } from 'helpers'\n\nconst signIn = (username, password) => (dispatch) =>\n axios({\n method: 'post',\n url: request.apiDomain() + 'token',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n data: `username=${username}&password=${password}&grant_type=password`,\n }).then((response) =>\n dispatch({\n type: 'SIGN_IN',\n payload: response,\n })\n )\n\nconst signInLink = (LinkId) => async (dispatch) => {\n try {\n const response = await request.get(`api/Links(${LinkId})`)\n dispatch({ type: 'SET_TOKEN', payload: response.data, scoped: true })\n return response\n } catch (error) {\n throw Error('Could not load link')\n }\n}\n\nconst getUserInfo = () => (dispatch) =>\n request.get('api/Account/UserInfo').then((response) => {\n dispatch({\n type: 'GET_USER_INFO',\n payload: response,\n })\n })\n\nconst refreshToken = () => (dispatch) =>\n request\n .post('api/Account/RefreshToken')\n .then((response) =>\n dispatch({\n type: 'REFRESH_TOKEN',\n payload: response,\n })\n )\n .catch((error) => {\n dispatch({\n type: 'SIGN_OUT',\n })\n })\n\nconst signOut = () => (dispatch) =>\n dispatch({\n type: 'SIGN_OUT',\n })\n\nconst showMenu = () => (dispatch) =>\n dispatch({\n type: 'SHOW_MENU',\n })\n\nconst hideMenu = () => (dispatch) =>\n dispatch({\n type: 'HIDE_MENU',\n })\n\nexport {\n signIn,\n signInLink,\n signOut,\n getUserInfo,\n refreshToken,\n showMenu,\n hideMenu,\n}\n","import React, { useRef, useContext } from 'react'\nimport Notifications from 'components/Notifications'\nimport axios from 'axios'\n\nconst GlobalContext = React.createContext()\n\nfunction GlobalProvider({ children }) {\n const notifications = useRef(null)\n\n function createError(error, message) {\n if (!axios.isCancel(error)) {\n notifications.current(message, 'error')\n } else {\n // handle aborted fetch calls\n }\n }\n\n function createSuccess(message) {\n notifications.current(message, 'success')\n }\n\n return (\n \n (notifications.current = add)} />\n \n {children}\n \n \n )\n}\n\nfunction useGlobals() {\n const context = useContext(GlobalContext)\n return context\n}\n\nexport { GlobalProvider, useGlobals }\n","import React, { useState, useEffect } from 'react'\nimport { useTransition } from 'react-spring'\nimport IconButton from 'components/IconButton'\nimport Typography from 'components/Typography'\nimport Space from 'components/Space'\nimport { css } from 'emotion'\nimport { animated } from 'react-spring'\nimport Close from '@material-ui/icons/Close'\nimport ErrorIcon from '@material-ui/icons/ErrorOutline'\nimport CheckIcon from '@material-ui/icons/CheckCircleOutline'\n\nlet id = 0\n\nexport default function Notifications({\n config = { tension: 125, friction: 20, precision: 0.1 },\n timeout = 3000,\n children\n}) {\n const [refMap] = useState(() => new WeakMap())\n const [cancelMap] = useState(() => new WeakMap())\n const [items, setItems] = useState([])\n const transitions = useTransition(items, item => item.key, {\n from: { opacity: 0, height: 0, marginTop: 0, life: '100%' },\n enter: item => async next =>\n await next({\n opacity: 1,\n height: refMap.get(item).offsetHeight,\n marginTop: 10\n }),\n leave: item => async (next, cancel) => {\n cancelMap.set(item, cancel)\n await next({ life: '0%' })\n await next({ opacity: 0 })\n await next({ height: 0, marginTop: 0 })\n },\n onRest: item => setItems(state => state.filter(i => i.key !== item.key)),\n config: (item, state) =>\n state === 'leave' ? [{ duration: timeout }, config, config] : config\n })\n\n useEffect(\n () =>\n void children((msg, type) =>\n setItems(state => [...state, { key: id++, msg, type }])\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n return (\n \n {transitions.map(({ key, item, props: { life, ...style } }) => {\n const Icon = item.type === 'error' ? ErrorIcon : CheckIcon\n const color = item.type === 'error' ? 'red' : 'green'\n return (\n \n ref && refMap.set(item, ref)}\n className={css({\n background: '#445159',\n borderLeft: `5px solid ${color}`,\n opacity: 0.9,\n boxSizing: 'border-box',\n padding: '10px 10px',\n fontSize: '1em',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n borderRadius: 3\n })}\n >\n \n \n \n \n {item.msg}\n \n \n {\n e.stopPropagation()\n cancelMap.has(item) && cancelMap.get(item)()\n }}\n />\n \n {/* */}\n \n \n )\n })}\n \n )\n}\n\nfunction Container(props) {\n return (\n \n )\n}\n","import React from 'react'\nimport TooltipComponent from '@material-ui/core/Tooltip'\nimport IconButtonComponent from '@material-ui/core/IconButton'\n\nexport default function IconButton({\n title,\n onClick,\n icon: Icon,\n style,\n size,\n color,\n disabled\n}) {\n return (\n \n
\n \n \n \n
\n
\n )\n}\n","import React from 'react'\nimport Loading from 'components/Loading'\nimport View from 'components/View'\nimport Fade from '@material-ui/core/Fade'\n\nexport default function LoadingContainer() {\n return (\n \n \n \n \n \n )\n}\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport * as actions from 'actions/portal'\nimport Typography from 'components/Typography'\nimport Loading from 'components/Loading'\nimport View from 'components/View'\nimport { request } from 'helpers'\nimport Fade from '@material-ui/core/Fade'\n\nclass Link extends Component {\n state = { error: false }\n\n componentDidMount() {\n const { UID } = this.props.match.params\n if (UID !== 'redirect') {\n this.signInLink(UID)\n }\n }\n\n async signInLink(UID) {\n try {\n this.props.history.push('/link/redirect')\n const response = await this.props.signInLink(UID)\n if (response.data.Type === 'LinkTicket') {\n this.props.history.replace(`/afsnit/${UID}`)\n } else {\n const scopes = response.data.AccessScopes || {}\n if (scopes.length === 1) {\n this.props.history.replace(`/afsnittet/${response.data.ParagraphId}`)\n } else if (scopes.length > 1) {\n const paragraphId = response.data.ParagraphId\n const data = await request.get(\n `api/Paragraphs/${paragraphId}?omitStats=true`\n )\n const paragraph = data.data\n const course = scopes.find((scope) => scope.Key === 'CourseId')\n const redirectURL = `/kurser/${\n course ? course.Value : paragraph.Course.FriendlyName\n }/${paragraph.FriendlyName}/noAutoplay`\n this.props.history.replace(redirectURL)\n } else {\n this.props.history.replace('/')\n }\n }\n } catch (error) {\n this.setState({ error: true })\n }\n }\n\n render() {\n return (\n \n {this.state.error ? (\n \n Linket du har klikket på er desværre nedlagt – kontakt din\n IT-afdeling for et korrekt link\n \n ) : (\n \n \n \n )}\n \n )\n }\n}\n\nconst mapStateToProps = ({ user }) => ({ user })\nexport default connect(mapStateToProps, actions)(Link)\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister()\n })\n .catch(error => {\n console.error(error.message)\n })\n }\n}\n","import React, { Component } from 'react'\nimport { withRouter, Switch, Route } from 'react-router-dom'\nimport { connect } from 'react-redux'\nimport Link from './Public/Link'\n\nconst Application = React.lazy(() =>\n import(/* webpackChunkName: \"Application\" */ './Application')\n)\nconst Public = React.lazy(() =>\n import(/* webpackChunkName: \"Public\" */ './Public')\n)\n\nclass App extends Component {\n render() {\n if (this.props.user.token) {\n return \n }\n return (\n \n } />\n } />\n \n )\n }\n}\n\nconst mapStateToProps = ({ user }) => ({ user })\nexport default withRouter(connect(mapStateToProps)(App))\n","import 'react-app-polyfill/ie11'\nimport 'core-js/fn/array/fill'\nimport 'core-js/fn/array/find'\nimport 'core-js/fn/object/keys'\nimport './index.css'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Provider } from 'react-redux'\nimport { MuiThemeProvider as Theme } from '@material-ui/core/styles'\nimport { GlobalProvider } from 'context'\nimport { theme } from 'helpers'\nimport store from './store'\nimport * as serviceWorker from './serviceWorker'\nimport LoadingContainer from './components/LoadingContainer'\nimport App from './containers'\n\nReactDOM.render(\n \n \n \n \n }>\n \n \n \n \n \n ,\n document.getElementById('root')\n)\n\nserviceWorker.register()\n","const defaultState = {\n is_scoped: false,\n token: undefined,\n scope: undefined,\n scopeId: undefined,\n BestRole: undefined\n}\n\nexport default function user(state = defaultState, action) {\n switch (action.type) {\n case 'GET_USER_INFO': {\n let userInfo = action.payload.data\n let Roles = action.payload.data.Roles\n let BestRole\n\n if (Roles.filter(role => role.Name === 'SystemAdministrator')[0].Active) {\n BestRole = 'SystemAdministrator'\n } else if (Roles.filter(role => role.Name === 'Publisher')[0].Active) {\n BestRole = 'Publisher'\n } else if (Roles.filter(role => role.Name === 'Organisation')[0].Active) {\n BestRole = 'Organisation'\n } else if (Roles.filter(role => role.Name === 'Plus')[0].Active) {\n BestRole = 'Plusbruger'\n }\n\n return {\n ...state,\n ...userInfo,\n BestRole\n }\n }\n case 'SIGN_IN':\n const userInfo = action.payload.data\n\n return {\n ...state,\n ...userInfo,\n token: userInfo.access_token\n }\n case 'REFRESH_TOKEN':\n return {\n ...state,\n token: action.payload.data.access_token\n }\n case 'SET_TOKEN':\n const user = action.payload\n const token = user.Token\n let scope = undefined\n let scopeId = undefined\n\n if (user.AccessScopes[0]) {\n scope = user.AccessScopes[0].Key\n scopeId = user.AccessScopes[0].Value\n }\n\n return {\n ...state,\n token,\n scope,\n scopeId,\n is_scoped: action.payload.scoped\n }\n case 'SIGN_OUT':\n sessionStorage.clear()\n return {}\n default:\n return state\n }\n}\n","const intialState = {\n showMenu: false\n}\n\nexport default function settings(state = intialState, action) {\n switch (action.type) {\n case 'SHOW_MENU':\n return { showMenu: true }\n case 'HIDE_MENU':\n return { showMenu: false }\n default:\n return state\n }\n}\n","const defaultState = {\n selectedCategoryId: 0,\n selectedSubcategoryId: 0,\n items: {\n byId: {}\n }\n}\n\nconst categories = (state = defaultState, action) => {\n switch (action.type) {\n case 'SELECT_CATEGORY':\n const { categoryId, subcategoryId } = action.payload\n\n return {\n selectedCategoryId: categoryId,\n selectedSubcategoryId: subcategoryId,\n items: {\n ...state.items\n }\n }\n case 'GET_CATEGORIES':\n let items = action.payload.data.value\n let parentCategories = {}\n\n items.forEach(category => {\n let parent = undefined\n let child = undefined\n\n if (category.Parent) {\n parent = category.Parent\n child = category\n } else {\n parent = category\n }\n\n let Children = child\n ? [\n ...(parentCategories[parent.Id]\n ? parentCategories[parent.Id].Children\n : []),\n child\n ]\n : [\n ...(parentCategories[parent.Id]\n ? parentCategories[parent.Id].Children\n : [])\n ]\n\n Children.sort((a, b) => a.Sort - b.Sort)\n\n parentCategories = {\n ...parentCategories,\n [parent.Id]: {\n ...(parentCategories[parent.Id] ? parentCategories[parent.Id] : {}),\n ...(parent ? parent : {}),\n Children\n }\n }\n })\n\n return {\n ...state,\n items: {\n byId: parentCategories\n }\n }\n default:\n return state\n }\n}\n\nexport default categories\n","import { mapKeys } from 'lodash'\n\nconst defaultState = {\n selectedId: 0,\n byId: {}\n}\n\nconst courses = (state = defaultState, action) => {\n switch (action.type) {\n case 'SELECT_COURSE': {\n const selectedId = action.payload\n\n return {\n ...state,\n selectedId\n }\n }\n case 'GET_COURSE': {\n const course = action.payload\n let selectedId = state.selectedId\n\n if (course.Id) {\n selectedId = course.Id\n }\n\n return {\n ...state,\n selectedId: selectedId,\n byId: {\n ...state.byId,\n [selectedId]: {\n ...state.byId[selectedId],\n ...course\n }\n }\n }\n }\n case 'GET_SCOPED_CHAPTER': {\n const { Chapter, CourseId } = action.payload\n\n return {\n ...state,\n byId: {\n ...state.byId,\n [CourseId]: {\n ...state.byId[CourseId],\n Chapters: [Chapter]\n }\n }\n }\n }\n case 'GET_COURSES': {\n const items = action.payload.data.value\n\n return {\n ...state,\n byId: mapKeys(items, 'Id')\n }\n }\n default: {\n return state\n }\n }\n}\n\nexport default courses\n","const initialState = {\n items: {\n byCourseId: {}\n }\n}\n\nexport default function chapters(state = initialState, action) {\n switch (action.type) {\n case 'GET_CHAPTERS':\n let chapters = []\n let childChapters = []\n let courseId = action.payload.parentCourse.data.value[0].Course.Id\n let parentChapters = action.payload.parentCourse.data.value.sort(\n (chapter1, chapter2) => chapter1.Sort - chapter2.Sort\n )\n\n if (action.payload.childCourse) {\n courseId = action.payload.childCourseId\n childChapters = action.payload.childCourse.data.value\n\n parentChapters.forEach(chapter => {\n let beforeChildChapters = childChapters\n .filter(\n child =>\n child.ParentChapter.Id === chapter.Id &&\n !child.AfterParentChapter\n )\n .sort((chapter1, chapter2) => chapter1.Sort - chapter2.Sort)\n let isVisible =\n chapter.InvisibleForCourses.filter(c => c.Id === courseId)[0] ===\n undefined\n\n let afterChildChapters = childChapters\n .filter(\n child =>\n child.ParentChapter.Id === chapter.Id &&\n child.AfterParentChapter\n )\n .sort((chapter1, chapter2) => chapter1.Sort - chapter2.Sort)\n\n chapters = [\n ...chapters,\n ...beforeChildChapters,\n ...(isVisible ? [chapter] : []),\n ...afterChildChapters\n ]\n })\n } else {\n chapters = parentChapters\n }\n\n return {\n items: {\n byCourseId: {\n ...state.items.byCourseId,\n [courseId]: chapters\n }\n }\n }\n default:\n return state\n }\n}\n","import lodash, { mapKeys } from 'lodash'\n\nconst defaultState = {\n selectedId: 0,\n items: {\n byCourseId: {},\n byId: {},\n byPopularity: {}\n }\n}\n\nconst paragraphs = (state = defaultState, action) => {\n switch (action.type) {\n case 'GET_PARAGRAPH':\n let item = action.payload\n\n return {\n selectedId: item.Id,\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [item.Id]: {\n ...state.items.byId[item.Id],\n ...item\n }\n }\n }\n }\n case 'GET_PARAGRAPHS':\n let newState\n\n let parentCourseId = action.payload.parentCourse.data.value[0].Course.Id\n let parentCourseParagraphs = action.payload.parentCourse.data.value\n .filter(paragraph => paragraph.ParentParagraph === undefined)\n .sort((a, b) => a.Sort - b.Sort)\n\n if (!action.payload.childCourse) {\n let byChapterId = {}\n\n lodash.forIn(parentCourseParagraphs, paragraph => {\n byChapterId = {\n ...byChapterId,\n [paragraph.Chapter.Id]: [\n ...(byChapterId[paragraph.Chapter.Id]\n ? byChapterId[paragraph.Chapter.Id]\n : []),\n paragraph\n ]\n }\n })\n\n newState = {\n selectedId: state.selectedId,\n items: {\n ...state.items,\n byCourseId: {\n ...state.items.byCourseId,\n [parentCourseId]: {\n byChapterId: byChapterId\n }\n }\n }\n }\n } else if (action.payload.childCourse) {\n let childCourseId = action.payload.childCourseId\n let childCourseParagraphs = action.payload.childCourse.data.value\n let childCourseParagraphsWithParent = action.payload.parentCourse.data.value.filter(\n paragraph => paragraph.ParentParagraph !== undefined\n )\n\n let byChapterId = {}\n let byParentParagraphId = {}\n\n lodash.forIn(childCourseParagraphsWithParent, paragraph => {\n byParentParagraphId = {\n ...byParentParagraphId,\n [paragraph.ParentParagraph.Id]: [\n ...(byParentParagraphId[paragraph.ParentParagraph.Id]\n ? byParentParagraphId[paragraph.ParentParagraph.Id]\n : []),\n paragraph\n ]\n }\n })\n\n lodash.forIn(parentCourseParagraphs, paragraph => {\n const isVisible =\n paragraph.InvisibleForCourses.filter(\n c => c.Id === childCourseId\n )[0] !== undefined\n\n byChapterId = {\n ...byChapterId,\n [paragraph.Chapter.Id]: [\n ...(byChapterId[paragraph.Chapter.Id]\n ? byChapterId[paragraph.Chapter.Id]\n : []),\n //ChildParagraph BeforeParent\n ...(byParentParagraphId[paragraph.Id]\n ? byParentParagraphId[paragraph.Id]\n .filter(child => !child.AfterParentParagraph)\n .sort(\n (paragraph1, paragraph2) =>\n paragraph1.Sort - paragraph2.Sort\n )\n : []),\n //ParentParagraph\n ...(isVisible ? [] : [paragraph]),\n //ChildParagraph AfterParent\n ...(byParentParagraphId[paragraph.Id]\n ? byParentParagraphId[paragraph.Id]\n .filter(child => child.AfterParentParagraph)\n .sort(\n (paragraph1, paragraph2) =>\n paragraph1.Sort - paragraph2.Sort\n )\n : [])\n ]\n }\n })\n\n lodash.forIn(childCourseParagraphs, paragraph => {\n byChapterId = {\n ...byChapterId,\n [paragraph.Chapter.Id]: [\n ...(byChapterId[paragraph.Chapter.Id]\n ? byChapterId[paragraph.Chapter.Id]\n : []),\n paragraph\n ]\n }\n })\n\n newState = {\n selectedId: state.selectedId,\n items: {\n ...state.items,\n byCourseId: {\n ...state.items.byCourseId,\n [childCourseId]: {\n byChapterId: byChapterId\n }\n }\n }\n }\n }\n\n return newState\n case 'GET_POPULAR_PARAGRAPHS':\n let items = action.payload.data\n\n return {\n selectedId: state.selectedId,\n items: {\n ...state.items,\n byPopularity: mapKeys(items, 'Id')\n }\n }\n case 'UPDATE_LIKES':\n let item2 = action.payload.data\n\n return {\n selectedId: state.selectedId,\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [item2.Id]: {\n ...state.items.byId[item2.Id],\n Likes: item2.Likes,\n Liked: true\n }\n }\n }\n }\n case 'CREATE_COMMENT': {\n let newComment = action.payload.response.data\n delete newComment['odata.metadata']\n let paragraphId = action.payload.paragraphId\n let comments\n\n if (newComment.Parent) {\n comments = state.items.byId[paragraphId].Comments.map(comment => {\n if (comment.Id === newComment.Parent.Id) {\n return {\n ...comment,\n Children: [\n ...(comment.Children ? comment.Children : []),\n newComment\n ]\n }\n } else {\n return comment\n }\n })\n } else {\n comments = [...state.items.byId[paragraphId].Comments, newComment]\n }\n\n return {\n ...state,\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [paragraphId]: {\n ...state.items.byId[paragraphId],\n Comments: comments\n }\n }\n }\n }\n }\n case 'CREATE_SCOPED_COMMENT': {\n const { data, paragraphId } = action.payload\n const ParentCommentId = data.ParentCommentId\n\n let comments\n\n if (ParentCommentId) {\n comments = state.items.byId[paragraphId].Comments.map(comment => {\n if (comment.Id === ParentCommentId) {\n return {\n ...comment,\n Children: [...(comment.Children ? comment.Children : []), data]\n }\n } else {\n return comment\n }\n })\n } else {\n comments = [...state.items.byId[paragraphId].Comments, data]\n }\n\n return {\n ...state,\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [paragraphId]: {\n ...state.items.byId[paragraphId],\n Comments: comments\n }\n }\n }\n }\n }\n default:\n return state\n }\n}\n\nexport default paragraphs\n","// import lodash from 'lodash'\n\nconst defaultState = {\n items: {\n byCreatedDate: [],\n byParagraphId: {}\n }\n}\n\nconst comments = (state = defaultState, action) => {\n switch (action.type) {\n // case 'GET_COMMENTS':\n // let items = action.payload.response.data.value\n //\n // if (items.length === 0) {\n // items = undefined\n // } else {\n // items = lodash.mapKeys(items, 'Id')\n // }\n //\n // return {\n // items: {\n // byCreatedDate: state.items.byCreatedDate,\n // byParagraphId: {\n // ...state.items.byParagraphId,\n // [action.payload.paragraphId]: items\n // }\n // }\n // }\n case 'GET_RECENT_COMMENTS':\n return {\n items: {\n byCreatedDate: action.payload.data,\n byParagraphId: state.items.byParagraphId\n }\n }\n case 'CREATE_COMMENT': {\n let comment = action.payload.response.data\n delete comment['odata.metadata']\n let paragraphId = action.payload.paragraphId\n let comments\n\n if (comment.Parent) {\n comments = {\n ...state.items.byParagraphId[paragraphId],\n [comment.Parent.Id]: {\n ...state.items.byParagraphId[paragraphId][comment.Parent.Id],\n Children: [\n ...state.items.byParagraphId[paragraphId][comment.Parent.Id]\n .Children,\n comment\n ]\n }\n }\n } else {\n comments = {\n ...state.items.byParagraphId[paragraphId],\n [comment.Id]: comment\n }\n }\n\n return {\n items: {\n byCreatedDate: state.items.byCreatedDate,\n byParagraphId: {\n ...state.items.byParagraphId,\n [paragraphId]: comments\n }\n }\n }\n }\n case 'CREATE_SCOPED_COMMENT': {\n const { data, paragraphId } = action.payload\n const ParentCommentId = data.ParentCommentId\n\n let comments\n\n if (ParentCommentId) {\n comments = {\n ...state.items.byParagraphId[paragraphId],\n [ParentCommentId]: {\n ...state.items.byParagraphId[paragraphId][ParentCommentId],\n Children: [\n ...state.items.byParagraphId[paragraphId][ParentCommentId]\n .Children,\n data\n ]\n }\n }\n } else {\n comments = {\n ...state.items.byParagraphId[paragraphId],\n [data.Id]: data\n }\n }\n\n return {\n items: {\n byCreatedDate: state.items.byCreatedDate,\n byParagraphId: {\n ...state.items.byParagraphId,\n [paragraphId]: comments\n }\n }\n }\n }\n default:\n return state\n }\n}\n\n// let comments = state\n// if (createdComment.Parent) {\n// comments = state.map(comment => {\n// if (comment.Id === createdComment.Parent.Id) {\n// return {\n// ...comment,\n// Children: [...comment.Children, createdComment]\n// }\n// }\n// return comment\n// })\n// } else {\n// comments = [...state, createdComment]\n// }\n\nexport default comments\n","const defaultState = {\n items: {\n byId: {},\n },\n}\n\nexport default function users(state = defaultState, action) {\n switch (action.type) {\n case 'ADMIN_CLOSE_ERROR':\n return {\n items: {\n byId: {\n ...state.items.byId,\n [action.payload]: {\n ...state.items.byId[action.payload],\n show: false,\n },\n },\n },\n }\n case 'ADMIN_ERROR':\n if (\n action.payload &&\n action.payload.response &&\n action.payload.response.data &&\n action.payload.response.data.Message\n ) {\n const nextId = Object.keys(state.items.byId).length + 1\n const message = action.payload.response.data.Message\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [nextId]: {\n Id: nextId,\n message,\n show: true,\n },\n },\n },\n }\n }\n return state\n default:\n return state\n }\n}\n","import lodash from 'lodash'\n\nconst intialState = {\n items: {\n byId: {},\n byCustomerId: {}\n }\n}\n\nexport default function paragraphs(state = intialState, action) {\n switch (action.type) {\n case 'ADMIN_GET_FRONTPAGE_VIDEOS_PUBLISHER':\n const items = action.payload.data\n\n return {\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n ...lodash.mapKeys(items, 'Id')\n }\n }\n }\n case 'ADMIN_CREATE_FRONTPAGE_VIDEO_PUBLISHER':\n const createdVideo = {\n ...action.payload.data\n }\n\n return {\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [createdVideo.Id]: createdVideo\n }\n }\n }\n case 'ADMIN_UPDATE_FRONTPAGE_VIDEO_PUBLISHER':\n const videoId3 = action.payload.videoId\n const Name = action.payload.Name\n let homeVideo = lodash.pickBy(\n state.items.byId,\n video => video.VideoId === videoId3\n )\n homeVideo = homeVideo[Object.keys(homeVideo)[0]]\n\n return {\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [homeVideo.Id]: {\n ...state.items.byId[homeVideo.Id],\n Name\n }\n }\n }\n }\n case 'ADMIN_SORT_FRONTPAGE_VIDEOS_PUBLISHER':\n const newItems = lodash.mapKeys(action.payload.data, 'Id')\n\n const changedObject = Object.keys(state.items.byId).reduce(\n (accumulator, key) => {\n accumulator[key] = { ...state.items.byId[key], ...newItems[key] }\n return accumulator\n },\n {}\n )\n\n return {\n items: {\n ...state.items,\n byId: changedObject\n }\n }\n case 'ADMIN_TOGGLE_FRONTPAGE_VIDEOS_INVISIBILITY':\n const theHomeVideoId = action.payload.homeVideoId\n const theResponse = action.payload.response.data\n\n return {\n items: {\n ...state.items,\n byId: {\n ...state.items.byId,\n [theHomeVideoId]: {\n ...state.items.byId[theHomeVideoId],\n InVisibleForCustomers: theResponse.isInvisibleFor\n }\n }\n }\n }\n case 'ADMIN_DELETE_FRONTPAGE_VIDEO_PUBLISHER':\n return {\n items: {\n ...state.items,\n byId: lodash.omit(state.items.byId, action.Id)\n }\n }\n case 'ADMIN_GET_FRONTPAGE_VIDEOS_CUSTOMER':\n const customerId = action.payload.customerId\n const items1 = action.payload.response.data\n\n return {\n items: {\n ...state.items,\n byCustomerId: {\n ...state.items.byCustomerId,\n [customerId]: items1\n }\n }\n }\n case 'ADMIN_CREATE_FRONTPAGE_VIDEO_CUSTOMER':\n const customerId1 = action.payload.customerId\n const createdVideo1 = {\n ...action.payload.response.data\n }\n\n return {\n items: {\n ...state.items,\n byCustomerId: {\n ...state.items.byCustomerId,\n [customerId1]: [\n ...state.items.byCustomerId[customerId1],\n createdVideo1\n ]\n }\n }\n }\n case 'ADMIN_UPDATE_FRONTPAGE_VIDEO_CUSTOMER':\n const customerId6 = action.payload.obj.customerId\n const videoId5 = action.payload.obj.VideoId\n const Name5 = action.payload.Name\n\n return {\n items: {\n ...state.items,\n byCustomerId: {\n ...state.items.byCustomerId,\n [customerId6]: state.items.byCustomerId[customerId6].map(\n homeVideo => {\n if (homeVideo.VideoId === videoId5) {\n return { ...homeVideo, Name: Name5 }\n } else {\n return homeVideo\n }\n }\n )\n }\n }\n }\n case 'ADMIN_SORT_FRONTPAGE_VIDEOS_CUSTOMER':\n const customerId5 = action.payload.customerId\n const newItems1 = action.payload.response.data\n\n const newState = {\n items: {\n ...state.items,\n byCustomerId: {\n ...state.items.byCustomerId,\n [customerId5]: state.items.byCustomerId[customerId5].map(video => {\n return {\n ...video,\n ...newItems1.filter(vid => vid.Id === video.Id)[0]\n }\n })\n }\n }\n }\n\n return newState\n case 'ADMIN_DELETE_FRONTPAGE_VIDEO_CUSTOMER':\n const customerId2 = action.payload.customerId\n const videoId2 = action.payload.videoId\n\n return {\n items: {\n ...state.items,\n byCustomerId: {\n ...state.items.byCustomerId,\n [customerId2]: state.items.byCustomerId[customerId2].filter(\n video => video.Id !== videoId2\n )\n }\n }\n }\n default:\n return state\n }\n}\n","import { mapKeys } from 'lodash'\n\nconst defaultState = {\n items: {\n byName: {},\n byId: {}\n }\n}\n\nexport default function users(state = defaultState, action) {\n switch (action.type) {\n case 'ADMIN_GET_ROLES':\n let items = action.payload.data\n return {\n items: {\n byName: mapKeys(items, 'Name'),\n byId: mapKeys(items, 'Id')\n }\n }\n default:\n return state\n }\n}\n","import lodash from 'lodash'\n\nconst initialState = {\n selectedId: 0,\n items: {\n byId: {}\n }\n}\n\nexport default function categories(state = initialState, action) {\n switch (action.type) {\n case 'ADMIN_GET_CATEGORIES':\n const items = action.payload.data.value\n\n return {\n selectedId: state.selectedId,\n items: {\n byId: lodash.mapKeys(items, 'Id')\n }\n }\n case 'ADMIN_DELETE_CATEGORY':\n return {\n selectedId: state.selectedId,\n items: {\n byId: lodash.omit(state.items.byId, action.Id)\n }\n }\n default:\n return state\n }\n}\n","import lodash from 'lodash'\n\nconst initialState = {\n selectedId: 0,\n items: {\n byId: {}\n }\n}\n\nexport default function courses(state = initialState, action) {\n switch (action.type) {\n case 'ADMIN_GET_COURSES':\n const items = action.payload.data.value\n\n return {\n selectedId: state.selectedId,\n items: {\n byId: lodash.mapKeys(items, 'Id')\n }\n }\n case 'ADMIN_GET_COURSE':\n const item = action.payload.data\n\n return {\n selectedId: item.Id,\n items: {\n byId: {\n ...state.items.byId,\n [item.Id]: item\n }\n }\n }\n case 'ADMIN_UPDATE_COURSE':\n const newCourse = action.payload\n return {\n selectedId: state.selectedId,\n items: {\n byId: {\n ...state.items.byId,\n [newCourse.Id]: lodash.merge(\n state.items.byId[newCourse.Id],\n newCourse\n )\n }\n }\n }\n case 'ADMIN_UPDATE_COURSE_INTRO':\n const newItem = action.meta\n\n return {\n selectedId: newItem.Id,\n items: {\n byId: {\n ...state.items.byId,\n [newItem.Id]: newItem\n }\n }\n }\n case 'ADMIN_UPDATE_ICON':\n const Icon = action.payload.response.data\n const courseId = action.payload.courseId\n\n return {\n selectedId: state.selectedId,\n items: {\n byId: {\n ...state.items.byId,\n [courseId]: {\n ...state.items.byId[courseId],\n Icon\n }\n }\n }\n }\n default:\n return state\n }\n}\n","import lodash from 'lodash'\n\nconst initialState = {\n items: {\n byId: {}\n }\n}\n\nexport default function chapters(state = initialState, action) {\n switch (action.type) {\n case 'ADMIN_GET_CHAPTERS':\n let items = action.payload.data.value\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n ...lodash.mapKeys(items, 'Id')\n }\n }\n }\n case 'ADMIN_CREATE_CHAPTER':\n let createdChapter = action.payload.data\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [createdChapter.Id]: createdChapter\n }\n }\n }\n case 'ADMIN_UPDATE_CHAPTER':\n let updatedChapter = action.payload.data\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [updatedChapter.Id]: {\n ...state.items.byId[updatedChapter.Id],\n Name: updatedChapter.Name\n }\n }\n }\n }\n\n case 'ADMIN_UPDATE_CHAPTER_VISIBILITY':\n let InvisibleForCourses = action.payload.response.data\n let chapterId = action.payload.chapterId\n let newState = {\n items: {\n byId: {\n ...state.items.byId,\n [chapterId]: {\n ...state.items.byId[chapterId],\n InvisibleForCourses\n }\n }\n }\n }\n return newState\n\n case 'ADMIN_DELETE_CHAPTER':\n return {\n items: {\n byId: lodash.omit(state.items.byId, action.Id)\n }\n }\n case 'ADMIN_SORT_CHAPTERS':\n const newItems = lodash.mapKeys(action.payload.data, 'Id')\n\n const changedObject = Object.keys(state.items.byId).reduce(\n (accumulator, key) => {\n accumulator[key] = { ...state.items.byId[key], ...newItems[key] }\n return accumulator\n },\n {}\n )\n\n return {\n items: {\n byId: changedObject\n }\n }\n case 'ADMIN_SORT_CHILD_CHAPTERS':\n const newItemsFix = action.payload.data.map(item => {\n const newChap = {\n ...item,\n ParentChapter: { Id: item.ParentChapter_Id }\n }\n delete newChap['item.ParentChapter_Id']\n return newChap\n })\n const newItems1 = lodash.mapKeys(newItemsFix, 'Id')\n\n const changedObject1 = Object.keys(state.items.byId).reduce(\n (accumulator, key) => {\n accumulator[key] = { ...state.items.byId[key], ...newItems1[key] }\n return accumulator\n },\n {}\n )\n\n return {\n items: {\n byId: changedObject1\n }\n }\n default:\n return state\n }\n}\n","import lodash from 'lodash'\n\nconst intialState = {\n items: {\n byId: {}\n }\n}\n\nexport default function paragraphs(state = intialState, action) {\n switch (action.type) {\n case 'ADMIN_SORT_PARAGRAPHS':\n const newItems = lodash.mapKeys(action.payload.data, 'Id')\n\n const changedObject = Object.keys(state.items.byId).reduce(\n (accumulator, key) => {\n accumulator[key] = { ...state.items.byId[key], ...newItems[key] }\n return accumulator\n },\n {}\n )\n\n return {\n items: {\n byId: changedObject\n }\n }\n case 'ADMIN_SORT_CHILD_PARAGRAPHS':\n const newItemsFix = action.payload.data.map(paragraph => {\n const newPara = {\n ...paragraph,\n ParentParagraph: { Id: paragraph.ParentParagraph_Id }\n }\n delete newPara['ParentParagraph_Id']\n return newPara\n })\n const newItems1 = lodash.mapKeys(newItemsFix, 'Id')\n\n const changedObject1 = Object.keys(state.items.byId).reduce(\n (accumulator, key) => {\n accumulator[key] = { ...state.items.byId[key], ...newItems1[key] }\n return accumulator\n },\n {}\n )\n\n return {\n items: {\n byId: changedObject1\n }\n }\n case 'ADMIN_GET_PARAGRAPHS':\n const items = action.payload.data.value\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n ...lodash.mapKeys(items, 'Id')\n }\n }\n }\n case 'ADMIN_CREATE_PARAGRAPH':\n const createdParagraph = {\n ...action.payload.data,\n RecommendedParagraphs: [],\n Files: []\n }\n delete createdParagraph['odata.metadata']\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [createdParagraph.Id]: createdParagraph\n }\n }\n }\n case 'ADMIN_UPDATE_PARAGRAPH':\n const updatedParagraph = action.payload.data\n delete updatedParagraph['odata.metadata']\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [updatedParagraph.Id]: {\n ...state.items.byId[updatedParagraph.Id],\n Name: updatedParagraph.Name\n }\n }\n }\n }\n case 'ADMIN_UPDATE_PARAGRAPH_VISIBILITY':\n let InvisibleForCourses = action.payload.response.data\n let paragraphId5 = action.payload.paragraphId\n let newState = {\n items: {\n byId: {\n ...state.items.byId,\n [paragraphId5]: {\n ...state.items.byId[paragraphId5],\n InvisibleForCourses\n }\n }\n }\n }\n return newState\n case 'ADMIN_DELETE_PARAGRAPH':\n return {\n items: {\n byId: lodash.omit(state.items.byId, action.Id)\n }\n }\n case 'ADMIN_CREATE_FILE':\n let paragraphId = action.payload.paragraphId\n let File = action.payload.file\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [paragraphId]: {\n ...state.items.byId[paragraphId],\n Files: [...state.items.byId[paragraphId].Files, File]\n }\n }\n }\n }\n case 'ADMIN_DELETE_FILE':\n const paragraphId2 = action.payload.paragraphId\n const fileId2 = action.payload.fileId\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [paragraphId2]: {\n ...state.items.byId[paragraphId2],\n Files: state.items.byId[paragraphId2].Files.filter(\n file => file.Id !== fileId2\n )\n }\n }\n }\n }\n case 'ADMIN_CREATE_RECOMMENDED':\n const paragraphId3 = action.payload.paragraphId\n const recommendedParagraph = action.payload.recommendedParagraph\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [paragraphId3]: {\n ...state.items.byId[paragraphId3],\n RecommendedParagraphs: [\n ...state.items.byId[paragraphId3].RecommendedParagraphs,\n recommendedParagraph\n ]\n }\n }\n }\n }\n case 'ADMIN_DELETE_RECOMMENDED':\n const paragraphId4 = action.payload.paragraphId\n const recommendedId = action.payload.recommendedId\n\n return {\n items: {\n byId: {\n ...state.items.byId,\n [paragraphId4]: {\n ...state.items.byId[paragraphId4],\n RecommendedParagraphs: state.items.byId[\n paragraphId4\n ].RecommendedParagraphs.filter(\n recommended => recommended.Id !== recommendedId\n )\n }\n }\n }\n }\n default:\n return state\n }\n}\n","import { combineReducers } from 'redux'\n\nimport user from './portal/user'\nimport settings from './portal/settings'\nimport categories from './portal/categories'\nimport courses from './portal/courses'\nimport chapters from './portal/chapters'\nimport paragraphs from './portal/paragraphs'\nimport comments from './portal/comments'\n\nimport adminErrors from './admin/errors'\nimport adminFrontpageVideos from './admin/frontpageVideos'\nimport adminCustomers from './admin/customers'\nimport adminLicenses from './admin/licenses'\nimport adminUsers from './admin/users'\nimport adminRoles from './admin/roles'\nimport adminCategories from './admin/categories'\nimport adminCourses from './admin/courses'\nimport adminChapters from './admin/chapters'\nimport adminParagraphs from './admin/paragraphs'\n\nconst reducers = combineReducers({\n user,\n settings,\n categories,\n courses,\n chapters,\n paragraphs,\n comments,\n\n //admin\n adminErrors,\n adminFrontpageVideos,\n adminCustomers,\n adminLicenses,\n adminUsers,\n adminRoles,\n adminCategories,\n adminCourses,\n adminChapters,\n adminParagraphs\n})\n\nconst rootReducer = (state, action) => {\n if (action.type === 'SIGN_OUT') {\n state = undefined\n }\n\n return reducers(state, action)\n}\n\nexport default rootReducer\n","export default function customers(state = [], action) {\n switch (action.type) {\n case 'ADMIN_GET_CUSTOMERS':\n return [...action.payload.data.value]\n case 'ADMIN_CREATE_CUSTOMER':\n const createdCustomer = action.payload.data\n return [...state, createdCustomer]\n case 'ADMIN_GET_CUSTOMER':\n const updatedCustomer = action.payload.data\n\n if (!state.find(customer => customer.Id === updatedCustomer.Id)) {\n return [...state, updatedCustomer]\n }\n return state.map(Customer => {\n if (Customer.Id === updatedCustomer.Id) {\n return updatedCustomer\n }\n return Customer\n })\n case 'ADMIN_UPDATE_CUSTOMER':\n const updatedItem = action.payload.data\n return state.map(item => {\n if (item.Id === updatedItem.Id) {\n return updatedItem\n }\n return item\n })\n case 'ADMIN_UPDATE_LOGO':\n const Logo = action.payload.response.data\n return state.map(customer => {\n if (customer.Id === action.payload.customerId) {\n return { ...customer, Logo }\n }\n return customer\n })\n default:\n return state\n }\n}\n","export default function users(state = [], action) {\n switch (action.type) {\n case 'ADMIN_UPDATE_LICENSE':\n return state.map(item => {\n if (item.Id === action.payload.licenseId) {\n return {\n ...item,\n StartDate: action.payload.startDate,\n EndDate: action.payload.endDate\n }\n }\n return item\n })\n\n case 'ADMIN_GET_LICENSES':\n return [...action.payload.data.value]\n case 'ADMIN_CREATE_LICENSE':\n const createdItem = {\n ...action.payload.data,\n Courses: [],\n Customer: { Id: action.meta }\n }\n\n return [...state, createdItem]\n case 'ADMIN_CREATE_LICENSE_COURSE':\n const newCourse = action.course\n const newState = state.map(License => {\n if (License.Id === action.licenseId) {\n return { ...License, Courses: [...License.Courses, newCourse] }\n }\n return License\n })\n\n return newState\n case 'ADMIN_DELETE_LICENSE':\n return state.filter(item => item.Id !== action.Id)\n case 'ADMIN_DELETE_LICENSE_COURSE':\n return state.map(License => {\n if (License.Id === action.licenseId) {\n return {\n ...License,\n Courses: License.Courses.filter(item => item.Id !== action.courseId)\n }\n }\n return License\n })\n default:\n return state\n }\n}\n","export default function users(state = [], action) {\n switch (action.type) {\n case 'ADMIN_UPDATE_USER':\n let Roles = action.payload.response.data\n .filter(x => x.Active)\n .map(r => {\n return { UserId: userId, RoleId: r.Id }\n })\n let userId = action.payload.userId\n\n return state.map(user => {\n if (user.Id === userId) {\n return { ...user, Roles }\n }\n return user\n })\n case 'ADMIN_GET_USERS':\n return [...action.payload.data.value]\n case 'ADMIN_CREATE_USER':\n const createdUser = action.payload.data\n return [...state, { ...createdUser, Customer: { Id: action.meta } }]\n case 'ADMIN_DELETE_USER':\n return state.filter(User => User.Id !== action.Id)\n default:\n return state\n }\n}\n","import { compose, applyMiddleware, createStore } from 'redux'\nimport persistState from 'redux-sessionstorage'\nimport thunk from 'redux-thunk'\nimport promise from 'redux-promise'\nimport { createLogger } from 'redux-logger'\nimport reducers from 'reducers'\n\nlet middleware = applyMiddleware(thunk, promise)\n\nif (process.env.NODE_ENV !== 'production') {\n const logger = createLogger({ collapsed: true, diff: true })\n middleware = applyMiddleware(thunk, promise, logger)\n}\n\nconst enhancer = compose(middleware, persistState())\nconst store = createStore(reducers, enhancer)\n\nexport default store\n","import axios from 'axios'\nimport store from 'store'\n\nlet cancelRequestFetch = []\n\nexport default class request {\n static token = () => {\n return store.getState().user.token\n }\n\n static appDomain = () => {\n if (window.location.hostname.indexOf('192.168.1.173') > -1) {\n return 'http://192.168.1.173:3000/'\n } else if (window.location.hostname.indexOf('localhost') > -1) {\n return 'http://localhost:3000/'\n } else if (window.location.hostname.indexOf('test') > -1) {\n return 'https://test.howtodo.dk/'\n } else {\n return 'https://howtodo.dk/'\n }\n }\n\n static apiDomain = () => {\n // return 'https://api.howtodo.dk/'\n if (window.location.hostname.indexOf('192.168.1.173') > -1) {\n return 'https://testapi.howtodo.dk/'\n } else if (window.location.hostname.indexOf('localhost') > -1) {\n // return 'https://testlektioner-api.azurewebsites.net/'\n return 'https://testapi.howtodo.dk/'\n } else if (window.location.hostname.indexOf('test') > -1) {\n // return 'https://testlektioner-api.azurewebsites.net/'\n return 'https://testapi.howtodo.dk/'\n } else {\n return 'https://api.howtodo.dk/'\n }\n }\n\n static headers = () => {\n return {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache,no-store',\n Authorization: `Bearer ${store.getState().user.token}`,\n }\n }\n\n static get = (path, key) => {\n const identity = key || path\n\n if (cancelRequestFetch.filter((x) => x.key === identity)[0]) {\n cancelRequestFetch.filter((x) => x.key === identity)[0].cancel()\n }\n\n return axios({\n method: 'get',\n url: request.apiDomain() + path,\n headers: request.headers(),\n cancelToken: new axios.CancelToken((c) => {\n if (cancelRequestFetch.filter((x) => x.key === identity)[0]) {\n cancelRequestFetch.filter((x) => x.key === identity)[0].cancel = c\n } else {\n cancelRequestFetch.push({ key: identity, cancel: c })\n }\n }),\n })\n }\n\n static delete = (path) => {\n return axios({\n method: 'delete',\n url: request.apiDomain() + path,\n headers: request.headers(),\n })\n }\n\n static post = (path, data) => {\n return axios({\n method: 'post',\n url: request.apiDomain() + path,\n headers: request.headers(),\n data,\n })\n }\n\n static patch = (path, data) => {\n return axios({\n method: 'patch',\n url: request.apiDomain() + path,\n headers: request.headers(),\n data,\n })\n }\n\n static put = (path, data) => {\n return axios({\n method: 'put',\n url: request.apiDomain() + path,\n headers: request.headers(),\n data,\n })\n }\n}\n","export default function emailValidation(email) {\n var atpos = email.indexOf('@')\n var dotpos = email.lastIndexOf('.')\n if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= email.length) {\n alert('Indtast en gyldig e-mail')\n return false\n }\n return true\n}\n","const mediaQueries = {\n phone: '@media only screen and (max-width: 1024px)',\n tablet: '@media only screen and (min-width: 1025px) and (max-width: 1360px)',\n desktop: '@media only screen and (min-width: 1361px)'\n}\n\nexport default mediaQueries\n","import store from 'store'\n\nconst minRole = requiredRole => {\n const priority = role => {\n switch (role) {\n case 'Unachievable':\n return 12\n case 'SystemAdministrator':\n return 10\n case 'Publisher':\n return 8\n case 'Organisation':\n return 6\n case 'Plusbruger':\n return 4\n default:\n return 2\n }\n }\n\n if (priority(store.getState().user.BestRole) >= priority(requiredRole)) {\n return true\n } else {\n return false\n }\n}\n\nexport default minRole\n","import { default as language } from './danish'\nexport default language\n","const danish = {\n // Seach\n search: 'Søg',\n searchForParagraphsOrCourses: 'Søg efter afsnit eller kurser',\n paragraph: 'Afsnit',\n course: 'Kursus',\n\n // Activity\n activity: 'Aktivitet',\n popularParagraphs: 'Populære afsnit',\n newComments: 'Nye kommentarer',\n\n // Courses\n courses: 'Kurser',\n welcomeTo: 'Velkommen til',\n showParagraphs: 'Vis afsnit',\n hideParagraphs: 'Skjul afsnit',\n previous: 'Forrige',\n next: 'Næste',\n comments: 'kommentarer',\n share: 'Del',\n files: 'filer',\n relatedParagraphs: 'relaterede afsnit',\n subscribeMailtips: 'Tilmeld mailtips',\n\n // General\n signOut: 'Log ud',\n like: 'synes godt om'\n}\n\nexport default danish\n","export default class format {\n static monthNames = [\n 'Januar',\n 'Februar',\n 'Marts',\n 'April',\n 'Maj',\n 'Juni',\n 'Juli',\n 'August',\n 'September',\n 'Oktober',\n 'November',\n 'December'\n ]\n\n static weekdayNames = [\n 'Mandag',\n 'Tirsdag',\n 'Onsdag',\n 'Torsdag',\n 'Fredag',\n 'Lørdag',\n 'Søndag'\n ]\n\n static date = date => {\n const newDate = new Date(date)\n\n const weekday = format.weekdayNames[newDate.getDay()]\n const day = newDate.getDate()\n const monthNumber = newDate.getMonth()\n const month = format.monthNames[monthNumber]\n const year = newDate.getFullYear()\n\n let hours = newDate.getHours() + ''\n\n if (hours.length === 1) {\n hours = '0' + hours\n }\n\n let minutes = newDate.getMinutes() + ''\n\n if (minutes.length === 1) {\n minutes = '0' + minutes\n }\n\n return {\n shortDate: `${day}/${monthNumber}–${year}`,\n weekday: weekday.substring(0, 3).toLowerCase(),\n date: `${day} ${month.substring(0, 3).toLowerCase()}`,\n year,\n fullDate: `${weekday}, d. ${day}. ${month.toLowerCase()} ${year}`,\n time: `${hours}:${minutes}`\n }\n }\n}\n","import { minRole } from 'helpers'\n\nexport default function isOwner() {\n return minRole('Publisher') ? 'Publisher ne null' : 'Publisher eq null'\n}\n","import { keyframes as emotionKeyframes } from 'emotion'\n\nexport default class keyframes {\n static fadeIn = emotionKeyframes({\n '0%': {\n opacity: 0\n },\n '100%': {\n opacity: 1\n }\n })\n}\n","const howtodo = {\n colors: {\n primary: '#000333',\n secondary: '#00c972',\n tertiary: '#089dd8',\n quaternary: '#f3f6f9'\n }\n}\n\n// const duka = {\n// colors: {\n// primary: '#4A97D1',\n// secondary: '#38ba9b',\n// tertiary: '#F4A29E',\n// quaternary: '#f3f6f9'\n// }\n// }\n\nexport default howtodo\n","import { keyframes } from 'emotion'\n\nconst fadeInUp = keyframes({\n '0%': {\n opacity: 0,\n transform: 'translate3d(0, -1%, 0)'\n },\n '50%': {\n opacity: 0.5,\n transform: 'translate3d(0, -0.5%, 0)'\n },\n '100%': {\n opacity: 1,\n transform: 'translate3d(0, 0, 0)'\n }\n})\n\nconst fadeIn = { animation: `${fadeInUp} 400ms ease` }\n\nexport default fadeIn\n","import { createMuiTheme } from '@material-ui/core/styles'\nimport { styles } from 'helpers'\n\nconst theme = createMuiTheme({\n typography: {\n useNextVariants: true,\n fontSize: 13\n },\n palette: {\n primary: {\n light: styles.colors.primary,\n main: styles.colors.primary,\n dark: styles.colors.primary\n },\n secondary: {\n light: styles.colors.secondary,\n main: styles.colors.secondary,\n dark: styles.colors.secondary\n }\n }\n})\n\nexport default theme\n","import React from 'react'\nimport { css } from 'emotion'\n\nconst Typography = ({ children, style, variant, ...props }) =>\n variant === 'caption' ? (\n \n {children}\n

\n ) : variant === 'subheading' ? (\n \n {children}\n \n ) : variant === 'display2' ? (\n \n {children}\n \n ) : variant === 'display1' ? (\n \n {children}\n \n ) : variant === 'headline' ? (\n \n {children}\n \n ) : (\n \n {children}\n

\n )\n\nexport default Typography\n","import React from 'react'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nconst Loading = ({ color, style, size }) => (\n \n)\n\nexport default Loading\n","import React from 'react'\nimport { css } from 'emotion'\n\nconst View = ({ className, style, children, ...props }) => (\n
\n {children}\n
\n)\n\nexport default View\n"],"sourceRoot":""}