{"version":3,"file":"spa-services-app.js","mappings":"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","sources":["webpack:///./src/services/app/fullLogout.js","webpack:///./src/services/app/api/logBrowser.js","webpack:///./src/services/app/syncData.js","webpack:///./src/services/app/error/load-by-route.js","webpack:///./src/services/app/setLayout.js","webpack:///./src/services/app/error/reroute.js","webpack:///./src/services/app/api/makeCall.js","webpack:///./src/services/app/storeSyncData.js","webpack:///./src/services/app/error/generic-alert.js","webpack:///./src/services/app/loadDatepicker.js","webpack:///./src/services/app/validateForm.js","webpack:///./src/services/app/checkToken.js","webpack:///./src/services/app/initTooltips.js"],"sourcesContent":["/*\n- AS_FullLogout\n-- reset or clear everything from the store\n-- 2023.03.22\n*/\n\nimport config from '@/config';\nimport store from '@/store';\n\nexport default () => {\n\treturn new Promise((resolve) => {\n\t\t// store.commit('loaders/ADD_ID', 'App');\n\t\t\n\t\tstore.commit('api/SET_TOKEN', '');\n\n\t\tstore.commit('api/SET_CUSTOMER_ID', '');\n\n\t\tstore.commit('api/SET_SESSION_ID', '');\n\n\t\tstore.commit('app/SET_SHOW_ALPHA_FEATURES', false);\n\t\tstore.commit('app/SET_SHOW_BETA_FEATURES', false);\n\t\t\n\t\tif(config.platformId === config.enums.Platform.ONLINE){\n\t\t\tstore.commit('classes/SET_LIST', []);\n\t\t\tstore.commit('paperEdit/autoSave/SET_TIMER_MS', 0);\n\t\t}\n\n\t\tstore.commit('customer/SET_ALTERNATIVE_EMAILS', []);\n\t\tstore.commit('customer/SET_CALENDAR_STARTING_DAY_OF_WEEK', 0);\n\t\tstore.commit('customer/SET_CALENDAR_STARTING_HOUR', 0);\n\t\tstore.commit('customer/SET_CALENDAR_VIEW_ID', 0);\n\t\tstore.commit('customer/SET_EMAIL', '');\n\t\tstore.commit('customer/SET_EXPIRATION_DATE', '');\n\t\tstore.commit('customer/SET_FIRST_NAME', '');\n\t\tstore.commit('customer/SET_FULL_NAME', '');\n\t\tstore.commit('customer/SET_HAS_PRIORITY_SUPPORT', false);\n\t\tstore.commit('customer/SET_ID', '0');\n\t\tstore.commit('customer/SET_INSTITUTION', '');\n\t\tstore.commit('customer/SET_IS_CANCELLED', false);\n\t\tstore.commit('customer/SET_IS_IMPERSONATING', false);\n\t\tstore.commit('customer/SET_IS_RECURRING', false);\n\t\tstore.commit('customer/SET_LAST_NAME', '');\n\t\tstore.commit('customer/SET_ORGANIZATION_EXPIRATION_DATE', null);\n\t\tstore.commit('customer/SET_ORGANIZATION_ID', 0);\n\t\tstore.commit('customer/SET_ORGANIZATION_STATUS_ID', 0);\n\t\tstore.commit('customer/SET_PAPER_AUTO_SAVE', 0);\n\t\tstore.commit('customer/SET_RENEWAL_PERIOD', 0);\n\t\tstore.commit('customer/SET_ROLE', 0);\n\t\tstore.commit('customer/SET_TIME_ZONE', 0);\n\n\t\tstore.commit('LAST_RELOAD_DATE', '');\n\t\tstore.commit('LAST_SYNC_DATE', '');\n\t\t\n\t\tstore.commit('REFERENCE_LIBRARY_COMPRESSED_STRING', '');\n\t\tstore.commit('REFERENCE_LIBRARY_GENESIS_COMPRESSED_STRING', '');\n\t\tstore.commit('references/CLEAR_RECENT_TYPE_IDS');\n\t\tstore.commit('researchNotes/CLEAR_LIST');\n\n\t\tif(config.platformId === config.enums.Platform.ONLINE){\n\t\t\tstore.commit('paperList/CLEAR_LIST');\n\t\t\tstore.commit('reminders/SET_LIST', []);\n\t\t\tstore.commit('work/SET_LIST', []);\n\t\t}\n\n\t\treturn resolve();\n\t});//e:Promise\n}","/*\n- ApiS_LogBrowser\n-- logs the users browser information in the vuex store\n-- 2023.07.13\n*/\nimport _forEach from 'lodash/forEach';\nimport { detect } from 'detect-browser';\nimport store from '@/store';\n\nexport default () => {\n\treturn new Promise((resolve) => {\n\t\t// console.log('ApiS_LogBrowser');\n\n\t\tconst browser = detect();\n\t\t\t\n\t\tlet os = '';\n\n\t\tconst clientStrings = [\n\t\t\t{s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},\n\t\t\t{s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},\n\t\t\t{s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},\n\t\t\t{s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},\n\t\t\t{s:'Windows Vista', r:/Windows NT 6.0/},\n\t\t\t{s:'Windows Server 2003', r:/Windows NT 5.2/},\n\t\t\t{s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},\n\t\t\t{s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},\n\t\t\t{s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},\n\t\t\t{s:'Windows 98', r:/(Windows 98|Win98)/},\n\t\t\t{s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},\n\t\t\t{s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},\n\t\t\t{s:'Windows CE', r:/Windows CE/},\n\t\t\t{s:'Windows 3.11', r:/Win16/},\n\t\t\t{s:'Android', r:/Android/},\n\t\t\t{s:'Open BSD', r:/OpenBSD/},\n\t\t\t{s:'Sun OS', r:/SunOS/},\n\t\t\t{s:'Chrome OS', r:/CrOS/},\n\t\t\t{s:'Linux', r:/(Linux|X11(?!.*CrOS))/},\n\t\t\t{s:'iOS', r:/(iPhone|iPad|iPod)/},\n\t\t\t{s:'Mac OS X', r:/Mac OS X/},\n\t\t\t{s:'Mac OS', r:/(Mac OS|MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},\n\t\t\t{s:'QNX', r:/QNX/},\n\t\t\t{s:'UNIX', r:/UNIX/},\n\t\t\t{s:'BeOS', r:/BeOS/},\n\t\t\t{s:'OS/2', r:/OS\\/2/},\n\t\t\t{s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/}\n\t\t];\n\t\n\t\t_forEach(clientStrings, (cs)=>{\n\t\t\tif (cs.r.test(navigator.userAgent)) {\n\t\t\t\tos = cs.s;\n\t\t\t\treturn;\t// stop when you find one\n\t\t\t}\n\t\t});\n\n\t\tlet osVersion = '';\n\t\tif (/Windows/.test(os)) {\n\t\t\tosVersion = /Windows (.*)/.exec(os)[1];\n\t\t\tos = 'Windows';\n\t\t}\n\n\t\t// console.log(browser);\n\n\t\tstore.commit('api/SET_BROWSER_NAME', browser.name || '');\n\t\tstore.commit('api/SET_BROWSER_VERSION', browser.version || '');\n\t\tstore.commit('api/SET_OS_NAME', browser.os);\n\t\tstore.commit('api/SET_OS_VERSION', os + ' ' + osVersion);\n\n\t\tresolve();\n\n\t});//e:Promise\n}\n","/*\n- AS_SyncData\n-- Syncs the users data\n-- word add in uses RS_UpdateAfterSync as part of this process so this on is PO only\n*/\n \nimport _forEach from 'lodash/forEach';\nimport _has from 'lodash/has';\nimport _isEmpty from 'lodash/isEmpty';\nimport config from '@/config';\nimport ApiS_MakeCall from '@/services/app/api/makeCall';\nimport AS_CheckToken from '@/services/app/checkToken';\nimport AS_StoreSyncData from '@/services/app/storeSyncData';\nimport { isBefore } from 'date-fns';\nimport { parseISO } from 'date-fns';\n// import RS_UpdateAfterSync from '@/services/reference/updateAfterSync';\nimport router from '@/router';\nimport store from '@/store';\n\nexport default ($opts) => {\n\treturn new Promise((resolve, reject) => {\n\t\t// console.log('AS_SyncData');\n\n\t\tconst _$opts = $opts || {};\n\t\tconst _isStealthSync = (_has(_$opts, 'isStealthSync')) ? _$opts.isStealthSync : false;\n\n\t\tif(!_isStealthSync){\n\t\t\tstore.commit('loaders/ADD_ID', 'App');\n\t\t}\n\n\t\tlet params = {\n\t\t\tlastModifiedDate: '',\n\t\t}\n\n\t\tif(config.platformId === config.enums.Platform.CHROME_EXT){\n\t\t\tchrome.storage.local.get('lastSyncDate', (result) => {\n\t\t\t\tif(!_isEmpty(result) && result.lastSyncDate){\n\t\t\t\t\t// force resync if last sync date is NOT BEFORE a specific date defined in config\n\t\t\t\t\tif(!isBefore(parseISO(result.lastSyncDate), parseISO(config.forceResyncBeforeDate))){ //\n\t\t\t\t\t\tparams['lastModifiedDate'] = result.lastSyncDate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tApiS_MakeCall({\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\tparams,\n\t\t\t\t\tresponseType: 'json',\n\t\t\t\t\turl: 'v4/Sync',\n\t\t\t\t}).then((responseData)=>{\n\t\t\t\t\tif(!config.isLive){\n\t\t\t\t\t\tconsole.log('v4/sync responseData');\n\t\t\t\t\t\tconsole.log(responseData);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tAS_StoreSyncData(responseData).then(()=>{\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}).catch(()=>{\n\t\t\t\t\t\treject();\n\t\t\t\t\t});//e:AS_StoreSyncData\n\t\t\t\t});//e:ApiS_MakeCall\n\t\t\t});//chrome.storage.local.get:lastSyncDate\n\n\t\t} else {\n\t\t\t// force resync if last sync date is NOT BEFORE a specific date defined in config\n\t\t\tif(!isBefore(parseISO(store.state.lastSyncDate), parseISO(config.forceResyncBeforeDate))){ //2099-01-01T00:00:00\n\t\t\t\tif(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t// do not set a Last Sync Date if the Customer Papers array has content (why was this here?)\n\t\t\t\t\t// console.log('isCustomerPapersHaveLastSyncDate');\n\t\t\t\t\t// console.log(isCustomerPapersHaveLastSyncDate);\n\t\t\t\t\t// if(store.state.paperList.list.length > 0 || isCustomerPapersHaveLastSyncDate){\n\t\t\t\t\t\tparams['lastModifiedDate'] = store.state.lastSyncDate\n\t\t\t\t\t// }\n\n\t\t\t\t} else if(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\t// 2023.07.25 - commented this checked out - i think it's logic isn't working right and some users are never getting a last modified date passed\n\t\t\t\t\t// if(store.state.refLibCompString != '' && store.state.refLibCompStringGenesis != '') {\n\t\t\t\t\t\t// users that have not ran the new version will have a blank string for state.refLibCompString - if that string is blank do not pass a lastModifiedDate to grab everything again\n\t\t\t\t\t\tparams['lastModifiedDate'] = store.state.lastSyncDate;\n\t\t\t\t\t// }\n\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tconsole.log('Force Full Resync');\n\n\t\t\t\t// clear everything out so it can be fully replaced\n\t\t\t\tstore.commit('LAST_SYNC_DATE', '');\n\t\t\t\tstore.commit('REFERENCE_LIBRARY', []);\n\t\t\t\t// store.commit('refLibCompString', '');\n\t\t\t\tstore.commit('REFERENCE_LIBRARY_GENESIS', []);\n\t\t\t\t// store.commit('refLibCompStringGenesis', '');\n\t\t\t}\n\n\t\t\tAS_CheckToken().then(()=>{\n\t\t\t\tApiS_MakeCall({\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\tparams,\n\t\t\t\t\tresponseType: 'json',\n\t\t\t\t\turl: 'v4/Sync',\n\t\t\t\t}).then((responseData)=>{\n\t\t\t\t\tif(!config.isLive){\n\t\t\t\t\t\tconsole.log('v4/sync responseData');\n\t\t\t\t\t\tconsole.log(responseData);\n\t\t\t\t\t}\n\n\t\t\t\t\t// check user account subscription date\n\t\t\t\t\tlet useExpirationDate;\t// declare here and set in the next if block\n\t\t\n\t\t\t\t\t// check if user is in an organization\n\t\t\t\t\tif(responseData.customer.organizationID === 0){\n\t\t\t\t\t\t// NOT in an org - Check subscription expiration date\n\t\t\t\t\t\tuseExpirationDate = new Date(responseData.customer.subscriptionExpirationDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// IN an org - use whichever expiration date is later\n\t\t\t\t\t\tif(isBefore(parseISO(responseData.customer.subscriptionExpirationDate), parseISO(responseData.customer.organizationExpirationDate))){\n\t\t\t\t\t\t\t// customer is before org - use customer\n\t\t\t\t\t\t\tuseExpirationDate = new Date(responseData.customer.organizationExpirationDate);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// org is before customer - use org\n\t\t\t\t\t\t\tuseExpirationDate = new Date(responseData.customer.subscriptionExpirationDate);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tuseExpirationDate.setHours(0, 0, 0, 0);\n\t\t\t\t\t\n\t\t\t\t\t// save customer level stuff - this will be needed no matter the customer's membership\n\t\t\t\t\tstore.commit('LAST_SYNC_DATE', responseData.lastSyncDate);\n\t\t\t\t\t\n\t\t\t\t\tstore.commit('customer/SET_ALTERNATIVE_EMAILS', responseData.customer.alternativeEmails);\n\t\t\t\t\tstore.commit('customer/SET_CALENDAR_STARTING_DAY_OF_WEEK', responseData.customer.calendarStartingDayOfWeek);\n\t\t\t\t\tstore.commit('customer/SET_CALENDAR_STARTING_HOUR', responseData.customer.calendarStartingHour);\n\t\t\t\t\tstore.commit('customer/SET_CALENDAR_VIEW_ID', responseData.customer.calendarViewID);\n\t\t\t\t\tstore.commit('customer/SET_CITATION_AUTO_INSERT', responseData.customer.citationAutoInsert);\n\t\t\t\t\tstore.commit('customer/SET_EMAIL', responseData.customer.email);\n\t\t\t\t\tstore.commit('customer/SET_EXPIRATION_DATE', useExpirationDate);\n\t\t\t\t\tstore.commit('customer/SET_FIRST_NAME', responseData.customer.firstName);\n\t\t\t\t\tstore.commit('customer/SET_FULL_NAME', responseData.customer.fullName);\n\t\t\t\t\tstore.commit('customer/SET_HAS_PRIORITY_SUPPORT', responseData.customer.hasPrioritySupport);\n\t\t\t\t\tstore.commit('customer/SET_ID', responseData.customer.customerID.toString());\n\t\t\t\t\tstore.commit('customer/SET_INSTITUTION', responseData.customer.institution);\n\t\t\t\t\tstore.commit('customer/SET_IS_CANCELLED', responseData.customer.isCancelled);\n\t\t\t\t\tstore.commit('customer/SET_IS_IMPERSONATING', responseData.customer.isImpersonating);\n\t\t\t\t\tstore.commit('customer/SET_IS_RECURRING', responseData.customer.isRecurring);\n\t\t\t\t\tstore.commit('customer/SET_LAST_NAME', responseData.customer.lastName);\n\t\t\t\t\tstore.commit('customer/SET_ORGANIZATION_EXPIRATION_DATE', responseData.customer.organizationExpirationDate);\n\t\t\t\t\tstore.commit('customer/SET_ORGANIZATION_ID', responseData.customer.organizationID);\n\t\t\t\t\tstore.commit('customer/SET_ORGANIZATION_STATUS_ID', responseData.customer.organizationStatusID);\n\t\t\t\t\tstore.commit('customer/SET_PAPER_AUTO_SAVE', responseData.customer.paperAutoSave);\n\n\t\t\t\t\tif(\n\t\t\t\t\t\tresponseData.customer.preferredFormatVersionID === '' || responseData.customer.preferredFormatVersionID === 0\n\t\t\t\t\t){\n\t\t\t\t\t\t// default to APA 7 if this isn't auto set for some reason from the sync call\n\t\t\t\t\t\tstore.commit('customer/SET_PREFERRED_FORMAT_VERSION_ID', config.enums.Format.APA7);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstore.commit('customer/SET_PREFERRED_FORMAT_VERSION_ID', responseData.customer.preferredFormatVersionID);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tstore.commit('customer/SET_ROLE', responseData.customer.role);\n\t\t\t\t\tstore.commit('customer/SET_TIME_ZONE', responseData.customer.timeZone);\n\t\t\t\n\t\t\t\t\t// renewalPeriod \n\t\t\t\t\tif(responseData.customer.subscriptionType === 2){\n\t\t\t\t\t\t// annual\n\t\t\t\t\t\tstore.commit('customer/SET_RENEWAL_PERIOD', config.enums.SubscriptionRenewalPeriod.ANNUAL);\n\t\t\t\t\t} else if(responseData.customer.subscriptionType === 3){\n\t\t\t\t\t\t// semi-annual\n\t\t\t\t\t\tstore.commit('customer/SET_RENEWAL_PERIOD', config.enums.SubscriptionRenewalPeriod.SEMI);\n\t\t\t\t\t}\n\n\t\t\t\t\t// now check customer account dates\n\t\t\t\t\tif(useExpirationDate < config.today){\n\t\t\t\t\t\t// Account Expired - handle the router push in the catch\n\t\t\t\t\t\tif(router.currentRoute.name === 'YourPapers'){\n\t\t\t\t\t\t\t// loop through all papers\n\t\t\t\t\t\t\tresponseData.papers.forEach((paper)=>{\n\t\t\t\t\t\t\t\tif(!paper.isDeleted){\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tlet paperData = {\n\t\t\t\t\t\t\t\t\t\tisComplete: paper.isComplete,\n\t\t\t\t\t\t\t\t\t\tisDeleted: paper.isDeleted,\n\t\t\t\t\t\t\t\t\t\tisOnlinePaper: true,\n\t\t\t\t\t\t\t\t\t\tlastModifiedDate: paper.lastModifiedDate || '',\n\t\t\t\t\t\t\t\t\t\tpaperFormatID: paper.paperFormatID,\n\t\t\t\t\t\t\t\t\t\tpaperFormatVersionID: paper.paperFormatVersionID,\n\t\t\t\t\t\t\t\t\t\tpaperID: paper.paperID,\n\t\t\t\t\t\t\t\t\t\tpaperType: paper.paperType,\n\t\t\t\t\t\t\t\t\t\ttitle: paper.title,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tstore.commit('paperList/ADD_PAPER_TO_LIST', paperData);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});//e:forEach\n\n\t\t\t\t\t\t\treturn resolve();\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t\tname: 'MyProfile',\n\t\t\t\t\t\t\t}).catch(()=>{});\n\t\n\t\t\t\t\t\t\treturn resolve();\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Account is Fine\n\t\t\t\t\t\tAS_StoreSyncData(responseData).then(()=>{\n\t\t\t\t\t\t\t// RS_UpdateAfterSync().then(()=>{\n\t\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t\t// });//e:RS_UpdateAfterSync\n\t\t\t\t\t\t}).catch((error)=>{\n\t\t\t\t\t\t\tconsole.log('AS_StoreSyncData error');\n\t\t\t\t\t\t\tconsole.log(error);\n\t\t\t\t\t\t});//e:AS_StoreSyncData\n\t\t\t\t\t}\n\t\t\t\t});//e:ApiS_MakeCall\n\n\t\t\t});//e:AS_CheckToken\n\n\t\t}//e:platform\n\n\t});//e:Promise\n}","/*\n- ErrS_LoadByRoute\n-- 2022.09.22\n*/\nimport router from '@/router';\nimport store from '@/store';\nimport Swal from 'sweetalert2';\n\nexport default ($opts) => {\n\treturn new Promise((resolve, reject) => {\n\t\t// console.log('ErrS_LoadByRoute');\n\n\t\tlet alertText = 'There was a problem loading this item, please try again.';\n\t\tlet confirmButtonText = 'Ok';\n\t\tlet pushToName = 'Dashboard';\n\t\t\n\t\t// use the current route and $opts to set text and redirect names\n\t\tif($opts.entityType === 'Reference'){\n\t\t\tswitch(router.currentRoute.name){\n\t\t\t\t// Paper Edit > Editor Tab\n\t\t\t\tcase 'EditorEditReference':\n\t\t\t\t\talertText = 'There was a problem finding this reference.';\n\t\t\t\t\tconfirmButtonText = 'Back to References & Citaions';\n\t\t\t\t\tpushToName = 'EditorReferencesCitations';\n\t\t\t\t\tbreak;\n\t\t\t\t// Paper Edit > Organize Tab (modal)\n\t\t\t\tcase 'PaperTabResearchEditReferenceBody':\n\t\t\t\t\talertText = 'There was a problem finding this reference.';\n\t\t\t\t\tpushToName = 'X';\n\t\t\t\t\tbreak;\n\t\t\t\t// Reference Edit > All Tabs\n\t\t\t\tcase 'ReferenceTabDetails':\n\t\t\t\tcase 'ReferenceTabCitations':\n\t\t\t\tcase 'ReferenceTabPapers':\n\t\t\t\tcase 'ReferenceTabResearchNotes':\n\t\t\t\t\talertText = 'There was a problem finding this reference.';\n\t\t\t\t\tconfirmButtonText = 'Back to Reference List';\n\t\t\t\t\tpushToName = 'ReferenceList';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else if($opts.entityType === 'Paper'){\n\t\t\talertText = 'There was a problem finding this paper.';\n\t\t\tconfirmButtonText = 'Back to Dashboard';\n\t\t\tpushToName = 'Dashboard';\n\t\t}\n\t\t\n\t\t// sweet alert \n\t\tSwal.fire({\n\t\t\tallowOutsideClick: false,\n\t\t\tbuttonsStyling: false,\n\t\t\ttitle: 'Error',\n\t\t\ttext: alertText,\n\t\t\ticon: 'error',\n\t\t\tconfirmButtonText: confirmButtonText,\n\t\t\tshowCloseButton: false,\n\t\t\tshowCancelButton: false,\n\t\t\tshowConfirmButton: true,\n\t\t\tcustomClass:{\n\t\t\t\tconfirmButton: 'btn btn-outline-danger',\n\t\t\t},\n\t\t}).then((result) => {\n\t\t\tif (result.value) {\n\t\t\t\tstore.commit('loaders/REMOVE_ID', 'App');\n\n\t\t\t\tif(pushToName === 'X'){\n\t\t\t\t\t// close route modal\n\t\t\t\t\twindow.$vm.emitter.emit('closeRouteModal')\n\t\t\t\t} else {\n\t\t\t\t\tif(pushToName !== router.currentRoute.name){\n\t\t\t\t\t\t// perform redirect only if it doesnt' match where you already \n\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\tname: pushToName\n\t\t\t\t\t\t}).catch(()=>{});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tresolve();\n\t});//e:Promise\t\t\t\n}\n","/*\n- AS_SetLayout\n-- sets the theme (dark mode) and the layout (PO vs Pcom)\n-- for now only fires in router.afterEach\n*/\n\nimport config from '@/config';\nimport store from '@/store';\n\nexport default () => {\n\treturn new Promise((resolve) => {\n\t\t// console.log('AS_SetLayout');\n\t\t\n\t\tif(store.state.api.token === ''){\n\t\t\t// Public is the Unauthenticated Pcom layout\n\t\t\tstore.commit('app/SET_LAYOUT_ENUM', config.enums.Layout.PCOM);\n\n\t\t\t// remove any theme classes\n\t\t\tdocument.documentElement.setAttribute('data-bs-theme', 'light');\n\t\t\tdocument.body.classList.remove('theme-serrena');\n\t\t} else {\n\t\t\t// App is the Authenticated PO layout (assume default)\n\t\t\tstore.commit('app/SET_LAYOUT_ENUM', config.enums.Layout.PO);\n\t\t\t\n\t\t\tdocument.body.classList.remove('bg-simple');\n\t\t\t\n\t\t\tif(store.state.customer.themeId !== 0){\n\t\t\t\t// there was value in local storage already for the theme, use that\n\t\t\t\tswitch(store.state.customer.themeId){\n\t\t\t\t\tcase 0:\t// none (reset to normal)\n\t\t\t\t\tcase config.enums.Theme.REGULAR:\n\t\t\t\t\t\tdocument.documentElement.setAttribute('data-bs-theme', 'light');\n\t\t\t\t\t\tdocument.body.classList.remove('theme-serrena');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase config.enums.Theme.DARK:\n\t\t\t\t\t\tdocument.documentElement.setAttribute('data-bs-theme', 'dark');\n\t\t\t\t\t\tdocument.body.classList.remove('theme-serrena');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase config.enums.Theme.SERRENA:\n\t\t\t\t\t\tdocument.documentElement.setAttribute('data-bs-theme', 'light');\n\t\t\t\t\t\tdocument.body.classList.add('theme-serrena');\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tresolve();\n\t\n\t});//e:Promise\t\t\t\n}\n","/*\n- ErrS_Reroute\n-- 2022.09.22\n*/\nimport _has from 'lodash/has';\nimport router from '@/router';\nimport store from '@/store';\nimport Swal from 'sweetalert2';\n\nexport default ($opts) => {\n\treturn new Promise((resolve, reject) => {\n\t\t// console.log('ErrS_Reroute');\n\n\t\tconst _$opts = $opts || {};\n\t\tconst _pushToName = (_has(_$opts, 'pushToName')) ? _$opts.pushToName : 'Dashboard';\n\n\t\tlet alertText = 'There was a problem loading this item, please try again.';\n\t\tlet confirmButtonText = 'Ok';\n\n\t\t// sweet alert \n\t\tSwal.fire({\n\t\t\tallowOutsideClick: false,\n\t\t\tbuttonsStyling: false,\n\t\t\ttitle: 'Error',\n\t\t\ttext: alertText,\n\t\t\ticon: 'error',\n\t\t\tconfirmButtonText: confirmButtonText,\n\t\t\tshowCloseButton: false,\n\t\t\tshowCancelButton: false,\n\t\t\tshowConfirmButton: true,\n\t\t\tcustomClass:{\n\t\t\t\tconfirmButton: 'btn btn-outline-danger',\n\t\t\t},\n\t\t}).then((result) => {\n\t\t\tif (result.value) {\n\t\t\t\tstore.commit('loaders/REMOVE_ID', 'App');\n\n\t\t\t\tif(_pushToName === 'X'){\n\t\t\t\t\t// close route modal\n\t\t\t\t\twindow.$vm.emitter.emit('closeRouteModal')\n\t\t\t\t} else {\n\t\t\t\t\t// perform redirect\n\t\t\t\t\trouter.push({\n\t\t\t\t\t\tname: _pushToName\n\t\t\t\t\t}).catch(()=>{});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tresolve();\n\t});//e:Promise\t\t\t\n}\n","/*\n- ApiS_MakeCall\n-- Makes an API call to the server\n-- 2023.11.27\n*/\n\nimport _has from 'lodash/has';\nimport _merge from 'lodash/merge';\nimport AS_CheckToken from '@/services/app/checkToken';\nimport config from '@/config';\nimport router from '@/router';\nimport store from '@/store';\nimport Swal from 'sweetalert2';\n\nexport default ($opts) => {\n\treturn new Promise((resolve, reject) => {\n\t\n\t\tlet isRejectWithMessage = false;\n\t\t\n\t\t// structure this api call as a promise so if it fails for specific reasons i can correct them and try again\n\t\tlet makeTheApiCall = () =>{\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t// console.log('ApiS_MakeCall');\n\t\t\t\t\n\t\t\t\tisRejectWithMessage = false;\n\t\t\t\t\n\t\t\t\tlet _contentType = _has($opts, 'contentType') ? $opts.contentType : 'application/json';\n\t\t\t\tlet _ignoreAuth = _has($opts, 'ignoreAuth') ? $opts.ignoreAuth : false;\n\t\t\t\tlet _outsideSpa = _has($opts, 'outsideSpa') ? $opts.outsideSpa : false;\n\t\t\t\tlet _responseType = _has($opts, 'responseType') ? $opts.responseType : 'none';\n\t\t\t\t\n\t\t\t\tlet requestParams = {\n\t\t\t\t\tcache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\n\t\t\t\t\tmethod: $opts.method,\n\t\t\t\t};\n\n\t\t\t\tlet sourceAppOutput = '';\n\t\t\t\tlet wordVersionOutput = '';\n\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\tsourceAppOutput = 'WordAddIn'\n\t\t\t\t\twordVersionOutput = Office.context.diagnostics.version;\n\t\t\t\t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\tsourceAppOutput = 'Online'\n\t\t\t\t}\n\n\t\t\t\t// build headers\n\t\t\t\tlet headerObject = {\n\t\t\t\t\t'Browser': store.state.api.browserName,\n\t\t\t\t\t'BrowserVersion': store.state.api.browserVersion,\n\t\t\t\t\t'Cache-Control': 'no-store, max-age=0',\n\t\t\t\t\t'Content-Type': _contentType,\n\t\t\t\t\t'CustomerID': store.state.api.customerId,\n\t\t\t\t\t'IsImpersonating': store.state.customer.isImpersonating,\n\t\t\t\t\t'organizationExpirationDate': store.state.customer.organizationExpirationDate,\n\t\t\t\t\t'organizationID': store.state.customer.organizationId,\n\t\t\t\t\t'organizationStatusID': store.state.customer.organizationStatusId,\n\t\t\t\t\t'OS': store.state.api.osName,\n\t\t\t\t\t'OSVersion': store.state.api.osVersion,\n\t\t\t\t\t'SessionID': store.state.api.sessionId,\n\t\t\t\t\t'SourceApp': sourceAppOutput,\n\t\t\t\t\t'SourceAppVersion': VERSION,\n\t\t\t\t\t'WordVersion': wordVersionOutput\n\t\t\t\t}\n\n\t\t\t\t// add url \n\t\t\t\tlet _url;\n\n\t\t\t\t// a hard url gets a full url from the opts instead of getting built based on the app\n\t\t\t\tif($opts.isHardUrl){\n\t\t\t\t\t_url = new URL($opts.url);\n\t\t\t\t} else {\n\t\t\t\t\tif (_outsideSpa) {\n\t\t\t\t\t\t// legacy items won't have an api, so route directly in to the MVC project\n\t\t\t\t\t\t_url = new URL(config.appUrl);\n\t\t\t\t\t\t_url.href += $opts.url;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(config.isLive){\n\t\t\t\t\t\t\t_url = new URL('https://api.perrla.com');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_url = new URL('https://testapi.perrla.com');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_url.href += $opts.url;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!_ignoreAuth){\n\t\t\t\t\t_merge(headerObject, {\n\t\t\t\t\t\t'Authorization': \"Bearer \" + store.state.api.token\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// add url params\n\t\t\t\tif($opts.params){\n\t\t\t\t\t_url.search = new URLSearchParams($opts.params);\n\t\t\t\t}\n\n\t\t\t\trequestParams.headers = new Headers(headerObject);\n\n\t\t\t\t// add body\n\t\t\t\tif($opts.body){\n\t\t\t\t\tif(typeof $opts.body === 'string'){\n\t\t\t\t\t\trequestParams.body = $opts.body;\n\t\t\t\t\t} else {\n\t\t\t\t\t\trequestParams.body = JSON.stringify($opts.body);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// use Fetch API\n\t\t\t\tfetch(new Request(_url, requestParams)).then((response) => {\n\t\t\t\t\t// this first then() inside fetch just parses the data and returned it to the next then()\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\t// Success\n\t\t\t\t\t\tif(_responseType === 'arraybuffer'){\n\t\t\t\t\t\t\treturn response.arrayBuffer();\n\t\t\t\t\t\t} else if(_responseType === 'json'){\n\t\t\t\t\t\t\treturn response.json();\n\t\t\t\t\t\t} else if(_responseType === 'text'){\n\t\t\t\t\t\t\treturn response.text();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// an api call that doesn't have or care about the result\n\t\t\t\t\t\t\treturn response;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Fail\n\t\t\t\t\t\tif(response.status == 400){\n\t\t\t\t\t\t\t// bad request\n\t\t\t\t\t\t\treturn reject('Bad Request');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else if(response.status == 401){\n\t\t\t\t\t\t\t// user is unauthorized\n\t\t\t\t\t\t\treturn reject('Token Expired');\n\t\t\t\t\t\t\n\t\t\t\t\t\t} else if(response.status == 404){\n\t\t\t\t\t\t\tSwal.fire({\n\t\t\t\t\t\t\t\tbuttonsStyling: false,\n\t\t\t\t\t\t\t\ttext: '404 - There was an error processing this request',\n\t\t\t\t\t\t\t\ticon: 'error',\n\t\t\t\t\t\t\t\tconfirmButtonText: 'Ok',\n\t\t\t\t\t\t\t\tshowCloseButton: false,\n\t\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\t\tcustomClass:{\n\t\t\t\t\t\t\t\t\tconfirmButton: 'btn btn-danger me-2',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\tif (result.value) {\n\t\t\t\t\t\t\t\t\t// reject(responseData[0].message);\n\t\t\t\t\t\t\t\t\treturn reject('404');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t} else if(response.status == 500){\n\t\t\t\t\t\t\t// server error - return a text result\n\t\t\t\t\t\t\tisRejectWithMessage = true;\n\t\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Other\n\t\t\t\t\t\t\t// generic error - usually a 404 at this point\n\t\t\t\t\t\t\tlet responseError = '';\n\t\t\t\t\t\t\tif(response.status){\n\t\t\t\t\t\t\t\tresponseError += response.status + ' ';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(response.statusText){\n\t\t\t\t\t\t\t\tresponseError += response.statusText;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn reject(responseError);\n\n\t\t\t\t\t\t}//e:else\n\n\t\t\t\t\t}//e:if:response.ok\n\n\t\t\t\t}).then((responseData) => {\n\t\t\t\t\t// data is processed earlier, this then() resolves this makeTheApiCall promise \n\t\t\t\t\tif(isRejectWithMessage){\n\t\t\t\t\t\t// 500 errors return a reason why, pass the first one off to show here\n\t\t\t\t\t\tlet handleErrorAtSource = false;\n\t\t\t\t\t\tlet messageOutput = '';\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\t\t\t// 500 errors return a reason why, pass the first one off to show here\n\t\t\t\t\t\t\tif($opts.url === 'v4/PaymentMethod' && $opts.method === 'GET'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase \"NO_VALID_METHODS\":\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else if($opts.url === 'v4/PaymentMethod' && $opts.method === 'POST'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase 'AUTH_PROFILE':\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if($opts.url === 'v4/Purchase' && $opts.method === 'POST'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase 'AUTH_PROFILE':\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase \"ALREADY_CUSTOMER\":\n\t\t\t\t\t\t\t\t\t\tmessageOutput = 'This email is already being used for a PERRLA Account.';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'CUSTOMER_NOT_IN_TRIAL':\n\t\t\t\t\t\t\t\t\t\t// v4/FreeTrial/Discount\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'DISCOUNT_EXISTS':\n\t\t\t\t\t\t\t\t\t\t// v4/FreeTrial/Discount\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"INVALID_CODE\":\n\t\t\t\t\t\t\t\t\t\tmessageOutput = 'Invalid code: Try again or contact our Support Team if you continue to have trouble (support@perrla.com).';\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'TRIAL_EXPIRED':\n\t\t\t\t\t\t\t\t\t\t// v4/FreeTrial/Discount\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t\t\t// Online has checks for the url a user is trying to access\n\t\t\t\t\t\t\tif($opts.url === 'v4/CohortUser/Activate' && $opts.method === 'GET'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase \"EXPIRED_ORG\":\n\t\t\t\t\t\t\t\t\tcase \"INVALID_ID\":\n\t\t\t\t\t\t\t\t\tcase \"INVALID_ORG\":\n\t\t\t\t\t\t\t\t\tcase \"ORG_CAPACITY_REACHED\":\n\t\t\t\t\t\t\t\t\tcase \"USER_ALREADY_CREATED\":\n\t\t\t\t\t\t\t\t\tcase \"USER_DELETED\":\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if($opts.url === 'v4/FreeTrial'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase 'PENDING_ORG_INVITE':\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if($opts.url === 'v4/Purchase' && $opts.method === 'POST'){\t\t\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase 'AUTH_PROFILE':\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if($opts.url === 'v4/Purchase/User' && $opts.method === 'POST'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase 'ALREADY_CUSTOMER_INVALID':\n\t\t\t\t\t\t\t\t\tcase 'ALREADY_CUSTOMER_VALID':\n\t\t\t\t\t\t\t\t\tcase 'PENDING_INVITATION':\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tconsole.log(responseData[0]);\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else if($opts.url === 'v4/PaymentMethod' && $opts.method === 'GET'){\n\t\t\t\t\t\t\t\tswitch(responseData[0].code){\n\t\t\t\t\t\t\t\t\tcase \"NO_VALID_METHODS\":\n\t\t\t\t\t\t\t\t\t\thandleErrorAtSource = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmessageOutput = responseData[0].message;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}//e:else:online\n\n\t\t\t\t\t\tif(handleErrorAtSource){\n\t\t\t\t\t\t\t// reject to source and handle the error code there\n\t\t\t\t\t\t\treject(responseData[0]);\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\t\t\t\twindow.$vm.emitter.emit('toasterOpen', {\n\t\t\t\t\t\t\t\t\tbody: messageOutput,\n\t\t\t\t\t\t\t\t\tisSticky: true,\n\t\t\t\t\t\t\t\t\ttitle: 'Error',\n\t\t\t\t\t\t\t\t\ttype: 'danger'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treject();\n\n\t\t\t\t\t\t\t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSwal.fire({\n\t\t\t\t\t\t\t\t\tbuttonsStyling: false,\n\t\t\t\t\t\t\t\t\ttext: responseData[0].message,\n\t\t\t\t\t\t\t\t\ticon: 'error',\n\t\t\t\t\t\t\t\t\tconfirmButtonText: 'Ok',\n\t\t\t\t\t\t\t\t\tshowCloseButton: false,\n\t\t\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\t\t\tcustomClass:{\n\t\t\t\t\t\t\t\t\t\tconfirmButton: 'btn btn-danger me-2',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\t\tif (result.value) {\n\t\t\t\t\t\t\t\t\t\treject(responseData[0].message);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}//e:else:online\n\t\t\t\t\t\t}//e:else:handleErrorAtSource\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn resolve(responseData);\n\t\t\t\t\t}\n\n\t\t\t\t}).catch((error) => {\n\t\t\t\t\t// fetch call failed for any reason\n\t\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\t\treject(error.message);\n\n\t\t\t\t\t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t\tlet failReasonDisplay = error.message;\n\t\t\t\t\t\tif(failReasonDisplay === 'Failed to fetch'){\n\t\t\t\t\t\t\tfailReasonDisplay = 'There was an error with this request. Please try again.'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tSwal.fire({\n\t\t\t\t\t\t\tallowOutsideClick: false,\n\t\t\t\t\t\t\tbuttonsStyling: false,\n\t\t\t\t\t\t\ttext: failReasonDisplay,\n\t\t\t\t\t\t\ticon: 'error',\n\t\t\t\t\t\t\tconfirmButtonText: 'OK',\n\t\t\t\t\t\t\tshowCloseButton: false,\n\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\tcustomClass:{\n\t\t\t\t\t\t\t\tconfirmButton: 'btn btn-danger me-2',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t// if (result.value) {\n\t\t\t\t\t\t\t// \treject(failReasonDisplay);\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn reject(failReasonDisplay);\n\t\t\t\t\t}//e:else:online\n\t\t\t\t\t\n\t\t\t\t});//fetch.catch\n\n\t\t\t});//e:Promise\n\t\t};//e:makeTheApiCall\n\t\t\n\t\t// 2024.10.23 - this seems to fail sometimes, even through i am on the internet, locallay and on the test server, come back with a better detector\n\t\t// if(navigator.onLine) {\n\t\t\tif($opts.ignoreAuth){\n\t\t\t\t// ignoreAuth - just make the call\n\t\t\t\tmakeTheApiCall($opts).then((responseData)=>{\n\t\t\t\t\t// first call success, resolve back to the original makeApiCall call\n\t\t\t\t\treturn resolve(responseData);\n\t\n\t\t\t\t}).catch((failReason)=>{\n\t\t\t\t\tconsole.log('failReason 1');\n\t\t\t\t\tconsole.log(failReason);\n\n\t\t\t\t\treturn reject(failReason);\n\t\t\t\t});//e:makeTheApiCall.then\n\n\t\t\t} else {\n\t\t\t\t// use Auth - check account\n\t\t\t\tAS_CheckToken().then((apiToken)=>{\n\t\t\t\t\tstore.commit('api/SET_TOKEN', apiToken);\n\n\t\t\t\t\tmakeTheApiCall($opts).then((responseData)=>{\n\t\t\t\t\t\t// first call success, resolve back to the original makeApiCall call\n\t\t\t\t\t\treturn resolve(responseData);\n\t\t\n\t\t\t\t\t}).catch((failReason)=>{\n\t\t\t\t\t\t// first call failed\n\t\t\t\t\t\tif(failReason === 'Token Expired'){\n\t\t\t\t\t\t\t// get a new token and make this call again\n\n\t\t\t\t\t\t\t// blank out tokens and session ids\n\t\t\t\t\t\t\tstore.commit('api/SET_SESSION_ID', '');\n\t\t\t\t\t\t\tstore.commit('api/SET_TOKEN', '');\n\n\t\t\t\t\t\t\tAS_CheckToken().then((apiToken)=>{\n\t\t\t\t\t\t\t\t// clone the original options since i need to make this call one more time\n\t\t\t\t\t\t\t\tlet clonedOpts = {\n\t\t\t\t\t\t\t\t\tmethod: $opts.method,\n\t\t\t\t\t\t\t\t\toutsideSpa: $opts.outsideSpa,\n\t\t\t\t\t\t\t\t\tparams: $opts.params,\n\t\t\t\t\t\t\t\t\tresponseType: $opts.responseType,\n\t\t\t\t\t\t\t\t\turl: $opts.url,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(_has($opts, 'body')){\n\t\t\t\t\t\t\t\t\tclonedOpts['body'] = $opts.body;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(_has($opts, 'contentType')){\n\t\t\t\t\t\t\t\t\tclonedOpts['contentType'] = $opts.contentType;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tmakeTheApiCall(clonedOpts).then((responseData)=>{\n\t\t\t\t\t\t\t\t\t// second call success, resolve back to the original makeApiCall call\n\t\t\t\t\t\t\t\t\tresolve(responseData);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}).catch(()=>{\n\t\t\t\t\t\t\t\t\t// getting a new token didn't fix the problem, have the user log out\n\t\t\t\t\t\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\t\t\t\t\t\t// automatically\n\t\t\t\t\t\t\t\t\t\tstore.commit('api/SET_TOKEN', '');\n\t\t\t\t\t\t\t\t\t\tstore.commit('USER_EMAIL', '');\n\t\t\t\t\t\t\t\t\t\twindow.location = '/Account/LogOff'\n\t\t\t\t\t\t\t\t\t\treturn reject();\n\n\t\t\t\t\t\t\t\t\t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t\t\t\t\t\t// with an alert\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tSwal.fire({\n\t\t\t\t\t\t\t\t\t\t\tbuttonsStyling: false,\n\t\t\t\t\t\t\t\t\t\t\ttext: 'Token has expired.',\n\t\t\t\t\t\t\t\t\t\t\ticon: 'error',\n\t\t\t\t\t\t\t\t\t\t\tconfirmButtonText: 'Log Out',\n\t\t\t\t\t\t\t\t\t\t\tshowCloseButton: false,\n\t\t\t\t\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\t\t\t\t\tcustomClass:{\n\t\t\t\t\t\t\t\t\t\t\t\tconfirmButton: 'btn btn-danger',\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\t\t\t\tif (result.value) {\n\t\t\t\t\t\t\t\t\t\t\t\tstore.commit('api/SET_TOKEN', '');\n\t\t\t\t\t\t\t\t\t\t\t\tstore.commit('USER_EMAIL', '');\n\t\t\t\t\t\t\t\t\t\t\t\twindow.location = '/Account/LogOff'\n\t\t\t\t\t\t\t\t\t\t\t\treturn reject();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t}//e:else:online\n\n\t\t\t\t\t\t\t\t});//e:catch\n\n\t\t\t\t\t\t\t});//e:AS_CheckToken\n\n\t\t\t\t\t\t} else if(failReason === 'Bad Request'){\n\t\t\t\t\t\t\treturn reject();\n\n\t\t\t\t\t\t} else if(failReason === 'expired'){\n\t\t\t\t\t\t\t// account suscription expired\n\t\t\t\t\t\t\trouter.push({\n\t\t\t\t\t\t\t\tname: 'Settings',\n\t\t\t\t\t\t\t}).catch(()=>{});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn reject();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// many reasons it failed\n\t\t\t\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\t\t\t\t// general reject()\n\t\t\t\t\t\t\t\treturn reject(failReason);\n\n\t\t\t\t\t\t\t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t\t\t\tif(!isRejectWithMessage){\n\t\t\t\t\t\t\t\t\tstore.commit('loaders/REMOVE_ID', 'App');\n\t\t\t\t\t\t\t\t\t// 2023.06.21 - commented this out, so it doesn't fire the Swal twice\n\t\t\t\t\t\t\t\t\t// if(failReason === 'Failed to fetch'){\n\t\t\t\t\t\t\t\t\t// \tfailReason = 'There was an error with this request. Please try again.'\n\t\t\t\t\t\t\t\t\t// }\n\n\t\t\t\t\t\t\t\t\t// Swal.fire({\n\t\t\t\t\t\t\t\t\t// \tbuttonsStyling: false,\n\t\t\t\t\t\t\t\t\t// \ttext: failReason,\n\t\t\t\t\t\t\t\t\t// \ticon: 'error',\n\t\t\t\t\t\t\t\t\t// \tconfirmButtonText: 'Ok',\n\t\t\t\t\t\t\t\t\t// \tshowCloseButton: false,\n\t\t\t\t\t\t\t\t\t// \tshowConfirmButton: true,\n\t\t\t\t\t\t\t\t\t// \tcustomClass:{\n\t\t\t\t\t\t\t\t\t// \t\tconfirmButton: 'btn btn-danger me-2',\n\t\t\t\t\t\t\t\t\t// \t},\n\t\t\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t\t\t}//e:if:!isRejectWithMessage\n\n\t\t\t\t\t\t\t\treturn reject(failReason);\n\n\t\t\t\t\t\t\t}//e:else:online\n\n\t\t\t\t\t\t}//e:else:failReason\n\n\t\t\t\t\t});//e:makeTheApiCall.then\n\t\t\t\t});\n\n\t\t\t}//e:else:$opts.ignoreAuth\n\n\t\t// } else {\n\t\t// \t// no connection\n\t\t// \tlet errorText = '';\n\n\t\t// \tif(config.platformId === config.enums.Platform.ADD_IN){\n\t\t// \t\terrorText = 'Your computer may have lost its connection to the internet. Please reconnect to the internet and try again.';\n\t\t// \t\tstore.commit('loaders/REMOVE_ID', 'App');\n\n\t\t// \t} else if(config.platformId === config.enums.Platform.ONLINE){\n\t\t// \t\t// change error text based on route (am i in a paper or not)\n\t\t\t\t\n\t\t// \t\tif(router.currentRoute.meta.module === config.enums.Module.PAPER_EDIT){\n\t\t// \t\t\terrorText = 'Your computer may have lost its connection to the internet and we cannot save the latest changes to your paper. Please reconnect to the internet and try to save your paper again.';\n\t\t// \t\t\tstore.dispatch('paperEdit/localVersion/checkIn');\n\t\t// \t\t} else {\n\t\t// \t\t\terrorText = 'Your computer may have lost its connection to the internet. Please reconnect to the internet and try again.';\n\t\t// \t\t}\n\n\t\t// \t\tSwal.fire({\n\t\t// \t\t\tallowOutsideClick: false,\n\t\t// \t\t\tbuttonsStyling: false,\n\t\t// \t\t\ttitle: 'Internet connection failed',\n\t\t// \t\t\ttext: errorText,\n\t\t// \t\t\ticon: 'error',\n\t\t// \t\t\tconfirmButtonText: 'OK',\n\t\t// \t\t\tshowCloseButton: false,\n\t\t// \t\t\tshowConfirmButton: true,\n\t\t// \t\t\tcustomClass:{\n\t\t// \t\t\t\tconfirmButton: 'btn btn-danger me-2',\n\t\t// \t\t\t},\n\t\t// \t\t}).then((result) => {\n\t\t// \t\t\tif (result.value) {\n\t\t// \t\t\t\tstore.commit('loaders/REMOVE_ID', 'App');\n\t\t// \t\t\t}\n\t\t// \t\t});\n\t\t\t\t\n\t\t// \t}//e:else:online\n\n\t\t// }//e:if:else:navigator.onLine\n\n\t});//e:Promise\n}\n","/*\n- AS_StoreSyncData\n-- Stores the data from a sync call\n-- 2025.02.18\n*/\n\nimport _has from 'lodash/has';\nimport config from '@/config';\nimport { isBefore } from 'date-fns';\nimport { parseISO } from 'date-fns';\nimport RS_Loop from '@/services/reference/loop';\nimport RS_Prepare from '@/services/reference/prepare';\nimport store from '@/store';\n\nexport default (responseData) => {\n\treturn new Promise((resolve) => {\n\t\t// console.log('AS_StoreSyncData');\n\t\t\n\t\tif(config.platformId === config.enums.Platform.CHROME_EXT){\n\t\t\tchrome.storage.local.set({\n\t\t\t\t'lastSyncDate': responseData.lastSyncDate\n\t\t\t});\n\t\t}\n\n\t\t// Impersonating - clear local storage before logging in\n\t\tif(config.platformId !== config.enums.Platform.CHROME_EXT){\n\t\t\tif(responseData.customer.isImpersonating){\n\t\t\t\tlocalStorage.clear();\n\t\t\t}\n\t\t}\n\n\t\tif(config.platformId === config.enums.Platform.ONLINE){\n\t\t\tstore.commit('classes/SET_LIST', responseData.classes);\n\t\t\t\n\t\t\t// this will force the auto save timer to fire in a full minute - no matter what the user has set\n\t\t\tstore.commit('paperEdit/autoSave/SET_TIMER_MS', 60000);\n\t\t}//e:if:ONLINE\n\n\t\tstore.dispatch('customer/setSiteTheme', {\n\t\t\tlegacyThemeId: responseData.customer.themeID\n\t\t}).then(()=>{\n\t\t\tstore.commit('classes/SET_LIST', responseData.classes);\n\t\t\tstore.commit('references/RESET_UPDATE_AFTER_SYNC');\t// clear this so when the next vue mounts it will be fresh\n\n\t\t\tif(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\tstore.commit('reminders/SET_LIST', responseData.reminders);\n\t\t\t\tstore.commit('work/SET_LIST', responseData.work);\n\n\t\t\t\tif(typeof zE === 'function'){\n\t\t\t\t\tzE('webWidget', 'prefill', {\n\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\tvalue: store.state.customer.fullName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\temail: {\n\t\t\t\t\t\t\tvalue: store.state.customer.email,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif(responseData.papers && responseData.addInPapers){\n\t\t\t\t\tlet allPapersArray = responseData.papers.concat(responseData.addInPapers);\n\t\t\t\t\t\n\t\t\t\t\t// loop through all papers\n\t\t\t\t\tallPapersArray.forEach((paper)=>{\n\t\t\t\t\t\t// skip deleted papers or papers without an enctrypedID (Word Add-In)\n\t\t\t\t\t\tif(paper.isDeleted || !paper.encryptedID){\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tlet className = '';\n\t\t\t\t\t\tlet dueDate = '';\n\t\t\t\t\t\tlet isOnlinePaper = true;\n\t\t\t\t\t\tlet paperID = 0;\n\t\n\t\t\t\t\t\t// Online\n\t\t\t\t\t\tdueDate = paper.dueDate || '';\n\t\t\t\t\t\tpaperID = paper.paperID;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// for some reason ClassName doesnt' come through in the paper - that's ok i can use the ID to look up the class name from the class Vuex object that populates on Sync\n\t\t\t\t\t\tif(paper.classID){\n\t\t\t\t\t\t\tlet thisClass = store.state.classes.list.find((classData)=>{\n\t\t\t\t\t\t\t\treturn classData.classID === paper.classID;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif(thisClass){\n\t\t\t\t\t\t\t\tclassName = thisClass.name\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} \n\t\t\t\t\t\t\n\t\t\t\t\t\t// console.log(paper);\n\t\n\t\t\t\t\t\tlet paperData = {\n\t\t\t\t\t\t\tclassName: className,\n\t\t\t\t\t\t\tclassID: paper.classID || '',\n\t\t\t\t\t\t\tcreatedDate: paper.createdDate || '',\n\t\t\t\t\t\t\tdescription: paper.description || '',\n\t\t\t\t\t\t\tdueDate: dueDate,\n\t\t\t\t\t\t\tencryptedID: paper.encryptedID || '',\n\t\t\t\t\t\t\tgenesisReferences: paper.genesisReferences,\n\t\t\t\t\t\t\tisComplete: paper.isComplete,\n\t\t\t\t\t\t\tisDeleted: paper.isDeleted,\n\t\t\t\t\t\t\tisOnlinePaper: isOnlinePaper,\n\t\t\t\t\t\t\tlastModifiedDate: paper.lastModifiedDate || '',\n\t\t\t\t\t\t\tpaperFormatID: paper.paperFormatID,\n\t\t\t\t\t\t\tpaperFormatVersionID: paper.paperFormatVersionID,\n\t\t\t\t\t\t\tpaperID: paperID,\n\t\t\t\t\t\t\tpaperType: paper.paperType,\n\t\t\t\t\t\t\treferences: paper.references,\n\t\t\t\t\t\t\tstartDate: paper.startDate,\n\t\t\t\t\t\t\ttitle: paper.title,\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tlet findPaperIndex = store.state.paperList.list.findIndex((paper) =>{\n\t\t\t\t\t\t\treturn paper.paperID === paperID;\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tif(findPaperIndex != -1){\n\t\t\t\t\t\t\t// already added - update all it's data incase i've changed properties in paperData since list sync\n\t\t\t\t\t\t\tstore.commit('paperList/UPDATE_PAPER_IN_LIST', {\n\t\t\t\t\t\t\t\tpaperIndex: findPaperIndex,\n\t\t\t\t\t\t\t\tpaperData: paperData\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// new addition\n\t\t\t\t\t\t\tstore.commit('paperList/ADD_PAPER_TO_LIST', paperData);\n\t\t\t\t\t\t}\n\t\t\t\t\t});//e:forEach\n\t\t\t\t\n\t\t\t\t}//e:responseData.papers && responseData.addInPapers\n\t\t\t}//e:platform.ONLINE\n\n\t\t\tstore.commit('api/SET_CUSTOMER_ID', responseData.customer.customerID.toString());\n\n\t\t\tif(config.useErrorLogger){\n\t\t\t\twindow.$vm.$rollbar.configure({\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tperson: {\n\t\t\t\t\t\t\tid: responseData.customer.customerID,\n\t\t\t\t\t\t\tusername: responseData.customer.fullName,\n\t\t\t\t\t\t\temail: responseData.customer.email\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(config.usePendo && window.pendo){\n\t\t\t\tlet calcFreeTrialConverstion = '';\n\n\t\t\t\tif(responseData.customer.role === 1){\n\t\t\t\t\t// free trial mode mark this as false until they convert\n\t\t\t\t\tcalcFreeTrialConverstion = 'false';\n\t\t\t\t} else if(responseData.customer.role === 2){\n\t\t\t\t\t// full access - check the flag passed down from sync\n\t\t\t\t\tcalcFreeTrialConverstion = responseData.customer.freeTrialConversion.toString();\n\t\t\t\t}\n\n\t\t\t\t// recalculate which exp date i'm going to use - i already do this to determine expired, but do it again for pendo\n\t\t\t\tlet useExpirationDate;\t// declare here and set in the next if block\n\t\t\t\t\n\t\t\t\t// check if user is in an organization\n\t\t\t\tif(responseData.customer.organizationID === 0){\n\t\t\t\t\t// NOT in an org - Check subscription expiration date\n\t\t\t\t\tuseExpirationDate = new Date(responseData.customer.subscriptionExpirationDate);\n\t\t\t\t} else {\n\t\t\t\t\t// IN an org - use whichever expiration date is later\n\t\t\t\t\tif(isBefore(parseISO(responseData.customer.subscriptionExpirationDate), parseISO(responseData.customer.organizationExpirationDate))){\n\t\t\t\t\t\t// customer is before org - use customer\n\t\t\t\t\t\tuseExpirationDate = new Date(responseData.customer.organizationExpirationDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// org is before customer - use org\n\t\t\t\t\t\tuseExpirationDate = new Date(responseData.customer.subscriptionExpirationDate);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tpendo.initialize({\n\t\t\t\t\tvisitor: {\n\t\t\t\t\t\taccount_created_date: responseData.customer.createdDate,\n\t\t\t\t\t\tid: responseData.customer.customerID,\n\t\t\t\t\t\temail: responseData.customer.email,\n\t\t\t\t\t\texpiration_date: useExpirationDate,\n\t\t\t\t\t\tfull_name: responseData.customer.fullName,\n\t\t\t\t\t\tinstitution: responseData.customer.institution,\n\t\t\t\t\t\torganization_id: responseData.customer.organizationID,\n\t\t\t\t\t\tpriority_support: store.state.cart.prioritySupport || false, // should pass true | false\n\t\t\t\t\t\trenewal_type: (responseData.customer.isRecurring) ? 'Automatic' : 'Manual',\n\t\t\t\t\t\tstatus: config.enums.AccountRole[responseData.customer.role],\n\t\t\t\t\t\tsubscription_period: config.enums.SubscriptionPeriod[responseData.customer.subscriptionType],\n\t\t\t\t\t\tfreetrial_conversion: calcFreeTrialConverstion,\t// should pass '' | 'true' | 'false'\n\t\t\t\t\t\ttrial_end_date: responseData.customer.freeTrialExpirationDate\n\t\t\t\t\t},\n\t\t\t\t\taccount: {\n\t\t\t\t\t\tid: 'PERRLA'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(window.newrelic){\n\t\t\t\tnewrelic.setCustomAttribute('Browser', store.state.api.browserName);\n\t\t\t\tnewrelic.setCustomAttribute('BrowserVersion', store.state.api.browserVersion);\n\t\t\t\tnewrelic.setCustomAttribute('CustomerID', store.state.api.customerId);\n\t\t\t\tnewrelic.setCustomAttribute('IsImpersonating', store.state.customer.isImpersonating);\n\t\t\t\tnewrelic.setCustomAttribute('OS', store.state.api.osName);\n\t\t\t\tnewrelic.setCustomAttribute('OSVersion', store.state.api.osVersion);\n\t\t\t\t\n\t\t\t\tif(config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\tnewrelic.setCustomAttribute('SourceApp', 'Online');\n\t\t\t\t\tnewrelic.addRelease('PERRLA Online SPA', VERSION);\n\t\t\t\t} else if(config.platformId === config.enums.Platform.ADD_IN){\n\t\t\t\t\tnewrelic.setCustomAttribute('SourceApp', 'WordAddIn');\n\t\t\t\t\tnewrelic.setCustomAttribute('WordVersion', Office.context.diagnostics.version);\n\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\tnewrelic.setCustomAttribute('SourceAppVersion', VERSION);\n\t\t\t}\n\n\t\t\t// prepare and loop through all references, once for non-genesis then again for genesis \n\t\t\t// prep and loop can be combined into one\n\t\t\t// after that it would be cool to just have the service here without the need to call it twice\n\t\t\tRS_Prepare({\n\t\t\t\t'isGenesis': false\n\t\t\t}).then((currentRefLibArray)=>{\n\t\t\t\t// console.log('currentRefLibArray');\n\t\t\t\t// console.log(currentRefLibArray);\n\t\t\t\tRS_Loop({\n\t\t\t\t\t'currentRefLibArray': currentRefLibArray,\n\t\t\t\t\t'decompressReferences': responseData.references,\n\t\t\t\t\t'isGenesis': false\n\t\t\t\t}).then(()=>{\n\t\t\t\t\t// next move to genesis references\n\t\t\t\t\tRS_Prepare({\n\t\t\t\t\t\t'isGenesis': true\n\t\t\t\t\t}).then((currentGenRefLibArray)=>{\n\t\t\t\t\t\t// console.log('currentGenRefLibArray');\n\t\t\t\t\t\t// console.log(currentGenRefLibArray);\n\t\t\t\t\t\tRS_Loop({\n\t\t\t\t\t\t\t'currentRefLibArray': currentGenRefLibArray,\n\t\t\t\t\t\t\t'decompressReferences': responseData.genesisReferences,\n\t\t\t\t\t\t\t'isGenesis': true\n\t\t\t\t\t\t}).then(()=>{\n\t\t\t\t\t\t\t// gather shared referneces\n\t\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t!config.$isLive ||\n\t\t\t\t\t\t\t\t\tstore.state.app.showBetaFeatures\n\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tconfig.platformId === config.enums.Platform.ONLINE ||\n\t\t\t\t\t\t\t\t\tconfig.platformId === config.enums.Platform.ADD_IN\n\t\t\t\t\t\t\t \t) &&\n\t\t\t\t\t\t\t\t_has(responseData, 'referenceShareRequests')\n\t\t\t\t\t\t\t){\n\t\t\t\t\t\t\t\tstore.commit('references/SET_REFERENCE_SHARE_REQUESTS', responseData.referenceShareRequests)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\tif(config.platformId === config.enums.Platform.ADD_IN ||config.platformId === config.enums.Platform.ONLINE){\n\t\t\t\t\t\t\t\t// process research notes\n\t\t\t\t\t\t\t\tstore.state.referenceLibraryGenesis.forEach((referenceData)=>{\n\t\t\t\t\t\t\t\t\t// console.log(referenceData.isDeleted)\n\t\t\t\t\t\t\t\t\tif(_has(referenceData, 'researchNotes') && referenceData.researchNotes.length > 0){\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// moved to it's own Vuex store module 2023.02.15\n\t\t\t\t\t\t\t\t\t\treferenceData.researchNotes.forEach((researchNoteData)=>{\n\t\t\t\t\t\t\t\t\t\t\tif(researchNoteData.isDeleted){\n\t\t\t\t\t\t\t\t\t\t\t\t// Deleted - send the remove signal out, it checks to see if the note is already added or not\n\t\t\t\t\t\t\t\t\t\t\t\tstore.commit('researchNotes/REMOVE_BY_UNIQUE_ID', researchNoteData.genesisResearchNoteUniqueID); \n\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t// Not Deleted\n\t\t\t\t\t\t\t\t\t\t\t\t// check if this RN is in already saved in the vuex\n\t\t\t\t\t\t\t\t\t\t\t\tlet findIndexTest = store.state.researchNotes.list.findIndex((findRearchNoteData)=>{\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn findRearchNoteData.genesisResearchNoteUniqueId.toUpperCase() === researchNoteData.genesisResearchNoteUniqueID.toUpperCase();\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tif(findIndexTest === -1){\n\t\t\t\t\t\t\t\t\t\t\t\t\t// fresh add\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet citationOutput = '';\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(researchNoteData.citation !== ''){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet citationResultObject = JSON.parse(researchNoteData.citation);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// assume APA7 for now\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif(_has(citationResultObject, 'apa7') && _has(citationResultObject.apa7, 'first') && citationResultObject.apa7.first !== ''){\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcitationOutput = citationResultObject.apa7.first;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet addResearchNoteData = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcitation: researchNoteData.citation,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcitationOutput: citationOutput,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgenesisReferenceId: referenceData.referenceID,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgenesisResearchNoteId: researchNoteData.genesisResearchNoteID,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgenesisResearchNoteUniqueId: researchNoteData.genesisResearchNoteUniqueID,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnote: researchNoteData.note,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treferenceUniqueID: referenceData.referenceUniqueID,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tstore.commit('researchNotes/ADD_TO_LIST', addResearchNoteData);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});//e:forEach\n\n\t\t\t\t\t\t\t\t\t\tdelete referenceData.researchNotes;\t// no longer need this property so delete it\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t});//e:forEach\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}//e:if:ADD_IN||ONLINE\n\n\t\t\t\t\t\t\t// console.log('store.state.referenceLibraryGenesis');\n\t\t\t\t\t\t\t// console.log(store.state.referenceLibraryGenesis);\n\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t});//e:RS_Loop(genesis)\n\t\t\t\t\t});//e:RS_Prepare(genesis)\n\n\t\t\t\t});//e:RS_Loop\n\n\t\t\t});//e:RS_Prepare(regular)\n\n\t\t});//e:customer/setSiteTheme\n\t});\n}","/*\n- ErrS_GenericAlert\n-- since removing the Blue Spinner, I need a way to stop the user from working on their paper if there was a save error\n-- this file for now is only used when a saving error occurs\n-- it should stop all user interactions / saves\n*/\nimport _has from 'lodash/has';\nimport config from '@/config';\nimport Swal from 'sweetalert2';\n\nexport default ($opts) => {\n\treturn new Promise((resolve) => {\n\t\t// console.log('ErrS_GenericAlert');\n\t\t\n\t\tconst _$opts = $opts || {};\n\t\tconst _enum = (_has(_$opts, 'enum')) ? _$opts.enum : config.enums.Error.PAPER_SAVE;\n\t\tconst _src = (_has(_$opts, 'src')) ? _$opts.src : 'Unknown';\n\n\t\tif(_enum === config.enums.Error.PAPER_SAVE);{\n\t\t\tlet alertText = 'There was a problem saving your document.';\n\n\t\t\tconsole.log('Error Source: ' + _src);\n\n\t\t\tSwal.fire({\n\t\t\t\tallowOutsideClick: false,\n\t\t\t\tbuttonsStyling: false,\n\t\t\t\ttitle: 'Error',\n\t\t\t\ttext: alertText,\n\t\t\t\ticon: 'error',\n\t\t\t\tconfirmButtonText: 'OK',\n\t\t\t\tshowCloseButton: false,\n\t\t\t\tshowCancelButton: false,\n\t\t\t\tshowConfirmButton: true,\n\t\t\t\tcustomClass:{\n\t\t\t\t\tconfirmButton: 'btn btn-outline-danger',\n\t\t\t\t},\n\t\t\t}).then((result) => {\n\t\t\t\tif (result.value) {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}//e:result.value\n\t\t\t});//e:Swal.fire\n\n\t\t\tresolve();\t\n\t\t}//e:if:PAPER_SAVE\n\n\t});//e:Promise\t\t\t\n}\n","/*\n- AS_LoadDatepicker\n-- Sets any date picker object \n-- mainly i need this so i can get the date from an API call (sync) and then inject it into the UI of the DatePicker Fields asynchronously \n-- 2024.04.23\n*/\n\nimport _has from 'lodash/has';\nimport config from '@/config';\nimport dateFormat from \"dateformat\";\n\nexport default ($opts) => {\n\treturn new Promise((resolve) => {\n\t\t// console.log('AS_LoadDatepicker');\n\n\t\tconst _$opts = $opts || {};\n\t\tconst _isIsoString = (_has(_$opts, 'isIsoString')) ? _$opts.isIsoString : false;\n\t\tconst _isPaperEdit = (_has(_$opts, 'isPaperEdit')) ? _$opts.isPaperEdit : false;\n\t\tconst _isRefWizard = (_has(_$opts, 'isRefWizard')) ? _$opts.isRefWizard : false;\n\t\tconst _loadDate = (_has(_$opts, 'loadDate')) ? _$opts.loadDate : null;\n\n\t\tif(!_loadDate || _loadDate === '01/01/2099'){\n\t\t\treturn false;\n\t\t}\n\n\t\t// grab elements in the dom by their id\n\t\tlet $elDay = document.getElementById($opts.id + '_Day');\n\t\tlet $elMonth = document.getElementById($opts.id + '_Month');\n\t\tlet $elYear = document.getElementById($opts.id + '_Year');\n\n\t\tif($elDay && $elMonth && $elYear){\n\t\t\tif(_isIsoString){\n\t\t\t\t// i was passed an ISO string (2022-01-09T00:00:00)\n\t\t\t\t\n\t\t\t\t// get the first 10 chracters, then split it at on the dash ['2022', '01', '09']\n\t\t\t\tlet dateArray = _loadDate.substring(0, 10).split('-');\n\t\t\t\t\n\t\t\t\t$elMonth.value = dateArray[1];\n\t\t\t\t$elDay.value = dateArray[2];\n\t\t\t\t$elYear.value = dateArray[0];\n\n\t\t\t} else {\n\t\t\t\tif(_isRefWizard){\n\t\t\t\t\tif(_loadDate.length === 4 || _loadDate.length === 5) {\n\t\t\t\t\t\t// Year Only (4 for year / 5 for year plus letter)\n\t\t\t\t\t\t$elYear.value = _loadDate;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Not year only, but figure out what you have\n\t\t\t\t\t\tlet dateArray = _loadDate.split('/');\n\n\t\t\t\t\t\tif(dateArray.length === 2){\n\t\t\t\t\t\t\t// assume MM/YYYY\n\t\t\t\t\t\t\t$elMonth.value = dateArray[0];\n\t\t\t\t\t\t\t$elDay.value = '';\n\t\t\t\t\t\t\t$elYear.value = dateArray[1];\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// assume full date\n\t\t\t\t\t\t\t$elMonth.value = dateArray[0];\n\t\t\t\t\t\t\t$elDay.value = dateArray[1];\n\t\t\t\t\t\t\t$elYear.value = dateArray[2];\n\n\t\t\t\t\t\t}//e:if:else\n\t\t\t\t\t}//e:if:else\n\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// NOT Reference Wizard\n\t\t\t\t\n\t\t\t\t\t// parse the load date from long format into MM, DD, YYYY object\n\t\t\t\t\tconst listMonthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\t\t\n\t\t\t\t\tlet dateString = '';\n\t\t\t\t\tlet setMonthValue = '';\n\t\t\t\t\tlet setDayValue = '';\n\t\t\t\t\tlet setYearValue = '';\n\t\t\n\t\t\t\t\t// Bools that set to true only when there isn't a matching bit (ie: No Day listed)\n\t\t\t\t\tlet isNoMonth = false;\n\t\t\t\t\tlet isNoDay = false;\n\t\t\t\t\tlet isNoYear = false;\n\t\t\t\t\t\n\t\t\t\t\tswitch($opts.paperFormat){\n\t\t\t\t\t\tcase config.enums.Format.APA6:\n\t\t\t\t\t\tcase config.enums.Format.APA7:\n\t\t\t\t\t\tcase config.enums.Format.Turabian9:\n\t\t\t\t\t\t\t// remove the , from the long date string (and any trailing spaces)\n\t\t\t\t\t\t\tif(_isPaperEdit){\n\t\t\t\t\t\t\t\tlet dateArrayEdit = _loadDate.trim().split('/');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tlet fakeDateObj = new Date();\n\t\t\n\t\t\t\t\t\t\t\tswitch(dateArrayEdit.length){\n\t\t\t\t\t\t\t\t\tcase 1: // Only One\n\t\t\t\t\t\t\t\t\t\tif(dateArrayEdit[0].length > 3){\n\t\t\t\t\t\t\t\t\t\t\t// Year\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[0]);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Month (assumed)\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setMonth(dateArrayEdit[0] - 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\n\t\t\t\t\t\t\t\t\tcase 2: // Only Two\n\t\t\t\t\t\t\t\t\t\t// Check the 1st bit\n\t\t\t\t\t\t\t\t\t\tif(dateArrayEdit[0].length > 3){\n\t\t\t\t\t\t\t\t\t\t\t// Year\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[0]);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Month (assumed)\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setMonth(dateArrayEdit[0] - 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t\t\t// Check the 2nd bit\n\t\t\t\t\t\t\t\t\t\tif(dateArrayEdit[1].length > 3){\n\t\t\t\t\t\t\t\t\t\t\t// Year\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArrayEdit[1]);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Day (assumed)\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArrayEdit[1]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\n\t\t\t\t\t\t\t\t\tcase 3: // All Three (MM/DD/YYYY)\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArrayEdit[2]);\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArrayEdit[1]);\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setMonth(dateArrayEdit[0] - 1);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\tsetMonthValue = dateFormat(fakeDateObj, 'mm');\n\t\t\t\t\t\t\t\tsetDayValue = dateFormat(fakeDateObj, 'dd');\n\t\t\t\t\t\t\t\tsetYearValue = dateFormat(fakeDateObj, 'yyyy');\n\t\t\n\t\t\t\t\t\t\t\t$elMonth.value = setMonthValue;\n\t\t\t\t\t\t\t\t$elDay.value = setDayValue;\n\t\t\t\t\t\t\t\t$elYear.value = setYearValue;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdateString = _loadDate.trim().replace(/[,]+/g, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase config.enums.Format.MLA8:\n\t\t\t\t\t\tcase config.enums.Format.MLA9:\n\t\t\t\t\t\t\tdateString = _loadDate;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}//e:switch\n\t\t\t\t\t\n\t\t\t\t\t// not sure how this could happen but keep a check on it just incase\n\t\t\t\t\tif(dateString === ''){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// split into array\n\t\t\t\t\tlet dateArray = dateString.split(' ');\n\t\t\t\t\t\n\t\t\t\t\t// console.log('dateArray');\n\t\t\t\t\t// console.log(dateArray);\n\t\t\n\t\t\t\t\t// set each date item\n\t\t\t\t\tlet fakeDateObj = new Date();\n\t\t\t\t\tswitch($opts.paperFormat){\n\t\t\t\t\t\tcase config.enums.Format.APA6:\n\t\t\t\t\t\tcase config.enums.Format.APA7:\n\t\t\t\t\t\tcase config.enums.Format.Turabian9:\n\t\t\t\t\t\t\t// APA [month, day, year]\n\t\t\t\t\t\t\tswitch(dateArray.length){\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\t// Single Bit (Month || Day || Year)\n\t\t\t\t\t\t\t\t\tif(isNaN(dateArray[0])){\n\t\t\t\t\t\t\t\t\t\t// Month\n\t\t\t\t\t\t\t\t\t\tisNoDay = true;\n\t\t\t\t\t\t\t\t\t\tisNoYear = true;\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setMonth(listMonthsFull.indexOf(dateArray[0]));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// (Day || Year)\n\t\t\t\t\t\t\t\t\t\tisNoMonth = true;\n\t\t\t\t\t\t\t\t\t\tif(dateArray[0].length > 3){\n\t\t\t\t\t\t\t\t\t\t\t// Year\n\t\t\t\t\t\t\t\t\t\t\tisNoDay = true;\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[0]);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Day\n\t\t\t\t\t\t\t\t\t\t\tisNoYear = true;\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArray[0]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t// First Bit (Month || Day || Year)\n\t\t\t\t\t\t\t\t\tif(isNaN(dateArray[0])){\n\t\t\t\t\t\t\t\t\t\t// First Bit is Month\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setMonth(listMonthsFull.indexOf(dateArray[0]));\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Second Bit (Day || Year)\n\t\t\t\t\t\t\t\t\t\tif(dateArray[1].length > 3){\n\t\t\t\t\t\t\t\t\t\t\t// Second Bit is Year\n\t\t\t\t\t\t\t\t\t\t\tisNoDay = true;\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[1]);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Second Bit is Day\n\t\t\t\t\t\t\t\t\t\t\tisNoYear = true;\n\t\t\t\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArray[1]);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// First Bit is Day - Second is Year\n\t\t\t\t\t\t\t\t\t\tisNoMonth = true;\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArray[0]);\n\t\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\t// Full Date [month,day,year]\n\t\t\t\t\t\t\t\t\tfakeDateObj.setMonth(listMonthsFull.indexOf(dateArray[0]));\n\t\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArray[1]);\n\t\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[2]);\n\t\t\t\t\t\t\t\t\t// console.log('fakeDateObj');\n\t\t\t\t\t\t\t\t\t// console.log(fakeDateObj);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase config.enums.Format.MLA8:\n\t\t\t\t\t\tcase config.enums.Format.MLA9:\n\t\t\t\t\t\t\t// MLA [day,month,year]\n\t\t\t\t\t\t\tif(dateString.includes('/')){\n\t\t\t\t\t\t\t\t// assume it's PaperEdit > Overview Tab > Edit Modal\n\t\t\t\t\t\t\t\tlet mlaDateArray = dateString.split('/');\n\t\t\t\t\t\t\t\tfakeDateObj.setMonth(mlaDateArray[0] - 1);\n\t\t\t\t\t\t\t\tfakeDateObj.setDate(mlaDateArray[1]);\n\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(mlaDateArray[2]);\n\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// assume it's a Paper Edit > Editor Tab > Title Page Panel\n\t\t\t\t\t\t\t\tfakeDateObj.setMonth(listMonthsFull.indexOf(dateArray[1]));\n\t\t\t\t\t\t\t\tfakeDateObj.setDate(dateArray[0]);\n\t\t\t\t\t\t\t\tfakeDateObj.setFullYear(dateArray[2]);\n\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// values havn't been set yet\n\t\t\t\t\tif(setMonthValue === '' && setDayValue === '' && setYearValue === ''){\n\t\t\t\t\t\t$elMonth.value = (isNoMonth) ? '' : dateFormat(fakeDateObj, 'mm');\n\t\t\t\t\t\t$elDay.value = (isNoDay) ? '' : dateFormat(fakeDateObj, 'dd');\n\t\t\t\t\t\t$elYear.value = (isNoYear) ? '' : dateFormat(fakeDateObj, 'yyyy');\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t}//e:if:else:isRefWizard\n\n\t\t\t}//e:if:else:_isIsoString\n\n\t\t\t// emit to the datepicker component, to set it's date\n\t\t\twindow.$vm.emitter.emit('setDatePickerDate');\n\n\t\t}//e:if:$elX\n\t\tresolve();\n\t\t\n\t});//e:Promise\t\t\t\n}\n","/*\n- AS_ValidateForm\n-- 2024.04.23\n*/\n\nimport _cloneDeep from 'lodash/cloneDeep';\nimport _has from 'lodash/has';\nimport _isEmpty from 'lodash/isEmpty';\nimport isEmail from 'validator/lib/isEmail';\t//https://www.npmjs.com/package/validator\nimport isNumeric from 'validator/lib/isNumeric';\nimport store from '@/store';\nimport config from '@/config';\n\nexport default ($opts) => {\n\treturn new Promise((resolve, reject) => {\n\t\t// console.log('AS_ValidateForm');\n\n\t\tconst _$opts = $opts || {};\n\t\tconst _singleFieldId = (_has(_$opts, 'singleFieldId')) ? _$opts.singleFieldId : '';\n\t\tconst _formId = (_has(_$opts, 'formId')) ? _$opts.formId : '';\n\n\t\tlet isValid = true;\n\n\t\tlet parentFormId = _formId;\n\t\t\n\t\t// clone the validation array\n\t\tlet _validation = _cloneDeep(store.state.forms.validation);\n\t\t\n\t\t// Loop through vuex store object for validation\n\t\t_validation.forEach((validationData)=>{\n\t\t\tif(\n\t\t\t\t(_formId === '' || validationData.formId === _formId) &&\n\t\t\t\t(_singleFieldId === '' || validationData.fullId === _singleFieldId)\n\t\t\t){\n\t\t\t\t\n\t\t\t\tvalidationData.isShown = false;\n\t\t\t\t\n\t\t\t\tif(validationData.validateEnum === config.enums.Validation.DATE){\n\t\t\t\t\t// this is a datepicker field so it follows different validation rules\n\n\t\t\t\t\t// grab elements in the dom by their id\n\t\t\t\t\tlet $elDay = document.getElementById(validationData.fullId + '_Day');\n\t\t\t\t\tlet $elMonth = document.getElementById(validationData.fullId + '_Month');\n\t\t\t\t\tlet $elYear = document.getElementById(validationData.fullId + '_Year');\n\n\t\t\t\t\tif($elDay && $elMonth && $elYear){\n\t\t\t\t\t\t// all the elements exist, now check their values\n\t\t\t\t\t\tif(\n\t\t\t\t\t\t\t$elDay.value == '' ||\n\t\t\t\t\t\t\t$elMonth.value == '' ||\n\t\t\t\t\t\t\t$elYear.value == ''\n\t\t\t\t\t\t){\n\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\tvalidationData.isShown = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// NOT a date type, so check normal fields\n\t\t\t\t\t// get field by it's full id\n\t\t\t\t\tlet $field = document.getElementById(validationData.fullId);\n\t\t\t\t\tparentFormId = validationData.formId;\n\n\t\t\t\t\tif($field){\n\t\t\t\t\t\tswitch(validationData.validateEnum){\n\t\t\t\t\t\t\tcase config.enums.Validation.EMAIL:\n\t\t\t\t\t\t\t\tif(!isEmail($field.value)){\n\t\t\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\t\t\tvalidationData.isShown = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase config.enums.Validation.EMAIL_REQUIRED:\n\t\t\t\t\t\t\t\tif(_isEmpty($field.value) || !isEmail($field.value)){\n\t\t\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\t\t\tvalidationData.isShown = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase config.enums.Validation.NUMERIC:\n\t\t\t\t\t\t\t\tif(!isNumeric($field.value) || parseInt($field.value) === 0){\n\t\t\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\t\t\tvalidationData.isShown = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase config.enums.Validation.NUMERIC_REQUIRED:\n\t\t\t\t\t\t\t\tif(_isEmpty($field.value) || !isNumeric($field.value) || parseInt($field.value) === 0){\n\t\t\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\t\t\tvalidationData.isShown = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase config.enums.Validation.REQUIRED:\n\t\t\t\t\t\t\t\t// can i determine the type by the field tag?\n\t\t\t\t\t\t\t\tif($field.tagName.toLowerCase() === 'input' || $field.tagName.toLowerCase() === 'textarea'){\n\t\t\t\t\t\t\t\t\tif(_isEmpty($field.value)){\n\t\t\t\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\t\t\t\tvalidationData.isShown = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if($field.tagName.toLowerCase() === 'select'){\n\t\t\t\t\t\t\t\t\t\t// for