{"version":3,"file":"js/app.0d88a3d4.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) + \".\" + {\"86\":\"d8f740a4\",\"179\":\"85a3bfca\",\"328\":\"5e24755a\",\"378\":\"b08aebd5\",\"423\":\"7e9cbe8c\",\"501\":\"a34bb5c7\"}[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\",\"423\":\"8c16423f\",\"501\":\"82441a11\"}[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,\"423\":1,\"501\":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(423 != chunkId) {\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__(4843); })\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","fn","_v","pageUrl","directives","value","expression","messageCount","isAuthenticated","rawName","_s","profileMenu","callback","authRole","menu","model","alertItems","i","domProps","staticRenderFns","render","App","link","icon","this","cachedViewsList","text","metaInfo","$route","content","appTitlePrefix","property","userInitials","authUser","firstName","substr","lastName","handleProfileMenuTransition","$refs","firstProfileMenuLink","$el","focus","requestAnimationFrame","profileMenuButton","HandleAuthStatusChange","cachedViews","getRoleName","role","accountService","logoff","$store","dispatch","then","$router","push","checkLoginStatus","Object","keys","created","homeHeaderLink","payLoad","beforeDestroyed","destroyed","mounted","__decorate","Watch","immediate","deep","Component","computed","mapGetters","userOrgName","userOrgNameShort","demo","count","charset","date","format","Date","e","TiptapVuetifyPlugin","vuetify","dateFilter","VueMaskDirective","h","$mount","axios","response","data","status","Promise","reject","apiClient","timeout","headers","AccountService","BaseService","constructor","super","Instance","instance","async","userRegistration","setPassword","userName","setMyPassword","isAdmin","pipe","map","res","catchError","handleError","enableAccount","userId","disableAccount","addAccount","newUser","getUserRoles","roles","id","toUpperCase","Role","getRoleDisplayName","getPwdValidationRules","v","test","applicationError","throwError","modelStateErrors","state","isLoading","isLoadingError","loadingMsg","getters","mainState","mutations","loading","notLoading","loadingError","notLoadingError","setLoadingMsg","message","actions","commit","namespaced","AuthService","getCurrentUser","email","login","credentials","refreshLoginState_simp","refreshLoginState","logout","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","subscribe","result","userObjString","stringify","setItem","errors","clearLoginPersistedStorage","authRefreshLoginState","authStatusCheck","authLogout","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":""}