{"version":3,"file":"js/app-legacy.690c11c7.js","mappings":"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","sources":["webpack://appstore-hub/./src/event-bus.ts","webpack://appstore-hub/./src/helpers/userRoles.ts","webpack://appstore-hub/./src/plugins/vuetify.ts","webpack://appstore-hub/./src/router.ts","webpack://appstore-hub/./src/registerServiceWorker.ts","webpack://appstore-hub/./src/App.vue","webpack://appstore-hub/./src/App.vue?38a5","webpack://appstore-hub/./src/App.vue?e47f","webpack://appstore-hub/./src/App.vue?0e40","webpack://appstore-hub/./src/filters/date.filter.ts","webpack://appstore-hub/./src/plugins/tipTapVuetify.ts","webpack://appstore-hub/./src/main.ts","webpack://appstore-hub/./src/plugins/http-common.ts","webpack://appstore-hub/./src/services/account.service.ts","webpack://appstore-hub/./src/services/base.service.ts","webpack://appstore-hub/./src/store/modules/main.ts","webpack://appstore-hub/./src/services/auth.service.ts","webpack://appstore-hub/./src/store/modules/auth.ts","webpack://appstore-hub/./src/store/modules/alert.ts","webpack://appstore-hub/./src/store/index.ts","webpack://appstore-hub/webpack/bootstrap","webpack://appstore-hub/webpack/runtime/chunk loaded","webpack://appstore-hub/webpack/runtime/compat get default export","webpack://appstore-hub/webpack/runtime/define property getters","webpack://appstore-hub/webpack/runtime/ensure chunk","webpack://appstore-hub/webpack/runtime/get javascript chunk filename","webpack://appstore-hub/webpack/runtime/get mini-css chunk filename","webpack://appstore-hub/webpack/runtime/global","webpack://appstore-hub/webpack/runtime/hasOwnProperty shorthand","webpack://appstore-hub/webpack/runtime/load script","webpack://appstore-hub/webpack/runtime/make namespace object","webpack://appstore-hub/webpack/runtime/publicPath","webpack://appstore-hub/webpack/runtime/css loading","webpack://appstore-hub/webpack/runtime/jsonp chunk loading","webpack://appstore-hub/webpack/startup"],"sourcesContent":["import Vue from 'vue';\r\nexport const EventBus = new Vue();\r\n","\r\n\r\n// Used for authorization, in router.ts and auth service code\r\n//\r\n// So, this is fine, but I think we need the display values along with the\r\n// the domain/db values.\r\n// Each should be an object w/ id and name\r\n\r\n// TODO: get these from server-side app\r\n// need actual .ts class in models folder\r\n\r\nexport const UserRole = {\r\n\r\n NONE: '', // no access\r\n BASE: 'Base', // Staff? Lowest access - granted w/ LTI login\r\n ANYROLE: 'AnyRole', // open to all roles\r\n ADMINSUFFIX: 'ADMIN', // any admin\r\n\r\n APPSUPER: 'AppSuper', // top role\r\n\r\n ORGADMIN: 'OrgAdmin',\r\n ORGSTAFF: 'OrgStaff',\r\n ORGSUPER: 'OrgSuper',\r\n\r\n \r\n COLLEGESTAFF: 'CollegeStaff', \r\n COLLEGEADMIN: 'CollegeAdmin',\r\n\r\n // Retiring these, combining into Orgxxx ??\r\n COLLEGESUPER: 'CollegeSuper',\r\n\r\n GROUPADMIN: 'GroupAdmin',\r\n GROUPSTAFF: 'GroupStaff',\r\n \r\n};\r\n\r\n\r\n\r\n","import '@mdi/font/css/materialdesignicons.css';\r\nimport Vue from 'vue';\r\n\r\nimport colors from 'vuetify/lib/util/colors';\r\n\r\nimport Vuetify, {\r\n VAlert,\r\n VApp,\r\n VLayout,\r\n VNavigationDrawer,\r\n VBreadcrumbs,\r\n VFooter,\r\n VFlex,\r\n VList,\r\n VCard,\r\n VBtn,\r\n VIcon,\r\n VImg,\r\n VToolbar,\r\n VBanner,\r\n VDataTable,\r\n VProgressLinear,\r\n VTooltip,\r\n VForm,\r\n\r\n} from 'vuetify/lib';\r\n\r\n// vue-cli a-la-carte installation\r\nVue.use(Vuetify, {\r\n components: {\r\n VAlert,\r\n VApp,\r\n VLayout,\r\n VNavigationDrawer,\r\n VFlex,\r\n VFooter,\r\n VBreadcrumbs,\r\n VList,\r\n VCard, \r\n VBtn,\r\n VIcon,\r\n VImg,\r\n VToolbar,\r\n VBanner,\r\n VDataTable,\r\n VProgressLinear,\r\n VTooltip,\r\n VForm, \r\n },\r\n});\r\n\r\nconst opts = {\r\n theme: {\r\n themes: {\r\n\r\n\r\n light: {\r\n primary: '#1976D2',\r\n secondary: '#424242',\r\n accent: '#82B1FF',\r\n error: '#FF5252',\r\n info: '#2196F3',\r\n success: '#4CAF50',\r\n warning: '#ffecb3',\r\n },\r\n dark: {\r\n primary: colors.blue.lighten3,\r\n },\r\n },\r\n },\r\n\r\n /* tan: #9f9c95\r\n * \r\n */\r\n};\r\n\r\nexport default new Vuetify(opts);\r\n","\r\nimport Vue from 'vue';\r\nimport Router from 'vue-router';\r\nimport { PositionResult } from 'vue-router/types/router';\r\nimport goTo from 'vuetify/lib/services/goto';\r\n\r\n\r\nimport { UserRole } from './helpers/userRoles';\r\nimport store from './store/index';\r\n//import { authService } from './services/auth.service';\r\n\r\n\r\nVue.use(Router);\r\n\r\nconst router = new Router({\r\n mode: 'history',\r\n base: process.env.BASE_URL,\r\n routes: [\r\n {\r\n path: '/',\r\n name: 'home',\r\n meta: { title: 'Home' },\r\n //component: Home,\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/Home.vue'),\r\n },\r\n {\r\n path: '/product',\r\n name: 'product',\r\n meta: { title: 'Products' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/Product.vue'),\r\n },\r\n {\r\n path: '/product/:slug',\r\n name: 'productDetail',\r\n meta: { title: 'Product: ', authorize: [UserRole.ANYROLE] }, \r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/ProductDetail.vue'),\r\n },\r\n {\r\n path: '/product/:slug/reviews',\r\n name: 'productReviews',\r\n meta: { title: 'Reviews: ', authorize: [UserRole.ANYROLE] },\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/ProductReviews.vue'),\r\n },\r\n {\r\n path: '/product/:slug/doc/:id',\r\n name: 'productDoc',\r\n meta: { title: 'Document: ', authorize: [UserRole.ANYROLE] },\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/ProductDoc.vue'),\r\n },\r\n\r\n {\r\n path: '/doc/:id',\r\n name: 'docDisplay',\r\n meta: { title: 'Document: ' },\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './components/DocumentDisplay.vue'),\r\n },\r\n\r\n {\r\n path: '/resource/:slug',\r\n name: 'resourcePage',\r\n meta: { title: 'Resource Page: ', authorize: [UserRole.ANYROLE] },\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/ResourcePage.vue'),\r\n },\r\n\r\n {\r\n path: '/vendor',\r\n name: 'vendor',\r\n meta: { title: 'Vendors' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/Vendor.vue'),\r\n },\r\n\r\n {\r\n path: '/vendor/:slug',\r\n name: 'vendorDetail',\r\n meta: { title: 'Vendor: ' },\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/VendorDetail.vue'),\r\n },\r\n\r\n {\r\n path: '/support',\r\n name: 'support',\r\n meta: { title: 'Support' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/Support.vue'),\r\n },\r\n\r\n {\r\n path: '/demo',\r\n meta: { title: 'Demo Settings' },\r\n name: 'demo',\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/Demo.vue'),\r\n },\r\n\r\n {\r\n path: '/reviews/rubric',\r\n name: 'rubric',\r\n meta: { title: 'Rubrics' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './components/Rubric.vue'),\r\n },\r\n {\r\n path: '/news',\r\n name: 'news',\r\n meta: { title: 'News' }, \r\n component: () => import(/* webpackChunkName: \"public\" */ './views/News.vue'),\r\n },\r\n {\r\n path: '/about',\r\n name: 'about', \r\n meta: { title: 'About' },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/About.vue'),\r\n },\r\n {\r\n path: '/contracts',\r\n name: 'contracts',\r\n meta: { title: 'Contracts', authorize: [UserRole.ANYROLE] },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/Contracts.vue'),\r\n },\r\n {\r\n path: '/evaluations',\r\n name: 'evaluations',\r\n meta: { title: 'Evaluations' }, \r\n component: () => import(/* webpackChunkName: \"public\" */ './views/Evaluations.vue'),\r\n },\r\n {\r\n path: '/procurement',\r\n name: 'procurement',\r\n meta: { title: 'Procurement Process' },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/Procurement.vue'),\r\n },\r\n {\r\n path: '/privacy',\r\n name: 'privacy',\r\n meta: { title: 'Data Privacy' },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/Privacy.vue'),\r\n },\r\n {\r\n path: '/accessibility',\r\n name: 'accessibility',\r\n meta: { title: 'Accessibility Information' },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/AccessibilitySiteInfo.vue'),\r\n },\r\n {\r\n path: '/terms-of-use',\r\n name: 'terms',\r\n meta: { title: 'Terms of Use' },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/TermsOfUse.vue'), \r\n },\r\n {\r\n path: '/updates',\r\n name: 'updates',\r\n meta: { title: 'Updates', authorize: [UserRole.ANYROLE] },\r\n component: () => import(/* webpackChunkName: \"public\" */ './views/AppUpdates.vue'),\r\n },\r\n\r\n //{\r\n // path: '/counter',\r\n // name: 'counter',\r\n // // route level code-splitting\r\n // // this generates a separate chunk (about.[hash].js) for this route\r\n // // which is lazy-loaded when the route is visited.\r\n // component: () => import(/* webpackChunkName: \"test\" */ './components/Counter.vue'),\r\n //},\r\n //{\r\n // path: '/fetch-data',\r\n // name: 'fetch-data',\r\n // component: () => import(/* webpackChunkName: \"test\" */ './views/FetchData.vue'),\r\n //},\r\n\r\n\r\n // College Admin\r\n {\r\n path: '/admin',\r\n name: 'admin',\r\n component: () => import(/* webpackChunkName: \"admin\" */ './views/Admin.vue'),\r\n meta: { authorize: [UserRole.APPSUPER, UserRole.COLLEGESUPER, UserRole.COLLEGEADMIN, UserRole.GROUPADMIN], title: 'Admin Settings' },\r\n\r\n //children: [\r\n // {\r\n // path: '/admin/users',\r\n // name: 'admin-users',\r\n // meta: { requiresAuth: true, title: 'Users' },\r\n // component: () => import(/* webpackChunkName: \"admin\" */ './views/AdminUsers.vue'),\r\n // },\r\n //{\r\n // path: '*',\r\n // component: () => import(/* webpackChunkName: \"main\" */ './views/PageNotFound.vue'),\r\n //},\r\n //],\r\n },\r\n\r\n {\r\n path: '/admin/users',\r\n name: 'admin-users',\r\n meta: { title: 'Users', authorize: [UserRole.APPSUPER, UserRole.COLLEGESUPER, UserRole.COLLEGEADMIN, UserRole.GROUPADMIN] },\r\n component: () => import(/* webpackChunkName: \"admin\" */ './components/AdminUsers.vue'),\r\n },\r\n\r\n\r\n {\r\n path: '/admin/orgs',\r\n name: 'admin-orgs',\r\n meta: {\r\n //requiresAuth: true,\r\n authorize: [UserRole.APPSUPER, UserRole.COLLEGESUPER, UserRole.COLLEGEADMIN],\r\n //roles: () => store.getters.auth.authRoles, title: 'Organizations'\r\n }, // testing: dynamically get roles from vuex\r\n //meta: { requiresAuth: false, requiresRole: 'admin', title: 'Organizations' },\r\n component: () => import(/* webpackChunkName: \"admin\" */ './components/Orgs.vue'),\r\n },\r\n\r\n {\r\n path: '/admin/support',\r\n name: 'admin-support',\r\n meta: { authorize: [UserRole.APPSUPER, UserRole.COLLEGESUPER, UserRole.COLLEGEADMIN, UserRole.GROUPADMIN], title: 'Help - Admin' },\r\n component: () => import(/* webpackChunkName: \"admin\" */ './views/SupportAdmin.vue'),\r\n },\r\n\r\n\r\n // System Settings - top-level\r\n {\r\n path: '/admin/sys',\r\n name: 'admin-sys',\r\n meta: { authorize: [UserRole.APPSUPER], title: 'System Settings' },\r\n component: () => import(/* webpackChunkName: \"admin\" */ './views/System.vue'),\r\n },\r\n\r\n {\r\n path: '/users/register',\r\n name: 'register',\r\n meta: { authorize: [UserRole.APPSUPER], title: 'Register for account' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './components/RegistrationForm.vue'),\r\n },\r\n {\r\n path: '/users/ltilogin',\r\n name: 'externalLogin',\r\n meta: { title: 'External Login' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/ExternalLogin.vue'),\r\n },\r\n {\r\n path: '/users/login',\r\n name: 'login',\r\n meta: { title: 'Login' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './components/Login.vue'),\r\n },\r\n {\r\n path: '/users/profile',\r\n name: 'profile',\r\n meta: { authorize: [UserRole.ANYROLE], title: 'My profile' },\r\n component: () => import(/* webpackChunkName: \"user\" */ './components/UserProfile.vue'),\r\n },\r\n\r\n // Org custom pages:\r\n {\r\n path: '/:slug',\r\n name: 'orgHome',\r\n meta: { title: 'Home: ' },\r\n props: true,\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/Home.vue'),\r\n },\r\n\r\n\r\n {\r\n path: '*',\r\n meta: { title: 'Not found' },\r\n component: () => import(/* webpackChunkName: \"main\" */ './views/PageNotFound.vue'),\r\n },\r\n \r\n ], // end of routes\r\n\r\n //scrollBehavior: (to, from, savedPosition) => {\r\n // let scrollTo = 0;\r\n\r\n // if (to.hash) {\r\n // scrollTo = parseInt(to.hash, 10);\r\n // } else if (savedPosition) {\r\n // scrollTo = savedPosition.y;\r\n // }\r\n\r\n // return goTo(scrollTo);\r\n //},\r\n\r\n\r\n scrollBehavior(to, from, savedPosition) { \r\n let scrollTo = 0;\r\n if (to.hash) {\r\n scrollTo = parseInt(to.hash, 10);\r\n } else if (savedPosition) {\r\n scrollTo = savedPosition.y;\r\n } \r\n \r\n if (scrollTo !== 0) {\r\n setTimeout(() => {\r\n return goTo(scrollTo, { duration: 0 }) as Promise as Promise;\r\n // window.scrollTo(0, 0);\r\n }, 200);\r\n // Need the delay here to let the new page show 200ms \r\n // which is a little more than router-view transition duration in App.vue.\r\n } else {\r\n return goTo(0, { duration: 0 }) as Promise as Promise;\r\n }\r\n },\r\n \r\n\r\n});\r\n\r\n\r\n\r\nconst DEFAULT_TITLE = 'EdTech Commons';\r\n\r\n\r\n// Auth check \r\nrouter.beforeEach((to: any, from: any, next: any) => {\r\n\r\n // AUTH - \r\n const currentRole = store.getters['auth/authRole']; // authService.getCurrentUser();\r\n const { authorize } = to.meta;\r\n \r\n // Role authorization: from a Jason Watmore example\r\n // uses the \"authorize\" meta-value, with a list of allowed roles\r\n if (authorize) {\r\n if (!store.getters['auth/isAuthenticated']) {\r\n // not logged in and trying to access page - \r\n // redirect to login page with the return url\r\n next({\r\n path: '/users/login',\r\n query: { redirect: to.fullPath },\r\n });\r\n }\r\n // check for \"any role\" allowed: \r\n if (authorize.length && authorize.includes(UserRole.ANYROLE)\r\n && currentRole !== UserRole.NONE) {\r\n // skip out of specific role check\r\n next();\r\n }\r\n\r\n // check if route is restricted by role\r\n if (authorize.length && !authorize.includes(currentRole)) {\r\n // role not authorised so redirect to home page\r\n // authorize meta value in route includes all allowed roles\r\n return next();\r\n\r\n // maybe route to not authorized page or popup alert?\r\n return next({ path: '/users/login' });\r\n }\r\n }\r\n\r\n next(); // always call next()!\r\n});\r\n\r\n\r\n\r\nrouter.afterEach((to, from) => {\r\n\r\n // Set page title in history\r\n // Use next tick to handle router history correctly\r\n // see: https://github.com/vuejs/vue-router/issues/914#issuecomment-384477609\r\n let title = '';\r\n if (to.meta !== undefined) { // to !== null &&\r\n title = to.meta.title;\r\n }\r\n\r\n Vue.nextTick(() => {\r\n document.title = title + ' | ' + DEFAULT_TITLE || DEFAULT_TITLE;\r\n });\r\n \r\n});\r\n\r\n\r\n\r\nexport default router;\r\n\r\n","/* tslint:disable:no-console */\r\n\r\nimport { register } from 'register-service-worker';\r\n\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n register(`${process.env.BASE_URL}service-worker.js`, {\r\n ready() {\r\n console.log(\r\n 'EdTech Commons is served from cache by a service worker.\\n',\r\n \r\n );\r\n },\r\n cached() {\r\n console.log('Content has been cached for offline use.');\r\n },\r\n updated() {\r\n console.log('New content is available; Refresh...');\r\n setTimeout(() => {\r\n window.location.reload(); // was: window.location.reload(true);\r\n }, 1000);\r\n },\r\n //updated() {\r\n // console.log('New content is available; please refresh.');\r\n //},\r\n offline() {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n },\r\n error(error) {\r\n console.error('Error during service worker registration:', error);\r\n },\r\n });\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('v-app',[_c('v-navigation-drawer',{attrs:{\"disable-resize-watcher\":true,\"clipped\":\"\",\"app\":\"\"},model:{value:(_vm.drawer),callback:function ($$v) {_vm.drawer=$$v},expression:\"drawer\"}},[_c('v-list',_vm._l((_vm.menuItems),function(item,i){return _c('v-list-item',{key:i,attrs:{\"value\":\"true\",\"to\":item.link}},[_c('v-list-item-action',[_c('v-icon',{domProps:{\"innerHTML\":_vm._s(item.icon)}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1),_c('v-app-bar',{attrs:{\"app\":\"\",\"dark\":\"\",\"color\":\"grey darken-2\"}},[_c('v-app-bar-nav-icon',{staticClass:\"hidden-sm-and-up\",on:{\"click\":function($event){$event.stopPropagation();_vm.drawer = !_vm.drawer}}}),_c('router-link',{ref:\"homeHeaderLink\",staticClass:\"site-title mr-3\",attrs:{\"to\":\"/\",\"title\":\"home page\"}},[_c('v-toolbar-title',{staticClass:\"site-title mr-5 d-none d-sm-flex\",staticStyle:{\"font-size\":\"smaller\"}},[_c('span',{staticClass:\"font-weight-medium mt-1\",staticStyle:{\"font-family\":\"Roboto\",\"font-size\":\"smaller\"}},[_vm._v(\"EdTech\")]),_c('span',{staticClass:\"site-title ml-1\"},[_vm._v(\"Commons\")])])],1),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-btn',_vm._g(_vm._b({staticClass:\"my-2 d-none d-sm-flex\",attrs:{\"to\":\"/product\",\"color\":\"white\",\"dense\":\"\",\"text\":\"\",\"tile\":\"\"}},'v-btn',attrs,false),on),[_vm._v(\" Products \")])]}}])},[_c('span',[_vm._v(\"Product catalog\")])]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-4 my-2 d-none d-sm-flex\",attrs:{\"to\":\"/evaluations\",\"color\":\"white\",\"text\":\"\",\"tile\":\"\",\"dense\":\"\",\"outlined\":\"\"}},'v-btn',attrs,false),on),[_vm._v(\" Evaluation \")])]}}])},[_c('span',[_vm._v(\"Standards and Product Evaluation\")])]),_c('v-btn',{staticClass:\"ml-4 mr-2 my-2 d-none d-sm-flex\",attrs:{\"to\":\"/news\",\"color\":\"white\",\"text\":\"\",\"tile\":\"\",\"dense\":\"\",\"outlined\":\"\"}},[_vm._v(\" News \")]),_c('v-spacer'),_c('span',{staticStyle:{\"white-space\":\"nowrap\"},attrs:{\"title\":\"social media sharing\"}},[_c('a',{attrs:{\"href\":'https://www.linkedin.com/sharing/share-offsite/?url=' + _vm.pageUrl,\"target\":\"_blank\",\"title\":\"linkedin\"}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-linkedin\")])],1),_c('a',{staticClass:\"ml-2\",attrs:{\"href\":'https://www.facebook.com/sharer/sharer.php?u=' + _vm.pageUrl,\"target\":\"_blank\",\"title\":\"facebook\"}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-facebook\")])],1),_c('a',{staticClass:\"ml-2 mr-3\",attrs:{\"href\":'https://twitter.com/share?url=' + _vm.pageUrl,\"target\":\"_blank\",\"title\":\"twitter\"}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-twitter\")])],1)]),_c('v-text-field',{directives:[{name:\"show\",rawName:\"v-show\",value:(false),expression:\"false\"}],staticClass:\"shrink ml-3 mr-3 search-text\",attrs:{\"solo-inverted\":\"\",\"flat\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"label\":\"Search\"}}),_c('v-menu',{attrs:{\"nudge-width\":200,\"offset-x\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs } ){return [_c('v-badge',{attrs:{\"color\":\"warning\",\"bottom\":\"\",\"content\":_vm.messageCount,\"value\":_vm.messageCount,\"offset-x\":\"10\",\"offset-y\":\"10\"}},[_c('v-btn',_vm._g(_vm._b({directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAuthenticated),expression:\"isAuthenticated\"}],ref:\"profileMenuButton\",staticClass:\"ml-4 pa-0 mr-1\",attrs:{\"icon\":\"\",\"title\":\"Profile\",\"aria-expanded\":_vm.profileMenu.toString(),\"aria-controls\":\"profile-menu\"}},'v-btn',attrs,false),on),[_c('v-flex',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"column\",\"align-items\":\"center\"},attrs:{\"xs12\":\"\"}},[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAuthenticated),expression:\"isAuthenticated\"}],staticStyle:{\"color\":\"lightgreen\"}},[_vm._v(\"person\")]),_c('span',{staticStyle:{\"color\":\"lightgreen\"}},[_vm._v(_vm._s(_vm.authUser.firstName))])],1)],1),_c('v-btn',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isAuthenticated),expression:\"!isAuthenticated\"}],staticClass:\"ml-4 pa-0\",attrs:{\"to\":\"/users/login\",\"icon\":\"\",\"title\":\"login\"}},[_c('span',{staticClass:\"ml-2 mr-4 text--white\"},[_vm._v(\"Login\")])])],1)]}}]),model:{value:(_vm.profileMenu),callback:function ($$v) {_vm.profileMenu=$$v},expression:\"profileMenu\"}},[_c('v-card',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAuthenticated),expression:\"isAuthenticated\"}]},[_c('v-list',[_c('v-list-item',[_c('v-hover',{attrs:{\"to\":\"/users/profile\"}},[_c('v-list-item-avatar',[_c('v-avatar',{attrs:{\"color\":\"green\"}},[_c('span',{staticClass:\"white--text headline\"},[_vm._v(_vm._s(_vm.userInitials))])])],1)],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.authUser.firstName))]),_c('v-list-item-subtitle',[_c('span',{staticClass:\"ml-0\"},[_vm._v(_vm._s(_vm.userOrgNameShort)+\" \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.authRole!=_vm.userRole.BASE),expression:\"authRole!=userRole.BASE\"}],staticClass:\"float-right\"},[_vm._v(_vm._s(_vm.getRoleName(_vm.authUser.role)))])])],1)],1)],1),_c('v-divider'),_c('v-list',{attrs:{\"aria-id\":\"profile-menu\"}},[(_vm.authRole.toUpperCase().indexOf(_vm.userRole.ADMINSUFFIX) >= 0 \n || _vm.authRole==_vm.userRole.APPSUPER)?_c('v-list-item',[_c('router-link',{ref:\"firstProfileMenuLink\",staticClass:\"footer-link text-uppercase\",attrs:{\"to\":\"/admin\"},on:{\"click\":function($event){_vm.menu = true}}},[_vm._v(\"Settings\")])],1):_vm._e(),(_vm.authRole.toUpperCase().indexOf(_vm.userRole.ADMINSUFFIX) >= 0 \n || _vm.authRole==_vm.userRole.APPSUPER)?_c('v-list-item',[_c('router-link',{staticClass:\"footer-link text-uppercase\",attrs:{\"to\":\"/admin/users\",\"color\":\"primary\"},on:{\"click\":function($event){_vm.menu = true}}},[_vm._v(\"User Accounts\")])],1):_vm._e(),(_vm.authRole==_vm.userRole.APPSUPER)?_c('v-list-item',[_c('router-link',{staticClass:\"footer-link text-uppercase\",attrs:{\"to\":\"/admin/sys\",\"color\":\"primary\"},on:{\"click\":function($event){_vm.menu = true}}},[_vm._v(\"System Admin\")])],1):_vm._e(),(_vm.authRole.toUpperCase().indexOf(_vm.userRole.ADMINSUFFIX) >= 0 \n || _vm.authRole==_vm.userRole.APPSUPER)?_c('v-list-item',[(1===2)?_c('router-link',{staticClass:\"footer-link caption text-uppercase\",attrs:{\"to\":\"/admin/support\"},on:{\"click\":function($event){_vm.menu = true}}},[_vm._v(\"Help\")]):_vm._e(),_c('router-link',{staticClass:\"ml-3 footer-link caption text-uppercase\",attrs:{\"to\":\"/updates\"},on:{\"click\":function($event){_vm.menu = true}}},[_vm._v(\"Updates\")])],1):_vm._e()],1),_c('v-divider'),_c('v-card-actions',[_c('router-link',{directives:[{name:\"show\",rawName:\"v-show\",value:(true),expression:\"true\"}],staticClass:\"ml-2 caption footer-link text-uppercase\",attrs:{\"to\":\"/users/profile\",\"color\":\"primary\"},on:{\"click\":function($event){_vm.menu = true}}},[_vm._v(\"My Profile\")]),_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":_vm.logoff}},[_vm._v(\"Logout\")])],1)],1)],1)],1),_vm._v(\" \"),_c('v-main',{staticClass:\"pb-8\",attrs:{\"align\":\"left\",\"justify\":\"start\"}},[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\",\"duration\":{ enter: 100, leave: 10 },\"hide-on-leave\":\"true\"}},[_c('keep-alive',{key:_vm.$route.params.path,attrs:{\"max\":\"8\",\"include\":_vm.cachedViews}},[_c('router-view')],1)],1)],1),_c('v-footer',{staticClass:\"pt-1 pb-1 pl-2 d-none d-sm-flex\",attrs:{\"app\":\"\",\"padless\":\"\",\"elevation\":\"3\"}},[_c('router-link',{staticClass:\"footer-title footer-link ml-2 my-2 font-weight-medium accent-1 d-none d-md-flex\",attrs:{\"to\":\"/\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.appTitlePrefix))])]),_c('v-spacer'),_c('v-spacer'),_c('span',{staticClass:\"d-none d-sm-flex\"},[_c('a',{staticClass:\"footer-link mr-4 caption text-uppercase\",attrs:{\"href\":\"//www.sbctc.edu/privacy.aspx\",\"target\":\"_blank\",\"color\":\"black\"}},[_vm._v(\"Privacy Policy\")]),_c('a',{staticClass:\"footer-link mr-4 caption text-uppercase\",attrs:{\"href\":\"//www.sbctc.edu/non-discrimination.aspx\",\"target\":\"_blank\",\"color\":\"black\"}},[_vm._v(\"Non-Discrimination\")]),_c('a',{staticClass:\"footer-link mr-4 caption text-uppercase\",attrs:{\"href\":\"//www.sbctc.edu/online-accessibility.aspx\",\"target\":\"_blank\",\"color\":\"black\"}},[_vm._v(\"Accessibility\")])]),_c('a',{staticClass:\"ml-4 footer-link caption text-uppercase\",attrs:{\"href\":\"mailto:edtechcommons@sbctc.edu\",\"target\":\"_blank\"}},[_vm._v(\"Contact Us\")]),_c('router-link',{staticClass:\"footer-link ml-4 mr-4 caption text-uppercase\",attrs:{\"to\":\"/about\",\"color\":\"black\"}},[_vm._v(\"About\")])],1),_c('v-navigation-drawer',{directives:[{name:\"show\",rawName:\"v-show\",value:(false),expression:\"false\"}]},[_c('v-list',{attrs:{\"nav\":\"\",\"dense\":\"\"}},[_c('v-list-item-group',{attrs:{\"color\":\"primary\"},model:{value:(_vm.alertItems),callback:function ($$v) {_vm.alertItems=$$v},expression:\"alertItems\"}},_vm._l((_vm.alertItems),function(item,i){return _c('v-list-item',{key:i},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s(item.icon)}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.text)}})],1)],1)}),1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"," \r\n import { Component, Watch, Ref, Vue } from 'vue-property-decorator';\r\n \r\n import { EventBus } from './event-bus';\r\n import { mapGetters } from 'vuex';\r\n\r\n import { UserAccount } from '@/models/UserAccount';\r\n import { UserRole } from '@/helpers/userRoles';\r\n\r\n import { accountService } from '@/services/account.service';\r\n\r\n\r\n\r\n\r\n @Component({\r\n //components: { HelloWorld },\r\n computed: mapGetters({\r\n isAuthenticated: 'auth/isAuthenticated', // needed for runtime\r\n //userProfile: 'user/profile',\r\n authUser: 'auth/authUser',\r\n authRole: 'auth/authRole',\r\n userOrgName: 'auth/userOrgName',\r\n userOrgNameShort: 'auth/userOrgNameShort',\r\n demo: 'mode',\r\n count: 'counter',\r\n }),\r\n //computed() {\r\n // otherName() {\r\n // return this.$store.getters.profile;\r\n // }\r\n //},\r\n metaInfo: {\r\n meta: [\r\n { charset: 'utf-8' },\r\n { name: 'viewport', content: 'width=device-width, initial-scale=1' },\r\n { name: 'description', content: 'EdTech Commons is a repository of product information about tools purchased for and used by colleges in the Washington CTC system.' },\r\n { property: 'og:title', content: 'EdTech Commons' },\r\n { property: 'og:site_name', content: 'EdTech Commons' },\r\n { property: 'og:type', content: 'website' },\r\n { name: 'robots', content: 'index,follow' },\r\n ],\r\n },\r\n })\r\n\r\n export default class App extends Vue {\r\n\r\n private menu: boolean = false;\r\n private profileMenu: boolean = false;\r\n private clipped: boolean = true;\r\n private drawer: boolean = false;\r\n private miniVariant: boolean = false;\r\n private right: boolean = false;\r\n private snackbar: boolean = true;\r\n\r\n //private timer: number = 0;\r\n\r\n private messageCount: number = 0;\r\n\r\n private appTitlePrefix: string = 'EdTech Commons';\r\n private institutionName: string = 'My College';\r\n private instLogoSmallUrl: string = ''; //'/img/institutions/no-name-sm-round.png';\r\n\r\n private transitionName: string = 'slide-left';\r\n private userRole = UserRole;\r\n\r\n // Getters declared (again) for static type checking\r\n private isAuthenticated!: boolean; //any[];\r\n private authUser!: UserAccount;\r\n private authRole!: string;\r\n private userOrgName!: string; \r\n // private userProfile!: any[];\r\n\r\n\r\n\r\n private menuItems = [\r\n\r\n { title: 'Home', link: '/' }, //icon: 'home',\r\n { title: 'Products', link: '/product' }, // icon: 'dashboard',\r\n //{ title: 'Vendors', icon: 'mdi-office-building', link: '/vendor' },\r\n { title: 'Evaluation', link: '/evaluations' }, // icon: 'test-tube',\r\n { title: 'News', link: '/news' }, // icon: 'mdi-newspaper-variant-outline',\r\n\r\n { title: 'Privacy', icon: 'account-question-outline', link: '//www.sbctc.edu/privacy.aspx' },\r\n\r\n { title: 'About', link: '/about' }, // icon: 'mdi-information-outline',\r\n //{ title: 'Support', icon: 'mdi-help-circle-outline', link: '/support' },\r\n\r\n ];\r\n\r\n \r\n // Vue/Veutify caching of pages and components:\r\n private cachedViewsList = [\r\n 'ProductGrid', 'About', 'News', 'Evaluations', 'Contracts',\r\n 'ContentItemBlock']; // ProductDetailView,\r\n\r\n private cachedViews = this.cachedViewsList;\r\n\r\n\r\n\r\n private alertItems = [\r\n\r\n { text: 'Private Messages', icon: 'mdi-account-multiple' },\r\n { text: 'Favorites', icon: 'mdi-star' },\r\n { text: 'To Review', icon: 'mdi-history' },\r\n { text: 'Files', icon: 'mdi-folder' },\r\n { text: 'Finished', icon: 'mdi-check-circle' },\r\n { text: 'Uploads', icon: 'mdi-upload' },\r\n\r\n ];\r\n\r\n get metaInfo() {\r\n return {\r\n title: `${this.$route.name} - EdTech Commons`,\r\n meta: [\r\n { name: 'description', content: this.appTitlePrefix + 'Connect and follow ' },\r\n { property: 'og:title', content: this.appTitlePrefix },\r\n { property: 'og:site_name', content: this.appTitlePrefix },\r\n { property: 'og:description', content: 'Connect and follow ' },\r\n { property: 'og:type', content: 'profile' },\r\n { property: 'og:url', content: 'https://commons.edtech.sbctc.edu' },\r\n { property: 'og:image', content: 'https://commons.edtech.sbctc.edu/images/main.jpg' },\r\n ],\r\n };\r\n }\r\n\r\n get userInitials() {\r\n try {\r\n return this.authUser.firstName.substr(0, 1) + this.authUser.lastName.substr(0, 1);\r\n } catch {\r\n return '?';\r\n }\r\n }\r\n\r\n\r\n @Watch('profileMenu', { immediate: false, deep: true })\r\n public handleProfileMenuTransition() {\r\n if (this.profileMenu) {\r\n\r\n setTimeout(() => {\r\n //this.$refs.firstProfileMenuLink.$el.focus();\r\n ((this.$refs.firstProfileMenuLink as Vue).$el as HTMLElement).focus();\r\n }, 100); // ms delay\r\n //this.$nextTick(() => this.$refs.firstProfileMenuLink.$el.focus()); \r\n\r\n } else {\r\n // set focus back to menu button \r\n //this.$nextTick(() => {\r\n requestAnimationFrame(() => {\r\n\r\n ((this.$refs.profileMenuButton as Vue).$el as HTMLElement).focus();\r\n\r\n });\r\n }\r\n }\r\n\r\n\r\n @Watch('isAuthenticated', { immediate: true, deep: true })\r\n public HandleAuthStatusChange() {\r\n console.log('HandleAuthStatusChange - App.vue');\r\n // clear cached view from KeepAlive\r\n\r\n // this array reset isn't working:\r\n //let origList = this.cachedViews;\r\n requestAnimationFrame(() => {\r\n this.cachedViews.length = 0; // empty the cached view array - force reloads //= [];\r\n });\r\n\r\n window.setTimeout(() =>\r\n this.cachedViews = this.cachedViewsList // set full cached view list\r\n , 300);\r\n\r\n \r\n }\r\n\r\n\r\n private getRoleName(role: string) {\r\n return accountService.getRoleDisplayName(role);\r\n }\r\n\r\n\r\n get pageUrl() {\r\n // hardcoding the current domain:\r\n return 'https://commons.edtech.sbctc.edu' + this.$route.fullPath;\r\n }\r\n\r\n private logoff() {\r\n this.$store.dispatch('auth/authLogout').then(() => {\r\n this.$router.push('/product');\r\n });\r\n }\r\n\r\n\r\n private checkLoginStatus() {\r\n // makes call to service and web server - effectively validating jwt in cookie\r\n\r\n // lightweight check of login status - this.authUser != null\r\n if (this.isAuthenticated\r\n && Object.keys(this.authUser).length > 0) {\r\n // makes call to service and web server - effectively validating jwt in cookie\r\n this.$store.dispatch('auth/authStatusCheck'); \r\n } else {\r\n // Heavier weight get profile info, to set login info to local storage.\r\n // Handles an LTI login, for example. LTI landing page: ExternalLogin.vue\r\n this.$store.dispatch('auth/authRefreshLoginState');\r\n\r\n }\r\n if (this.isAuthenticated) {\r\n // recurse\r\n window.setTimeout(() => this.checkLoginStatus(), 300000); // 300,000 = 5 min\r\n }\r\n }\r\n\r\n\r\n\r\n private created() {\r\n\r\n // set focus to Products menu item:\r\n //this.$nextTick(() => {\r\n requestAnimationFrame(() => {\r\n ((this.$refs.homeHeaderLink as Vue).$el as HTMLElement).focus(); \r\n });\r\n\r\n // test \r\n //console.log(localStorage.getItem('current-user'));\r\n\r\n this.checkLoginStatus();\r\n //if (this.isAuthenticated) {\r\n //}\r\n\r\n EventBus.$on('logged-in', (payLoad: any) => {\r\n // This doesn't currently do anything in this demo but does get fired on successful login.\r\n // leaving it to show how to allow communication between unrelated components - ie. Store -> Component\r\n //console.log('logged-in message received...');\r\n });\r\n }\r\n\r\n private beforeDestroyed() {\r\n\r\n\r\n }\r\n\r\n\r\n\r\n private destroyed() {\r\n EventBus.$off('logged-in');\r\n\r\n //let elHtml = document.getElementsByTagName('html')[0];\r\n //elHtml.style.overflowY = ''; //null;\r\n }\r\n\r\n\r\n private mounted() {\r\n\r\n\r\n\r\n //let elHtml = document.getElementsByTagName('html')[0];\r\n //elHtml.style.overflowY = 'auto';\r\n }\r\n\r\n\r\n }\r\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js??clonedRuleSet-41.use[0]!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js??clonedRuleSet-41.use[0]!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=6ccea110&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=6ccea110&prod&lang=css&\"\nimport style1 from \"./App.vue?vue&type=style&index=1&id=6ccea110&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ccea110\",\n null\n \n)\n\n/* custom blocks */\nimport block0 from \"./App.vue?vue&type=custom&index=0&blockType=link&href=styles%2Ftooltip.css&rel=stylesheet\"\nif (typeof block0 === 'function') block0(component)\n\nexport default component.exports","import { format, parseISO } from 'date-fns';\r\n\r\n// export default (date: Date) => {\r\nexport default (date: string) => {\r\n try {\r\n return format(new Date(date), 'M-dd-yyyy ha');\r\n } catch (e) {\r\n return ''; //e;\r\n }\r\n};\r\n","\r\n\r\nimport Vue from 'vue';\r\nimport vuetify from './vuetify';\r\n\r\nimport { TiptapVuetifyPlugin } from 'tiptap-vuetify';\r\n// don't forget to import styles\r\nimport 'tiptap-vuetify/dist/main.css';\r\n\r\n// you don't need it. this is for example purposes\r\n//const iconsGroup = localStorage.getItem('current_icons_group') || 'fa';\r\n\r\n\r\nVue.use(TiptapVuetifyPlugin, {\r\n vuetify,\r\n //\"md\",\r\n // \"md\" (default), \"fa\", \"mdi\"\r\n //iconsGroup, // same as \"iconsGroup: iconsGroup\"\r\n});\r\n\r\n\r\n\r\n","import 'core-js/stable';\r\nimport 'regenerator-runtime/runtime';\r\nimport Vue from 'vue';\r\n//import './plugins/axios'; // testing if okay to remove\r\nimport axios from 'axios';\r\nimport vuetify from './plugins/vuetify';\r\n\r\n\r\nimport router from './router';\r\nimport store from '@/store/index';\r\nimport './registerServiceWorker';\r\n\r\nimport App from './App.vue';\r\n\r\n//import { UserRole } from './helpers/userRoles'; \r\n\r\n\r\nimport dateFilter from '@/filters/date.filter';\r\n//import slugFilter from '@/filters/slug.filter';\r\n// v-mask, as a directive\r\nimport { VueMaskDirective } from 'v-mask';\r\nimport { request } from 'https';\r\n\r\nimport './plugins/tipTapVuetify';\r\n\r\n\r\n// Disable the 'development mode' warning messages\r\nVue.config.productionTip = false;\r\n\r\n\r\n// FILTERS - Vue 2, removed in Vue 3\r\n//Vue.filter('date', dateFilter);\r\n\r\n// App utility functions - Vue3-ready\r\nVue.prototype.$dateFormat = dateFilter; // use as: $dateFormat([date])\r\n\r\n\r\n// Tested - these seemed unreliable:\r\n//Vue.prototype.$userRole = store.getters['auth/authRole']; \r\n//Vue.prototype.$userOrgId = store.getters['auth/userOrgId'];\r\n\r\n\r\n// DIRECTIVES\r\nVue.directive('mask', VueMaskDirective);\r\n\r\n\r\n\r\nnew Vue({\r\n vuetify,\r\n router,\r\n store,\r\n render: (h) => h(App), \r\n}).$mount('#app');\r\n\r\n\r\n\r\n\r\n\r\n// AXIOS - interceptors\r\n// Collecting these here instead of in axios.js, as,\r\n// the handling often uses additional app features like router. \r\n// Better dependency chain with less coupling?\r\n\r\n// Or, move into /plugins/http-common.js? my axios wrapper\r\n\r\n// AUTH TOKEN - pass w/ each request if valid token\r\n// unused, original handling of JWT, reading from localstorage and passing via header\r\n//axios.interceptors.request.use((config: any) => {\r\n// const authToken = store.getters['auth/authToken'];\r\n// if (authToken) {\r\n// config.headers.Authorization = `Bearer ${authToken}`;\r\n// }\r\n// return config;\r\n//}, (err: any) => {\r\n// return Promise.reject(err);\r\n//});\r\n\r\n\r\n// Is this active? I think no... 3-25-2019\r\n// RESPONSE\r\naxios.interceptors.response.use((response) => {\r\n return response;\r\n}, (error) => {\r\n console.log(error.response.data);\r\n if (error.response.status === 401) {\r\n //store.dispatch('logout')\r\n //router.push('/users/login')\r\n //this.$store.dispatch('auth/authLogout').then(() => {\r\n // this.$router.push('/product');\r\n //});\r\n\r\n //console.log('axios interceptor error URL: ' + error.response.url);\r\n\r\n //// Handling for special URL(s)\r\n //if (!error.response.url.includes('login-status')) {\r\n\r\n // // route to login form\r\n // store.dispatch('auth/authLogout');\r\n // router.push('/users/login');\r\n //}\r\n }\r\n return Promise.reject(error);\r\n});\r\n\r\n\r\n\r\n","// testing different axios uses/layers \r\n\r\nimport axios, { AxiosInstance } from 'axios';\r\n\r\n\r\nconst apiClient: AxiosInstance = axios.create({\r\n //baseURL: \"https://localhost:8080\",\r\n timeout: 50 * 1000, // Timeout 50 sec\r\n\r\n headers: {\r\n 'Content-type': 'application/json',\r\n },\r\n});\r\n\r\nexport default apiClient;\r\n","// NOTES: this may be the only service that inherits from BaseService\r\n// TODO: Is it worth anything?\r\n\r\n\r\nimport apiClient from '@/plugins/http-common';\r\n\r\nimport { UserAccount } from '@/models/UserAccount';\r\nimport { UserRegistration } from '@/models/user.registration.interface';\r\nimport { UserPasswordUpdate } from '@/models/UserPasswordUpdate';\r\nimport { UserRole } from '@/models/UserRole';\r\nimport { NewUser } from '@/models/NewUser';\r\n\r\nimport { UserRole as Role } from '@/helpers/userRoles'; \r\n\r\nimport store from '@/store/index';\r\n\r\nimport { BaseService } from './base.service';\r\nimport { Observable, of, from } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nclass AccountService extends BaseService {\r\n\r\n private static instance: AccountService;\r\n\r\n private constructor() { super(); }\r\n\r\n public static get Instance() {\r\n // Do you need arguments? Make it a regular method instead.\r\n return this.instance || (this.instance = new this());\r\n }\r\n\r\n\r\n public async getAll(): Promise {\r\n return apiClient.get('/api/accounts/all');\r\n }\r\n\r\n\r\n\r\n // REGISTER\r\n //public register(userRegistration: UserRegistration): Observable {\r\n public register(userRegistration: UserRegistration) {\r\n\r\n return apiClient.post('/api/accounts', userRegistration);\r\n\r\n // updated orig:\r\n //return from(apiClient.post('api/accounts', userRegistration))\r\n // .pipe(\r\n // map((res: any) => true),\r\n // catchError((error: any) => this.handleError(error.response)),\r\n // );\r\n\r\n //return Observable.fromPromise(apiClient.post(`${this.api}/accounts`, userRegistration))\r\n // .map((res: any) => true)\r\n // .catch((error: any) => this.handleError(error.response));\r\n\r\n }\r\n\r\n\r\n\r\n\r\n public setPassword(userName: string, data: UserPasswordUpdate) {\r\n return apiClient.patch('/api/accounts/' + userName + '/updatepassword', data); \r\n }\r\n\r\n\r\n\r\n public setMyPassword(data: UserPasswordUpdate) {\r\n\r\n return apiClient.patch('/api/accounts/me/updatepassword', data);\r\n\r\n }\r\n\r\n // mockup - admin role check\r\n public isAdmin(): Observable {\r\n\r\n return from(apiClient.post('/api/accounts/me/role'))\r\n .pipe(\r\n map((res: any) => true),\r\n catchError((error: any) => this.handleError(error.response)),\r\n );\r\n }\r\n\r\n\r\n public enableAccount(userId: string) {\r\n return apiClient.patch(`/api/accounts/${userId}/enable`); // identityId\r\n }\r\n\r\n\r\n public disableAccount(userId: string) {\r\n return apiClient.patch(`/api/accounts/${userId}/disable`);\r\n }\r\n\r\n\r\n public addAccount(newUser: NewUser) { \r\n return apiClient.post(`/api/accounts`, newUser);\r\n }\r\n\r\n\r\n public getUserRoles() {\r\n // Returns conditional list of roles, depending on user role \r\n const currentRole = store.getters['auth/authRole'];\r\n //let roles = [] as UserRole[];\r\n let roles = [\r\n //{\r\n // name: 'Public', // no access\r\n // value: '',\r\n // id: 0,\r\n // status: 'active',\r\n //} as UserRole,\r\n {\r\n name: 'Member', // minimal org member access\r\n value: 'Base',\r\n id: 20,\r\n status: 'active',\r\n } as UserRole,\r\n {\r\n name: 'Designated Staff', // college staff - designated w/ additional rights\r\n value: 'CollegeStaff',\r\n id: 50,\r\n status: 'active',\r\n } as UserRole, \r\n ];\r\n\r\n // Admin - college or org admin\r\n if (currentRole.toUpperCase().includes(Role.ADMINSUFFIX)\r\n || currentRole.includes(Role.APPSUPER)) {\r\n roles.push(\r\n {\r\n name: 'Administrator', // college admin\r\n value: 'CollegeAdmin',\r\n id: 70,\r\n status: 'active',\r\n } as UserRole,\r\n );\r\n }\r\n\r\n //debugger;\r\n // Super admin - Commons Admin\r\n if (currentRole.includes(Role.APPSUPER)) {\r\n roles.push(\r\n {\r\n name: 'Commons Admin',\r\n value: 'AppSuper',\r\n id: 100,\r\n status: 'active',\r\n } as UserRole,\r\n );\r\n }\r\n \r\n return roles; \r\n }\r\n\r\n\r\n\r\n\r\n public getRoleDisplayName(role: string) {\r\n\r\n switch (role) {\r\n case 'Base':\r\n return 'Member'; \r\n case 'CollegeAdmin':\r\n return 'Administrator';\r\n case 'CollegeStaff':\r\n return 'Designated Staff';\r\n case 'AppSuper':\r\n return 'Commons Admin';\r\n\r\n default:\r\n return role;\r\n } \r\n }\r\n\r\n public getPwdValidationRules() {\r\n // return pwdRules: any[] = [\r\n return [] = [\r\n v => (v || '').length <= 20 && (v || '').length > 6 || 'Must be from 7 to 20 characters',\r\n v => /\\d/.test(v) || 'Must include one number',\r\n v => /[!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]/.test(v) || 'Must include a punctuation character',\r\n ];\r\n //return pwdRules;\r\n }\r\n\r\n}\r\n\r\n\r\n// export a singleton instance in the global namespace\r\nexport const accountService = AccountService.Instance;\r\n\r\n//export default new AccountService();\r\n","import { Observable, throwError, of } from 'rxjs'; // only need to import from rxjs\r\n\r\nexport abstract class BaseService {\r\n\r\n protected readonly api = 'http://localhost:5000/api';\r\n\r\n protected handleError(error: any) {\r\n const applicationError = error.headers['Application-Error'];\r\n\r\n if (applicationError) {\r\n //return Observable.throw(applicationError);\r\n return throwError(applicationError);\r\n }\r\n\r\n let modelStateErrors: any = '';\r\n\r\n if (error.data) {\r\n for (const key in error.data) {\r\n if (error.data[key]) {\r\n modelStateErrors += error.data[key] + '\\n';\r\n }\r\n }\r\n }\r\n\r\n modelStateErrors = modelStateErrors = '' ? null : modelStateErrors;\r\n //return Observable.throw(modelStateErrors || 'Server error');\r\n return throwError(modelStateErrors || 'Server error');\r\n }\r\n}\r\n","/* General app Vuex store\r\n *\r\n *\r\n */\r\n\r\nimport { ActionTree } from 'vuex';\r\nimport { GetterTree } from 'vuex';\r\nimport { MutationTree } from 'vuex';\r\nimport { Module } from 'vuex';\r\n\r\n\r\nimport { RootState } from '../types';\r\n\r\n// import { EventBus } from '../../event-bus';\r\n//import DemoState from '../../models/DemoState';\r\n\r\n\r\n\r\n\r\nconst state = {\r\n isLoading: false,\r\n isLoadingError: false,\r\n loadingMsg: 'starting...',\r\n\r\n};\r\n\r\n//export const state: DemoState = {\r\n// Mode: true,\r\n// State: '',\r\n//};\r\n\r\n\r\n\r\nconst getters = {\r\n isLoading: (mainState: any) => mainState.isLoading,\r\n isLoadingError: (mainState: any) => mainState.isLoadingError,\r\n loadingMsg: (mainState: any) => mainState.loadingMsg,\r\n\r\n //alertType: (alertState: any) => alertState.type,\r\n //alerts: (alertState: any) => alertState.personalAlerts,\r\n\r\n};\r\n//export const getters: GetterTree = {\r\n// mode(demoState): boolean {\r\n// return demoState.Mode;\r\n// },\r\n//};\r\n\r\n\r\nexport const mutations = { //: MutationTree = {\r\n loading(mainState) {\r\n mainState.isLoading = true;\r\n },\r\n notLoading(mainState) {\r\n mainState.isLoading = false;\r\n },\r\n\r\n loadingError(mainState) {\r\n mainState.isLoadingError = true;\r\n },\r\n notLoadingError(mainState) {\r\n mainState.isLoadingError = false;\r\n\r\n },\r\n\r\n setLoadingMsg(mainState, message) {\r\n mainState.loadingMsg = message;\r\n },\r\n\r\n //incrementCounter(state) {\r\n // state.counter++;\r\n //},\r\n //resetCounter(state) {\r\n // state.counter = 0;\r\n //},\r\n};\r\n\r\n\r\nexport const actions = { //: ActionTree = {\r\n loading({ commit }): any {\r\n commit('isLoading', true);\r\n },\r\n notLoading({ commit }): any {\r\n commit('isLoading', false);\r\n },\r\n loadingError({ commit }): any {\r\n commit('isLoadingError', true);\r\n },\r\n notLoadingError({ commit }): any {\r\n commit('isLoadingError', false);\r\n },\r\n\r\n setLoadingMsg({ commit }, message): any {\r\n commit('loadingMsg', message);\r\n },\r\n\r\n //increment({ commit }): any {\r\n // commit('incrementCounter');\r\n //},\r\n //reset({ commit }): any {\r\n // commit('resetCounter');\r\n //},\r\n};\r\n\r\n\r\n\r\nexport default { //const demoMode: Module = {\r\n namespaced: true,\r\n state,\r\n getters,\r\n actions,\r\n mutations,\r\n};\r\n\r\n","\r\n\r\n//import axios from 'axios';\r\nimport apiClient from '@/plugins/http-common';\r\n\r\nimport { Credentials } from '@/models/credentials.interface';\r\nimport { BaseService } from './base.service';\r\nimport { Observable, of, from } from 'rxjs'; \r\nimport { map, catchError } from 'rxjs/operators';\r\nimport { UserRole } from '../helpers/userRoles';\r\n\r\n\r\n\r\nclass AuthService extends BaseService {\r\n\r\n private static instance: AuthService;\r\n\r\n private constructor() { super(); }\r\n\r\n public static get Instance() {\r\n // Do you need arguments? Make it a regular method instead.\r\n return this.instance || (this.instance = new this());\r\n }\r\n\r\n\r\n // testing:\r\n // This should come from Vuex instead - not a web service call\r\n public getCurrentUser() {\r\n return { \r\n id: 101,\r\n role: UserRole.COLLEGEADMIN,\r\n name: 'first last name',\r\n email: 'myemail@school.edu',\r\n };\r\n \r\n }\r\n\r\n public login(credentials: Credentials): Observable {\r\n\r\n return from(apiClient.post('/api/auth/login', credentials))\r\n .pipe(\r\n map((res: any) => res.data),\r\n catchError((error: any) => this.handleError(error.response)),\r\n );\r\n // map((res: any) => res.data.auth_token),\r\n }\r\n\r\n\r\n\r\n public refreshLoginState_simp() {\r\n return apiClient.get('/api/profile/me');\r\n }\r\n\r\n\r\n public refreshLoginState(): Observable {\r\n\r\n // api/profile/me \r\n //return from(axios.post('/api/auth/loginLti'))\r\n return from(apiClient.get('/api/profile/me'))\r\n .pipe(\r\n map((res: any) => res.data),\r\n catchError((error: any) => this.handleError(error.response)),\r\n );\r\n // map((res: any) => res.data.auth_token),\r\n }\r\n\r\n\r\n public logout(): Observable {\r\n\r\n return from(apiClient.post('/api/auth/logout'))\r\n .pipe(\r\n map((res: any) => res.data),\r\n catchError((error: any) => this.handleError(error.response)),\r\n ); \r\n }\r\n\r\n\r\n\r\n public checkLoginStatus(): Observable {\r\n\r\n return from(apiClient.get('/api/auth/login-status'))\r\n .pipe(\r\n map((res: any) => res.data),\r\n catchError((error: any) => this.handleError(error.response)),\r\n ); \r\n }\r\n\r\n\r\n\r\n// public facebookLogin(accessToken: string): Observable {\r\n \r\n //return Observable.fromPromise(axios.post(`${this.api}/externalauth/facebook`, { accessToken }))\r\n // .map((res: any) => res.data.auth_token)\r\n // .catch((error: any) => this.handleError(error.response));\r\n // }\r\n}\r\n\r\n// export a singleton instance in the global namespace\r\nexport const authService = AuthService.Instance;\r\n\r\n\r\n","/* Authentication Vuex store\r\n * \r\n * \r\n */\r\n\r\nimport { Credentials } from '../../models/credentials.interface';\r\nimport { UserRole } from '@/helpers/userRoles';\r\nimport { UserAccount } from '@/models/UserAccount';\r\n\r\nimport { authService } from '../../services/auth.service';\r\nimport { EventBus } from '../../event-bus';\r\n\r\nimport CryptoJS from 'crypto-js';\r\n\r\n\r\n\r\nconst AuthStatus = {\r\n NONE: '',\r\n LOGGED_IN: 'logged-in',\r\n LOGGED_OUT: 'logged-out',\r\n ERROR: 'error',\r\n TRYING_LOGIN: 'attempting authentication request',\r\n};\r\n\r\n//\r\nconst state = {\r\n currentUser: getUserObj(),\r\n status: localStorage.getItem('auth-status') || AuthStatus.LOGGED_OUT,\r\n role: localStorage.getItem('role') || UserRole.NONE, \r\n};\r\n\r\n\r\n\r\n\r\nfunction getUserObj() {\r\n try {\r\n const usrString: string = localStorage.getItem('current-user') || '';\r\n\r\n\r\n // new: 2-22-22 Paul - maybe intercept empty local user profile, get from server\r\n // testing \r\n //if (usrString === '') {\r\n // get profile and auth state:\r\n //actions.authLoadFromServer();\r\n\r\n //}\r\n\r\n\r\n return JSON.parse(\r\n CryptoJS.AES.decrypt(usrString, localStorage.getItem('role') || 'fallback')\r\n .toString(CryptoJS.enc.Utf8)\r\n || '{}') as UserAccount;\r\n \r\n } catch {\r\n return {} as UserAccount;\r\n // Vue doesn't like a null val in the Vuex getters - at least the way I'm using them.\r\n }\r\n\r\n // handle nulls:\r\n // \"fieldB\" : detailsObj.b === undefined ? null : detailsObj.b,\r\n}\r\n\r\n\r\nconst getters = {\r\n isAuthenticated: (authState: any) => authState.status === AuthStatus.LOGGED_IN, // !!authState.currentUser, //!!authState.token,\r\n authUser: (authState: any) => authState.currentUser, // problem w/ type?\r\n authStatus: (authState: any) => authState.status,\r\n authRole: (authState: any) => authState.role,\r\n\r\n userOrgName: (authState: any) => authState.currentUser.orgName,\r\n userOrgNameShort: (authState: any) => authState.currentUser.orgNameShort,\r\n userOrgId: (authState: any) => authState.currentUser.orgId,\r\n selectedOrgName: (authState: any) => authState.currentUser.orgName,\r\n selectedOrgId: (authState: any) => authState.currentUser.orgId,\r\n \r\n};\r\n\r\n\r\nconst actions = {\r\n authRequest: ({ commit, dispatch }: { commit: any, dispatch: any }, credentials: Credentials) => {\r\n return new Promise((resolve, reject) => {\r\n commit('authRequest');\r\n authService.login(credentials)\r\n .subscribe((result: any) => {\r\n\r\n const id = result.role || 'fallback'; // identityId; //.substring(0,8);\r\n //console.log('key: ' + id);\r\n const userObjString = CryptoJS.AES.encrypt(JSON.stringify(result), id).toString();\r\n\r\n localStorage.setItem('current-user', userObjString); //JSON.stringify(result)); // result); //\r\n localStorage.setItem('auth-status', AuthStatus.LOGGED_IN);\r\n localStorage.setItem('role', result.role); // UserRole.APPSUPER); // testing\r\n\r\n commit('authSuccess', result);\r\n EventBus.$emit(AuthStatus.LOGGED_IN, null);\r\n\r\n // Gets user profile? redundant now.\r\n //dispatch('user/userRequest', null, { root: true });\r\n\r\n resolve(result);\r\n },\r\n (errors: any) => {\r\n commit('authError', errors);\r\n clearLoginPersistedStorage(); \r\n reject(errors);\r\n });\r\n });\r\n },\r\n\r\n\r\n authRefreshLoginState: ({ commit, dispatch }: { commit: any, dispatch: any }) => {\r\n //ltiAuthRequest: ({ commit, dispatch }: { commit: any, dispatch: any }, credentials: Credentials) => {\r\n return new Promise((resolve, reject) => {\r\n // commit('authRefreshLoginState');\r\n commit('authRequest');\r\n // get user profile, assuming the LTI http post to server was a successful LTI launch \r\n authService.refreshLoginState() \r\n .subscribe((result: any) => {\r\n\r\n localStorage.setItem('current-user', result);\r\n localStorage.setItem('auth-status', AuthStatus.LOGGED_IN);\r\n localStorage.setItem('role', result.role); \r\n\r\n commit('authSuccess', result);\r\n EventBus.$emit(AuthStatus.LOGGED_IN, null);\r\n\r\n console.log('authRefreshLoginState - success');\r\n\r\n // Gets user profile? \r\n //dispatch('user/userRequest', null, { root: true });\r\n\r\n resolve(result);\r\n },\r\n (errors: any) => {\r\n commit('authError', errors);\r\n clearLoginPersistedStorage();\r\n reject(errors);\r\n });\r\n });\r\n },\r\n\r\n\r\n authStatusCheck: ({ commit, dispatch }: { commit: any, dispatch: any }) => {\r\n return new Promise((resolve, reject) => { \r\n authService.checkLoginStatus()\r\n .subscribe((result: any) => {\r\n //.subscribe((result: any) => {\r\n // API returns OK if logged in\r\n\r\n console.log('checkLoginStatus - success');\r\n // \r\n\r\n\r\n //resolve(); // Paul: 2-22-22 call resolve here?\r\n resolve(result);\r\n },\r\n (errors: any) => {\r\n\r\n // if (error.response.status === 401)\r\n\r\n console.log('checkLoginStatus - error' + errors);\r\n // Which commit?\r\n // commit('authError', errors);\r\n commit('authLogout');\r\n clearLoginPersistedStorage();\r\n reject(errors);\r\n });\r\n });\r\n },\r\n\r\n\r\n\r\n\r\n\r\n\r\n //facebookAuthRequest: ({ commit, dispatch }: { commit: any, dispatch: any }, accessToken: string) => {\r\n // return new Promise((resolve, reject) => {\r\n // commit('authRequest');\r\n // authService.facebookLogin(accessToken)\r\n // .subscribe((result: any) => {\r\n // localStorage.setItem('auth-token', result); // stash the auth token in localStorage\r\n // commit('authSuccess', result);\r\n // EventBus.$emit('logged-in', null);\r\n // dispatch('user/userRequest', null, { root: true });\r\n // resolve(result);\r\n // },\r\n // (errors: any) => {\r\n // commit('authError', errors);\r\n // localStorage.removeItem('auth-token');\r\n // reject(errors);\r\n // });\r\n // });\r\n //},\r\n\r\n\r\n\r\n // app logout method - doesn't call server, now at least mid-2021. \r\n // JWTs expires on their own - no server state.\r\n authLogout: ({ commit, dispatch }: { commit: any, dispatch: any }) => {\r\n return new Promise((resolve, reject) => {\r\n authService.logout()\r\n .subscribe(() => {\r\n //.subscribe((result: any) => {\r\n // API returns OK if logged in\r\n\r\n // do nothing?\r\n // resolve();\r\n },\r\n (errors: any) => {\r\n\r\n // if (error.response.status === 401) \r\n reject(errors);\r\n });\r\n commit('authLogout');\r\n clearLoginPersistedStorage(); \r\n resolve();\r\n });\r\n },\r\n};\r\n\r\n\r\n// TODO: mutations need to be single values?\r\nconst mutations = {\r\n authRequest: (authState: any) => {\r\n authState.status = 'attempting authentication request';\r\n },\r\n authSuccess: (authState: any, user: UserAccount) => { // authToken: string) => {\r\n authState.status = AuthStatus.LOGGED_IN;\r\n authState.currentUser = user;\r\n authState.role = user.role;\r\n //authState.token = authToken;\r\n },\r\n authError: (authState: any) => {\r\n authState.status = AuthStatus.ERROR;\r\n },\r\n authLogout: (authState: any) => {\r\n //authState.token = '';\r\n authState.status = AuthStatus.LOGGED_OUT;\r\n authState.currentUser = '';\r\n authState.role = UserRole.NONE;\r\n }, \r\n};\r\n\r\n\r\n\r\n\r\nfunction clearLoginPersistedStorage() {\r\n localStorage.setItem('current-user', '');\r\n localStorage.setItem('auth-status', AuthStatus.LOGGED_OUT);\r\n localStorage.setItem('role', UserRole.NONE);\r\n\r\n}\r\n\r\n//function parseJwt(token) {\r\n// const base64Url = token.split('.')[1];\r\n// const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n// const buff = new Buffer(base64, 'base64');\r\n// const payloadinit = buff.toString('ascii');\r\n// const payload = JSON.parse(payloadinit);\r\n// console.log(payload);\r\n// return payload;\r\n//}\r\n\r\n\r\nexport default {\r\n state,\r\n getters,\r\n actions,\r\n mutations,\r\n};\r\n","/* Client alerts - Vuex store\r\n * \r\n * \r\n */\r\nimport { Alert } from '@/models/Alert';\r\n\r\n\r\n\r\n\r\nconst state = {\r\n type: null,\r\n message: null,\r\n\r\n personalAlerts: getUserAlerts(),\r\n\r\n};\r\n\r\n\r\nconst getters = {\r\n alertMessage: (alertState: any) => alertState.message, \r\n alertType: (alertState: any) => alertState.type,\r\n\r\n alerts: (alertState: any) => alertState.personalAlerts, \r\n\r\n\r\n};\r\n\r\n\r\nconst actions = {\r\n success({ commit }, message) {\r\n commit('success', message);\r\n },\r\n error({ commit }, message) {\r\n commit('error', message);\r\n },\r\n clear({ commit }) {\r\n commit('clear');\r\n },\r\n};\r\n\r\n\r\nconst mutations = {\r\n success(alertState, message) {\r\n alertState.type = 'alert-success';\r\n alertState.message = message;\r\n },\r\n error(alertState, message) {\r\n alertState.type = 'alert-danger';\r\n alertState.message = message;\r\n },\r\n clear(alertState) {\r\n alertState.type = null;\r\n alertState.message = null;\r\n },\r\n};\r\n\r\n\r\n// VUEX exports:\r\nexport default { // const alert =\r\n namespaced: true,\r\n state,\r\n getters,\r\n actions,\r\n mutations,\r\n};\r\n\r\n\r\n\r\n\r\nfunction getUserAlerts() {\r\n\r\n let alerts: Alert[] = [];\r\n\r\n alerts.push({\r\n id: 1,\r\n name: 'Test Alert',\r\n body: 'main message body',\r\n excerpt: 'summary',\r\n status: 'active',\r\n severity: 'info',\r\n actionUrl: 'https://commons.edtech.sbctc.edu/contracts',\r\n visibilityRole: 'member',\r\n\r\n organizationName: 'ETAG',\r\n createdBy: 'ETAG',\r\n //createdOn = '4-12-2022',\r\n\r\n productId: 101,\r\n productSlug: 'ally',\r\n productName: 'Ally',\r\n\r\n } as Alert\r\n );\r\n return alerts;\r\n}\r\n","import Vue from 'vue';\r\nimport Vuex, { StoreOptions } from 'vuex';\r\nimport { RootState } from './types';\r\nimport VueMeta from 'vue-meta';\r\n\r\n\r\nimport main from './modules/main';\r\nimport auth from './modules/auth';\r\nimport alert from './modules/alert';\r\n\r\n//import { demoMode } from './modules/main';\r\n\r\n//import user from './modules/user';\r\n//import { counter } from './counter/index';\r\n\r\n\r\n\r\nVue.use(Vuex, VueMeta, { refreshOnceOnNavigation: true });\r\n\r\n\r\n// Vuex structure based on https://codeburst.io/vuex-and-typescript-3427ba78cfa8\r\n\r\nconst store: StoreOptions = {\r\n state: {\r\n version: '1.0.0', // a simple property\r\n },\r\n mutations: {\r\n\r\n },\r\n actions: {\r\n\r\n },\r\n modules: {\r\n //alert,\r\n alert: {\r\n namespaced: true,\r\n state: alert.state,\r\n mutations: alert.mutations,\r\n getters: alert.getters,\r\n actions: alert.actions,\r\n },\r\n\r\n main,\r\n //counter,\r\n //demoMode,\r\n\r\n auth: {\r\n namespaced: true,\r\n state: auth.state,\r\n mutations: auth.mutations,\r\n getters: auth.getters,\r\n actions: auth.actions,\r\n },\r\n //user: {\r\n // namespaced: true,\r\n // state: user.state,\r\n // actions: user.actions,\r\n // mutations: user.mutations,\r\n // getters: user.getters,\r\n //},\r\n\r\n //contractTypes, // \r\n //visibilityLevels, //\r\n // userRoles, //\r\n\r\n\r\n },\r\n};\r\n\r\nexport default new Vuex.Store(store);\r\n\r\n\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + ({\"179\":\"main\",\"328\":\"admin\",\"378\":\"user\",\"501\":\"public\"}[chunkId] || chunkId) + \"-legacy.\" + {\"86\":\"b027eb3e\",\"179\":\"5ef15cf2\",\"328\":\"33d21099\",\"378\":\"b4fd3bcc\",\"501\":\"b98dfcf8\",\"660\":\"dda847fa\",\"830\":\"2acf98e8\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + ({\"179\":\"main\",\"328\":\"admin\",\"378\":\"user\",\"501\":\"public\"}[chunkId] || chunkId) + \".\" + {\"179\":\"60d84008\",\"328\":\"3a42748d\",\"378\":\"b7930ef8\",\"501\":\"82441a11\",\"830\":\"8c16423f\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"appstore-hub:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"179\":1,\"328\":1,\"378\":1,\"501\":1,\"830\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkappstore_hub\"] = self[\"webpackChunkappstore_hub\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(14843); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["EventBus","Vue","UserRole","NONE","BASE","ANYROLE","ADMINSUFFIX","APPSUPER","ORGADMIN","ORGSTAFF","ORGSUPER","COLLEGESTAFF","COLLEGEADMIN","COLLEGESUPER","GROUPADMIN","GROUPSTAFF","Vuetify","components","VAlert","VApp","VLayout","VNavigationDrawer","VFlex","VFooter","VBreadcrumbs","VList","VCard","VBtn","VIcon","VImg","VToolbar","VBanner","VDataTable","VProgressLinear","VTooltip","VForm","opts","theme","themes","light","primary","secondary","accent","error","info","success","warning","dark","colors","Router","router","mode","base","process","routes","path","name","meta","title","component","authorize","props","scrollBehavior","to","from","savedPosition","scrollTo","hash","parseInt","y","goTo","duration","setTimeout","DEFAULT_TITLE","beforeEach","next","currentRole","store","query","redirect","fullPath","length","includes","afterEach","undefined","document","register","ready","console","log","cached","updated","window","location","reload","offline","staticClass","$event","stopPropagation","_c","ref","attrs","staticStyle","_vm","scopedSlots","key","on","_u","_v","pageUrl","directives","value","expression","fn","messageCount","rawName","isAuthenticated","_s","profileMenu","callback","authRole","menu","model","$$v","alertItems","i","domProps","staticRenderFns","render","App","link","icon","cachedViewsList","text","this","$route","content","appTitlePrefix","property","authUser","firstName","substr","lastName","$refs","firstProfileMenuLink","$el","focus","requestAnimationFrame","profileMenuButton","cachedViews","role","accountService","$store","dispatch","then","$router","push","Object","keys","checkLoginStatus","homeHeaderLink","payLoad","__decorate","Watch","immediate","deep","Component","computed","mapGetters","userOrgName","userOrgNameShort","demo","count","metaInfo","charset","date","format","Date","e","TiptapVuetifyPlugin","vuetify","dateFilter","VueMaskDirective","h","$mount","axios","response","data","status","Promise","reject","apiClient","timeout","headers","AccountService","userRegistration","userName","pipe","map","res","catchError","handleError","userId","newUser","roles","id","toUpperCase","Role","v","test","instance","BaseService","Instance","applicationError","throwError","modelStateErrors","state","isLoading","isLoadingError","loadingMsg","getters","mainState","mutations","loading","notLoading","loadingError","notLoadingError","setLoadingMsg","message","actions","commit","namespaced","AuthService","email","credentials","authService","AuthStatus","LOGGED_IN","LOGGED_OUT","ERROR","TRYING_LOGIN","currentUser","getUserObj","localStorage","getItem","usrString","JSON","parse","CryptoJS","toString","authState","authStatus","orgName","orgNameShort","userOrgId","orgId","selectedOrgName","selectedOrgId","authRequest","resolve","login","subscribe","result","userObjString","stringify","setItem","errors","clearLoginPersistedStorage","authRefreshLoginState","refreshLoginState","authStatusCheck","authLogout","logout","authSuccess","user","authError","type","personalAlerts","getUserAlerts","alertMessage","alertState","alertType","alerts","clear","body","excerpt","severity","actionUrl","visibilityRole","organizationName","createdBy","productId","productSlug","productName","Vuex","VueMeta","refreshOnceOnNavigation","version","modules","alert","main","auth","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","bind","target","head","appendChild","Symbol","toStringTag","p","createStylesheet","fullhref","linkTag","rel","onLinkComplete","errorType","realHref","href","err","Error","code","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}