{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/ContainerLoading.vue?e184","webpack:///./src/components/ContainerLoading.vue?bfb7","webpack:///./src/components/ContainerLoading.vue?6c83","webpack:///./src/components/ContainerLoading.vue","webpack:///./src/components/HomeKnowledgeBaseButton.vue?337c","webpack:///./src/layouts/FullPage.vue?542c","webpack:///./src/plugins/event-bus.ts","webpack:///./src/views/home/HomeSearchUsersSection.vue?b204","webpack:///./src/api/map.ts","webpack:///./src/views/home/Home.vue?4af9","webpack:///./node_modules/moment/locale sync uk","webpack:///./src/components/vue-perfect-scrollbar/index.vue?a182","webpack:///./src/components/ContainerLoading.vue?4119","webpack:///./src/views/home/HomeRecentCallsSection.vue?48da","webpack:///./src/api/knowledge-base.ts","webpack:///./src/layouts/components/AppNavbar.vue?bc8c","webpack:///./src/App.vue?763a","webpack:///./src/components/InteractiveMap.vue?1887","webpack:///./src/store/types.ts","webpack:///./src/components/HealthCheckIndicator.vue?e72c","webpack:///./src/store/modules/telephony.ts","webpack:///./src/api/files.ts","webpack:///./src/api/admin-panel.ts","webpack:///./src/components/UserDetailsPopup.vue?7d79","webpack:///./src/components/UserDetailsPopup.vue?a7b1","webpack:///./src/components/UserDetailsPopup.vue?88eb","webpack:///./src/components/UserDetailsPopup.vue","webpack:///./src/plugins/app-utils.ts","webpack:///./src/plugins/acl-types.ts","webpack:///./src/views/home/HomeFavoriteUsersSection.vue?6aea","webpack:///./src/components/HomeKnowledgeBaseButton.vue?f596","webpack:///./src/store/root.ts","webpack:///./src/components/UserDetailsPopup.vue?d065","webpack:///./src/views/other/Login.vue?9558","webpack:///./src/api/users.ts","webpack:///./src/helpers.ts","webpack:///./src/components/InteractiveMap.vue?a165","webpack:///./src/components/InteractiveMap.vue?3183","webpack:///./src/components/InteractiveMap.vue?41c6","webpack:///./src/components/InteractiveMap.vue","webpack:///./src/plugins/http-client.ts","webpack:///./src/App.vue?5658","webpack:///./themeConfig.js","webpack:///./src/store/modules/ui.ts","webpack:///./src/App.vue?ec60","webpack:///./src/App.vue?640d","webpack:///./src/App.vue","webpack:///./src/plugins/files.ts","webpack:///./src/layouts/Main.vue?df46","webpack:///./src/layouts/components/AppNavbar.vue?0e8b","webpack:///./src/views/home/UserInfoSection.vue?82ad","webpack:///./src/views/home/UserInfoSection.vue?5155","webpack:///./src/views/home/UserInfoSection.vue?5837","webpack:///./src/views/home/UserInfoSection.vue","webpack:///./src/components/HealthCheckIndicator.vue?af26","webpack:///./src/components/HealthCheckIndicator.vue?5e0a","webpack:///./src/components/HealthCheckIndicator.vue?1d1f","webpack:///./src/components/HealthCheckIndicator.vue","webpack:///./src/layouts/components/AppNavbar.vue?7d4e","webpack:///./src/layouts/components/AppNavbar.vue?6583","webpack:///./src/layouts/components/AppNavbar.vue","webpack:///./src/layouts/Main.vue?a32c","webpack:///./src/layouts/Main.vue?5ab8","webpack:///./src/layouts/Main.vue","webpack:///./src/layouts/FullPage.vue?067b","webpack:///./src/layouts/FullPage.vue?8eaf","webpack:///./src/layouts/FullPage.vue?0d23","webpack:///./src/layouts/FullPage.vue","webpack:///./src/layouts/TransitView.vue?021d","webpack:///./src/layouts/TransitView.vue?b081","webpack:///./src/layouts/TransitView.vue?913c","webpack:///./src/layouts/TransitView.vue","webpack:///./src/views/home/Home.vue?d7c4","webpack:///./src/views/home/HomeSearchUsersSection.vue?0c0d","webpack:///./src/views/home/HomeSearchUsersSection.vue?f1c5","webpack:///./src/views/home/HomeSearchUsersSection.vue?6c8e","webpack:///./src/views/home/HomeSearchUsersSection.vue","webpack:///./src/views/home/HomeFavoriteUsersSection.vue?e8a0","webpack:///./src/views/home/HomeFavoriteUsersSection.vue?cb4a","webpack:///./src/views/home/HomeFavoriteUsersSection.vue?1ff9","webpack:///./src/views/home/HomeFavoriteUsersSection.vue","webpack:///./src/views/home/HomeRecentCallsSection.vue?a822","webpack:///./src/views/home/HomeRecentCallsSection.vue?9e2c","webpack:///./src/views/home/HomeRecentCallsSection.vue?9943","webpack:///./src/views/home/HomeRecentCallsSection.vue","webpack:///./src/components/HomeKnowledgeBaseButton.vue?9563","webpack:///./src/components/HomeKnowledgeBaseButton.vue?57c0","webpack:///./src/components/HomeKnowledgeBaseButton.vue?453f","webpack:///./src/components/HomeKnowledgeBaseButton.vue","webpack:///./src/views/home/Home.vue?a0f5","webpack:///./src/views/home/Home.vue?d089","webpack:///./src/views/home/Home.vue","webpack:///./src/views/other/Login.vue?fe7f","webpack:///./src/views/other/Login.vue?a473","webpack:///./src/views/other/Login.vue?8bad","webpack:///./src/views/other/Login.vue","webpack:///./src/router.ts","webpack:///./src/plugins/acl.ts","webpack:///./src/components/vue-select/components/Select.vue?d72d","webpack:///./src/components/vue-select/mixins/pointerScroll.js","webpack:///./src/components/vue-select/mixins/typeAheadPointer.js","webpack:///./src/components/vue-select/mixins/ajax.js","webpack:///./src/components/vue-select/components/Deselect.vue?99b8","webpack:///./src/components/vue-select/components/Deselect.vue","webpack:///./src/components/vue-select/components/OpenIndicator.vue?54e3","webpack:///./src/components/vue-select/components/OpenIndicator.vue","webpack:///./src/components/vue-select/components/childComponents.js","webpack:///./src/components/vue-select/mixins/domHelpers.js","webpack:///src/components/vue-select/components/Select.vue","webpack:///./src/components/vue-select/components/Select.vue?22af","webpack:///./src/components/vue-select/components/Select.vue","webpack:///./src/components/vue-select/index.js","webpack:///./src/components/vue-perfect-scrollbar/index.vue?5574","webpack:///src/components/vue-perfect-scrollbar/index.vue","webpack:///./src/components/vue-perfect-scrollbar/index.vue?2974","webpack:///./src/components/vue-perfect-scrollbar/index.vue","webpack:///./src/components/AppDivider.vue?8980","webpack:///./src/components/AppDivider.vue?db83","webpack:///./src/components/AppDivider.vue?0b24","webpack:///./src/components/AppDivider.vue","webpack:///./src/components/PageLoadingIndicator.vue?84f2","webpack:///./src/components/PageLoadingIndicator.vue?7f0f","webpack:///./src/components/PageLoadingIndicator.vue?23a0","webpack:///./src/components/PageLoadingIndicator.vue","webpack:///./src/globalComponents.ts","webpack:///./src/plugins/filters.ts","webpack:///./src/plugins/mixins.ts","webpack:///./src/main.ts","webpack:///./src/components/web-socket-manager/WebSocketManager.js","webpack:///./src/plugins/websocket-client.ts","webpack:///./src/store/modules/auth.ts","webpack:///./src/api/api-base.ts","webpack:///./src/components/InteractiveMap.vue?0d55","webpack:///./src/global-enum.ts","webpack:///./src/views/other/Login.vue?c4a5","webpack:///./src/assets/scss/variables-reference.scss","webpack:///./src/components/PageLoadingIndicator.vue?9031","webpack:///./src/api/telephony.ts","webpack:///./src/components/UserInFavoritesToggle.vue?069d","webpack:///./src/components/UserInFavoritesToggle.vue?970c","webpack:///./src/components/UserInFavoritesToggle.vue?6c5d","webpack:///./src/components/UserInFavoritesToggle.vue"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","render","_h","_vm","_c","directives","rawName","props","expression","staticClass","class","withBorder","inCard","style","attrs","staticRenderFns","ContainerLoading","styles","this","$helpers","isExists","offset","top","bottom","left","right","Boolean","default","component","EventBusModel","logoutEventName","userInFavoritesChangedEventName","controllableCallStartedEventName","controllableCallEndedEventName","newPhoneCallEventName","afterWindowResizeCompletedEventName","EventBus","cachedSearchableMapRegions","cb","errorCb","isArray","isFunction","cachedSearchableMapRegionsPromise","success","errorMessage","_defaultGetResponse","region","successCb","_defaultPostResponse","district","point","id","params","map","webpackContext","req","webpackContextResolve","keys","page","category","article","searchTerm","UPDATE_SIDEBAR_WIDTH","TOGGLE_CONTENT_OVERLAY","UPDATE_THEME","UPDATE_WINDOW_SIZE","AUTH_UPDATE_USERINFO","Telephony","isCallsBlocked","currentCalleeId","robotCallPhoneNumber","phoneNumber","calleeId","TELEPHONY_CALLS_UNBLOCKED","payload","showError","TELEPHONY_CALLS_BLOCKED","makeCall","toUserId","tryUnblockCallsAfterTimeout","TELEPHONY_CALLING_ROBOT_NUMBER","TELEPHONY_SET_CALLEE","cancelCall","isNotEmpty","dynamic","store","TelephonyModule","metatype","previewVersion","file","formData","FormData","append","headers","ids","version","settings","organization","telephonyServer","telephonyServerId","$createElement","_self","scopedSlots","_u","isLoading","userDetails","fn","_v","_s","fullName","isInFavorites","on","$event","arguments","proxy","model","callback","$$v","isPopupVisible","$files","avatarImageUrl","avatarFileId","largeAvatarVersion","$const","avatarLargeImageSize","mapRegionName","_e","mapDistrictName","mapPointName","organizationShortName","organizationFullName","positionName","fullMainPhoneNumberFormatted","mainPhoneName","_l","phone","index","$appUtils","formatAdditionalPhoneNumber","number","displayValue","label","username","email","emailAddress","staticStyle","isNotEmptyArray","additionalPhones","additionalEmails","$on","changeUserInFavorites","$off","userId","users","getUserDetails","$bvToast","toast","title","variant","components","UserInFavoritesToggle","inst","scope","veeErrors","any","ref","field","scopeObj","veeFields","dirty","validated","has","origValue","splitStr","trim","toLowerCase","split","charAt","toUpperCase","substring","join","inputValue","isInit","replace","AppUtilsModel","phoneNumberMaxLength","substr","origPassword","user","isNeedShortVersion","lastName","firstName","patronymicName","accessTypes","accessNames","mapElement","isNeedAddMapElementTypeSuffix","mapElementName","mapRegion","customFullName","mapDistrict","mapPoint","selectedMapRegionId","selectedMapDistrictId","allMapRegions","mapRegionDtos","generateMapSelectOptionsFromDtos","mapRegions","mapDistricts","mapPoints","mapRegionDto","getMapElementName","isNumeric","selectedMapRegionDto","findFirstInArray","mapDistrictDto","selectedMapDistrict","mapPointDto","sort","a","b","localeCompare","availableOrganizations","organizations","shortName","rootInst","_UserDetailsPopup","componentClass","extend","instance","$mount","body","$el","openPopup","AccessRules_Public","AccessRules_SystemAdmin","AccessRules_Users","AccessRules_KnowledgeBase","use","Store","password","currentPassword","newPassword","passwordResetKey","selectedFilters","mapRegionId","mapDistrictId","mapPointId","organizationIds","filters","HelpersModel","parseFloat","str","indexOf","num","decimals","Math","round","pow","toFixed","Array","array","funcForFind","items","funcForCompare","desc","funcForGroup","reduce","item","element","scrollTop","scrollLeft","maxScrollTop","scrollHeight","clientHeight","maxScrollLeft","scrollWidth","clientWidth","targetScrollTop","roundDecimal","clamp","targetScrollLeft","scrollListener","evt","currentTarget","removeEventListener","addEventListener","scroll","behavior","duration","canceled","durationLeft","scrollTopParsed","scrollLeftParsed","loop","topDiff","leftDiff","tick","topPerTick","leftPerTick","go","height0","innerHeight","requestAnimationFrame","min","max","value1","value2","amount","h","$props","isHeaderDisabled","mapHeaderLabel","isMapZoomInProgress","loaded","isMapLoaded","onMouseDragStart","onMouseDragEnd","values","selectedRegion","deselectSelectedMapElementWithTimer","_t","LabelType","text","centerOffset","parentSvgElem","wrapperLabelSvg","createElementNS","mapElements","mapLabelsHolder","labelWrapperElem","labelElem","rebuildLabel","labelSvg","textLines","textLine","labelSpanSvg","textContent","visibility","isForceHide","isShowed","labelFontSize","rootSvgBounds","mapWrapper","getBoundingClientRect","mapSvgBounds","mapAllRegionsGroup","parentSvgBounds","Region","height","District","childNodes","getBBox","width","labelCenterX","x","labelCenterY","y","baseTextLineOffset","firstTextLineOffset","defaultTextLineOffset","isFaded","isDisabled","source","viewboxWidth","viewboxHeight","maxWidthRelative","maxHeightRelative","mapId","centerOffsetXPerc","centerOffsetYPerc","districts","regionPoints","svgElem","findSvgElement","nameLabel","getDisplayName","regionDistrictsResult","findDistrictsSvgElements","container","isNeedFullName","isForceHideLabel","isPartiallySelected","isSelected","selectedDistrict","selectedPoint","updateLebel","getRegionLabelVisibility","updateView","getRegionPointVisibility","parent","districtPoints","isAltColor","getDistrictLabelVisibility","getDistrictPointVisibility","parentRegion","parentDistrict","positionXPerc","positionYPerc","pointWrapperSvg","onclick","selectMapPoint","ontouchend","mapPointsHolder","pointWrapperElem","circleSvg","pointCircleElem","textSvg","pointTextElem","isRegionParent","circle","circleCenterX","circleCenterY","isTopLevel","isRegionLevel","isDistrictLevel","circleRadius","circleStrokeWidth","labelBottomOffset","isMapDragActive","isMapZoomedIn","regions","mapTopWrapper","mapLayers","selectedRegionLink","selectedDistrictLink","mapWrapperMinWidth","mapWrapperMinHeight","mapWrapperMaxWidth","mapWrapperMaxHeight","mapWindowWidth","mapWindowHeight","mapViewboxWidth","mapViewboxHeight","mapCurrentWidth","mapCurrentHeight","mapWrapperCurrentWidth","mapWrapperCurrentHeight","nextSelectedRegion","nextSelectedDistrict","nextSelectedPoint","mouseDragTimer","transitionEndTimer","deselectSelectedMapElement","some","dto","mapRegionData","mapDistrictData","removeInArray","mapPointData","refreshView","updateInteractiveMapView","mapInst","$refs","mapSvgImg","makeIdsUnique","afterInject","img","svg","prepareMapElements","isAllMapElementsMode","initMapData","searchableMapRegionsCached","positionGoUpButton","onMouseScroll","svgMapDistricts","getElementsByClassName","onMouseClick","onTouchClick","onWrapperMouseScroll","wrapper","mapSvgWrapper","mapElem","getElementById","buttons","offsetLeft","initMap","oldSelectedRegion","oldSelectedDistrict","oldSelectedPoint","updateMapSelection","updateMapZoom","findMapElement","selectPoint","isBreak","onSelectionChanged","readonly","selectMapRegionOrDistrict","preventDefault","stopPropagation","isScrollControlDisabled","sign","deltaY","rootBBox","maxMapScale","offsetWidth","offsetHeight","regionBBox","districtBBox","insertBefore","titleElem","parentElement","layers","labelsHolder","pointsHolder","updateMapSize","initMapZoom","initValues","elementBounds","mapBounds","el","transitions","animation","mapFocusX","mapFocusY","targetWidth","targetHeight","oldMapWrapperCurrentWidth","oldMapWrapperCurrentHeight","oldMapCurrentWidth","oldMapCurrentHeight","coord","targetMaxWidth","targetMaxHeight","additionalEdgeOffsetPerc","getMapFocusCoord","elemBoundingBox","isNeedScaleByHeight","focusXPerc","inverseLerp","focusYPerc","scaleX","scaleY","targetResultWidthByScaleX","targetResultHeightByScaleX","targetResultWidthByScaleY","targetResultHeightByScaleY","wrapperScale","thisInst","setSizesAndScrollPosition","commitMapSelection","updateMapSelectedLinks","checkRegion","checkDistrict","wrapperBounds","currentFocusX","currentFocusY","newFocusX","newFocusY","focusOffsetX","focusOffsetY","animateScroll","isAnyScroll","testPureCss","transitionEndEventName","getTransitionEndEventName","isTransitionEnded","transitionEnded","targets","scale","transformOrigin","easing","complete","anim","completed","translateX","translateY","regionMapId","find","districtMapId","findMapRegion","elemIds","Number","regionDistrictsContainer","child","nodeType","selector","elem","Function","dragscroll","HttpClient","axiosInstance","userInfo","obtainUserInfo","baseURL","token","url","config","tryInit","resp","catch","response","status","logoutUser","post","defaults","$emit","$route","meta","isScreenHeightPage","themeConfig","vars","primary","danger","warning","dark","theme","sidebarCollapsed","navbarColor","navbarType","footerType","routerTransition","disableCustomizer","hideScrollToTop","disableThemeTour","isSidebarActive","breakpoint","sidebarWidth","reduceButton","bodyOverlay","sidebarItemsMin","themePrimaryColor","windowWidth","windowHeight","val","commit","types","UiModule","hasCSSVarSupport","CSS","supports","oldVal","toggleClassInBody","tryInitAuthUser","acl","$acl","logoutEvent","$nextTick","handleWindowResize","handleOrientationChange","initAppSizes","logout","$router","className","match","classList","remove","add","tryUpdateWindowSize","setBodyMobileClasses","newWidth","innerWidth","newHeight","updateWindowSize","vh","documentElement","setProperty","changeVhVariable","afterChangeCb","variables","onComplete","cssText","styleElms","cssVariables","benchmark","orientationChanged","isLandscape","smallAvatarVersion","postfix","defaultUrl","generateUrl","filePreview","fileName","fileExtension","pageTitle","isSeparator","modifiers","icon","activeCallee","check","slot","userDisplayName","avatarSmallImageSize","openUserDetails","isReadonlyUser","mapPositionSubstringTitle","domProps","mapPositionSubstringText","organizationSubstringTitle","organizationSubstringText","disableMakeCall","isCallingToUser","filter","openUserDetailsPopup","$root","isTooltipVisible","statusesTitle","isBoolean","isDatabaseOk","isRedisOk","isTelephonyServiceOk","isChecking","checkTimer","lastCheckError","masterServerNumber","statuses","isOk","healthCheck","setInterval","clearInterval","isLocalPostgreSQLOperating","isLocalRedisOperating","isLocalTelephonyServiceOperating","unreadNotifications","msg","time","Date","getTime","psSettings","maxScrollbarLength","wheelSpeed","menuItems","onAclRolesUpdate","callStarted","callEnded","adminAccessesString","getAdminAccesses","accesses","shortFullName","routes","options","children","route","isValid","rule","toString","path","callee","toaster","deep","HealthCheckIndicator","UserInfoSection","AppNavbar","BackToTop","isBackgroundImageHidden","TransitView","tabChanged","selectedTab","onMapFilterChanged","unseenPhoneCallsCount","isAnyMissedUnseenPhoneCalls","mapSelectionChanged","getMapInitValues","isFilterTagsViewInit","isSearchTermValidFalseOnly","$set","isSearchTermErrorTooltipShowed","searchTermMinLengthText","isUsersLoading","isUsersAppending","appendMoreUsers","toggleFilterTags","filterTagCount","isFilterTagsOpen","searchFiltersOptions","searchSearchFilters","setFiltersFromOption","searchFiltersSearchTerm","selectSearchTermMinLength","selectSearchNoResultsText","selectSearchNotStartedText","option","getSearchFiltersOptionTitle","getSearchFiltersOptionBadgeText","getSearchFiltersOptionLabel","getSearchFiltersOptionAdditionalInfo","searchFiltersSelectedOption","displayName","oldFilters","organizationNames","organizationFullNames","mapRegionOptions","mapDistrictOptions","mapPointOptions","mapRegionOption","mapDistrictOption","mapPointOption","updateCache","organizationId","organizationName","removeIndex","localStorage","setItem","UsersSearchFiltersCache","filtersLocalStorageKey","JSON","stringify","cachedObjString","getItem","parse","usersPage","isMorePagesAvailable","filterTags","updateSearchFiltersWithTimer","loadingCb","userSearchFilters","updateUsersWithTimer","isUsersAppendMode","updateUsers","getFromCache","initMapRegions","initFilterTagsFromFilters","oldval","newParsed","oldParsed","updateFilterTagsView","userSearchResultsContainer","filterTagsContainer","filterTagsHeader","filterTagsContent","filterTagsHeaderRect","filterTagsContentRect","containerHeight","removeOrganization","setMapElements","updateFilterTags","addOrganization","organizationInTagsRemoved","mapElementsInTagsAfterRemove","search","usersResult","isMoreItemsAvailable","$forceUpdate","filterSearchTerm","favoriteUsers","isFavoriteUsersLoading","isFavoriteUsersAppending","appendMoreFavoriteUsers","updateFavoriteUsersWithTimer","updateFavoriteUsers","isAnyUserFound","isRecentCallsLoading","isRecentCallsAppending","appendMoreRecentCalls","recentCallsGroups","recentCalls","_f","createdOn","isIncomingCall","caller","isMissed","newCallIds","getCallTitle","allRecentCalls","newPhoneCall","allUsers","updateRecentCalls","phoneCall","unshift","updateCallGroups","format","prevCreatedOnDate","prevRecentCallsGroup","callCreatedOnDate","date","month","year","phoneCalls","phoneCallsResult","openKnowledgeBasePopup","onKnowledgeBasePopupClosed","knowledgeBasePopup","openArticle","isOpenArticleLoading","isKnowledgeBasePopupFilterSearchTermValidFalseOnly","isKnowledgeBasePopupFilterSearchTermErrorTooltipShowed","group","isOpen","groupName","openKnowledgeBaseArticle","content","attachmentFileIds","preview","previewUrl","attachmentPreviews","fileSizeBytes","isSearchLoading","isActive","articlesPage","articles","groupedArticles","isAttachmentPreviewsLoading","updateArticlesWithTimer","isAppendMode","updateArticles","articleId","getArticleDetails","articleDetails","initAttachmentPreviews","previews","isGroupOpen","groupBy","categoryName","searchArticles","articlesResult","updateArticleGroups","interactiveMap","searchUsersSection","favoriteUsersSection","recentCallsSection","currentIndex","getSearchUsersSection","getFavoriteUsersSection","getRecentCallsSection","getInteractiveMap","changeMap","changeMapFilter","HomeSearchUsersSection","HomeFavoriteUsersSection","HomeRecentCallsSection","InteractiveMap","HomeKnowledgeBaseButton","isForgotPasswordMode","validateState","$store","state","auth","isLoginInProgress","_k","keyCode","login","first","minPasswordLength","isButtonsDisabled","setForgotPasswordMode","isValidationScopeValid","forgotPasswordUsername","forgotPassword","tryAutoLogin","vvIsValidationScopeValid","vvValidateState","isEnabled","$validator","reset","validateAll","isAlreadyAuthenticated","isAuthenticated","isSuccess","query","to","sendPasswordReset","AdminAccess_KnowledgeBaseArticles","AdminAccess_EditKnowledgeBaseArticle","AdminAccess_Users","AdminAccess_EditUser","AdminPanel","AdminPanel_Server","AdminPanel_Organizations","AdminPanel_EditOrganization","AdminPanel_TelephonyServers","AdminPanel_EditTelephonyServer","AdminPanel_EditMap","Error404Page","CreateUserPage","UserProfile","ResetPasswordPage","router","base","scrollBehavior","isAnonymousAllowed","redirect","afterEach","appLoading","display","beforeEach","from","next","invalidateCache","initial","notfound","acceptLocalRules","globalRules","generate","or","stateClasses","dir","toggleDropdown","multiple","getOptionKey","getOptionLabel","normalizeOptionForSlot","disabled","deselect","childComponents","Deselect","_g","_b","attributes","events","clearSelection","noDrop","OpenIndicator","openIndicator","spinner","transition","onMousedown","onMouseUp","isOptionSelected","typeAheadPointer","select","filteredOptions","watch","maybeAdjustScroll","methods","pixelsToPointerTop","pixelsToPointerBottom","viewport","scrollTo","pointerHeight","dropdownMenu","position","typeAheadUp","typeAheadDown","typeAheadSelect","taggable","clearSearchOnSelect","loading","mutableLoading","toggleLoading","toggle","DROPDOWN_EDGE_MARGIN","positionDropdown","forceAbovePosition","baseElement","targetElement","maxHeight","isBaseElementVisible","getScrollableElements","elements","tagName","VueSelect","tagname","update","$listeners","textClasses","AppDivider","String","currentHeight","updateContainerHeight","bottomOffset","BYTE_UNITS","BIT_UNITS","toLocaleString","locale","isFinite","TypeError","assign","bits","UNITS","signed","isNegative","prefix","exponent","floor","log10","toPrecision","numberString","unit","mixin","$withoutWatchers","watchers","_watchers","watcher","sync","moment","fieldsBagName","errorBagName","localize","getMessage","validate","hasUpperCaseLetter","hasLowerCaseLetter","hasDecimalDigit","character","skipValues","dashCount","test","install","Vue","tableMaxItemsPerPage","selectNoOptionsText","maxPasswordLength","maxFileSizeBytes","files","productionTip","App","WebSocketManager","constructor","_this","Message","messageType","$type","Text","MethodInvocation","ConnectionEvent","MethodReturnValue","InvocationDescriptor","methodName","args","identifier","$values","$value","InvocationResult","exception","typemappings","guid","uuid","bool","byte","sbyte","char","decimal","double","float","int","uint","long","ulong","short","ushort","string","performance","now","random","parseCSharpObject","obj","results","parseCSharpArguments","collection","waitingRemoteInvocations","onSocketOpen","onSocketClose","onDisconnected","onSocketError","onSocketMessage","onConnected","onMessage","socket","send","connect","WebSocket","onopen","onclose","forEach","onmessage","close","invokeOnly","method","invoke","WebsocketClient","_connection","connection","location","host","socketId","log","_tryReconnectTimeout","_tryReconnectAttempts","currentUserInfo","AuthModule","updateAuthUser","currentCalleeInfo","controllableCallStarted","currentTimeout","tryConnect","updateUser","forceLogout","controllableCallEnded","newPhoneCallRecord","localStorageUserInfoKey","permissions","localStorageUserInfoString","localStorageUserInfo","isObject","currentUserInfoVersion","removeItem","setAuthToken","disconnect","rules","change","AUTH_UPDATE_ACL_PERMISSIONS","AUTH_LOGIN_STARTED","authenticate","AUTH_LOGIN_ENDED","ApiBase","getOptions","errorCtx","postOptions","UserAccessType_SystemAdmin","UserAccessType_Users","UserAccessType_KnowledgeBase","UserContactInfoVisibilityType_AllContactInfo","UserContactInfoVisibilityType_AllPhones","UserContactInfoVisibilityType_AllEmails","UserContactInfoVisibilityType_MainPhone","UserContactInfoVisibilityType_MainEmail","UserContactInfoVisibilityType_AdditionalPhone","UserContactInfoVisibilityType_AdditionalEmail","MapPointType_District","MapPointType_Region","MapPointType_TopLevel","MapPointType_TopLevelSpecial","PhoneCallItemType_Incoming","AppLogType_Info","AppLogType_Error","FileMetatype_UserAvatar","FileMetatype_KnowledgeBaseArticleContent","FileMetatype_KnowledgeBaseArticleAttachment","MapElementType_Region","MapElementType_District","MapElementType_Point","isRobotCall","isInFavoritesUpdating","toggleUserIsFavorites","newIsInFavorites","setUserInFavorites","warn","required"],"mappings":"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","file":"js/app.8376eca7.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"admin~user-actions\":\"admin~user-actions\",\"admin\":\"admin\",\"user-actions\":\"user-actions\"}[chunkId]||chunkId) + \".\" + {\"chunk-2d0dd016\":\"97a54b57\",\"chunk-5d78b913\":\"aaede897\",\"admin~user-actions\":\"3ae0b533\",\"admin\":\"e3d0afb5\",\"user-actions\":\"badfd1fb\",\"chunk-0cac6609\":\"c6342a42\",\"chunk-f840a642\":\"0b55ed4c\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-5d78b913\":1,\"admin~user-actions\":1,\"admin\":1,\"chunk-0cac6609\":1,\"chunk-f840a642\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"admin~user-actions\":\"admin~user-actions\",\"admin\":\"admin\",\"user-actions\":\"user-actions\"}[chunkId]||chunkId) + \".\" + {\"chunk-2d0dd016\":\"31d6cfe0\",\"chunk-5d78b913\":\"42c0a9a0\",\"admin~user-actions\":\"1ceeed6a\",\"admin\":\"64f407fe\",\"user-actions\":\"31d6cfe0\",\"chunk-0cac6609\":\"0e433876\",\"chunk-f840a642\":\"32529a6c\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\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\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.props.isLoading),expression:\"props.isLoading\"}],staticClass:\"container-loading\",class:{ 'with-border': _vm.props.withBorder, 'in-card': _vm.props.inCard },style:(_vm.styleObj)},[_c('div',{staticClass:\"w-100 d-flex justify-content-center align-items-center\"},[_c('b-spinner',{attrs:{\"label\":\"Завантаження...\"}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\n\n@Component({\n directives: {\n\n }\n})\nexport default class ContainerLoading extends Vue {\n @Prop(Boolean) isLoading: Boolean | undefined;\n @Prop(Boolean) withBorder: Boolean | undefined;\n @Prop(Boolean) inCard: Boolean | undefined;\n @Prop({ type: Object, default: () => {} }) offset: { top?: string, bottom?: string, left?: string, right?: string, } | undefined;\n\n get styleObj() {\n let styles: any = {};\n\n if (this.$helpers.isExists(this.offset)) {\n styles.top = this.offset!.top;\n styles.bottom = this.offset!.bottom;\n styles.left = this.offset!.left;\n styles.right = this.offset!.right;\n }\n\n return styles\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContainerLoading.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContainerLoading.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ContainerLoading.vue?vue&type=template&id=00dc6f82&scoped=true&functional=true&\"\nimport script from \"./ContainerLoading.vue?vue&type=script&lang=ts&\"\nexport * from \"./ContainerLoading.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ContainerLoading.vue?vue&type=style&index=0&id=00dc6f82&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n \"00dc6f82\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeKnowledgeBaseButton.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FullPage.vue?vue&type=style&index=0&lang=scss&\"","\r\nimport Vue from 'vue';\r\nimport Component from \"vue-class-component\";\r\nimport {AuthModule} from \"@/store/modules/auth\";\r\n\r\nexport default class EventBusModel extends Vue {\r\n static logoutEventName = \"logoutEvent\";\r\n static userInFavoritesChangedEventName = \"userInFavoritesChangedEvent\";\r\n static controllableCallStartedEventName = \"controllableCallStartedEvent\";\r\n static controllableCallEndedEventName = \"controllableCallEndedEvent\";\r\n static newPhoneCallEventName = \"newPhoneCallEvent\";\r\n static afterWindowResizeCompletedEventName = \"afterWindowResizeCompletedEvent\";\r\n}\r\n\r\nexport const EventBus = new EventBusModel();\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeSearchUsersSection.vue?vue&type=style&index=0&id=2fd59ab7&lang=scss&scoped=true&\"","\r\nimport {\r\n MapDistrictDto, MapPointDto,\r\n MapRegionDto, OrganizationAEditDto,\r\n} from '@/global'\r\nimport ApiBase from \"@/api/api-base\";\r\nimport Helpers from \"@/helpers\";\r\n\r\nexport default class extends ApiBase {\r\n static cachedSearchableMapRegionsPromise: Promise<{ success: boolean, errorMessage: string | null }> | null;\r\n static cachedSearchableMapRegions: MapRegionDto[] | null;\r\n \r\n static invalidateCache() {\r\n this.cachedSearchableMapRegions = null;\r\n }\r\n \r\n static searchableMapRegionsCached(cb: (mapRegions: MapRegionDto[]) => void, errorCb: (errorMessage?: string) => void) {\r\n if (Helpers.isArray(this.cachedSearchableMapRegions)) {\r\n if (Helpers.isFunction(cb)) {\r\n cb(this.cachedSearchableMapRegions!);\r\n }\r\n } else if (Helpers.isExists(this.cachedSearchableMapRegionsPromise)) {\r\n this.cachedSearchableMapRegionsPromise!.then((result) => {\r\n if (result.success) {\r\n if (Helpers.isFunction(cb)) {\r\n cb(this.cachedSearchableMapRegions!);\r\n }\r\n } else {\r\n if (Helpers.isFunction(errorCb)) {\r\n errorCb(result.errorMessage!);\r\n }\r\n }\r\n })\r\n } else {\r\n this.cachedSearchableMapRegionsPromise = new Promise<{ success: boolean, errorMessage: string | null }>((resolve, reject) => {\r\n this._defaultGetResponse('/api/map/searchable-map-regions', {}, (result) => {\r\n this.cachedSearchableMapRegions = result;\r\n this.cachedSearchableMapRegionsPromise = null;\r\n \r\n resolve({\r\n success: true,\r\n errorMessage: null\r\n });\r\n \r\n if (Helpers.isFunction(cb)) {\r\n cb(result);\r\n }\r\n }, errorMessage => {\r\n this.cachedSearchableMapRegions = null;\r\n this.cachedSearchableMapRegionsPromise = null;\r\n \r\n resolve({\r\n success: false,\r\n errorMessage: errorMessage || null\r\n });\r\n \r\n if (Helpers.isFunction(errorCb)) {\r\n errorCb(errorMessage);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n \r\n static allMapRegions(cb: (mapRegions: MapRegionDto[]) => void, errorCb: (errorMessage?: string) => void) {\r\n // todo local cache ?\r\n return this._defaultGetResponse('/api/map/all-map-regions', {}, cb, errorCb);\r\n }\r\n \r\n static updateRegion(region: MapRegionDto, successCb: (data: { success: boolean, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/map/edit-map-region', region, null, successCb, errorCb);\r\n }\r\n \r\n static updateDistrict(district: MapDistrictDto, successCb: (data: { success: boolean, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/map/edit-map-district', district, null, successCb, errorCb);\r\n }\r\n \r\n static updatePoint(point: MapPointDto, successCb: (data: { success: boolean, id: number | null, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/map/edit-map-point', point, null, successCb, errorCb);\r\n }\r\n \r\n static deletePoint(id: number, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/map/delete-map-point', {\r\n params: { id }\r\n }, successCb, errorCb);\r\n }\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&lang=scss&\"","var map = {\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"3765\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContainerLoading.vue?vue&type=style&index=0&id=00dc6f82&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeRecentCallsSection.vue?vue&type=style&index=0&id=072fcb12&lang=scss&scoped=true&\"","\r\nimport {\r\n KnowledgeBaseArticleAEditDto,\r\n KnowledgeBaseArticleATableDto,\r\n KnowledgeBaseArticleCategoryAEditDto,\r\n KnowledgeBaseArticleDetailsDto,\r\n KnowledgeBaseArticlesSearchResultDto,\r\n TableResult,\r\n} from '@/global'\r\nimport ApiBase from \"@/api/api-base\";\r\n\r\nexport default class extends ApiBase {\r\n static articlesForTable(page: number, cb: (articlesResult: TableResult) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/table', {\r\n params: { page }\r\n }, cb, errorCb);\r\n }\r\n \r\n static getCategoriesEdit(cb: (categories: KnowledgeBaseArticleCategoryAEditDto[]) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/edit-categories', null, cb, errorCb);\r\n }\r\n \r\n static updateCategoryEdit(category: KnowledgeBaseArticleCategoryAEditDto, successCb: (data: { success: boolean, id: number | null }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/knowledge-base/edit-category', category, null, successCb, errorCb);\r\n }\r\n \r\n static deleteCategory(id: number, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/delete-category', {\r\n params: { id }\r\n }, successCb, errorCb);\r\n }\r\n \r\n static getArticleEdit(id: number, cb: (article: KnowledgeBaseArticleAEditDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/edit-article', {\r\n params: { id }\r\n }, cb, errorCb);\r\n }\r\n \r\n static updateArticleEdit(article: KnowledgeBaseArticleAEditDto, successCb: (data: { success: boolean, id: number | null, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/knowledge-base/edit-article', article, null, successCb, errorCb);\r\n }\r\n \r\n static deleteArticle(id: number, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/delete-article', {\r\n params: { id }\r\n }, successCb, errorCb);\r\n }\r\n \r\n static searchArticles(page: number, searchTerm: string | null, cb: (articlesResult: KnowledgeBaseArticlesSearchResultDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/search-articles', {\r\n params: { page, searchTerm }\r\n }, cb, errorCb);\r\n }\r\n \r\n static getArticleDetails(id: number, successCb: (userDetails: KnowledgeBaseArticleDetailsDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/knowledge-base/article-details', {\r\n params: { id }\r\n }, successCb, errorCb);\r\n }\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppNavbar.vue?vue&type=style&index=0&id=e17f5012&scoped=true&lang=scss&\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractiveMap.vue?vue&type=style&index=0&lang=scss&\"","\r\n// ui\r\nexport const UPDATE_SIDEBAR_WIDTH = 'UPDATE_SIDEBAR_WIDTH';\r\nexport const UPDATE_SIDEBAR_ITEMS_MIN = 'UPDATE_SIDEBAR_ITEMS_MIN';\r\nexport const TOGGLE_REDUCE_BUTTON = 'TOGGLE_REDUCE_BUTTON';\r\nexport const TOGGLE_CONTENT_OVERLAY = 'TOGGLE_CONTENT_OVERLAY';\r\nexport const TOGGLE_IS_SIDEBAR_ACTIVE = 'TOGGLE_IS_SIDEBAR_ACTIVE';\r\nexport const UPDATE_THEME = 'UPDATE_THEME';\r\nexport const UPDATE_WINDOW_BREAKPOINT = 'UPDATE_WINDOW_BREAKPOINT';\r\nexport const UPDATE_PRIMARY_COLOR = 'UPDATE_PRIMARY_COLOR';\r\nexport const UPDATE_WINDOW_SIZE = 'UPDATE_WINDOW_SIZE';\r\n\r\n// auth\r\nexport const AUTH_LOGIN_STARTED = 'AUTH_LOGIN_STARTED';\r\nexport const AUTH_UPDATE_USERINFO = 'AUTH_UPDATE_USERINFO';\r\nexport const AUTH_UPDATE_ACL_PERMISSIONS = 'AUTH_UPDATE_ACL_PERMISSIONS';\r\nexport const AUTH_LOGIN_ENDED = 'AUTH_LOGIN_ENDED';\r\n\r\n// telephony\r\nexport const TELEPHONY_CALLING_ROBOT_NUMBER = 'TELEPHONY_CALLING_ROBOT_NUMBER';\r\nexport const TELEPHONY_SET_CALLEE = 'TELEPHONY_SET_CALLEE';\r\nexport const TELEPHONY_CALLS_BLOCKED = 'TELEPHONY_CALLS_BLOCKED';\r\nexport const TELEPHONY_CALLS_UNBLOCKED = 'TELEPHONY_CALLS_UNBLOCKED';\r\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HealthCheckIndicator.vue?vue&type=style&index=0&id=1d9c050c&lang=scss&scoped=true&\"","import { Module, VuexModule, Mutation, Action, getModule } from 'vuex-module-decorators'\r\nimport * as types from '@/store/types'\r\n\r\nimport store from \"@/store/root\";\r\nimport Helpers from '@/helpers'\r\nimport telephonyApi from '@/api/telephony'\r\n\r\nexport interface ITelephonyState {\r\n isCallsBlocked: boolean\r\n robotCallPhoneNumber: string | null\r\n \r\n [types.TELEPHONY_CALLING_ROBOT_NUMBER](phoneNumber: string | null): void\r\n [types.TELEPHONY_SET_CALLEE](calleeId: number | null): void\r\n [types.TELEPHONY_CALLS_BLOCKED](): void\r\n [types.TELEPHONY_CALLS_UNBLOCKED](): void\r\n \r\n makeCall(payload: MakeCallPayload): void\r\n controllableCallStarted(payload: ControllableCallStartedPayload): void\r\n controllableCallEnded(isRobotCall: boolean): void\r\n cancelCall(payload: CancelCallPayload): void\r\n}\r\n\r\nexport interface MakeCallPayload {\r\n toUserId: number\r\n showError?: (errorMessage?: string) => void\r\n}\r\n\r\nexport interface ControllableCallStartedPayload {\r\n robotCallPhoneNumber: string | null\r\n toUserId: number\r\n}\r\n\r\nexport interface CancelCallPayload {\r\n toUserId: number\r\n showError?: (errorMessage?: string) => void\r\n}\r\n\r\n@Module({ dynamic: true, store, name: 'telephony' })\r\nexport default class Telephony extends VuexModule implements ITelephonyState {\r\n isCallsBlocked = false;\r\n currentCalleeId: number | null = null;\r\n robotCallPhoneNumber: string | null = null;\r\n \r\n @Mutation\r\n TELEPHONY_CALLING_ROBOT_NUMBER(phoneNumber: string | null) {\r\n this.robotCallPhoneNumber = phoneNumber;\r\n }\r\n @Mutation\r\n TELEPHONY_SET_CALLEE(calleeId: number | null) {\r\n this.currentCalleeId = calleeId;\r\n }\r\n @Mutation\r\n TELEPHONY_CALLS_BLOCKED() {\r\n this.isCallsBlocked = true;\r\n }\r\n @Mutation\r\n TELEPHONY_CALLS_UNBLOCKED() {\r\n this.isCallsBlocked = false;\r\n }\r\n \r\n @Action\r\n tryUnblockCallsAfterTimeout() {\r\n setTimeout(() => {\r\n if (this.isCallsBlocked) {\r\n this.TELEPHONY_CALLS_UNBLOCKED();\r\n }\r\n \r\n }, 3000);\r\n }\r\n \r\n @Action\r\n makeCall(payload: MakeCallPayload) {\r\n if (this.isCallsBlocked) {\r\n if (Helpers.isFunction(payload.showError)) {\r\n payload.showError!(\"Зараз неможливо здійснити дзінок, спробуйте пізніше\")\r\n }\r\n return;\r\n }\r\n \r\n this.TELEPHONY_CALLS_BLOCKED();\r\n \r\n telephonyApi.makeCall(payload.toUserId, data => {\r\n if (data.success) {\r\n this.tryUnblockCallsAfterTimeout();\r\n } else {\r\n if (Helpers.isFunction(payload.showError)) {\r\n payload.showError!()\r\n }\r\n \r\n this.TELEPHONY_CALLS_UNBLOCKED();\r\n }\r\n }, errorMessage => {\r\n if (Helpers.isFunction(payload.showError)) {\r\n payload.showError!(errorMessage)\r\n }\r\n \r\n this.TELEPHONY_CALLS_UNBLOCKED();\r\n });\r\n }\r\n \r\n @Action\r\n controllableCallStarted(payload: ControllableCallStartedPayload) {\r\n this.TELEPHONY_CALLING_ROBOT_NUMBER(payload.robotCallPhoneNumber);\r\n this.TELEPHONY_SET_CALLEE(payload.toUserId);\r\n this.TELEPHONY_CALLS_UNBLOCKED();\r\n }\r\n \r\n @Action\r\n controllableCallEnded() {\r\n this.TELEPHONY_CALLING_ROBOT_NUMBER(null);\r\n this.TELEPHONY_SET_CALLEE(null);\r\n }\r\n \r\n @Action\r\n cancelCall(payload: CancelCallPayload) {\r\n if (this.isCallsBlocked) {\r\n if (Helpers.isFunction(payload.showError)) {\r\n payload.showError!(\"Зараз неможливо відмінити дзінок, спробуйте пізніше\")\r\n }\r\n return;\r\n }\r\n \r\n telephonyApi.cancelCall(Helpers.isNotEmpty(this.robotCallPhoneNumber), payload.toUserId, data => {\r\n if (data.success) {\r\n this.TELEPHONY_CALLING_ROBOT_NUMBER(null);\r\n this.TELEPHONY_SET_CALLEE(null);\r\n } else {\r\n if (Helpers.isFunction(payload.showError)) {\r\n payload.showError!()\r\n }\r\n }\r\n \r\n this.TELEPHONY_CALLS_UNBLOCKED();\r\n }, errorMessage => {\r\n if (Helpers.isFunction(payload.showError)) {\r\n payload.showError!(errorMessage)\r\n }\r\n \r\n this.TELEPHONY_CALLS_UNBLOCKED();\r\n });\r\n }\r\n}\r\n\r\nexport const TelephonyModule = getModule(Telephony);\r\n","\r\nimport {\r\n FilePreviewDto\r\n} from '@/global'\r\nimport ApiBase from \"@/api/api-base\";\r\n\r\nexport default class extends ApiBase {\r\n static upload(metatype: number, previewVersion: number | null, file: any, cb: (filePreview: FilePreviewDto) => void, errorCb: (errorMessage?: string) => void) {\r\n let formData = new FormData();\r\n formData.append(\"file\", file);\r\n \r\n this._defaultPostResponse('/api/files/upload', formData, {\r\n params: { metatype, previewVersion },\r\n headers: {\r\n 'Content-Type': 'multipart/form-data'\r\n }\r\n }, cb, errorCb);\r\n }\r\n \r\n static previews(ids: string[], version: number | null, cb: (previews: FilePreviewDto[]) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/files/previews', {\r\n params: { ids, version }\r\n }, cb, errorCb);\r\n }\r\n}\r\n","\r\nimport {\r\n OrganizationATableDto,\r\n OrganizationAEditDto,\r\n SystemLogATableDto,\r\n TableResult,\r\n GlobalSettingsAEditDto,\r\n TelephonyServiceInfoDto,\r\n TelephonyServerATableDto,\r\n TelephonyServerAEditDto,\r\n SelectOption, HealthCheckResultDto,\r\n} from '@/global'\r\nimport ApiBase from \"@/api/api-base\";\r\n\r\nexport default class extends ApiBase {\r\n static systemLogsForTable(page: number, cb: (logsResult: TableResult) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/system-logs-table', {\r\n params: { page }\r\n }, cb, errorCb);\r\n }\r\n \r\n static healthCheck(cb: (data: HealthCheckResultDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/health-check', null, cb, errorCb);\r\n }\r\n \r\n static telephonyServiceInfo(cb: (tsInfo: TelephonyServiceInfoDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/telephony-service-info', null, cb, errorCb);\r\n }\r\n \r\n static resetCache(cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/reset-cache', null, cb, errorCb);\r\n }\r\n \r\n static updateUserSearchVisibility(cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/update-user-search-visibility', null, cb, errorCb);\r\n }\r\n \r\n static getGlobalSettings(cb: (settings: GlobalSettingsAEditDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/edit-global-settings', null, cb, errorCb);\r\n }\r\n \r\n static updateGlobalSettings(settings: GlobalSettingsAEditDto, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/admin-panel/edit-global-settings', settings, null, successCb, errorCb);\r\n }\r\n \r\n static organizationsForTable(page: number, cb: (logsResult: TableResult) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/organizations-table', {\r\n params: { page }\r\n }, cb, errorCb);\r\n }\r\n \r\n static getOrganizationEdit(id: number, cb: (organization: OrganizationAEditDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/edit-organization', {\r\n params: { id }\r\n }, cb, errorCb);\r\n }\r\n \r\n static updateOrganizationEdit(organization: OrganizationAEditDto, successCb: (data: { success: boolean, id: number | null, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/admin-panel/edit-organization', organization, null, successCb, errorCb);\r\n }\r\n \r\n static deleteOrganization(id: number, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/delete-organization', {\r\n params: { id }\r\n }, successCb, errorCb);\r\n }\r\n \r\n static telephonyServerOptions(cb: (options: SelectOption[]) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/telephony-server-options', null, cb, errorCb);\r\n }\r\n \r\n static telephonyServersForTable(page: number, cb: (result: TableResult) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/telephony-servers-table', {\r\n params: { page }\r\n }, cb, errorCb);\r\n }\r\n \r\n static getTelephonyServerEdit(id: number, cb: (telephonyServer: TelephonyServerAEditDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/edit-telephony-server', {\r\n params: { id }\r\n }, cb, errorCb);\r\n }\r\n \r\n static updateTelephonyServerEdit(telephonyServer: TelephonyServerAEditDto, successCb: (data: { success: boolean, id: number | null, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/admin-panel/edit-telephony-server', telephonyServer, null, successCb, errorCb);\r\n }\r\n \r\n static deleteTelephonyServer(id: number, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/delete-telephony-server', {\r\n params: { id }\r\n }, successCb, errorCb);\r\n }\r\n \r\n static changeMainServer(telephonyServerId: number, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/admin-panel/change-main-telephony-server', {\r\n params: { telephonyServerId }\r\n }, successCb, errorCb);\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-modal',{attrs:{\"id\":\"user-details-popup\",\"centered\":\"\",\"hide-footer\":\"\"},scopedSlots:_vm._u([(!_vm.isLoading && _vm.$helpers.isExists(_vm.userDetails))?{key:\"modal-title\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.userDetails.fullName)+\"\\n \"),_c('UserInFavoritesToggle',{attrs:{\"userId\":_vm.userDetails.id,\"isInFavorites\":_vm.userDetails.isInFavorites},on:{\"statusChanged\":function($event){_vm.userDetails.isInFavorites = arguments[0]}}})]},proxy:true}:null],null,true),model:{value:(_vm.isPopupVisible),callback:function ($$v) {_vm.isPopupVisible=$$v},expression:\"isPopupVisible\"}},[(!_vm.isLoading && _vm.$helpers.isExists(_vm.userDetails))?_c('b-container',{staticClass:\"user-details-popup-content mb-1\"},[_c('div',{staticClass:\"user-avatar\"},[_c('div',{staticClass:\"avatar\"},[_c('img',{attrs:{\"alt\":\"avatar\",\"src\":_vm.$files.avatarImageUrl(_vm.userDetails.avatarFileId, _vm.$files.largeAvatarVersion),\"height\":_vm.$const.avatarLargeImageSize,\"width\":_vm.$const.avatarLargeImageSize}})])]),(_vm.$helpers.isNotEmpty(_vm.userDetails.mapRegionName))?_c('b-row',{attrs:{\"cols\":\"8\"}},[_c('b-col',{attrs:{\"offset\":\"4\",\"cols\":\"8\"}},[_c('h5',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.userDetails.mapRegionName))]),_c('span',{staticClass:\"font-small-2 text-italic\"},[_vm._v(\"область\")])])],1):_vm._e(),(_vm.$helpers.isNotEmpty(_vm.userDetails.mapDistrictName))?_c('b-row',{staticClass:\"mt-50\",attrs:{\"cols\":\"8\"}},[_c('b-col',{attrs:{\"offset\":\"4\",\"cols\":\"8\"}},[_c('h5',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.userDetails.mapDistrictName))]),_c('span',{staticClass:\"font-small-2 text-italic\"},[_vm._v(\"район\")])])],1):_vm._e(),(_vm.$helpers.isNotEmpty(_vm.userDetails.mapPointName))?_c('b-row',{staticClass:\"mt-50\",attrs:{\"cols\":\"8\"}},[_c('b-col',{attrs:{\"offset\":\"4\",\"cols\":\"8\"}},[_c('h5',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.userDetails.mapPointName))]),_c('span',{staticClass:\"font-small-2 text-italic\"},[_vm._v(\"населений пункт\")])])],1):_vm._e(),(_vm.$helpers.isNotEmpty(_vm.userDetails.organizationShortName) || _vm.$helpers.isNotEmpty(_vm.userDetails.organizationFullName))?_c('b-row',{staticClass:\"mt-50\",attrs:{\"cols\":\"8\"}},[_c('b-col',{attrs:{\"offset\":\"4\",\"cols\":\"8\"}},[_c('h5',{staticClass:\"mb-0\"},[_vm._v(\"\\n \"+_vm._s(_vm.$helpers.isNotEmpty(_vm.userDetails.organizationFullName) ? _vm.userDetails.organizationFullName : _vm.userDetails.organizationShortName)+\"\\n \")]),_c('span',{staticClass:\"font-small-2 text-italic\"},[_vm._v(\"організація\")])])],1):_vm._e(),_c('b-row',{staticClass:\"mt-50\",attrs:{\"cols\":\"8\"}},[_c('b-col',{attrs:{\"offset\":\"4\",\"cols\":\"8\"}},[_c('h5',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.userDetails.positionName))]),_c('span',{staticClass:\"font-small-2 text-italic\"},[_vm._v(\"посада\")])])],1),_c('b-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAnyPhonesAvailable),expression:\"isAnyPhonesAvailable\"}]},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('app-divider',{attrs:{\"text-classes\":\"text-uppercase\"}},[_vm._v(\"Телефони\")])],1)],1),_c('b-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAnyPhonesAvailable),expression:\"isAnyPhonesAvailable\"}]},[_c('b-col',{attrs:{\"cols\":\"12\"}},[(_vm.$helpers.isNotEmpty(_vm.userDetails.fullMainPhoneNumberFormatted))?_c('div',{staticClass:\"d-flex justify-content-start align-items-center\"},[_c('div',[_c('h4',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.userDetails.fullMainPhoneNumberFormatted))]),_c('span',{staticClass:\"font-small-3\"},[_vm._v(_vm._s(_vm.$const.mainPhoneName))])]),_c('b-button',{staticClass:\"ml-auto btn-icon\",attrs:{\"variant\":\"success\",\"pill\":\"\",\"disabled\":_vm.isCallsBlocked},on:{\"click\":function($event){return _vm.makeCall(_vm.userDetails.id)}}},[_c('i',{staticClass:\"feather icon-phone\"})])],1):_vm._e(),_vm._l((_vm.userDetails.additionalPhones),function(phone,index){return _c('div',{key:index,staticClass:\"d-flex justify-content-start align-items-center\",class:{ 'mt-1': index > 0 }},[_c('div',[_c('h4',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.$appUtils.formatAdditionalPhoneNumber(phone.number, true).displayValue))]),_c('span',{staticClass:\"font-small-3\"},[_vm._v(_vm._s(phone.label))])])])})],2)],1),_c('b-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAnyEmailsAvailable),expression:\"isAnyEmailsAvailable\"}]},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('app-divider',{attrs:{\"text-classes\":\"text-uppercase\"}},[_vm._v(\"Електронна пошта\")])],1)],1),_c('b-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isAnyEmailsAvailable),expression:\"isAnyEmailsAvailable\"}]},[_c('b-col',{attrs:{\"cols\":\"12\"}},[(_vm.$helpers.isNotEmpty(_vm.userDetails.username))?_c('div',{staticClass:\"d-flex justify-content-start align-items-center\"},[_c('div',[_c('h4',{staticClass:\"mb-0\"},[_c('b-link',{attrs:{\"href\":'mailto:' + _vm.userDetails.username}},[_vm._v(_vm._s(_vm.userDetails.username))])],1),_c('span',{staticClass:\"font-small-3\"},[_vm._v(\"основна\")])])]):_vm._e(),_vm._l((_vm.userDetails.additionalEmails),function(email,index){return _c('div',{key:index,staticClass:\"d-flex justify-content-start align-items-center\",class:{ 'mt-1': index > 0 }},[_c('div',[_c('h4',{staticClass:\"mb-0\"},[_c('b-link',{attrs:{\"href\":'mailto:' + email.emailAddress}},[_vm._v(_vm._s(email.emailAddress))])],1),_c('span',{staticClass:\"font-small-3\"},[_vm._v(\"додаткова\")])])])})],2)],1)],1):_vm._e(),(_vm.isLoading)?_c('div',{staticClass:\"text-center\"},[_c('b-spinner',{staticStyle:{\"width\":\"3rem\",\"height\":\"3rem\"},attrs:{\"label\":\"Завантаження...\"}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport {IUserDetailsPopup, UserDetailsDto} from \"@/global\";\nimport * as enums from '@/global-enum'\nimport usersApi from '@/api/users'\nimport UserInFavoritesToggle from \"@/components/UserInFavoritesToggle.vue\";\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\nimport {TelephonyModule} from \"@/store/modules/telephony\";\n\n@Component({\n components: {\n UserInFavoritesToggle\n }\n})\nexport default class UserDetailsPopup extends Vue implements IUserDetailsPopup {\n isPopupVisible = false;\n isLoading = false;\n userDetails = null;\n\n get isAnyPhonesAvailable() {\n if (this.$helpers.isExists(this.userDetails)) {\n return this.$helpers.isNotEmpty(this.userDetails!.fullMainPhoneNumberFormatted) ||\n this.$helpers.isNotEmptyArray(this.userDetails!.additionalPhones);\n }\n\n return false;\n }\n\n get isAnyEmailsAvailable() {\n if (this.$helpers.isExists(this.userDetails)) {\n return this.$helpers.isNotEmpty(this.userDetails!.username) ||\n this.$helpers.isNotEmptyArray(this.userDetails!.additionalEmails);\n }\n\n return false;\n }\n\n get isCallsBlocked() {\n return TelephonyModule.isCallsBlocked;\n }\n\n created() {\n // global event\n EventBus.$on(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n }\n\n beforeDestroy(){\n EventBus.$off(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n }\n\n // global event handler\n changeUserInFavorites(data: { userId: number, isInFavorites: boolean }) {\n if (this.$helpers.isExists(this.userDetails)) {\n if (this.userDetails!.id === data.userId) {\n this.userDetails!.isInFavorites = data.isInFavorites;\n }\n }\n }\n\n // init\n openPopup(userId: number) {\n this.isLoading = true;\n\n usersApi.getUserDetails(userId, userDetails => {\n this.userDetails = userDetails;\n\n this.isLoading = false;\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.isLoading = false;\n });\n\n this.isPopupVisible = true;\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n makeCall(toUserId: number) {\n TelephonyModule.makeCall({\n toUserId: toUserId,\n showError: this.showError\n })\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserDetailsPopup.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserDetailsPopup.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./UserDetailsPopup.vue?vue&type=template&id=a6cbddb6&\"\nimport script from \"./UserDetailsPopup.vue?vue&type=script&lang=ts&\"\nexport * from \"./UserDetailsPopup.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./UserDetailsPopup.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\nimport Helpers from '@/helpers'\r\nimport {\r\n MapDistrictDto,\r\n MapPointDto,\r\n MapRegionDto,\r\n OrganizationDto,\r\n SelectOption\r\n} from \"@/global\";\r\nimport * as enums from '@/global-enum'\r\nimport mapApi from '@/api/map'\r\nimport Vue from 'vue'\r\nimport UserDetailsPopup from \"@/components/UserDetailsPopup.vue\";\r\n\r\nexport class AppUtilsModel {\r\n static phoneNumberMaxLength = 10;\r\n \r\n // validation helpers\r\n vvIsValidationScopeValid(inst: Vue, scope: string): boolean {\r\n return !inst.veeErrors.any(scope);\r\n }\r\n \r\n vvValidateState(inst: Vue, ref: string, scope?: string) {\r\n let field: any;\r\n if (Helpers.isNotEmpty(scope)) {\r\n const scopeObj = inst.veeFields[`$${scope}`];\r\n field = Helpers.isExists(scopeObj) ? scopeObj[ref] : null;\r\n } else {\r\n field = inst.veeFields[ref];\r\n }\r\n \r\n if (field && (field.dirty || field.validated)) {\r\n if (Helpers.isNotEmpty(scope)) {\r\n return !inst.veeErrors.has(`${scope}.${ref}`);\r\n } else {\r\n return !inst.veeErrors.has(ref);\r\n }\r\n }\r\n \r\n return null\r\n }\r\n \r\n formatUserFullName(origValue: string) {\r\n if (Helpers.isNotEmpty(origValue)) {\r\n let splitStr = origValue.trim().toLowerCase().split('-');\r\n \r\n for (let i = 0; i < splitStr.length; i++) {\r\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1);\r\n }\r\n \r\n return splitStr.join('-');\r\n }\r\n \r\n return origValue;\r\n }\r\n \r\n formatAdditionalPhoneNumber(inputValue: string | null, isInit = false) {\r\n let result: {\r\n displayValue: string | null,\r\n phoneNumber: string | null\r\n } = {\r\n displayValue: inputValue,\r\n phoneNumber: null\r\n };\r\n \r\n // return {\r\n // newInputValue: inputValue,\r\n // phoneNumber: inputValue\r\n // };\r\n \r\n if (Helpers.isExists(result.displayValue)) {\r\n result.displayValue = result.displayValue!.replace(/[^\\d]/g, '');\r\n \r\n let phoneNumber = result.displayValue!.replace(/\\s|-|\\(|\\)/g, '');\r\n \r\n if (Helpers.isExists(phoneNumber)) {\r\n if (phoneNumber!.length > AppUtilsModel.phoneNumberMaxLength) {\r\n phoneNumber = isInit ? phoneNumber!.substring(phoneNumber!.length - AppUtilsModel.phoneNumberMaxLength) : phoneNumber!.substr(0, AppUtilsModel.phoneNumberMaxLength);\r\n }\r\n \r\n if (phoneNumber!.length <= 3) {\r\n result.displayValue = phoneNumber;\r\n } else if (phoneNumber!.length <= 6) {\r\n result.displayValue = phoneNumber!.replace(/(\\d{3})(\\d{0,3})/g, '($1) $2');\r\n } else if (phoneNumber!.length <= 8) {\r\n result.displayValue = phoneNumber!.replace(/(\\d{3})(\\d{3})(\\d{0,2})/g, '($1) $2-$3');\r\n } else {\r\n result.displayValue = phoneNumber!.replace(/(\\d{3})(\\d{3})(\\d{2})(\\d{0,2})/g, '($1) $2-$3-$4');\r\n }\r\n \r\n result.phoneNumber = phoneNumber;\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n \r\n specialUserPasswordTrim(origPassword: string) {\r\n return Helpers.isNotEmpty(origPassword) ? origPassword.replace(/^\\s+|\\s+$/g, '') : origPassword;\r\n }\r\n \r\n getUserFullName(user: { firstName: string, lastName: string, patronymicName: string } | null | undefined, isNeedShortVersion: boolean = false) {\r\n let result = \"\";\r\n \r\n if (Helpers.isExists(user)) {\r\n result = user!.lastName;\r\n \r\n if (Helpers.isNotEmpty(user!.firstName) && Helpers.isNotEmpty(user!.patronymicName)) {\r\n if (isNeedShortVersion) {\r\n result += ` ${user!.firstName[0].toUpperCase()}.${user!.patronymicName[0].toUpperCase()}.`;\r\n } else {\r\n result += ` ${user!.firstName} ${user!.patronymicName}`;\r\n }\r\n } else {\r\n if (Helpers.isNotEmpty(user!.firstName)) {\r\n if (isNeedShortVersion) {\r\n result += ` ${user!.firstName[0].toUpperCase()}.`;\r\n } else {\r\n result += ` ${user!.firstName}`;\r\n }\r\n }\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n \r\n getAdminAccesses(accessTypes: number[]): string {\r\n if (Helpers.isNotEmptyArray(accessTypes)) {\r\n let accessNames: string[] = [];\r\n \r\n for (let i = 0; i < accessTypes.length; i++) {\r\n const type = accessTypes[i];\r\n \r\n switch (type) {\r\n case enums.UserAccessType_SystemAdmin:\r\n accessNames.push(\"СМТЗ\");\r\n break;\r\n case enums.UserAccessType_Users:\r\n accessNames.push(\"ВММ\");\r\n break;\r\n case enums.UserAccessType_KnowledgeBase:\r\n accessNames.push(\"БЗ\");\r\n break;\r\n default:\r\n throw new Error(\"accessType is unknown\");\r\n }\r\n \r\n // stop if this is system admin\r\n if (type === enums.UserAccessType_SystemAdmin) {\r\n break;\r\n }\r\n }\r\n \r\n if (accessNames.length > 0) {\r\n return accessNames.join(', ')\r\n }\r\n }\r\n \r\n return '';\r\n }\r\n \r\n getMapElementName(type: number, mapElement: { customFullName?: string, name: string } | null, isNeedAddMapElementTypeSuffix: boolean = false) {\r\n if (!Helpers.isExists(mapElement)) return '';\r\n \r\n let mapElementName = '';\r\n \r\n switch (type) {\r\n case enums.MapElementType_Region:\r\n const mapRegion = mapElement! as MapRegionDto;\r\n \r\n mapElementName = Helpers.isNotEmpty(mapRegion.customFullName)\r\n ? mapRegion.customFullName\r\n : Helpers.isNotEmpty(mapRegion.name)\r\n ? mapRegion.name + (isNeedAddMapElementTypeSuffix ? ' область' : '')\r\n : '';\r\n break;\r\n case enums.MapElementType_District:\r\n const mapDistrict = mapElement! as MapDistrictDto;\r\n \r\n mapElementName = Helpers.isNotEmpty(mapDistrict.customFullName)\r\n ? mapDistrict.customFullName\r\n : Helpers.isNotEmpty(mapDistrict.name)\r\n ? mapDistrict.name + (isNeedAddMapElementTypeSuffix ? ' район' : '')\r\n : '';\r\n break;\r\n case enums.MapElementType_Point:\r\n const mapPoint = mapElement! as MapPointDto;\r\n \r\n mapElementName = mapPoint.name;\r\n break;\r\n default:\r\n throw new Error(\"type is unknown\")\r\n }\r\n \r\n return mapElementName.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\r\n }\r\n \r\n generateMapSelectOptions(selectedMapRegionId: number | null, selectedMapDistrictId: number | null,\r\n cb: (mapRegions: SelectOption[], mapDistricts: SelectOption[], mapPoints: SelectOption[]) => void,\r\n errorCb: (errorMessage?: string) => void) {\r\n return mapApi.allMapRegions(mapRegionDtos => {\r\n this.generateMapSelectOptionsFromDtos(mapRegionDtos, selectedMapRegionId, selectedMapDistrictId, cb);\r\n }, errorCb)\r\n }\r\n \r\n generateMapSelectOptionsFromDtos(mapRegionDtos: MapRegionDto[], selectedMapRegionId: number | null, selectedMapDistrictId: number | null,\r\n cb: (mapRegions: SelectOption[], mapDistricts: SelectOption[], mapPoints: SelectOption[]) => void) {\r\n let mapRegions: SelectOption[] = [];\r\n let mapDistricts: SelectOption[] = [];\r\n let mapPoints: SelectOption[] = [];\r\n \r\n for (let i = 0; i < mapRegionDtos.length; i++) {\r\n const mapRegionDto = mapRegionDtos[i];\r\n \r\n mapRegions.push({\r\n id: mapRegionDto.id,\r\n label: this.getMapElementName(enums.MapElementType_Region, mapRegionDto)\r\n })\r\n }\r\n \r\n if (Helpers.isNumeric(selectedMapRegionId)) {\r\n const selectedMapRegionDto = Helpers.findFirstInArray(mapRegionDtos,\r\n r => r.id === selectedMapRegionId!);\r\n \r\n if (Helpers.isExists(selectedMapRegionDto)) {\r\n for (let i = 0; i < selectedMapRegionDto!.mapDistricts.length; i++) {\r\n const mapDistrictDto = selectedMapRegionDto!.mapDistricts[i];\r\n \r\n mapDistricts.push({\r\n id: mapDistrictDto.id,\r\n label: this.getMapElementName(enums.MapElementType_District, mapDistrictDto)\r\n })\r\n }\r\n \r\n if (Helpers.isNumeric(selectedMapDistrictId)) {\r\n const selectedMapDistrict = Helpers.findFirstInArray(selectedMapRegionDto!.mapDistricts,\r\n d => d.id === selectedMapDistrictId!);\r\n \r\n if (Helpers.isExists(selectedMapDistrict)) {\r\n for (let i = 0; i < selectedMapDistrict!.mapPoints.length; i++) {\r\n const mapPointDto = selectedMapDistrict!.mapPoints[i];\r\n \r\n mapPoints.push({\r\n id: mapPointDto.id,\r\n label: this.getMapElementName(enums.MapElementType_Point, mapPointDto)\r\n })\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < selectedMapRegionDto!.mapPoints.length; i++) {\r\n const mapPointDto = selectedMapRegionDto!.mapPoints[i];\r\n \r\n mapPoints.push({\r\n id: mapPointDto.id,\r\n label: this.getMapElementName(enums.MapElementType_Point, mapPointDto)\r\n })\r\n }\r\n }\r\n }\r\n }\r\n \r\n // sort\r\n mapRegions.sort((a, b) => a.label.localeCompare(b.label));\r\n mapDistricts.sort((a, b) => a.label.localeCompare(b.label));\r\n mapPoints.sort((a, b) => a.label.localeCompare(b.label));\r\n \r\n cb(mapRegions, mapDistricts, mapPoints);\r\n }\r\n \r\n getAvailableOrganizationOptions(availableOrganizations: OrganizationDto[]): SelectOption[] {\r\n let organizations: SelectOption[] = [];\r\n \r\n if (Helpers.isNotEmptyArray(availableOrganizations)) {\r\n for (let i = 0; i < availableOrganizations.length; i++) {\r\n const organization = availableOrganizations[i];\r\n \r\n organizations.push({\r\n id: organization.id,\r\n label: Helpers.isNotEmpty(organization.shortName)\r\n ? `(${organization.shortName}) ${organization.fullName}`\r\n : organization.fullName\r\n })\r\n }\r\n }\r\n \r\n return organizations;\r\n }\r\n \r\n openUserDetailsPopup(rootInst: any, userId: number) {\r\n if (!Helpers.isExists(rootInst)) throw new Error(\"rootInst is required\");\r\n \r\n if (!Helpers.isExists(rootInst._UserDetailsPopup)) {\r\n const componentClass = Vue.extend(UserDetailsPopup);\r\n const instance = new componentClass();\r\n instance.$mount(); // pass nothing\r\n document.body.appendChild(instance.$el);\r\n rootInst._UserDetailsPopup = instance;\r\n }\r\n \r\n rootInst._UserDetailsPopup.openPopup(userId);\r\n }\r\n}\r\n\r\nconst m = new AppUtilsModel();\r\nexport default m;\r\n","\r\nexport const AccessRules_Public = \"public\";\r\nexport const AccessRules_SystemAdmin = \"systemAdmin\";\r\nexport const AccessRules_Users = \"usersAccess\";\r\nexport const AccessRules_KnowledgeBase = \"knowledgeBaseAccess\";\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeFavoriteUsersSection.vue?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#2196f3\",\"success\":\"#28c76f\",\"info\":\"#00cfe8\",\"danger\":\"#ea5455\",\"warning\":\"#ff9f43\",\"dark\":\"#1e1e1e\"};","import Vue from 'vue'\nimport Vuex, {ActionTree, GetterTree, MutationTree} from 'vuex'\n\nimport { IAuthState } from \"./modules/auth\"\nimport { IUiState } from \"./modules/ui\"\nimport {ITelephonyState} from \"@/store/modules/telephony\";\n\nVue.use(Vuex);\n\nexport interface RootState {\n auth: IAuthState\n ui: IUiState\n telephony: ITelephonyState\n}\n\nexport default new Vuex.Store({})\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserDetailsPopup.vue?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#2196f3\",\"success\":\"#28c76f\",\"info\":\"#00cfe8\",\"danger\":\"#ea5455\",\"warning\":\"#ff9f43\",\"dark\":\"#1e1e1e\"};","\r\nimport {\r\n UserAuthDto,\r\n UserCreateDto,\r\n UserProfileDto,\r\n OrganizationOrMapElementSelectOption, UsersSearchFilters, UsersSearchResultDto, UserDetailsDto\r\n} from '@/global'\r\nimport ApiBase from \"@/api/api-base\";\r\n\r\nexport default class extends ApiBase {\r\n static authenticate(username: string, password: string, cb: (user: UserAuthDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/users/auth', { username, password }, null, cb, errorCb);\r\n }\r\n \r\n static logout() {\r\n this._defaultGetResponse('/api/users/logout', null, ()=>{}, (errorMessage)=>{});\r\n }\r\n \r\n static sendPasswordReset(username: string, cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/send-password-reset', {\r\n params: { username }\r\n }, cb, errorCb);\r\n }\r\n \r\n static changePassword(currentPassword: string, newPassword: string, cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/users/change-password', { currentPassword, newPassword }, null, cb, errorCb);\r\n }\r\n \r\n static changePasswordByKey(passwordResetKey: string, newPassword: string, cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/users/change-password-by-key', { passwordResetKey, newPassword }, null, cb, errorCb);\r\n }\r\n \r\n static getUserCreate(key: string, cb: (user: UserCreateDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/create-user', {\r\n params: { key }\r\n }, cb, errorCb);\r\n }\r\n \r\n static createUser(user: UserCreateDto, cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/users/create-user', user, null, cb, errorCb);\r\n }\r\n \r\n static getProfile(cb: (user: UserProfileDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/profile', null, cb, errorCb);\r\n }\r\n \r\n static updateProfile(user: UserProfileDto, successCb: (data: { success: boolean, isAnyChanges: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultPostResponse('/api/users/profile', user, null, successCb, errorCb);\r\n }\r\n \r\n static getUserDetails(userId: number, successCb: (userDetails: UserDetailsDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/user-details', {\r\n params: { userId }\r\n }, successCb, errorCb);\r\n }\r\n \r\n static setUserInFavorites(userId: number, isInFavorites: boolean, successCb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/set-user-in-favorites', {\r\n params: { userId, isInFavorites }\r\n }, successCb, errorCb);\r\n }\r\n \r\n static userSearchFilters(searchTerm: string, selectedFilters: UsersSearchFilters, cb: (options: OrganizationOrMapElementSelectOption[]) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/user-search-filters', {\r\n params: {\r\n searchTerm: searchTerm,\r\n mapRegionId: selectedFilters.mapRegionId,\r\n mapDistrictId: selectedFilters.mapDistrictId,\r\n mapPointId: selectedFilters.mapPointId,\r\n organizationIds: selectedFilters.organizationIds\r\n }\r\n }, cb, errorCb);\r\n }\r\n \r\n static search(page: number, filters: UsersSearchFilters, cb: (usersResult: UsersSearchResultDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/search', {\r\n params: { page,\r\n searchTerm: filters.searchTerm,\r\n mapRegionId: filters.mapRegionId,\r\n mapDistrictId: filters.mapDistrictId,\r\n mapPointId: filters.mapPointId,\r\n organizationIds: filters.organizationIds\r\n }\r\n }, cb, errorCb);\r\n }\r\n \r\n static favoriteUsers(page: number, searchTerm: string, cb: (usersResult: UsersSearchResultDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/users/favorite-users', {\r\n params: { page, searchTerm }\r\n }, cb, errorCb);\r\n }\r\n}\r\n","\r\nexport class HelpersModel {\r\n // Value is exist\r\n isExists(value: any): boolean {\r\n return typeof value !== \"undefined\"\r\n && value !== null;\r\n }\r\n\r\n isObject(value: any): boolean {\r\n return this.isExists(value) && typeof value === \"object\";\r\n }\r\n\r\n isFunction(value: any): boolean {\r\n return this.isExists(value) && typeof value === \"function\";\r\n }\r\n\r\n toNumeric(value: any): number {\r\n return parseFloat(value);\r\n }\r\n\r\n isNumeric(value: any): boolean {\r\n return this.isExists(value) && !this.isArray(value) && (value - parseFloat(value) + 1) >= 0;\r\n }\r\n\r\n isBoolean(value: any): boolean {\r\n return typeof value === \"boolean\";\r\n }\r\n\r\n // Value is exist and not empty string\r\n isNotEmpty(value: any): boolean {\r\n return this.isExists(value) && value !== \"\";\r\n }\r\n // Contains\r\n stringContains(str: string, value: string): boolean {\r\n return str.indexOf(value) > -1;\r\n }\r\n roundDecimal(num: number, decimals: number) {\r\n return parseFloat((Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals)).toFixed(decimals));\r\n }\r\n \r\n // Array\r\n //\r\n // Check is array\r\n isArray(value: any): boolean {\r\n return Array.isArray ? Array.isArray(value) : value instanceof Array;\r\n }\r\n isNotEmptyArray(value: any): boolean {\r\n return this.isExists(value) && this.isArray(value) && value!.length > 0;\r\n }\r\n anyInArray(array: T[], funcForFind: (item: T, index?: number) => boolean) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (funcForFind(array[i], i)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n findFirstInArray(array: T[], funcForFind: (item: T, index?: number) => boolean) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (funcForFind(array[i], i)) {\r\n return array[i];\r\n }\r\n }\r\n return null;\r\n }\r\n findInArray(array: T[], funcForFind: (item: T, index?: number) => boolean) {\r\n let items: T[] = [];\r\n for (let i = 0; i < array.length; i++) {\r\n if (funcForFind(array[i], i)) {\r\n items.push(array[i]);\r\n }\r\n }\r\n return items;\r\n }\r\n findIndexInArray(array: T[], funcForFind: (item: T, index?: number) => boolean): number | null {\r\n for (let i = 0; i < array.length; i++) {\r\n if (funcForFind(array[i], i)) {\r\n return i;\r\n }\r\n }\r\n return null;\r\n }\r\n // Remove in array\r\n removeInArray(array: T[], funcForFind: (item: T, index?: number) => boolean) {\r\n if (!this.isArray(array)) return;\r\n \r\n for (let i = 0; i < array.length; i++) {\r\n if (funcForFind(array[i], i)) {\r\n array.splice(i, 1);\r\n }\r\n }\r\n }\r\n \r\n // Sort\r\n //\r\n sortStrings(array: T[], funcForCompare: (item: T) => string, desc: boolean = false) {\r\n array.sort((a, b) => {\r\n if (desc) {\r\n return ('' + funcForCompare(b)).localeCompare(funcForCompare(a));\r\n } else {\r\n return ('' + funcForCompare(a)).localeCompare(funcForCompare(b));\r\n }\r\n })\r\n }\r\n \r\n // Group\r\n //\r\n groupBy(array: T[], funcForGroup: (item: T) => any): { [groupName: string] : T[] } {\r\n let key;\r\n return array.reduce((reduce, item) => {\r\n key = funcForGroup(item);\r\n \r\n reduce[key] = reduce[key] || [];\r\n reduce[key].push(item);\r\n \r\n return reduce;\r\n }, Object.create(null));\r\n }\r\n \r\n // Animation\r\n //\r\n animateScroll(element: HTMLElement, scrollTop: number, scrollLeft: number) {\r\n const maxScrollTop = element.scrollHeight - element.clientHeight;\r\n const maxScrollLeft = element.scrollWidth - element.clientWidth;\r\n const targetScrollTop = this.roundDecimal(this.clamp(scrollTop, 0, maxScrollTop), 0);\r\n const targetScrollLeft = this.roundDecimal(this.clamp(scrollLeft, 0, maxScrollLeft), 0);\r\n \r\n return new Promise((resolve) => {\r\n const scrollListener = (evt: any) => {\r\n if (typeof evt === 'undefined') {\r\n return;\r\n }\r\n \r\n const target = evt.currentTarget;\r\n \r\n if (target.scrollTop === targetScrollTop && target.scrollLeft === targetScrollLeft) {\r\n target.removeEventListener('scroll', scrollListener);\r\n resolve(true);\r\n }\r\n };\r\n \r\n if (maxScrollTop > 0 || maxScrollLeft > 0) {\r\n if (targetScrollTop !== element.scrollTop || targetScrollLeft !== element.scrollLeft) {\r\n element.addEventListener('scroll', scrollListener);\r\n \r\n element.scroll({\r\n top: targetScrollTop,\r\n left: targetScrollLeft,\r\n behavior: 'smooth'\r\n });\r\n } else {\r\n resolve(false);\r\n }\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n }\r\n animateScrollAlt(element: HTMLElement, scrollTop: number, scrollLeft: number, duration: number): () => void {\r\n let canceled = false;\r\n let durationLeft = duration;\r\n \r\n const scrollTopParsed = this.roundDecimal(scrollTop, 0);\r\n const scrollLeftParsed = this.roundDecimal(scrollLeft, 0);\r\n \r\n const promise = new Promise((resolve, reject) => {\r\n const loop = () => {\r\n if (canceled || durationLeft <= 0) {\r\n resolve(false);\r\n return;\r\n }\r\n \r\n let topDiff = scrollTopParsed - element.scrollTop;\r\n let leftDiff = scrollLeftParsed - element.scrollLeft;\r\n \r\n const tick = 10;\r\n let topPerTick = topDiff / durationLeft * tick;\r\n let leftPerTick = leftDiff / durationLeft * tick;\r\n \r\n setTimeout(() => {\r\n element.scrollTop = element.scrollTop + topPerTick;\r\n element.scrollLeft = element.scrollLeft + leftPerTick;\r\n \r\n if (element.scrollTop === scrollTopParsed && element.scrollLeft === scrollLeftParsed) {\r\n resolve(true);\r\n return;\r\n }\r\n \r\n durationLeft = durationLeft - tick;\r\n \r\n loop();\r\n }, tick);\r\n };\r\n \r\n loop();\r\n });\r\n \r\n return () => {\r\n canceled = true;\r\n }\r\n }\r\n \r\n // Mobile\r\n //\r\n orientationChanged() {\r\n const timeout = 120;\r\n return new window.Promise((resolve) => {\r\n const go = (i, height0) => {\r\n window.innerHeight != height0 || i >= timeout ?\r\n resolve() :\r\n window.requestAnimationFrame(() => go(i + 1, height0));\r\n };\r\n go(0, window.innerHeight);\r\n });\r\n }\r\n \r\n // Math\r\n //\r\n // Get a value between two values\r\n clamp(value: number, min: number, max: number) {\r\n if (value < min) {\r\n return min;\r\n }\r\n else if (value > max) {\r\n return max;\r\n }\r\n\r\n return value;\r\n }\r\n // Get the linear interpolation between two value\r\n lerp(value1: number, value2: number, amount: number) {\r\n amount = amount < 0 ? 0 : amount;\r\n amount = amount > 1 ? 1 : amount;\r\n return value1 + (value2 - value1) * amount;\r\n }\r\n // Calculates the linear parameter t that produces the interpolant value within the range [a, b].\r\n inverseLerp(a: number, b: number, value: number) {\r\n return (value - a) / (b - a);\r\n }\r\n}\r\n\r\nconst h = new HelpersModel();\r\nexport default h;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ 'disable-header': _vm.$props.isHeaderDisabled },attrs:{\"id\":\"map\"}},[_c('div',{staticClass:\"map-header-label\"},[_vm._v(_vm._s(_vm.mapHeaderLabel))]),_c('div',{directives:[{name:\"dragscroll\",rawName:\"v-dragscroll\",value:(!_vm.isMapZoomInProgress),expression:\"!isMapZoomInProgress\"}],ref:\"mapSvgWrapper\",staticClass:\"map-svg-wrapper\",class:{ loaded: _vm.isMapLoaded },on:{\"dragscrollstart\":_vm.onMouseDragStart,\"dragscrollend\":_vm.onMouseDragEnd}},[_c('img',{ref:\"mapSvgImg\",attrs:{\"src\":\"/svg/full_map.svg\"}})]),_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.$helpers.isExists(_vm.values.selectedRegion)),expression:\"$helpers.isExists(values.selectedRegion)\"}],staticClass:\"go-level-up-button feather icon-arrow-up-circle text-primary cursor-pointer\",on:{\"click\":function($event){return _vm.deselectSelectedMapElementWithTimer()}}}),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Prop, Vue, Watch} from 'vue-property-decorator'\nimport {\n IInteractiveMapData_District,\n IInteractiveMapData_Region,\n IInteractiveMapData_Point,\n MapRegionDto, MapDistrictDto, MapPointDto, IInteractiveMap\n} from '@/global'\nimport * as enums from '@/global-enum'\nimport Helpers from '@/helpers'\nimport appUtils from '@/plugins/app-utils'\nimport mapApi from '@/api/map'\n// @ts-ignore\nimport { dragscroll } from 'vue-dragscroll'\n// @ts-ignore\nimport SVGInject from '@iconfu/svg-inject'\n// @ts-ignore\nimport classNames from 'classnames/dedupe'\n// @ts-ignore\nimport anime from 'animejs'\nimport {UiModule} from \"@/store/modules/ui\";\nimport debounce from \"debounce\";\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\n\n//#region Models\ninterface LabelOffset {\n x: number\n y: number\n}\n\ninterface MapElementVisibility {\n isShowed: boolean\n isFaded: boolean\n isSelected?: boolean\n isDisabled: boolean\n}\n\nenum LabelType {\n Region,\n District,\n}\n\nclass InteractiveMapDataLabel {\n parentSvgElem: SVGGElement;\n labelWrapperElem: SVGGElement;\n labelElem: SVGTextElement;\n\n private map: InteractiveMap;\n private type: LabelType;\n private centerOffset: LabelOffset;\n\n constructor (map: InteractiveMap, type: LabelType, text: string, centerOffset: LabelOffset, parentSvgElem: SVGGElement) {\n this.parentSvgElem = parentSvgElem;\n\n this.map = map;\n this.type = type;\n this.centerOffset = centerOffset;\n\n const wrapperLabelSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n wrapperLabelSvg.setAttribute(\"class\", \"wrapper-name-label hidden-fill\");\n\n map.mapElements.mapLabelsHolder!.appendChild(wrapperLabelSvg);\n\n this.labelWrapperElem = wrapperLabelSvg;\n\n this.labelElem = null;\n\n this.rebuildLabel(text, centerOffset);\n }\n\n rebuildLabel(text: string, centerOffset: LabelOffset) {\n if (Helpers.isExists(this.labelElem)) {\n this.labelWrapperElem.removeChild(this.labelElem);\n }\n\n this.centerOffset = centerOffset;\n\n const labelSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n\n labelSvg.setAttribute(\"class\", \"name-label\");\n labelSvg.setAttribute(\"dominant-baseline\", \"middle\");\n labelSvg.setAttribute(\"text-anchor\", \"middle\");\n\n this.labelWrapperElem.appendChild(labelSvg);\n\n this.labelElem = labelSvg;\n\n const textLines = text.split('\\n');\n\n for (let i = 0; i < textLines.length; i++) {\n const textLine = textLines[i];\n\n const labelSpanSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n\n labelSpanSvg.textContent = textLine.toUpperCase();\n\n labelSvg.appendChild(labelSpanSvg);\n }\n }\n\n updateLebel(visibility: MapElementVisibility, isForceHide: boolean) {\n if (visibility.isShowed) {\n const rootSvgBounds = this.map.mapElements.mapWrapper!.getBoundingClientRect();\n const mapSvgBounds = this.map.mapElements.mapAllRegionsGroup!.getBoundingClientRect();\n const parentSvgBounds = this.parentSvgElem!.getBoundingClientRect();\n\n let label = this.labelElem! as SVGTextElement;\n\n let labelFontSize;\n switch (this.type) {\n case LabelType.Region:\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.015, 0);\n break;\n case LabelType.District:\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.0045, 0);\n break;\n }\n\n label.setAttribute(\"font-size\", labelFontSize + \"px\");\n\n let maxLabelSpanWidth = 0;\n for (let i = 0; i < label.childNodes.length; i++) {\n const labelSpanSvg = label.childNodes[i] as SVGTSpanElement;\n\n maxLabelSpanWidth = labelSpanSvg.getBBox().width;\n }\n\n const offset = this.centerOffset;\n\n const labelCenterX = parentSvgBounds.left - rootSvgBounds.left + parentSvgBounds.width / 2 + offset.x * parentSvgBounds.width;\n const labelCenterY = parentSvgBounds.top - rootSvgBounds.top + parentSvgBounds.height / 2 + + offset.y * parentSvgBounds.height;\n\n label.setAttribute(\"x\", labelCenterX + \"px\");\n label.setAttribute(\"y\", labelCenterY + \"px\");\n\n let baseTextLineOffset = 0.75;\n let firstTextLineOffset = (label.childNodes.length - 1) * baseTextLineOffset;\n let defaultTextLineOffset = baseTextLineOffset * 2;\n\n for (let i = 0; i < label.childNodes.length; i++) {\n const labelSpanSvg = label.childNodes[i] as SVGTSpanElement;\n\n labelSpanSvg.setAttribute(\"x\", labelCenterX + \"px\");\n\n if (i === 0) {\n if (label.childNodes.length > 1) {\n labelSpanSvg.setAttribute(\"dy\", \"-\" + firstTextLineOffset + \"em\");\n } else {\n labelSpanSvg.setAttribute(\"dy\", \"0\");\n }\n } else {\n labelSpanSvg.setAttribute(\"dy\", defaultTextLineOffset + \"em\");\n }\n }\n }\n\n this.labelWrapperElem!.setAttribute(\"class\", classNames(this.labelWrapperElem!.getAttribute(\"class\"), {\n \"hidden-fill\": isForceHide || !visibility.isShowed,\n \"faded\": visibility.isFaded,\n \"disabled\": visibility.isDisabled\n }));\n }\n}\n\nclass InteractiveMapData_Region implements IInteractiveMapData_Region {\n id: number;\n\n mapId: number;\n name: string;\n customFullName: string;\n\n viewboxWidth = 0;\n viewboxHeight = 0;\n maxWidthRelative = 0;\n maxHeightRelative = 0;\n centerOffsetXPerc: number;\n centerOffsetYPerc: number;\n\n districts: InteractiveMapData_District[];\n regionPoints: InteractiveMapData_Point[];\n\n svgElem: SVGGElement;\n\n private map: InteractiveMap;\n nameLabel: InteractiveMapDataLabel;\n\n constructor (map: InteractiveMap, source: MapRegionDto) {\n this.id = source.id;\n this.mapId = source.mapId;\n this.name = source.name;\n this.customFullName = source.customFullName;\n\n this.centerOffsetXPerc = source.centerOffsetXPerc;\n this.centerOffsetYPerc = source.centerOffsetYPerc;\n\n this.districts = source.mapDistricts.map((x) => new InteractiveMapData_District(map, x, this));\n this.regionPoints = source.mapPoints.map((x) => new InteractiveMapData_Point(map, x, this, null));\n\n this.map = map;\n this.svgElem = this.map.findSvgElement(this.mapId, null);\n\n this.nameLabel = new InteractiveMapDataLabel(map, LabelType.Region, this.getDisplayName(false), {\n x: this.centerOffsetXPerc,\n y: this.centerOffsetYPerc,\n }, this.svgElem);\n\n // set clickable class\n let regionDistrictsResult = map.findDistrictsSvgElements(this.mapId);\n\n if (Helpers.isExists(regionDistrictsResult)) {\n regionDistrictsResult.container.setAttribute(\"class\", classNames(regionDistrictsResult.container!.getAttribute(\"class\"), \"map-region-clickable\"));\n for (let i = 0; i < regionDistrictsResult.districts.length; i++) {\n regionDistrictsResult.districts[i].setAttribute(\"class\", classNames(regionDistrictsResult.districts[i]!.getAttribute(\"class\"), \"map-district-clickable\"));\n }\n }\n }\n\n getDisplayName(isNeedFullName: boolean) {\n if (isNeedFullName) {\n return appUtils.getMapElementName(enums.MapElementType_Region, this, true);\n } else {\n return this.name;\n }\n }\n\n updateView(isForceHideLabel: boolean) {\n let isFaded = Helpers.isExists(this.map.values.selectedRegion) && this.map.values.selectedRegion!.mapId !== this.mapId;\n let isPartiallySelected = Helpers.isExists(this.map.values.selectedRegion) && this.map.values.selectedRegion!.mapId === this.mapId;\n let isSelected = isPartiallySelected && !Helpers.isExists(this.map.values.selectedDistrict) && !Helpers.isExists(this.map.values.selectedPoint);\n\n this.svgElem.setAttribute(\"class\", classNames(\"map-region\", {\n \"selected\": isSelected,\n \"faded\": isFaded\n }));\n\n this.nameLabel.updateLebel(this.map.getRegionLabelVisibility(this), isForceHideLabel);\n\n for (let i = 0; i < this.regionPoints.length; i++) {\n const point = this.regionPoints[i];\n\n point.updateView(this.map.getRegionPointVisibility(this.map, this, point), isForceHideLabel);\n }\n }\n}\n\nclass InteractiveMapData_District implements IInteractiveMapData_District {\n id: number;\n\n mapId: number;\n name: string;\n customFullName: string;\n\n viewboxWidth = 0;\n viewboxHeight = 0;\n maxWidthRelative = 0;\n maxHeightRelative = 0;\n centerOffsetXPerc: number;\n centerOffsetYPerc: number;\n isAltColor: boolean;\n\n region: InteractiveMapData_Region;\n districtPoints: InteractiveMapData_Point[];\n\n svgElem: SVGGElement;\n\n private map: InteractiveMap;\n nameLabel: InteractiveMapDataLabel;\n\n constructor (map: InteractiveMap, source: MapDistrictDto, parent: InteractiveMapData_Region) {\n this.id = source.id;\n this.mapId = source.mapId;\n this.name = source.name;\n this.customFullName = source.customFullName;\n this.region = parent;\n this.districtPoints = source.mapPoints.map((x)=> new InteractiveMapData_Point(map, x, null, this));\n\n this.centerOffsetXPerc = source.centerOffsetXPerc;\n this.centerOffsetYPerc = source.centerOffsetYPerc;\n this.isAltColor = source.isAltColor;\n\n this.map = map;\n\n this.svgElem = this.map.findSvgElement(this.region.mapId, this.mapId);\n\n this.nameLabel = new InteractiveMapDataLabel(map, LabelType.District, this.getDisplayName(false), {\n x: this.centerOffsetXPerc,\n y: this.centerOffsetYPerc,\n }, this.svgElem);\n }\n\n getDisplayName(isNeedFullName: boolean) {\n if (isNeedFullName) {\n return appUtils.getMapElementName(enums.MapElementType_District, this, true);\n } else {\n return this.name;\n }\n }\n\n updateView(isForceHideLabel: boolean) {\n let isFaded: boolean;\n\n let isPartiallySelected = Helpers.isExists(this.map.values.selectedDistrict) && this.map.values.selectedDistrict!.mapId === this.mapId;\n let isSelected = isPartiallySelected && !Helpers.isExists(this.map.values.selectedPoint);\n\n if (Helpers.isExists(this.map.values.selectedRegion)) {\n if (this.map.values.selectedRegion!.mapId === this.region.mapId) {\n if (Helpers.isExists(this.map.values.selectedDistrict)) {\n if (this.map.values.selectedDistrict!.mapId === this.mapId) {\n isFaded = false;\n } else {\n isFaded = true;\n }\n } else {\n isFaded = false;\n }\n } else {\n isFaded = true;\n }\n } else {\n isFaded = false;\n }\n\n this.svgElem.setAttribute(\"class\", classNames(this.svgElem.getAttribute(\"class\"), \"map-district\", {\n \"alt-color\": this.isAltColor,\n \"selected\": isSelected,\n \"faded\": isFaded,\n \"active\": !isFaded,\n }));\n\n this.nameLabel.updateLebel(this.map.getDistrictLabelVisibility(this), isForceHideLabel);\n\n for (let i = 0; i < this.districtPoints.length; i++) {\n const point = this.districtPoints[i];\n\n point.updateView(this.map.getDistrictPointVisibility(this.map, this, point), isForceHideLabel);\n }\n }\n}\n\nclass InteractiveMapData_Point implements IInteractiveMapData_Point {\n id: number;\n name: string;\n positionXPerc: number;\n positionYPerc: number;\n type: number;\n\n parentRegion: InteractiveMapData_Region | null;\n parentDistrict: InteractiveMapData_District | null;\n\n get isRegionParent() {\n return Helpers.isExists(this.parentRegion);\n }\n\n pointWrapperElem: SVGGElement;\n pointCircleElem: SVGCircleElement;\n pointTextElem: SVGGElement;\n\n private map: InteractiveMap;\n\n\n constructor (map: InteractiveMap, source: MapPointDto, parentRegion: InteractiveMapData_Region | null, parentDistrict: InteractiveMapData_District | null) {\n this.id = source.id;\n this.name = source.name;\n this.positionXPerc = source.positionXPerc;\n this.positionYPerc = source.positionYPerc;\n this.type = source.type;\n\n this.parentRegion = parentRegion;\n this.parentDistrict = parentDistrict;\n\n this.map = map;\n\n const pointWrapperSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n pointWrapperSvg.setAttribute(\"class\", \"point-wrapper hidden-fill\");\n pointWrapperSvg.onclick = () => this.map.selectMapPoint(this.id);\n pointWrapperSvg.ontouchend = () => this.map.selectMapPoint(this.id);\n\n map.mapElements.mapPointsHolder!.appendChild(pointWrapperSvg);\n\n this.pointWrapperElem = pointWrapperSvg;\n\n const circleSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n\n circleSvg.setAttribute(\"class\", \"point-circle\");\n\n pointWrapperSvg.appendChild(circleSvg);\n\n this.pointCircleElem = circleSvg;\n\n const textSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n\n textSvg.textContent = appUtils.getMapElementName(enums.MapElementType_Point, source, true);\n\n textSvg.setAttribute(\"class\", \"name-label\");\n textSvg.setAttribute(\"dominant-baseline\", \"baseline\");\n textSvg.setAttribute(\"text-anchor\", \"middle\");\n\n pointWrapperSvg.appendChild(textSvg);\n\n this.pointTextElem = textSvg;\n }\n\n refreshView(isForceHide: boolean) {\n if (Helpers.isExists(this.pointTextElem)) {\n this.pointTextElem.textContent = appUtils.getMapElementName(enums.MapElementType_Point, this, true);\n }\n\n if (this.isRegionParent) {\n this.updateView(this.map.getRegionPointVisibility(this.map, this.parentRegion!, this), isForceHide);\n } else {\n this.updateView(this.map.getDistrictPointVisibility(this.map, this.parentDistrict!, this), isForceHide);\n }\n }\n\n updateView(visibility: MapElementVisibility, isForceHide: boolean) {\n if (visibility.isShowed) {\n const rootSvgBounds = this.map.mapElements.mapWrapper!.getBoundingClientRect();\n const mapSvgBounds = this.map.mapElements.mapAllRegionsGroup!.getBoundingClientRect();\n const parentSvgBounds = (this.isRegionParent ? this.parentRegion!.svgElem : this.parentDistrict!.svgElem)!.getBoundingClientRect();\n\n let circle = this.pointCircleElem! as SVGCircleElement;\n\n const circleCenterX = parentSvgBounds.left - rootSvgBounds.left + this.positionXPerc * parentSvgBounds.width;\n const circleCenterY = parentSvgBounds.top - rootSvgBounds.top + (1 - this.positionYPerc) * parentSvgBounds.height;\n\n const isTopLevel = !Helpers.isExists(this.map.values.selectedRegion) && !Helpers.isExists(this.map.values.selectedDistrict);\n const isRegionLevel = Helpers.isExists(this.map.values.selectedRegion) && !Helpers.isExists(this.map.values.selectedDistrict);\n const isDistrictLevel = Helpers.isExists(this.map.values.selectedRegion) && Helpers.isExists(this.map.values.selectedDistrict);\n\n let circleRadius = 0;\n let circleStrokeWidth = 0;\n let labelBottomOffset = 0;\n let labelFontSize = 0;\n\n if (isTopLevel) {\n switch (this.type) {\n case enums.MapPointType_TopLevelSpecial:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.0079, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.004, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.008, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.023, 0);\n break;\n case enums.MapPointType_TopLevel:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.007, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.003, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.007, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.017, 0);\n break;\n case enums.MapPointType_Region:\n // nothing\n break;\n case enums.MapPointType_District:\n // nothing\n break;\n }\n } else if (isRegionLevel) {\n switch (this.type) {\n case enums.MapPointType_TopLevelSpecial:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.0028, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.0013, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.0028, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.01, 0);\n break;\n case enums.MapPointType_TopLevel:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.002, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.001, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.0018, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.008, 0);\n break;\n case enums.MapPointType_Region:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.0017, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.0007, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.0015, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.005, 0);\n break;\n case enums.MapPointType_District:\n // nothing\n break;\n }\n } else if (isDistrictLevel) {\n switch (this.type) {\n case enums.MapPointType_TopLevelSpecial:\n break;\n case enums.MapPointType_TopLevel:\n break;\n case enums.MapPointType_Region:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.0006, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.0003, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.001, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.002, 0);\n break;\n case enums.MapPointType_District:\n circleRadius = Helpers.roundDecimal(mapSvgBounds.height * 0.0004, 0);\n circleStrokeWidth = Helpers.roundDecimal(mapSvgBounds.height * 0.0002, 0);\n labelBottomOffset = Helpers.roundDecimal(mapSvgBounds.height * 0.0008, 0);\n labelFontSize = Helpers.roundDecimal(mapSvgBounds.height * 0.0017, 0);\n break;\n }\n }\n\n circle.setAttribute(\"r\", circleRadius + \"px\");\n circle.setAttribute(\"stroke-width\", circleStrokeWidth + \"px\");\n circle.setAttribute(\"cx\", circleCenterX + \"px\");\n circle.setAttribute(\"cy\", circleCenterY + \"px\");\n\n let label = this.pointTextElem! as SVGTextElement;\n\n label.setAttribute(\"font-size\", labelFontSize + \"px\");\n\n const labelCenterX = circleCenterX;\n const labelCenterY = circleCenterY - circleRadius - labelBottomOffset;\n\n label.setAttribute(\"x\", labelCenterX + \"px\");\n label.setAttribute(\"y\", labelCenterY + \"px\");\n }\n\n this.pointWrapperElem!.setAttribute(\"class\", classNames(this.pointWrapperElem!.getAttribute(\"class\"), {\n \"hidden-fill\": isForceHide || !visibility.isShowed,\n \"faded\": visibility.isFaded,\n \"selected\": visibility.isSelected,\n \"disabled\": visibility.isDisabled\n }));\n }\n}\n//#endregion\n\n@Component({\n directives: {\n dragscroll\n }\n})\nexport default class InteractiveMap extends Vue implements IInteractiveMap {\n @Prop(Boolean) readonly readonly: boolean | undefined;\n @Prop(Boolean) readonly isAllMapElementsMode: boolean | undefined;\n @Prop(Boolean) readonly isHeaderDisabled: boolean | undefined;\n @Prop(Boolean) readonly isScrollControlDisabled: boolean | undefined;\n @Prop(Function) readonly initValues: (() => { mapRegionId: number | null, mapDistrictId: number | null, mapPointId: number | null }) | undefined;\n @Prop(Function) readonly onSelectionChanged: ((selectedRegion: IInteractiveMapData_Region | null,\n selectedDistrict: IInteractiveMapData_District | null,\n selectedPoint: IInteractiveMapData_Point | null) => void) | undefined;\n\n isMapLoaded = false;\n isMapDragActive = false;\n isMapZoomInProgress = false;\n isMapZoomedIn = false;\n\n public regions: InteractiveMapData_Region[] = [];\n\n mapElements = {\n mapTopWrapper: null,\n mapWrapper: null,\n map: null,\n mapAllRegionsGroup: null,\n mapLayers: null,\n mapLabelsHolder: null,\n mapPointsHolder: null,\n selectedRegionLink: null,\n selectedDistrictLink: null,\n };\n values = {\n mapWrapperMinWidth: 0,\n mapWrapperMinHeight: 0,\n mapWrapperMaxWidth: 0,\n mapWrapperMaxHeight: 0,\n\n mapWindowWidth: 0,\n mapWindowHeight: 0,\n mapViewboxWidth: 0,\n mapViewboxHeight: 0,\n mapCurrentWidth: 0,\n mapCurrentHeight: 0,\n mapWrapperCurrentWidth: 0,\n mapWrapperCurrentHeight: 0,\n\n nextSelectedRegion: null,\n nextSelectedDistrict: null,\n nextSelectedPoint: null,\n\n selectedRegion: null,\n selectedDistrict: null,\n selectedPoint: null,\n };\n\n private mouseDragTimer: number | null = null;\n private transitionEndTimer: number | null = null;\n\n get mapHeaderLabel() {\n if (this.isHeaderDisabled) return '';\n\n let text = \"Україна\";\n\n if (Helpers.isExists(this.values.nextSelectedRegion)) {\n const region = this.values.nextSelectedRegion!;\n\n if (Helpers.isExists(this.values.nextSelectedDistrict)) {\n const district = this.values.nextSelectedDistrict!;\n\n if (Helpers.isExists(district)) {\n text = region!.getDisplayName(true) + \", \" + district!.getDisplayName(true);\n }\n } else {\n if (Helpers.isExists(region)) {\n text = region!.getDisplayName(true);\n }\n }\n }\n\n return text;\n }\n\n getRegionLabelVisibility(region: InteractiveMapData_Region): MapElementVisibility {\n let isShowed = false;\n let isFaded = false;\n let isDisabled = false;\n\n if (this.values.selectedRegion === region ||\n region.regionPoints.some(x =>\n x.type === enums.MapPointType_TopLevelSpecial ||\n x.type === enums.MapPointType_TopLevel)) {\n isShowed = false;\n } else if (!Helpers.isExists(this.values.selectedRegion)) {\n isShowed = true;\n } else if (Helpers.isExists(this.values.selectedRegion) &&\n this.values.selectedRegion !== region) {\n isShowed = true;\n isFaded = true;\n }\n\n return {\n isShowed: isShowed,\n isFaded: isFaded,\n isDisabled: isDisabled\n }\n }\n getDistrictLabelVisibility(district: InteractiveMapData_District): MapElementVisibility {\n let isShowed = false;\n let isFaded = false;\n let isDisabled = false;\n\n if (this.values.selectedRegion === district.region &&\n district.districtPoints.some(x => x.type === enums.MapPointType_Region)) {\n isShowed = false;\n } else if (Helpers.isExists(this.values.selectedRegion) &&\n Helpers.isExists(this.values.selectedDistrict) &&\n this.values.selectedRegion === district.region &&\n this.values.selectedDistrict !== district) {\n isShowed = true;\n isFaded = true;\n } else if (Helpers.isExists(this.values.selectedRegion) &&\n !Helpers.isExists(this.values.selectedDistrict) &&\n this.values.selectedRegion === district.region) {\n isShowed = true;\n }\n\n return {\n isShowed: isShowed,\n isFaded: isFaded,\n isDisabled: isDisabled\n };\n }\n\n getRegionPointVisibility(map: InteractiveMap, region: InteractiveMapData_Region, point: InteractiveMapData_Point): MapElementVisibility {\n const isTopLevel = !Helpers.isExists(map.values.selectedRegion) && !Helpers.isExists(map.values.selectedDistrict);\n const isRegionLevel = Helpers.isExists(map.values.selectedRegion) && !Helpers.isExists(map.values.selectedDistrict);\n\n let isShowed = false;\n let isSelected = point === map.values.selectedPoint;\n let isFaded = false;\n let isDisabled = false;\n\n if (map.isMapZoomInProgress) {\n isShowed = false;\n } else if (isTopLevel) {\n isShowed = point.type === enums.MapPointType_TopLevelSpecial ||\n point.type === enums.MapPointType_TopLevel;\n } else if (isRegionLevel) {\n isShowed = point.type === enums.MapPointType_Region ||\n point.type === enums.MapPointType_TopLevelSpecial ||\n point.type === enums.MapPointType_TopLevel;\n\n if (map.values.selectedRegion !== region) {\n isFaded = true;\n }\n }\n\n return {\n isShowed: isShowed,\n isSelected: isSelected,\n isFaded: isFaded,\n isDisabled: isDisabled\n };\n }\n\n getDistrictPointVisibility(map: InteractiveMap, district: InteractiveMapData_District, point: InteractiveMapData_Point): MapElementVisibility {\n const isRegionLevel = Helpers.isExists(map.values.selectedRegion) && !Helpers.isExists(map.values.selectedDistrict);\n const isDistrictLevel = Helpers.isExists(map.values.selectedRegion) && Helpers.isExists(map.values.selectedDistrict);\n\n let isShowed = false;\n let isSelected = point === map.values.selectedPoint;\n let isFaded = false;\n let isDisabled = false;\n\n if (map.isMapZoomInProgress) {\n isShowed = false;\n } else if (isRegionLevel) {\n isShowed = point.type === enums.MapPointType_Region;\n\n if (map.values.selectedRegion !== district.region) {\n isFaded = true;\n }\n } else if (isDistrictLevel) {\n isShowed = point.type === enums.MapPointType_Region ||\n point.type === enums.MapPointType_District;\n\n if (map.values.selectedDistrict !== district) {\n isFaded = true;\n }\n }\n\n return {\n isShowed: isShowed,\n isSelected: isSelected,\n isFaded: isFaded,\n isDisabled: isDisabled\n }\n }\n\n changeMapRegionData(dto: MapRegionDto) {\n const mapRegionData = Helpers.findFirstInArray(this.regions, x => x.id === dto.id);\n\n if (Helpers.isExists(mapRegionData)) {\n mapRegionData!.name = dto.name;\n mapRegionData!.customFullName = dto.customFullName;\n mapRegionData!.centerOffsetXPerc = dto.centerOffsetXPerc;\n mapRegionData!.centerOffsetYPerc = dto.centerOffsetYPerc;\n\n mapRegionData!.nameLabel.rebuildLabel(mapRegionData!.name, { x: mapRegionData!.centerOffsetXPerc, y: mapRegionData!.centerOffsetYPerc });\n mapRegionData!.updateView(false);\n }\n }\n\n changeMapDistrictData(dto: MapDistrictDto) {\n const mapRegionData = Helpers.findFirstInArray(this.regions, x => x.id === dto.mapRegionId);\n\n if (Helpers.isExists(mapRegionData)) {\n const mapDistrictData = Helpers.findFirstInArray(mapRegionData!.districts, x => x.id === dto.id);\n\n if (Helpers.isExists(mapDistrictData)) {\n mapDistrictData!.name = dto.name;\n mapDistrictData!.customFullName = dto.customFullName;\n mapDistrictData!.centerOffsetXPerc = dto.centerOffsetXPerc;\n mapDistrictData!.centerOffsetYPerc = dto.centerOffsetYPerc;\n mapDistrictData!.isAltColor = dto.isAltColor;\n\n mapDistrictData!.nameLabel.rebuildLabel(mapDistrictData!.name, { x: mapDistrictData!.centerOffsetXPerc, y: mapDistrictData!.centerOffsetYPerc });\n mapDistrictData!.updateView(false);\n }\n }\n }\n\n addMapPointData(dto: MapPointDto) {\n const mapRegionData = Helpers.findFirstInArray(this.regions, x => x.id === dto.mapRegionId);\n\n if (Helpers.isExists(mapRegionData)) {\n if (this.$helpers.isNumeric(dto.mapDistrictId)) {\n const mapDistrictData = Helpers.findFirstInArray(mapRegionData!.districts, x => x.id === dto.mapDistrictId);\n\n if (Helpers.isExists(mapDistrictData)) {\n mapDistrictData!.districtPoints.push(new InteractiveMapData_Point(this, dto, null, mapDistrictData));\n\n mapDistrictData!.updateView(false);\n }\n } else {\n mapRegionData!.regionPoints.push(new InteractiveMapData_Point(this, dto, mapRegionData, null));\n\n mapRegionData!.updateView(false);\n }\n }\n }\n\n removeMapPointData(dto: MapPointDto) {\n const mapRegionData = Helpers.findFirstInArray(this.regions, x => x.id === dto.mapRegionId);\n\n if (Helpers.isExists(mapRegionData)) {\n if (this.$helpers.isNumeric(dto.mapDistrictId)) {\n const mapDistrictData = Helpers.findFirstInArray(mapRegionData!.districts, x => x.id === dto.mapDistrictId);\n\n if (Helpers.isExists(mapDistrictData)) {\n Helpers.removeInArray(mapDistrictData!.districtPoints, x => x.id === dto.id);\n\n mapDistrictData!.updateView(false);\n }\n } else {\n Helpers.removeInArray(mapRegionData!.regionPoints, x => x.id === dto.id);\n\n mapRegionData!.updateView(false);\n }\n }\n }\n\n changeMapPointData(dto: MapPointDto) {\n const mapRegionData = Helpers.findFirstInArray(this.regions, x => x.id === dto.mapRegionId);\n\n if (Helpers.isExists(mapRegionData)) {\n let mapPointData: InteractiveMapData_Point | null = null;\n\n if (this.$helpers.isNumeric(dto.mapDistrictId)) {\n const mapDistrictData = Helpers.findFirstInArray(mapRegionData!.districts, x => x.id === dto.mapDistrictId);\n\n if (Helpers.isExists(mapDistrictData)) {\n mapPointData = Helpers.findFirstInArray(mapDistrictData!.districtPoints, x => x.id === dto.id);\n }\n } else {\n mapPointData = Helpers.findFirstInArray(mapRegionData!.regionPoints, x => x.id === dto.id);\n }\n\n if (Helpers.isExists(mapPointData)) {\n mapPointData!.type = dto.type;\n mapPointData!.name = dto.name;\n mapPointData!.positionXPerc = dto.positionXPerc;\n mapPointData!.positionYPerc = dto.positionYPerc;\n\n mapPointData!.refreshView(false);\n }\n }\n }\n\n created() {\n // global event\n EventBus.$on(EventBusModel.afterWindowResizeCompletedEventName, this.updateInteractiveMapView);\n }\n\n mounted() {\n let mapInst = this;\n\n SVGInject(mapInst.$refs.mapSvgImg, {\n makeIdsUnique: false,\n afterInject(img: HTMLImageElement, svg: SVGSVGElement) {\n mapInst.prepareMapElements(svg);\n\n if (mapInst.isAllMapElementsMode) {\n mapApi.allMapRegions(mapRegions => {\n mapInst.initMapData(mapRegions);\n }, mapInst.showError);\n } else {\n mapApi.searchableMapRegionsCached(mapRegions => {\n mapInst.initMapData(mapRegions);\n }, mapInst.showError);\n }\n }\n });\n\n this.positionGoUpButton();\n }\n\n beforeDestroy() {\n // global event\n EventBus.$off(EventBusModel.afterWindowResizeCompletedEventName, this.updateInteractiveMapView);\n }\n\n destroyed() {\n this.mapElements.mapTopWrapper!.removeEventListener('wheel', this.onMouseScroll);\n\n const svgMapDistricts = this.mapElements.mapTopWrapper!.getElementsByClassName(\"map-district-clickable\");\n\n for (let i = 0; i < svgMapDistricts.length; i++) {\n svgMapDistricts[i].removeEventListener(\"wheel\", this.onMouseScroll as EventListener);\n svgMapDistricts[i].removeEventListener(\"click\", this.onMouseClick);\n svgMapDistricts[i].removeEventListener(\"touchend\", this.onTouchClick);\n }\n\n this.mapElements.mapTopWrapper!.removeEventListener(\"wheel\", this.onWrapperMouseScroll);\n }\n\n positionGoUpButton() {\n const wrapper = this.$refs.mapSvgWrapper;\n\n const mapElem = document.getElementById(\"map\");\n\n if (this.$helpers.isExists(mapElem)) {\n const buttons = mapElem!.getElementsByClassName('go-level-up-button');\n for (let i = 0; i < buttons.length; i++) {\n (buttons[i]).style.left = wrapper.offsetLeft + 'px';\n }\n }\n }\n\n initMapData(mapRegions: MapRegionDto[]) {\n if (Helpers.isArray(mapRegions)) {\n this.regions = mapRegions.map((d) => new InteractiveMapData_Region(this, d));\n\n //console.log(\"Interactive Map Inst: \", this);\n this.initMap();\n\n // events\n const svgMapDistricts = this.mapElements.mapTopWrapper!.getElementsByClassName(\"map-district-clickable\");\n\n for (let i = 0; i < svgMapDistricts.length; i++) {\n svgMapDistricts[i].addEventListener(\"wheel\", this.onMouseScroll as EventListener);\n svgMapDistricts[i].addEventListener(\"click\", this.onMouseClick);\n svgMapDistricts[i].addEventListener(\"touchend\", this.onTouchClick);\n }\n\n this.mapElements.mapTopWrapper!.addEventListener(\"wheel\", this.onWrapperMouseScroll);\n\n this.isMapLoaded = true;\n }\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n private updateMapSelection(mapRegionId: number | null | undefined, mapDistrictId: number | null | undefined, mapPointId: number | null | undefined) {\n if (this.$helpers.isNumeric(mapRegionId)) {\n this.values.nextSelectedRegion = this.$helpers.findFirstInArray(this.regions,\n x => x.id === mapRegionId);\n } else {\n this.values.nextSelectedRegion = null;\n }\n\n if (this.$helpers.isNumeric(mapDistrictId) &&\n this.$helpers.isExists(this.values.nextSelectedRegion)) {\n this.values.nextSelectedDistrict = this.$helpers.findFirstInArray(this.values.nextSelectedRegion!.districts,\n x => x.id === mapDistrictId);\n } else {\n this.values.nextSelectedDistrict = null;\n }\n\n if (this.$helpers.isNumeric(mapPointId) &&\n this.$helpers.isExists(this.values.nextSelectedRegion)) {\n if (this.$helpers.isExists(this.values.nextSelectedDistrict)) {\n this.values.nextSelectedPoint = this.$helpers.findFirstInArray(this.values.nextSelectedDistrict!.districtPoints,\n x => x.id === mapPointId);\n } else {\n this.values.nextSelectedPoint = this.$helpers.findFirstInArray(this.values.nextSelectedRegion!.regionPoints,\n x => x.id === mapPointId);\n }\n } else {\n this.values.nextSelectedPoint = null;\n }\n }\n\n changeMap(mapRegionId: number | null, mapDistrictId: number | null, mapPointId: number | null) {\n //console.log(\"changeMap\", mapRegionId, mapDistrictId, mapPointId);\n\n const oldSelectedRegion = this.values.nextSelectedRegion;\n const oldSelectedDistrict = this.values.nextSelectedDistrict;\n const oldSelectedPoint = this.values.nextSelectedPoint;\n\n this.updateMapSelection(mapRegionId, mapDistrictId, mapPointId);\n\n if (oldSelectedRegion !== this.values.nextSelectedRegion ||\n oldSelectedDistrict !== this.values.nextSelectedDistrict ||\n oldSelectedPoint !== this.values.nextSelectedPoint) {\n this.updateMapZoom(false, false);\n }\n }\n\n private selectMapRegionOrDistrict(element: HTMLElement) {\n const mapElement = this.findMapElement(element);\n\n const oldSelectedRegion = this.values.nextSelectedRegion;\n const oldSelectedDistrict = this.values.nextSelectedDistrict;\n const oldSelectedPoint = this.values.nextSelectedPoint;\n\n if (Helpers.isExists(mapElement)) {\n if (mapElement instanceof InteractiveMapData_Region) {\n const region = mapElement as InteractiveMapData_Region;\n\n this.values.nextSelectedRegion = region;\n this.values.nextSelectedDistrict = null;\n this.values.nextSelectedPoint = null;\n } else if (mapElement instanceof InteractiveMapData_District) {\n const district = mapElement as InteractiveMapData_District;\n\n if (Helpers.isExists(this.values.nextSelectedRegion)) {\n if (this.values.nextSelectedRegion === district.region) {\n this.values.nextSelectedDistrict = district;\n this.values.nextSelectedPoint = null;\n } else {\n this.values.nextSelectedRegion = district.region;\n this.values.nextSelectedDistrict = null;\n this.values.nextSelectedPoint = null;\n }\n } else {\n this.values.nextSelectedRegion = district.region;\n this.values.nextSelectedDistrict = null;\n this.values.nextSelectedPoint = null;\n }\n }\n\n this.isMapZoomedIn = true;\n } else {\n this.values.nextSelectedRegion = null;\n this.values.nextSelectedDistrict = null;\n this.values.nextSelectedPoint = null;\n this.isMapZoomedIn = false;\n }\n\n if (oldSelectedRegion !== this.values.nextSelectedRegion ||\n oldSelectedDistrict !== this.values.nextSelectedDistrict ||\n oldSelectedPoint !== this.values.nextSelectedPoint) {\n this.updateMapZoom(false, false);\n }\n }\n\n selectMapPoint(mapPointId: number) {\n const oldSelectedRegion = this.values.nextSelectedRegion;\n const oldSelectedDistrict = this.values.nextSelectedDistrict;\n const oldSelectedPoint = this.values.nextSelectedPoint;\n\n let selectPoint: InteractiveMapData_Point | null = null;\n let isBreak = false;\n\n for (let i = 0; i < this.regions.length; i++) {\n const region = this.regions[i];\n\n selectPoint = Helpers.findFirstInArray(region.regionPoints, x => x.id === mapPointId);\n\n if (Helpers.isExists(selectPoint)) {\n this.values.nextSelectedRegion = region;\n this.values.nextSelectedDistrict = null;\n this.values.nextSelectedPoint = selectPoint;\n isBreak = true;\n }\n\n if (isBreak) break;\n\n for (let j = 0; j < region.districts.length; j++) {\n const district = region.districts[j];\n\n selectPoint = Helpers.findFirstInArray(district.districtPoints, x => x.id === mapPointId);\n\n if (Helpers.isExists(selectPoint)) {\n this.values.nextSelectedRegion = region;\n this.values.nextSelectedDistrict = district;\n this.values.nextSelectedPoint = selectPoint;\n isBreak = true;\n }\n }\n\n if (isBreak) break;\n }\n\n if (oldSelectedRegion !== this.values.nextSelectedRegion ||\n oldSelectedDistrict !== this.values.nextSelectedDistrict ||\n oldSelectedPoint !== this.values.nextSelectedPoint) {\n this.updateMapZoom(false, false);\n }\n }\n\n deselectSelectedMapElementWithTimer = debounce(() => {\n this.deselectSelectedMapElement();\n }, 100);\n\n private deselectSelectedMapElement() {\n const oldSelectedRegion = this.values.nextSelectedRegion;\n const oldSelectedDistrict = this.values.nextSelectedDistrict;\n const oldSelectedPoint = this.values.nextSelectedPoint;\n\n if (Helpers.isExists(this.values.nextSelectedDistrict)) {\n this.values.nextSelectedDistrict = null;\n this.values.nextSelectedPoint = null;\n } else {\n this.values.nextSelectedRegion = null;\n this.values.nextSelectedPoint = null;\n }\n\n this.isMapZoomedIn = false;\n\n if (oldSelectedRegion !== this.values.nextSelectedRegion ||\n oldSelectedDistrict !== this.values.nextSelectedDistrict ||\n oldSelectedPoint !== this.values.nextSelectedPoint) {\n this.updateMapZoom(false, false);\n }\n }\n\n private commitMapSelection() {\n this.values.selectedRegion = this.values.nextSelectedRegion;\n this.values.selectedDistrict = this.values.nextSelectedDistrict;\n this.values.selectedPoint = this.values.nextSelectedPoint;\n\n if (Helpers.isExists(this.onSelectionChanged)) {\n this.onSelectionChanged!(this.values.selectedRegion, this.values.selectedDistrict, this.values.selectedPoint);\n }\n }\n\n private onTouchClick(e: Event) {\n if (this.readonly) return;\n\n //e.preventDefault();\n //e.stopPropagation();\n\n if (this.isMapZoomInProgress || this.isMapDragActive) return;\n\n this.selectMapRegionOrDistrict(e.currentTarget as HTMLElement);\n }\n\n private onMouseClick(e: Event) {\n if (this.readonly) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (this.isMapZoomInProgress || this.isMapDragActive) return;\n\n this.selectMapRegionOrDistrict(e.currentTarget as HTMLElement);\n }\n\n private onMouseScroll(e: WheelEvent) {\n if (this.readonly || this.isScrollControlDisabled) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (this.isMapZoomInProgress || this.isMapDragActive) return;\n\n if (Math.sign(e.deltaY) < 0) {\n this.selectMapRegionOrDistrict(e.currentTarget as HTMLElement);\n } else {\n this.deselectSelectedMapElement();\n }\n }\n private onWrapperMouseScroll(e: WheelEvent) {\n if (this.readonly || this.isScrollControlDisabled) return;\n\n e.preventDefault();\n\n if (this.isMapZoomInProgress || this.isMapDragActive) return;\n\n if (Math.sign(e.deltaY) > 0) {\n this.deselectSelectedMapElement();\n }\n }\n\n private onMouseDragStart(e: Event) {\n if (Helpers.isExists(this.mouseDragTimer)) {\n clearTimeout(this.mouseDragTimer!);\n this.mouseDragTimer = null;\n }\n\n this.mouseDragTimer = setTimeout(() => this.isMapDragActive = true, 100);\n }\n\n private onMouseDragEnd(e: Event) {\n if (Helpers.isExists(this.mouseDragTimer)) {\n clearTimeout(this.mouseDragTimer!);\n this.mouseDragTimer = null;\n }\n\n this.mouseDragTimer = setTimeout(() => this.isMapDragActive = false, 10);\n }\n\n private updateMapSize() {\n const wrapper = this.$refs.mapSvgWrapper;\n\n // init\n if (this.values.mapViewboxWidth === 0 || this.values.mapViewboxHeight === 0) {\n const rootBBox = this.mapElements.map!.getBBox();\n\n this.values.mapViewboxWidth = rootBBox.width;\n this.values.mapViewboxHeight = rootBBox.height;\n }\n\n const maxMapScale = 2;\n\n this.values.mapWrapperMinWidth = wrapper.offsetWidth;\n this.values.mapWrapperMinHeight = wrapper.offsetHeight;\n this.values.mapWrapperMaxWidth = this.values.mapViewboxWidth * maxMapScale;\n this.values.mapWrapperMaxHeight = this.values.mapViewboxHeight * maxMapScale;\n\n this.values.mapWindowWidth = wrapper.offsetWidth;\n this.values.mapWindowHeight = wrapper.offsetHeight;\n\n for (let i = 0; i < this.regions.length; i++) {\n let region = this.regions[i];\n\n // init\n if (region.viewboxWidth === 0 || region.viewboxHeight === 0) {\n let regionBBox = region.svgElem!.getBBox();\n\n region.viewboxWidth = regionBBox.width;\n region.viewboxHeight = regionBBox.height;\n }\n\n region.maxWidthRelative = region.viewboxWidth / this.values.mapViewboxWidth * this.values.mapWrapperMaxWidth;\n region.maxHeightRelative = region.viewboxHeight / this.values.mapViewboxHeight * this.values.mapWrapperMaxHeight;\n\n for (let j = 0; j < region.districts.length; j++) {\n let district = region.districts[j];\n\n // init\n if (region.viewboxWidth === 0 || region.viewboxHeight === 0) {\n let districtBBox = district.svgElem!.getBBox();\n\n district.viewboxWidth = districtBBox.width;\n district.viewboxHeight = districtBBox.height;\n }\n\n district.maxWidthRelative = district.viewboxWidth / this.values.mapViewboxWidth * this.values.mapWrapperMaxWidth;\n district.maxHeightRelative = district.viewboxHeight / this.values.mapViewboxHeight * this.values.mapWrapperMaxHeight;\n }\n }\n }\n\n private prepareMapElements(svg: SVGSVGElement) {\n //console.log(\"Set map SVG: \", svg);\n this.mapElements.map = svg;\n this.mapElements.mapAllRegionsGroup = document.getElementById(\"r_all\");\n\n this.mapElements.map!.setAttribute(\"width\", \"100%\");\n this.mapElements.map!.setAttribute(\"height\", \"100%\");\n this.mapElements.map!.setAttribute(\"x\", \"0%\");\n this.mapElements.map!.setAttribute(\"y\", \"0%\");\n\n const wrapper = this.$refs.mapSvgWrapper;\n\n this.mapElements.mapTopWrapper = wrapper;\n\n const mapWrapper = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n wrapper.insertBefore(mapWrapper, this.mapElements.mapWrapper!);\n\n this.mapElements.mapWrapper = mapWrapper;\n\n this.mapElements.mapWrapper!.appendChild(this.mapElements.map!);\n\n // remove title from the map svg\n const titleElem = this.mapElements.map!.getElementsByTagName(\"title\");\n\n if (Helpers.isExists(titleElem) && Helpers.isExists(titleElem[0].parentElement) && Helpers.isExists(titleElem[0])) {\n titleElem[0].parentElement!.removeChild(titleElem[0]);\n }\n\n const layers = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n layers.setAttribute(\"class\", \"map-layers\");\n\n this.mapElements.mapWrapper!.appendChild(layers);\n this.mapElements.mapLayers = layers;\n\n const labelsHolder = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n labelsHolder.setAttribute(\"class\", \"map-labels-holder\");\n\n layers.appendChild(labelsHolder);\n this.mapElements.mapLabelsHolder = labelsHolder;\n\n const pointsHolder = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\n pointsHolder.setAttribute(\"class\", \"map-points-holder\");\n\n layers.appendChild(pointsHolder);\n this.mapElements.mapPointsHolder = pointsHolder;\n\n // selected region link\n const selectedRegionLink = document.createElementNS(\"http://www.w3.org/2000/svg\", \"use\");\n\n this.mapElements.mapAllRegionsGroup!.appendChild(selectedRegionLink);\n\n this.mapElements.selectedRegionLink = selectedRegionLink;\n\n // selected district link\n const selectedDistrictLink = document.createElementNS(\"http://www.w3.org/2000/svg\", \"use\");\n\n document.getElementById(\"r_d_all\")!.appendChild(selectedDistrictLink);\n\n this.mapElements.selectedDistrictLink = selectedDistrictLink;\n }\n private initMap() {\n this.updateMapSize();\n this.initMapZoom();\n }\n\n updateInteractiveMapView() {\n if (this.$helpers.isExists(this.mapElements.mapWrapper)) {\n // todo need two update\n this.updateMapZoom(true, false);\n this.updateMapZoom(false, false);\n }\n }\n\n initMapZoom() {\n if (this.$helpers.isFunction(this.initValues)) {\n const initValues = this.initValues!();\n\n if (this.$helpers.isExists(initValues)) {\n this.updateMapSelection(initValues.mapRegionId, initValues!.mapDistrictId, initValues!.mapPointId);\n }\n }\n\n this.updateMapZoom(true, false);\n // todo need call two time\n this.updateMapZoom(false, false);\n }\n\n private getMapFocusCoord(element: SVGGElement) {\n const elementBounds = element!.getBoundingClientRect();\n const mapBounds = this.mapElements.mapAllRegionsGroup!.getBoundingClientRect();\n\n return {\n x: elementBounds.left - mapBounds.left + elementBounds.width / 2,\n y: elementBounds.top - mapBounds.top + elementBounds.height / 2\n };\n }\n\n private getTransitionEndEventName(): string {\n let i,\n undefined,\n el = document.createElement('div'),\n transitions = {\n 'transition': 'transitionend',\n 'OTransition': 'otransitionend', // oTransitionEnd in very old Opera\n 'MozTransition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd'\n };\n\n for (i in transitions) {\n if (transitions.hasOwnProperty(i) && el.style[i] !== undefined) {\n return transitions[i];\n }\n }\n\n return \"transitionend\";\n }\n\n updateMapSelectedLinks() {\n this.mapElements.selectedRegionLink!.setAttribute(\"href\", \"\");\n this.mapElements.selectedDistrictLink!.setAttribute(\"href\", \"\");\n\n if (Helpers.isExists(this.values.selectedPoint)) return;\n\n if (Helpers.isExists(this.values.selectedDistrict)) {\n this.mapElements.selectedDistrictLink!.setAttribute(\"href\", `#r${this.values.selectedDistrict!.region.mapId}_d${this.values.selectedDistrict!.mapId}`);\n } else if (Helpers.isExists(this.values.selectedRegion)) {\n this.mapElements.selectedRegionLink!.setAttribute(\"href\", `#r${this.values.selectedRegion!.mapId}`);\n }\n }\n\n updateMapZoom(isInit: boolean, animation: boolean) {\n //console.log(`Update Map Zoom - RegionId: ${this.values.selectedRegion}, DistrictId: ${this.values.selectedDistrict}`);\n\n this.mapElements.mapWrapper!.setAttribute(\"class\", classNames(this.mapElements.mapWrapper!.getAttribute(\"class\"), {\n \"map-zoom-in-progress\": true\n }));\n\n this.isMapZoomInProgress = true;\n\n const oldMapWrapperCurrentWidth = this.values.mapWrapperCurrentWidth;\n const oldMapWrapperCurrentHeight = this.values.mapWrapperCurrentHeight;\n const oldMapCurrentWidth = this.values.mapCurrentWidth;\n const oldMapCurrentHeight = this.values.mapCurrentHeight;\n\n let mapFocusX, mapFocusY, targetWidth, targetHeight, isToTopLevel = false;\n\n if (Helpers.isExists(this.values.nextSelectedRegion)) {\n let coord, targetMaxWidth, targetMaxHeight;\n const additionalEdgeOffsetPerc = 0.05;\n\n if (Helpers.isExists(this.values.nextSelectedDistrict)) {\n const district = this.values.nextSelectedDistrict!;\n\n coord = this.getMapFocusCoord(district.svgElem);\n\n targetMaxWidth = district.maxWidthRelative + district.maxWidthRelative * additionalEdgeOffsetPerc;\n targetMaxHeight = district.maxHeightRelative + district.maxHeightRelative * additionalEdgeOffsetPerc;\n\n const elemBoundingBox = district.svgElem!.getBoundingClientRect();\n\n targetWidth = elemBoundingBox.width;\n targetHeight = elemBoundingBox.height;\n } else {\n const region = this.values.nextSelectedRegion!;\n\n coord = this.getMapFocusCoord(region.svgElem);\n\n targetMaxWidth = region.maxWidthRelative + region.maxWidthRelative * additionalEdgeOffsetPerc;\n targetMaxHeight = region.maxHeightRelative + region.maxHeightRelative * additionalEdgeOffsetPerc;\n\n const elemBoundingBox = region.svgElem!.getBoundingClientRect();\n\n targetWidth = elemBoundingBox.width;\n targetHeight = elemBoundingBox.height;\n }\n\n this.values.mapWrapperCurrentWidth = Helpers.clamp(\n this.values.mapWindowWidth / targetMaxWidth * this.values.mapWrapperMaxWidth,\n this.values.mapWrapperMinWidth,\n this.values.mapWrapperMaxWidth);\n this.values.mapWrapperCurrentHeight = Helpers.clamp(\n this.values.mapWindowHeight / targetMaxHeight * this.values.mapWrapperMaxHeight,\n this.values.mapWrapperMinHeight,\n this.values.mapWrapperMaxHeight);\n\n mapFocusX = coord.x;\n mapFocusY = coord.y;\n } else {\n targetWidth = this.values.mapCurrentWidth;\n targetHeight = this.values.mapCurrentHeight;\n\n mapFocusX = this.values.mapCurrentWidth / 2;\n mapFocusY = this.values.mapCurrentHeight / 2;\n\n this.values.mapWrapperCurrentWidth = this.values.mapWrapperMinWidth;\n this.values.mapWrapperCurrentHeight = this.values.mapWrapperMinHeight;\n\n isToTopLevel = true;\n }\n\n // before map wrapper resize\n const focusXPerc = Helpers.inverseLerp(0, this.values.mapCurrentWidth, mapFocusX);\n const focusYPerc = Helpers.inverseLerp(0, this.values.mapCurrentHeight, mapFocusY);\n\n const wrapper = this.$refs.mapSvgWrapper;\n\n // //const isNeedScaleByHeight = oldMapWrapperCurrentWidth / oldMapWrapperCurrentHeight > oldMapCurrentWidth / oldMapCurrentHeight;\n // const isNeedScaleByHeight11 = oldMapWrapperCurrentWidth / oldMapWrapperCurrentHeight;\n // const isNeedScaleByHeight12 = oldMapCurrentWidth / oldMapCurrentHeight;\n // const isNeedScaleByHeight1 = this.values.mapViewboxWidth / this.values.mapViewboxHeight;\n // const isNeedScaleByHeight2 = this.values.mapWindowWidth / this.values.mapWindowHeight;\n // const isNeedScaleByHeight3 = this.values.mapWindowWidth / this.values.mapWindowHeight > targetWidth / targetHeight;\n // //const isNeedScaleByHeight31 = oldMapWrapperCurrentWidth / this.values.mapWrapperCurrentWidth > oldMapWrapperCurrentHeight / this.values.mapWrapperCurrentHeight;\n //const isNeedScaleByHeight32 = oldMapWrapperCurrentWidth / oldMapCurrentWidth > oldMapWrapperCurrentHeight / oldMapCurrentHeight;\n // // const isNeedScaleByHeight33 = oldMapWrapperCurrentWidth / targetWidth > oldMapWrapperCurrentHeight / targetHeight;\n // // const isNeedScaleByHeight34 = this.values.mapWindowWidth / targetWidth > this.values.mapWindowHeight / targetHeight;\n // const isNeedScaleByHeight35 = this.values.mapWindowWidth / targetWidth > this.values.mapWindowHeight / targetHeight;\n // const isNeedScaleByHeight36 = targetWidth < targetHeight;\n\n // const wrapperScale = isInit ? 1 : (isNeedScaleByHeight3\n // ? this.values.mapWrapperCurrentHeight / oldMapWrapperCurrentHeight\n // : this.values.mapWrapperCurrentWidth / oldMapWrapperCurrentWidth);\n\n const scaleX = this.values.mapWrapperCurrentWidth / oldMapWrapperCurrentWidth;\n const scaleY = this.values.mapWrapperCurrentHeight / oldMapWrapperCurrentHeight;\n\n const targetResultWidthByScaleX = targetWidth * scaleX;\n const targetResultHeightByScaleX = targetHeight * scaleX;\n const targetResultWidthByScaleY = targetWidth * scaleY;\n const targetResultHeightByScaleY = targetHeight * scaleY;\n\n let isNeedScaleByHeight;\n if (targetResultWidthByScaleX > targetResultWidthByScaleY) {\n if (targetResultWidthByScaleX <= this.values.mapWindowWidth && targetResultHeightByScaleX <= this.values.mapWindowHeight) {\n isNeedScaleByHeight = false;\n } else {\n isNeedScaleByHeight = true;\n }\n } else {\n if (targetResultWidthByScaleY <= this.values.mapWindowWidth && targetResultHeightByScaleY <= this.values.mapWindowHeight) {\n isNeedScaleByHeight = true;\n } else {\n isNeedScaleByHeight = false;\n }\n }\n\n let wrapperScale = isInit ? 1 : (isNeedScaleByHeight\n ? this.values.mapWrapperCurrentHeight / oldMapWrapperCurrentHeight\n : this.values.mapWrapperCurrentWidth / oldMapWrapperCurrentWidth);\n\n //console.log(\"oldScale=\", wrapperScale, \"rX=\", scaleX, \", rY=\", scaleY, \"by height=\", scaleY < scaleX);\n\n this.updateMapSize();\n\n if (isInit) {\n this.mapElements.mapWrapper!.setAttribute(\"width\", this.values.mapWrapperCurrentWidth + \"px\");\n this.mapElements.mapWrapper!.setAttribute(\"height\", this.values.mapWrapperCurrentHeight + \"px\");\n\n const mapBounds = this.mapElements.mapAllRegionsGroup!.getBoundingClientRect();\n\n this.values.mapCurrentWidth = mapBounds.width;\n this.values.mapCurrentHeight = mapBounds.height;\n } else {\n const scaleX = this.values.mapWrapperCurrentWidth / oldMapWrapperCurrentWidth;\n const scaleY = this.values.mapWrapperCurrentHeight / oldMapWrapperCurrentHeight;\n\n //console.log(`BEFORE width:${this.values.mapCurrentWidth}, height:${this.values.mapCurrentHeight}, scaleX:${scaleX}, scaleY:${scaleY},\n //mapCurW - W:${this.values.mapCurrentWidth * scaleX}${!isNeedScaleByHeight ? \"(Y)\" : \"\"} H:${this.values.mapCurrentWidth * scaleY}${isNeedScaleByHeight ? \"(Y)\" : \"\"},\n //mapCurH - W:${this.values.mapCurrentHeight * scaleX}${!isNeedScaleByHeight ? \"(Y)\" : \"\"} H:${this.values.mapCurrentHeight * scaleY}${isNeedScaleByHeight ? \"(Y)\" : \"\"}`);\n\n // set approximate values\n this.values.mapCurrentWidth = this.values.mapCurrentWidth * wrapperScale;\n this.values.mapCurrentHeight = this.values.mapCurrentHeight * wrapperScale;\n }\n\n const thisInst = this;\n const setSizesAndScrollPosition = () => {\n //if (thisInst.test >= 2) return;\n //thisInst.test++;\n\n thisInst.commitMapSelection();\n\n thisInst.mapElements.mapWrapper!.setAttribute(\"class\", classNames(thisInst.mapElements.mapWrapper!.getAttribute(\"class\"), {\n \"animation-disable\": true,\n }));\n thisInst.mapElements.mapWrapper!.setAttribute(\"style\", \"\");\n\n thisInst.mapElements.mapWrapper!.setAttribute(\"width\", thisInst.values.mapWrapperCurrentWidth + \"px\");\n thisInst.mapElements.mapWrapper!.setAttribute(\"height\", thisInst.values.mapWrapperCurrentHeight + \"px\");\n\n if (!isInit) {\n const mapBounds = thisInst.mapElements.mapAllRegionsGroup!.getBoundingClientRect();\n\n //console.log(`AFTER mapCurW=${mapBounds.width}, mapCurH=${mapBounds.height}, scale:${mapBounds.width / oldMapCurrentWidth}`);\n\n thisInst.values.mapCurrentWidth = mapBounds.width;\n thisInst.values.mapCurrentHeight = mapBounds.height;\n }\n\n const scrollLeft = (thisInst.values.mapWrapperCurrentWidth - thisInst.values.mapCurrentWidth) / 2 +\n thisInst.values.mapCurrentWidth * focusXPerc - thisInst.values.mapWindowWidth / 2;\n const scrollTop = (thisInst.values.mapWrapperCurrentHeight - thisInst.values.mapCurrentHeight) / 2 +\n thisInst.values.mapCurrentHeight * focusYPerc - thisInst.values.mapWindowHeight / 2;\n\n wrapper.scrollLeft = scrollLeft;\n wrapper.scrollTop = scrollTop;\n // wrapper.scroll({\n // top: scrollTop,\n // left: scrollLeft,\n // behavior: 'smooth'\n // });\n\n thisInst.mapElements.mapWrapper!.setAttribute(\"class\", classNames(thisInst.mapElements.mapWrapper!.getAttribute(\"class\"), {\n \"animation-disable\": false,\n \"map-zoom-in-progress\": false,\n }));\n\n thisInst.isMapZoomInProgress = false;\n\n // update view\n thisInst.updateMapSelectedLinks();\n for (let i = 0; i < thisInst.regions.length; i++) {\n thisInst.regions[i].updateView(false);\n\n for (let j = 0; j < thisInst.regions[i].districts.length; j++) {\n thisInst.regions[i].districts[j].updateView(false);\n }\n }\n };\n\n if (isInit) {\n this.mapElements.mapWrapper!.setAttribute(\"class\", classNames(this.mapElements.mapWrapper!.getAttribute(\"class\"), {\n \"animation-disable\": true\n }));\n }\n\n // update view\n for (let i = 0; i < this.regions.length; i++) {\n const region = this.regions[i];\n const checkRegion = this.isMapZoomedIn ? this.values.nextSelectedRegion : this.values.selectedRegion;\n region.updateView(checkRegion === region);\n\n for (let j = 0; j < region.districts.length; j++) {\n const district = region.districts[j];\n const checkDistrict = this.isMapZoomedIn ? this.values.nextSelectedDistrict : this.values.selectedDistrict;\n\n if (Helpers.isExists(checkDistrict)) {\n district.updateView(checkDistrict === district);\n } else {\n district.updateView(checkRegion === region);\n }\n }\n }\n\n if (isInit || !animation) {\n setSizesAndScrollPosition();\n\n this.mapElements.mapWrapper!.setAttribute(\"class\", classNames(this.mapElements.mapWrapper!.getAttribute(\"class\"), {\n \"animation-disable\": false\n }));\n } else {\n const wrapperBounds = wrapper.getBoundingClientRect();\n const mapBounds = this.mapElements.mapAllRegionsGroup!.getBoundingClientRect();\n\n let currentFocusX = (oldMapWrapperCurrentWidth - oldMapCurrentWidth) / 2 + wrapperBounds.left - mapBounds.left + wrapperBounds.width / 2;\n let currentFocusY = (oldMapWrapperCurrentHeight - oldMapCurrentHeight) / 2 + wrapperBounds.top - mapBounds.top + wrapperBounds.height / 2;\n let newFocusX = (oldMapWrapperCurrentWidth - oldMapCurrentWidth) / 2 + focusXPerc * oldMapCurrentWidth;\n let newFocusY = (oldMapWrapperCurrentHeight - oldMapCurrentHeight) / 2 + focusYPerc * oldMapCurrentHeight;\n let focusOffsetX = currentFocusX - newFocusX;\n let focusOffsetY = currentFocusY - newFocusY;\n\n Helpers.animateScroll(wrapper, wrapper.scrollTop - focusOffsetY, wrapper.scrollLeft - focusOffsetX)\n .then((isAnyScroll) => {\n const mapWrapper = thisInst.mapElements.mapWrapper!;\n\n // todo rewrite\n const testPureCss = true;\n\n if (testPureCss) {\n const transitionEndEventName = thisInst.getTransitionEndEventName();\n\n let isTransitionEnded = false;\n let transitionEnded = () => {\n isTransitionEnded = true;\n //console.log(\"transitionEnded\", isTransitionEnded);\n\n setTimeout(setSizesAndScrollPosition, 50);\n\n mapWrapper.removeEventListener(transitionEndEventName, transitionEnded, false);\n };\n\n //mapWrapper.addEventListener(transitionEndEventName, transitionEnded, false);\n\n if (Helpers.isExists(thisInst.transitionEndTimer)) {\n clearTimeout(thisInst.transitionEndTimer!);\n thisInst.transitionEndTimer = null;\n }\n\n setTimeout(() => {\n //console.log(\"setT\", isTransitionEnded);\n if(!isTransitionEnded){\n transitionEnded();\n }\n }, 1100);\n\n if (!isAnyScroll) {\n mapWrapper.setAttribute(\"style\", `transform: scale(${wrapperScale}) translate(${focusOffsetX}px, ${focusOffsetY}px)`);\n } else {\n mapWrapper.setAttribute(\"style\", `transform: scale(${wrapperScale}); transform-origin: ${newFocusX}px ${newFocusY}px`);\n }\n } else {\n if (!isAnyScroll) {\n anime({\n targets: mapWrapper,\n scale: wrapperScale,\n translateX: `${focusOffsetX}px`,\n translateY: `${focusOffsetY}px`,\n duration: 1000,\n easing: 'easeInOutSine',\n complete: (anim: any) => {\n if (anim.completed) {\n setSizesAndScrollPosition();\n }\n }\n });\n } else {\n anime({\n targets: mapWrapper,\n scale: wrapperScale,\n transformOrigin: `${newFocusX}px ${newFocusY}px 0px`,\n duration: 1000,\n easing: 'easeInOutSine',\n complete: (anim: any) => {\n if (anim.completed) {\n setSizesAndScrollPosition();\n }\n }\n });\n }\n }\n });\n }\n }\n\n //test = 0;\n\n findMapRegion(regionMapId: number) : InteractiveMapData_Region | undefined {\n return this.regions.find((e) => {\n return e.mapId === regionMapId;\n });\n }\n\n findMapDistrict(regionMapId: number, districtMapId: number) : InteractiveMapData_District | undefined | null {\n const region = this.findMapRegion(regionMapId);\n\n if (Helpers.isExists(region)) {\n return region!.districts.find((e) => {\n return e.mapId === districtMapId;\n });\n } else {\n return null;\n }\n }\n\n findMapElement(element: SVGGElement) : InteractiveMapData_Region | InteractiveMapData_District | null {\n const elemIds = element.id.split(\"_\");\n const regionMapId = Number(elemIds[0].substr(1));\n const districtMapId = Number(elemIds[1].substr(1));\n\n if (this.$helpers.isNumeric(regionMapId) &&\n this.$helpers.isNumeric(districtMapId)) {\n for (let i = 0; i < this.regions.length; i++) {\n let region = this.regions[i];\n\n if (region.mapId === regionMapId) {\n for (let j = 0; j < region.districts.length; j++) {\n let district = region.districts[j];\n\n if (district.mapId === districtMapId) return district;\n }\n\n return region;\n }\n }\n }\n\n return null;\n }\n\n findDistrictsSvgElements(regionMapId: number) : { container: SVGGElement, districts: SVGGElement[] } {\n let districts: SVGGElement[] = [];\n\n const regionDistrictsContainer: SVGGElement | null = document.getElementById(`r${regionMapId}_d_all`) as unknown as SVGGElement;\n\n if (this.$helpers.isExists(regionDistrictsContainer)) {\n for(let child in regionDistrictsContainer!.childNodes) {\n if (regionDistrictsContainer!.childNodes[child].nodeType === 1) {\n districts.push(regionDistrictsContainer!.childNodes[child] as SVGGElement)\n }\n }\n }\n\n return {\n container: regionDistrictsContainer,\n districts: districts\n };\n }\n\n findSvgElement(regionMapId: number, districtMapId: number | null) : SVGGElement {\n if (!Helpers.isExists(this.mapElements.map!)) throw new Error(\"mapSvg is null\");\n\n let selector = \"r\" + regionMapId;\n\n if (Helpers.isNumeric(districtMapId)) {\n selector += \"_d\" + districtMapId;\n }\n\n const elem: HTMLElement | null = document.getElementById(selector);\n\n if (Helpers.isExists(elem)) {\n return elem!;\n }\n\n throw new Error(`Can't find svg element - regionMapId: ${regionMapId}, districtMapId: ${districtMapId}`)\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractiveMap.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractiveMap.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./InteractiveMap.vue?vue&type=template&id=b812027a&\"\nimport script from \"./InteractiveMap.vue?vue&type=script&lang=ts&\"\nexport * from \"./InteractiveMap.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./InteractiveMap.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\nimport axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\r\nimport { AuthModule } from \"@/store/modules/auth\"\r\nimport * as types from \"@/store/types\"\r\nimport Helpers from '@/helpers'\r\nimport { UserAuthDto } from '@/global'\r\nimport router from '@/router'\r\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\r\n\r\nexport default class HttpClient {\r\n private static axiosInstance: AxiosInstance;\r\n \r\n private static tryInit() {\r\n if (!Helpers.isExists(this.axiosInstance)) {\r\n const userInfo = AuthModule.obtainUserInfo();\r\n \r\n const instance = axios.create({\r\n baseURL: '/',\r\n headers: {\r\n 'Authorization': `Bearer ${Helpers.isExists(userInfo) ? userInfo!.token : ''}`\r\n }\r\n });\r\n \r\n this.axiosInstance = instance\r\n }\r\n }\r\n static get(url: string, config?: AxiosRequestConfig) {\r\n HttpClient.tryInit();\r\n \r\n return this.axiosInstance.get(url, config)\r\n .then((resp) => {\r\n return Promise.resolve(resp)\r\n })\r\n // @ts-ignore\r\n .catch((resp) => {\r\n if (resp.response !== undefined &&\r\n (resp.response.status == 401 ||\r\n resp.response.status == 403 ||\r\n resp.response.status == 405)) {\r\n HttpClient.logoutUser();\r\n } else {\r\n return Promise.reject(resp)\r\n }})\r\n }\r\n static post(url: string, data?: any, config?: AxiosRequestConfig) {\r\n HttpClient.tryInit();\r\n \r\n return this.axiosInstance.post(url, data, config)\r\n .then((resp) => {\r\n return Promise.resolve(resp)\r\n })\r\n // @ts-ignore\r\n .catch((resp) => {\r\n if (resp.response !== undefined &&\r\n (resp.response.status == 401 ||\r\n resp.response.status == 403 ||\r\n resp.response.status == 405)) {\r\n HttpClient.logoutUser();\r\n } else {\r\n return Promise.reject(resp)\r\n }})\r\n }\r\n static setAuthToken(token: string) {\r\n HttpClient.tryInit();\r\n \r\n if (Helpers.isNotEmpty(token)) {\r\n this.axiosInstance.defaults.headers = { 'Authorization': `Bearer ${token}` }\r\n } else {\r\n this.axiosInstance.defaults.headers = {}\r\n }\r\n }\r\n \r\n private static logoutUser() {\r\n // trigger global event\r\n EventBus.$emit(EventBusModel.logoutEventName);\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ 'is-screen-height-page': _vm.$route.meta.isScreenHeightPage },attrs:{\"id\":\"app\"}},[_c('router-view')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import vars from '@/assets/scss/variables-reference.scss';\n\n// MAIN COLORS - THEME COLORS\nlet colors = {\n\tprimary: vars.primary,\n\tsuccess: vars.success,\n\tdanger: vars.danger,\n\twarning: vars.warning,\n\tdark: vars.dark,\n};\n\n// CONFIGS\nconst themeConfig = {\n\ttheme: 'light',\t\t\t\t\t\t// options[String]: 'light'(default), 'dark', 'semi-dark'\n\tsidebarCollapsed: false,\t\t\t// options[Boolean]: true, false(default)\n\tnavbarColor: \"#fff\",\t\t\t\t// options[String]: HEX color / rgb / rgba / Valid HTML Color name - (default: #fff)\n\tnavbarType: \"floating\",\t\t\t\t// options[String]: floating(default) / static / sticky / hidden\n\tfooterType: \"static\",\t\t\t\t// options[String]: static(default) / sticky / hidden\n\trouterTransition: 'zoom-fade',\t\t// options[String]: zoom-fade / slide-fade / fade-bottom / fade / zoom-out / none(default)\n\tdisableCustomizer: false,\t\t\t// options[Boolean]: true, false(default)\n\thideScrollToTop: false,\t\t\t\t// options[Boolean]: true, false(default)\n\tdisableThemeTour: false,\t\t\t\t\t// options[Boolean]: true, false(default)\n // NOTE: themeTour will be disabled in screens < 1200. Please refer docs for more info.\n};\n\nexport default themeConfig\n","import { Module, VuexModule, Mutation, Action, getModule } from 'vuex-module-decorators'\r\nimport * as types from '@/store/types'\r\n// @ts-ignore\r\nimport themeConfig from '@/../themeConfig'\r\nimport store from \"@/store/root\";\r\nimport Helpers from '@/helpers'\r\n\r\nexport interface IUiState {\r\n isSidebarActive: boolean\r\n breakpoint: any\r\n sidebarWidth: string | number\r\n reduceButton: any\r\n bodyOverlay: boolean\r\n sidebarItemsMin: boolean\r\n theme: string\r\n \r\n themePrimaryColor: string\r\n \r\n // Can be used to get current window with\r\n // Note: Above breakpoint state is for internal use of sidebar component\r\n windowWidth: number | null\r\n windowHeight: number | null\r\n \r\n [types.UPDATE_SIDEBAR_WIDTH](width: string | number): void;\r\n [types.UPDATE_SIDEBAR_ITEMS_MIN](val: boolean): void;\r\n [types.TOGGLE_REDUCE_BUTTON](val: any): void;\r\n [types.TOGGLE_CONTENT_OVERLAY](val: boolean): void;\r\n [types.TOGGLE_IS_SIDEBAR_ACTIVE](val: boolean): void;\r\n [types.UPDATE_THEME](val: string): void;\r\n [types.UPDATE_WINDOW_BREAKPOINT](val: string): void;\r\n [types.UPDATE_PRIMARY_COLOR](val: string): void;\r\n [types.UPDATE_WINDOW_SIZE](payload: UpdateWindowSizePayload): void;\r\n}\r\n\r\nexport interface UpdateWindowSizePayload {\r\n width: number | null\r\n height: number | null\r\n}\r\n\r\n@Module({ dynamic: true, store, name: 'ui' })\r\nexport default class Ui extends VuexModule implements IUiState {\r\n isSidebarActive = false;\r\n breakpoint = null;\r\n sidebarWidth: string | number = \"no-sidebar\";\r\n reduceButton: any = themeConfig.sidebarCollapsed;\r\n bodyOverlay = false;\r\n sidebarItemsMin = false;\r\n theme = themeConfig.theme || 'light';\r\n \r\n themePrimaryColor = themeConfig.primary;\r\n \r\n windowWidth: number | null = null;\r\n windowHeight: number | null = null;\r\n \r\n @Mutation\r\n UPDATE_SIDEBAR_WIDTH(width: string | number) {\r\n this.sidebarWidth = width;\r\n }\r\n \r\n @Mutation\r\n UPDATE_SIDEBAR_ITEMS_MIN(val: boolean) {\r\n this.sidebarItemsMin = val;\r\n }\r\n \r\n @Mutation\r\n TOGGLE_REDUCE_BUTTON(val: any) {\r\n this.reduceButton = val;\r\n }\r\n \r\n @Mutation\r\n TOGGLE_CONTENT_OVERLAY(val: boolean) {\r\n this.bodyOverlay = val;\r\n }\r\n \r\n @Mutation\r\n TOGGLE_IS_SIDEBAR_ACTIVE(val: boolean) {\r\n this.isSidebarActive = val;\r\n }\r\n \r\n @Mutation\r\n UPDATE_THEME(val: string) {\r\n this.theme = val;\r\n }\r\n \r\n @Mutation\r\n UPDATE_WINDOW_BREAKPOINT(val: any) {\r\n this.breakpoint = val;\r\n }\r\n \r\n @Mutation\r\n UPDATE_PRIMARY_COLOR(val: string) {\r\n this.themePrimaryColor = val;\r\n }\r\n \r\n @Mutation\r\n UPDATE_WINDOW_SIZE(payload: UpdateWindowSizePayload) {\r\n this.windowWidth = payload.width;\r\n this.windowHeight = payload.height;\r\n }\r\n \r\n @Action({ commit: types.UPDATE_SIDEBAR_WIDTH })\r\n updateSidebarWidth(width: string | number) {\r\n return width;\r\n }\r\n \r\n @Action({ commit: types.TOGGLE_CONTENT_OVERLAY })\r\n toggleContentOverlay() {\r\n }\r\n \r\n @Action({ commit: types.UPDATE_THEME })\r\n updateTheme(val: string) {\r\n return val;\r\n }\r\n \r\n @Action({ commit: types.UPDATE_WINDOW_SIZE })\r\n updateWindowSize(payload: UpdateWindowSizePayload) {\r\n return payload;\r\n }\r\n}\r\n\r\nexport const UiModule = getModule(Ui);\r\n","\n\n\n\n\n\n\n\nimport * as types from './store/types'\nimport { Component, Prop, Watch, Vue } from 'vue-property-decorator'\n\nimport themeConfig from './../themeConfig'\nimport { AuthModule } from \"@/store/modules/auth\"\nimport { UiModule } from \"@/store/modules/ui\"\nimport store from \"@/store/root\"\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\n// css vars support in IE11\nimport cssVars from 'css-vars-ponyfill';\n// @ts-ignore\nimport classNames from 'classnames/dedupe'\n\n@Component\nexport default class App extends Vue {\n hasCSSVarSupport = typeof window !== 'undefined' && window.CSS && window.CSS.supports && window.CSS.supports('(--a: 0)');\n\n @Watch('$store.state.ui.theme')\n onUiThemeChanged(val: string, oldVal: string) {\n this.toggleClassInBody(val);\n }\n\n created() {\n AuthModule.tryInitAuthUser({\n acl: this.$acl\n });\n\n // global event\n EventBus.$on(EventBusModel.logoutEventName, this.logoutEvent);\n }\n\n mounted() {\n this.toggleClassInBody(themeConfig.theme);\n this.$nextTick(() => {\n window.addEventListener('resize', this.handleWindowResize);\n window.addEventListener('orientationchange', this.handleOrientationChange);\n });\n\n this.initAppSizes();\n }\n\n beforeDestroy() {\n // global event\n this.$off(EventBusModel.logoutEventName, this.logoutEvent);\n\n window.removeEventListener('resize', this.handleWindowResize);\n window.removeEventListener('orientationchange', this.handleOrientationChange);\n }\n\n private logoutEvent() {\n AuthModule.logout({\n acl: this.$acl\n });\n\n this.$router.push('/login');\n }\n\n toggleClassInBody(className: string) {\n if (className == 'dark') {\n if (document.body.className.match('theme-semi-dark')) document.body.classList.remove('theme-semi-dark');\n document.body.classList.add('theme-dark');\n } else if (className == 'semi-dark') {\n if (document.body.className.match('theme-dark')) document.body.classList.remove('theme-dark');\n document.body.classList.add('theme-semi-dark');\n } else {\n if (document.body.className.match('theme-dark')) document.body.classList.remove('theme-dark');\n if (document.body.className.match('theme-semi-dark')) document.body.classList.remove('theme-semi-dark');\n }\n }\n\n initAppSizes() {\n this.tryUpdateWindowSize(true);\n // required for mobile\n this.setBodyMobileClasses();\n }\n\n tryUpdateWindowSize(isInit: boolean) {\n const newWidth = window.innerWidth;\n const newHeight = window.innerHeight;\n\n if (UiModule.windowWidth !== newWidth ||\n UiModule.windowHeight !== newHeight) {\n UiModule.updateWindowSize({\n width: newWidth,\n height:newHeight\n });\n\n let vh = newHeight * 0.01;\n\n // required for mobile\n if (isInit) {\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n }\n\n this.changeVhVariable(vh, () => {\n EventBus.$emit(EventBusModel.afterWindowResizeCompletedEventName);\n });\n }\n }\n\n changeVhVariable(vh: number, afterChangeCb: () => void) {\n cssVars({\n variables: { '--vh': `${vh}px` },\n onComplete: (cssText, styleElms, cssVariables, benchmark) => {\n if (afterChangeCb) {\n afterChangeCb();\n }\n }\n });\n\n if (this.hasCSSVarSupport) {\n if (afterChangeCb) {\n afterChangeCb();\n }\n }\n }\n\n handleWindowResize() {\n this.tryUpdateWindowSize(false);\n }\n\n handleOrientationChange() {\n this.$helpers.orientationChanged().then(() => {\n this.setBodyMobileClasses();\n this.tryUpdateWindowSize(false);\n });\n }\n\n setBodyMobileClasses() {\n let isLandscape = window.innerWidth > window.innerHeight;\n document.body.className = classNames(document.body.className, {\n \"orientation-portrait\": !isLandscape,\n });\n }\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=65d5be2a&\"\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&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\nimport Helpers from '@/helpers'\r\nimport {FilePreviewDto} from \"@/global\";\r\nimport * as enums from '@/global-enum'\r\nimport filesApi from '@/api/files'\r\n\r\nexport class FilesModel {\r\n public smallAvatarVersion = 1;\r\n public largeAvatarVersion = 2;\r\n \r\n private generateUrl(id: string, version: number | null, postfix: string = \"\", defaultUrl: string = \"\"): string {\r\n if (Helpers.isNotEmpty(id)) {\r\n if (Helpers.isNumeric(version)) {\r\n return `/api/files/${id}_${version}${postfix}`;\r\n } else {\r\n return `/api/files/${id}${postfix}`;\r\n }\r\n } else {\r\n return `${defaultUrl || \"\"}${postfix}`;\r\n }\r\n }\r\n \r\n url(id: string, version: number | null): string {\r\n return this.generateUrl(id, version || null);\r\n }\r\n \r\n previewUrl(filePreview: FilePreviewDto | null): string {\r\n if (!Helpers.isExists(filePreview)) return \"\";\r\n return this.generateUrl(filePreview!.id, filePreview!.version || null, `/${filePreview!.fileName}${filePreview!.fileExtension}`);\r\n }\r\n \r\n imageUrl(id: string, version: number | null): string {\r\n return this.generateUrl(id, version || null, \"\", \"/images/image-placeholder.png\");\r\n }\r\n \r\n avatarImageUrl(id: string, version?: number | null | undefined) {\r\n return this.generateUrl(id, version || null, \"\", \"/images/avatar-placeholder.png\");\r\n }\r\n \r\n \r\n}\r\n\r\nconst m = new FilesModel();\r\nexport default m;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"content app-content\"},[_c('div',{staticClass:\"content-overlay\"}),_c('app-navbar'),_c('div',{staticClass:\"content-wrapper\"},[_c('transition',{attrs:{\"name\":_vm.routerTransition}},[_c('b-container',[(_vm.$helpers.isNotEmpty(_vm.$route.meta.pageTitle))?_c('b-row',{staticClass:\"content-header\"},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('h2',{staticClass:\"content-header-title text-center\"},[_c('portal-target',{attrs:{\"name\":\"main-page-title\",\"slot-props\":{ pageTitle: _vm.$route.meta.pageTitle }}},[_vm._v(\"\\n \"+_vm._s(_vm.$route.meta.pageTitle)+\"\\n \")])],1)])],1):_vm._e()],1)],1),_c('div',{staticClass:\"content-body pb-2\"},[(!_vm.hideScrollToTop)?_c('back-to-top',{attrs:{\"bottom\":\"5%\",\"visibleoffset\":\"500\"}},[_c('b-button',{staticClass:\"btn-icon\",attrs:{\"variant\":\"primary\",\"size\":\"lg\",\"pill\":\"\"}},[_c('i',{staticClass:\"feather lg-icon icon-arrow-up\"})])],1):_vm._e(),_c('transition',{attrs:{\"name\":_vm.routerTransition,\"mode\":\"out-in\"}},[_c('router-view')],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"header-navbar-shadow\"}),_c('nav',{staticClass:\"header-navbar navbar-expand-sm navbar navbar-with-menu floating-nav navbar-light navbar-shadow\"},[_c('div',{staticClass:\"navbar-wrapper\"},[_c('div',{staticClass:\"navbar-container content\"},[_c('div',{staticClass:\"navbar-collapse justify-content-between\",attrs:{\"id\":\"navbar-mobile\"}},[_c('div',{staticClass:\"bookmark-wrapper\"},[_c('ul',{staticClass:\"nav navbar-nav\"},_vm._l((_vm.menuItems),function(item,index){return _c('router-link',{key:item.url,staticClass:\"nav-item d-none d-sm-block\",attrs:{\"tag\":\"li\",\"to\":item.isSeparator ? '' : item.url,\"exact\":index === 0}},[(item.isSeparator)?_c('span',{staticClass:\"separator\"}):_vm._e(),(!item.isSeparator)?_c('b-link',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"nav-link\",attrs:{\"href\":item.url,\"title\":item.title}},[_c('i',{staticClass:\"ficon feather\",class:item.icon})]):_vm._e()],1)}),1)]),(_vm.$helpers.isExists(_vm.activeCallee))?_c('div',{staticClass:\"callee-container\"},[_c('UserInfoSection',{attrs:{\"user\":_vm.activeCallee,\"disable-make-call\":\"\"}})],1):_vm._e(),_c('b-nav',{},[(false)?_c('b-nav-item-dropdown',{staticClass:\"dropdown-notification\",attrs:{\"toggle-class\":\"nav-link-label\",\"right\":\"\",\"menu-class\":\"dropdown-menu-media\",\"router-tag\":\"li\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('i',{staticClass:\"ficon feather icon-bell\"}),_c('span',{staticClass:\"badge badge-pill badge-primary badge-up\"},[_vm._v(\"5\")])]},proxy:true}],null,false,2393236001)},[_c('b-dropdown-text',{staticClass:\"b-dropdown-text-revert dropdown-menu-header\",attrs:{\"tag\":\"div\"}},[_c('div',{staticClass:\"dropdown-header m-0 p-2\"},[_c('h3',{staticClass:\"white\"},[_vm._v(\"5 New\")]),_c('span',{staticClass:\"grey darken-2\"},[_vm._v(\"App Notifications\")])])]),_c('b-dropdown-text',{staticClass:\"b-dropdown-text-revert\",attrs:{\"tag\":\"div\"}},[_c('vue-perfect-scrollbar',{attrs:{\"settings\":_vm.psSettings}},[_c('div',{staticClass:\"scrollable-container media-list\"},_vm._l((_vm.unreadNotifications),function(n){return _c('a',{key:n.index,staticClass:\"d-flex justify-content-between\",attrs:{\"href\":\"javascript:void(0)\"}},[_c('div',{staticClass:\"media d-flex align-items-start\"},[_c('div',{staticClass:\"media-left\"},[_c('i',{staticClass:\"feather font-medium-5\",class:[n.icon, n.category]})]),_c('div',{staticClass:\"media-body\"},[_c('h6',{staticClass:\"media-heading\",class:n.category},[_vm._v(_vm._s(n.title))]),_c('small',{staticClass:\"notification-text\"},[_vm._v(_vm._s(n.msg))])]),_c('small',[_c('time',{staticClass:\"media-meta\",attrs:{\"datetime\":n.time}},[_vm._v(_vm._s(_vm._f(\"moment\")(n.time,\"from\")))])])])])}),0)])],1)],1):_vm._e(),_c('b-nav-item-dropdown',{staticClass:\"dropdown-user\",attrs:{\"toggle-class\":['dropdown-user-link', _vm.$acl.check('systemAdmin') ? 'pr-0' : ''],\"right\":\"\"}},[_c('template',{slot:\"button-content\"},[_c('div',{staticClass:\"user-nav d-sm-flex d-none\"},[_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"user-name text-bold-600\",attrs:{\"title\":_vm.userInfo.fullName}},[_vm._v(\"\\n \"+_vm._s(_vm.userDisplayName)+\"\\n \")]),_c('span',{staticClass:\"user-status\"},[_vm._v(\"тел. \"+_vm._s(_vm.userInfo.fullMainPhoneNumberFormatted))])]),_c('span',[_c('img',{staticClass:\"round\",attrs:{\"alt\":\"avatar\",\"src\":_vm.$files.avatarImageUrl(_vm.userInfo.avatarFileId, _vm.$files.smallAvatarVersion),\"height\":_vm.$const.avatarSmallImageSize,\"width\":_vm.$const.avatarSmallImageSize}})])]),_c('b-dropdown-item',{attrs:{\"to\":{ name: 'profile' }}},[_c('i',{staticClass:\"feather icon-user\"}),_vm._v(\" Профіль\\n \")]),_c('b-dropdown-divider'),_c('b-dropdown-item',{on:{\"click\":_vm.logout}},[_c('i',{staticClass:\"feather icon-power\"}),_vm._v(\" Вийти\\n \")])],2),(_vm.$acl.check('systemAdmin'))?_c('b-nav-text',[_c('HealthCheckIndicator')],1):_vm._e()],1)],1)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex justify-content-start align-items-center mb-50\"},[_vm._t(\"before-avatar\"),_c('div',{staticClass:\"avatar cursor-pointer mr-50\",on:{\"click\":function($event){return _vm.openUserDetails(_vm.user)}}},[_c('img',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],attrs:{\"alt\":\"avatar\",\"src\":_vm.$files.avatarImageUrl(_vm.user.avatarFileId, _vm.$files.smallAvatarVersion),\"height\":_vm.$const.avatarSmallImageSize,\"width\":_vm.$const.avatarSmallImageSize,\"title\":_vm.isReadonlyUser ? '' : 'Натисніть для інформації'}})]),_c('div',{staticClass:\"user-page-info mr-3\"},[_c('h6',{staticClass:\"mb-0\"},[_c('span',{class:{ 'hover-underline cursor-pointer': !_vm.isReadonlyUser },on:{\"click\":function($event){return _vm.openUserDetails(_vm.user)}}},[_vm._v(_vm._s(_vm.user.fullName))]),(!_vm.isReadonlyUser)?_c('UserInFavoritesToggle',{staticClass:\"ml-25\",attrs:{\"userId\":_vm.user.id,\"isInFavorites\":_vm.user.isInFavorites}}):_vm._e()],1),_c('span',{staticClass:\"font-small-2\"},[_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],attrs:{\"title\":_vm.mapPositionSubstringTitle},domProps:{\"textContent\":_vm._s(_vm.mapPositionSubstringText)}}),_vm._v(\",\\n \"),_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],attrs:{\"title\":_vm.organizationSubstringTitle},domProps:{\"textContent\":_vm._s(_vm.organizationSubstringText)}}),_vm._v(\",\\n \"+_vm._s(_vm.user.positionName)+\"\\n \")])]),(!_vm.$props.disableMakeCall && !_vm.isReadonlyUser)?_c('b-button',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isCallingToUser),expression:\"!isCallingToUser\"}],staticClass:\"ml-auto btn-icon mr-2\",attrs:{\"variant\":\"success\",\"pill\":\"\",\"disabled\":_vm.isCallsBlocked},on:{\"click\":function($event){return _vm.makeCall(_vm.user.id)}}},[_c('i',{staticClass:\"feather icon-phone\"})]):_vm._e(),(!_vm.isReadonlyUser)?_c('b-button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isCallingToUser),expression:\"isCallingToUser\"}],staticClass:\"ml-auto btn-icon mr-2 phone-cancel-button\",attrs:{\"variant\":\"danger\",\"pill\":\"\"},on:{\"click\":function($event){return _vm.cancelCall(_vm.user.id)}}},[_c('i',{staticClass:\"feather icon-phone\"})]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport {UserItemDto} from \"@/global\";\nimport * as enums from '@/global-enum'\nimport UserInFavoritesToggle from \"@/components/UserInFavoritesToggle.vue\";\nimport {TelephonyModule} from \"@/store/modules/telephony\";\n\n@Component({\n components: {\n UserInFavoritesToggle\n }\n})\nexport default class UserInfoSection extends Vue {\n @Prop(Object) user: UserItemDto | undefined;\n @Prop(Boolean) disableMakeCall: boolean | undefined;\n\n get isCallsBlocked() {\n return TelephonyModule.isCallsBlocked;\n }\n get isCallingToUser() {\n return this.$helpers.isExists(this.user) && TelephonyModule.currentCalleeId === this.user!.id;\n }\n\n get isReadonlyUser() {\n return !this.$helpers.isExists(this.user) || !this.$helpers.isNumeric(this.user!.id);\n }\n\n get mapPositionSubstringTitle() {\n if (!this.$helpers.isExists(this.user)) return \"\";\n\n return [\n this.$appUtils.getMapElementName(enums.MapElementType_Region, { name: this.user!.mapRegionName }, true),\n this.$appUtils.getMapElementName(enums.MapElementType_District, { name: this.user!.mapDistrictName }, true),\n this.$appUtils.getMapElementName(enums.MapElementType_Point, { name: this.user!.mapPointName }, true),\n ].filter(x => this.$helpers.isNotEmpty(x)).join(\", \");\n }\n\n get mapPositionSubstringText() {\n if (!this.$helpers.isExists(this.user)) return \"\";\n\n if (this.$helpers.isNotEmpty(this.user!.mapPointName)) {\n return this.$appUtils.getMapElementName(enums.MapElementType_Point, { name: this.user!.mapPointName });\n } else if (this.$helpers.isNotEmpty(this.user!.mapDistrictName)) {\n return this.$appUtils.getMapElementName(enums.MapElementType_District, { name: this.user!.mapDistrictName });\n } else {\n return this.$appUtils.getMapElementName(enums.MapElementType_Region, { name: this.user!.mapRegionName });\n }\n }\n\n get organizationSubstringTitle() {\n if (!this.$helpers.isExists(this.user)) return \"\";\n\n return this.user!.organizationFullName;\n }\n\n get organizationSubstringText() {\n if (!this.$helpers.isExists(this.user)) return \"\";\n\n return this.user!.organizationShortName;\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n openUserDetails(user: UserItemDto) {\n if (this.$helpers.isExists(user) && this.$helpers.isNumeric(user!.id)) {\n this.$appUtils.openUserDetailsPopup(this.$root, user.id!);\n }\n }\n\n makeCall(toUserId: number | null) {\n if (this.$helpers.isNumeric(toUserId)) {\n TelephonyModule.makeCall({\n toUserId: toUserId!,\n showError: this.showError\n })\n }\n }\n\n cancelCall(toUserId: number | null) {\n if (this.$helpers.isNumeric(toUserId)) {\n TelephonyModule.cancelCall({\n toUserId: toUserId!,\n showError: this.showError\n })\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserInfoSection.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserInfoSection.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./UserInfoSection.vue?vue&type=template&id=f8b23f24&scoped=true&\"\nimport script from \"./UserInfoSection.vue?vue&type=script&lang=ts&\"\nexport * from \"./UserInfoSection.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f8b23f24\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex flex-column mt-50\",attrs:{\"id\":\"health-check-indicator\"},on:{\"click\":function($event){_vm.isTooltipVisible = !_vm.isTooltipVisible}}},[_c('b-tooltip',{attrs:{\"target\":\"health-check-indicator\",\"triggers\":\"manual\",\"show\":_vm.isTooltipVisible}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.statusesTitle)}})]),_c('span',{staticClass:\"dot mx-auto\",class:_vm.$helpers.isBoolean(_vm.isDatabaseOk) ? (_vm.isDatabaseOk ? 'bg-success' : 'bg-danger') : 'bg-secondary'}),_c('span',{staticClass:\"dot mx-auto\",class:_vm.$helpers.isBoolean(_vm.isRedisOk) ? (_vm.isRedisOk ? 'bg-success' : 'bg-danger') : 'bg-secondary'}),_c('span',{staticClass:\"dot mx-auto\",class:_vm.$helpers.isBoolean(_vm.isTelephonyServiceOk) ? (_vm.isTelephonyServiceOk ? 'bg-success' : 'bg-danger') : 'bg-secondary'})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Prop, Vue, Watch} from 'vue-property-decorator'\nimport adminPanelApi from '@/api/admin-panel'\nimport * as aclTypes from '@/plugins/acl-types'\n\n@Component\nexport default class HealthCheckIndicator extends Vue {\n isTooltipVisible = false;\n\n isChecking = false;\n checkTimer: any = null;\n lastCheckError: string | null = null;\n\n masterServerNumber: number | null = null;\n isDatabaseOk: boolean | null = null;\n isRedisOk: boolean | null = null;\n isTelephonyServiceOk: boolean | null = null;\n\n get statusesTitle() {\n if (this.$helpers.isNotEmpty(this.lastCheckError)) return this.lastCheckError;\n\n let statuses: { isOk: boolean | null, text: string }[] = [];\n\n if (this.$helpers.isNumeric(this.masterServerNumber)) {\n statuses.push({\n isOk: null,\n text: `Сервер #${this.masterServerNumber} виконує роль master-а`\n });\n }\n\n if (this.$helpers.isBoolean(this.isDatabaseOk)) {\n statuses.push({\n isOk: this.isDatabaseOk!,\n text: this.isDatabaseOk ? 'PostgreSQL працює та доступен' : 'PostgreSQL не працює чи не доступен'\n });\n }\n\n if (this.$helpers.isBoolean(this.isRedisOk)) {\n statuses.push({\n isOk: this.isRedisOk!,\n text: this.isRedisOk ? 'Redis працює та доступен' : 'Redis не працює чи не доступен'\n });\n }\n\n if (this.$helpers.isBoolean(this.isTelephonyServiceOk)) {\n statuses.push({\n isOk: this.isTelephonyServiceOk!,\n text: this.isTelephonyServiceOk ? 'Сервіс Телефонії працює та доступен' : 'Сервіс Телефонії не працює чи не доступен'\n });\n }\n\n let title = \"\";\n\n for (let i = 0; i < statuses.length; i++) {\n const status = statuses[i];\n title += `
${status.text}
`\n }\n\n return title;\n }\n\n created() {\n this.healthCheck();\n this.checkTimer = setInterval(this.healthCheck, 10000);\n }\n\n beforeDestroy() {\n if (this.$helpers.isExists(this.checkTimer)) {\n clearInterval(this.checkTimer);\n }\n }\n\n healthCheck() {\n if (!this.$acl.check(aclTypes.AccessRules_SystemAdmin) || this.isChecking) return;\n\n this.isChecking = true;\n\n adminPanelApi.healthCheck(data => {\n this.masterServerNumber = data.masterServerNumber;\n this.isDatabaseOk = data.isLocalPostgreSQLOperating;\n this.isRedisOk = data.isLocalRedisOperating;\n this.isTelephonyServiceOk = data.isLocalTelephonyServiceOperating;\n\n this.lastCheckError = null;\n this.isChecking = false;\n }, errorMessage => {\n this.lastCheckError = errorMessage || \"Виникла помилка при перевірці\";\n this.isChecking = false;\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HealthCheckIndicator.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HealthCheckIndicator.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./HealthCheckIndicator.vue?vue&type=template&id=1d9c050c&scoped=true&\"\nimport script from \"./HealthCheckIndicator.vue?vue&type=script&lang=ts&\"\nexport * from \"./HealthCheckIndicator.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./HealthCheckIndicator.vue?vue&type=style&index=0&id=1d9c050c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d9c050c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Watch, Vue } from 'vue-property-decorator'\nimport {AuthModule} from \"@/store/modules/auth\";\nimport {UiModule} from \"@/store/modules/ui\";\nimport Helpers from \"@/helpers\";\nimport * as aclTypes from \"@/plugins/acl-types\";\nimport {UserAuthDto, UserItemDto} from \"@/global\";\nimport * as enums from \"@/global-enum\";\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\nimport UserInfoSection from \"@/views/home/UserInfoSection.vue\";\nimport {TelephonyModule} from \"@/store/modules/telephony\";\nimport HealthCheckIndicator from \"@/components/HealthCheckIndicator.vue\";\n\ninterface MenuItem {\n isSeparator: boolean\n url?: string\n title?: string\n icon?: string\n}\n\n@Component({\n components: {\n HealthCheckIndicator,\n UserInfoSection\n }\n})\nexport default class AppNavbar extends Vue {\n unreadNotifications = [\n { index: 0, title: 'New Message', msg: 'Are your going to meet me tonight?', icon: 'icon-message-square', time: new Date('Wed Jan 30 2019 07:45:23 GMT+0000 (GMT)'), category: 'primary' },\n { index: 1, title: 'New Order Recieved', msg: 'You got new order of goods.', icon: 'icon-package', time: new Date(new Date().getTime() - (124 * 60 * 60 * 1000)), category: 'success' },\n { index: 2, title: 'Server Limit Reached!', msg: 'Server have 99% CPU usage.', icon: 'icon-alert-octagon', time: new Date(new Date().getTime() - (48 * 60 * 60 * 1000)), category: 'danger' },\n { index: 3, title: 'New Mail From Peter', msg: 'Cake sesame snaps cupcake', icon: 'icon-mail', time: new Date(new Date().getTime() - (24 * 60 * 60 * 1000)), category: 'primary' },\n { index: 4, title: 'Bruce\\'s Party', msg: 'Chocolate cake oat cake tiramisu', icon: 'icon-calendar', time: new Date(new Date().getTime() - (1 * 60 * 60 * 1000)), category: 'warning' },\n ];\n psSettings = {\n maxScrollbarLength: 60,\n wheelSpeed: .60,\n };\n\n menuItems = [];\n\n activeCallee: UserItemDto | null = null;\n\n created() {\n // first time\n this.onAclRolesUpdate();\n\n // global event\n EventBus.$on(EventBusModel.controllableCallStartedEventName, this.callStarted);\n EventBus.$on(EventBusModel.controllableCallEndedEventName, this.callEnded);\n }\n\n beforeDestroy(){\n EventBus.$off(EventBusModel.controllableCallStartedEventName, this.callStarted);\n EventBus.$off(EventBusModel.controllableCallEndedEventName, this.callEnded);\n }\n\n get userDisplayName(): string {\n const userInfo = this.userInfo;\n\n if (this.$helpers.isExists(userInfo)) {\n const adminAccessesString = this.$appUtils.getAdminAccesses(userInfo!.accesses.map(x => x.type));\n\n if (this.$helpers.isNotEmpty(adminAccessesString)) {\n return `(${adminAccessesString}) ${userInfo!.shortFullName}`\n } else {\n return userInfo!.shortFullName;\n }\n }\n\n return \"\"\n }\n\n get userInfo(): UserAuthDto | null {\n return AuthModule.obtainUserInfo();\n }\n\n // Navigation\n @Watch(\"$store.state.auth.permissions\", { deep: true })\n onAclRolesUpdate() {\n this.$nextTick(()=>{\n const routes = (this.$router).options.routes[0].children;\n let items = [];\n\n for (let i = 0; i < routes.length; i++) {\n const route = routes[i];\n\n let isValid = false;\n\n if (this.$helpers.isExists(route.meta) && this.$helpers.isNotEmpty(route.meta.icon)) {\n if (this.$helpers.isExists(route.meta.rule)) {\n isValid = this.$acl.check(route.meta.rule.toString());\n } else {\n isValid = true;\n }\n }\n\n if (isValid) {\n items.push({\n isSeparator: false,\n url: route.path,\n title: route.meta.title,\n icon: route.meta.icon,\n });\n\n // add separator after home route\n if (route.name === \"home\") {\n items.push({\n isSeparator: true\n });\n }\n }\n }\n\n // remove last separator\n if (items.length > 0 && items[items.length - 1].isSeparator) {\n items.splice(items.length - 1, 1);\n }\n\n this.menuItems = items;\n });\n }\n\n logout() {\n // trigger global event\n EventBus.$emit(EventBusModel.logoutEventName);\n }\n\n callStarted(robotCallPhoneNumber: string | null, callee: UserItemDto) {\n this.activeCallee = callee;\n\n if (this.$helpers.isNotEmpty(robotCallPhoneNumber)) {\n this.$bvToast.toast(`Виклик на абонента іншої відомчої телефонної мережі. \\nДля з'єднання прийміть на вашому абонентському пристрої виклик від: ${robotCallPhoneNumber}`, {\n variant: \"info\",\n toaster: \"b-toaster-top-center\"\n });\n }\n }\n\n callEnded() {\n this.activeCallee = null;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppNavbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppNavbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppNavbar.vue?vue&type=template&id=e17f5012&scoped=true&\"\nimport script from \"./AppNavbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppNavbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AppNavbar.vue?vue&type=style&index=0&id=e17f5012&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e17f5012\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Vue, Component, Watch} from \"vue-property-decorator\";\nimport themeConfig from '@/../themeConfig';\nimport AppNavbar from \"@/layouts/components/AppNavbar.vue\";\nimport BackToTop from 'vue-backtotop'\n// @ts-ignore\nimport classNames from 'classnames/dedupe'\n\n@Component({\n components: {\n AppNavbar,\n BackToTop\n }\n})\nexport default class Main extends Vue {\n routerTransition = themeConfig.routerTransition || 'none';\n hideScrollToTop = themeConfig.hideScrollToTop;\n\n created() {\n document.body.className = classNames(document.body.className, {\n \"bg-full-screen-image\": false,\n \"with-navbar\": true,\n \"blank-page\": false\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Main.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Main.vue?vue&type=template&id=758ae38c&scoped=true&\"\nimport script from \"./Main.vue?vue&type=script&lang=ts&\"\nexport * from \"./Main.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"758ae38c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"content app-content\"},[_c('div',{staticClass:\"content-overlay\"}),_c('div',{staticClass:\"content-wrapper\"},[_c('div',{staticClass:\"content-body\"},[_c('transition',{attrs:{\"name\":_vm.routerTransition,\"mode\":\"out-in\"}},[_c('router-view')],1)],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\n// @ts-ignore\nimport classNames from 'classnames/dedupe'\nimport themeConfig from '@/../themeConfig';\n\n@Component\nexport default class FullPage extends Vue {\n routerTransition = themeConfig.routerTransition || 'none';\n\n created() {\n document.body.className = classNames(document.body.className, {\n \"bg-full-screen-image\": !this.$route.meta.isBackgroundImageHidden,\n \"with-navbar\": false,\n \"blank-page\": true\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FullPage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FullPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./FullPage.vue?vue&type=template&id=cc2af070&\"\nimport script from \"./FullPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./FullPage.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FullPage.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\nimport {Vue, Component, Watch} from \"vue-property-decorator\";\n\n@Component\nexport default class TransitView extends Vue {\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TransitView.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TransitView.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TransitView.vue?vue&type=template&id=30eec2d2&scoped=true&\"\nimport script from \"./TransitView.vue?vue&type=script&lang=ts&\"\nexport * from \"./TransitView.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"30eec2d2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"home-page\"}},[_c('div',{staticClass:\"search-results\"},[_c('b-card',{staticClass:\"card-with-bottom-tabs\",attrs:{\"no-body\":\"\"}},[_c('b-tabs',{attrs:{\"justified\":\"\",\"end\":\"\",\"content-class\":\"mt-1\"},on:{\"input\":_vm.tabChanged},model:{value:(_vm.selectedTab),callback:function ($$v) {_vm.selectedTab=$$v},expression:\"selectedTab\"}},[_c('b-tab',{attrs:{\"active\":\"\"},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('i',{staticClass:\"fa fa-search\"}),_vm._v(\" Контакти\\n \")]},proxy:true}])},[_c('HomeSearchUsersSection',{ref:\"searchUsersSection\",attrs:{\"onMapFilterChanged\":_vm.onMapFilterChanged}})],1),_c('b-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('i',{staticClass:\"fa fa-star\"}),_vm._v(\" Обрані\\n \")]},proxy:true}])},[_c('HomeFavoriteUsersSection',{ref:\"favoriteUsersSection\"})],1),_c('b-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('span',{staticClass:\"position-relative unseen-phone-calls-badge\"},[_c('i',{staticClass:\"feather icon-phone\"}),_vm._v(\" Недавні\\n \"),_c('b-badge',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.unseenPhoneCallsCount > 0),expression:\"unseenPhoneCallsCount > 0\"}],staticClass:\"badge-up\",attrs:{\"pill\":\"\",\"variant\":_vm.isAnyMissedUnseenPhoneCalls ? 'danger' : 'success'}},[_vm._v(_vm._s(_vm.unseenPhoneCallsCount))])],1)]},proxy:true}])},[_c('HomeRecentCallsSection',{ref:\"recentCallsSection\"})],1)],1)],1)],1),_c('InteractiveMap',{ref:\"interactiveMap\",attrs:{\"onSelectionChanged\":_vm.mapSelectionChanged,\"initValues\":_vm.getMapInitValues}},[_c('HomeKnowledgeBaseButton')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"search-users-section\",class:{ 'is-filter-tags-init': _vm.isFilterTagsViewInit }},[_c('b-container',[_c('b-row',[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"search\",\"placeholder\":\"Пошук (прізвище, ім'я, по батькові, посада)\",\"id\":\"searchUsersSection-filtersSearchTerm\",\"state\":_vm.isSearchTermValidFalseOnly},model:{value:(_vm.filters.searchTerm),callback:function ($$v) {_vm.$set(_vm.filters, \"searchTerm\", $$v)},expression:\"filters.searchTerm\"}}),_c('b-tooltip',{attrs:{\"target\":\"searchUsersSection-filtersSearchTerm\",\"variant\":\"danger\",\"triggers\":\"manual\",\"show\":_vm.isSearchTermErrorTooltipShowed}},[_vm._v(_vm._s(_vm.$const.searchTermMinLengthText))])],1)],1)],1),_c('b-container',{ref:\"userSearchResultsContainer\",staticClass:\"user-search-results-container\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.users.length === 0 && !_vm.isUsersLoading),expression:\"users.length === 0 && !isUsersLoading\"}],staticClass:\"empty-label-container justify-content-center align-items-center h-100\"},[_c('span',{staticClass:\"empty-label\"},[_vm._v(\"ПУСТО\")])]),_c('ContainerLoading',{attrs:{\"offset\":{ left: '14px', right: '14px' },\"with-border\":\"\",\"is-loading\":_vm.isUsersLoading && !_vm.isUsersAppending}}),_c('b-row',{staticClass:\"user-search-results\"},[_c('b-col',{staticClass:\"user-search-results-wrapper\",attrs:{\"cols\":\"12\"}},[_c('vue-perfect-scrollbar',{on:{\"ps-y-reach-end\":_vm.appendMoreUsers}},[_c('div',{staticClass:\"w-full h-full relative\"},[_c('div',{staticClass:\"users-search-result w-full\"},[_vm._l((_vm.users),function(user){return _c('UserInfoSection',{key:user.id,attrs:{\"user\":user}})}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isUsersAppending),expression:\"isUsersAppending\"}],staticClass:\"text-center pt-50 pb-50\"},[_c('b-spinner',{attrs:{\"label\":\"Завантаження...\",\"variant\":\"success\"}})],1)],2)])])],1)],1)],1),_c('b-container',{ref:\"filterTagsContainer\",staticClass:\"filter-container\"},[_c('div',{ref:\"filterTagsHeader\",staticClass:\"cursor-pointer\",on:{\"click\":_vm.toggleFilterTags}},[_c('app-divider',{staticClass:\"mt-25 mb-25\",attrs:{\"text-classes\":['text-uppercase', _vm.filterTagCount > 0 ? 'text-success' : '']}},[_c('i',{staticClass:\"feather\",class:_vm.isFilterTagsOpen ? 'icon-chevron-down' : 'icon-chevron-up'}),_vm._v(\"\\n Фільтри \"),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.filterTagCount > 0),expression:\"filterTagCount > 0\"}]},[_vm._v(\"(\"+_vm._s(_vm.filterTagCount)+\")\")]),_c('i',{staticClass:\"feather\",class:_vm.isFilterTagsOpen ? 'icon-chevron-down' : 'icon-chevron-up'})])],1),_c('b-row',{ref:\"filterTagsContent\"},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('v-select',{staticClass:\"w-full\",attrs:{\"options\":_vm.searchFiltersOptions,\"placeholder\":\"Область, район, населений пункт, організація\",\"filterable\":false,\"force-above-position\":\"\"},on:{\"search\":_vm.searchSearchFilters,\"input\":_vm.setFiltersFromOption},scopedSlots:_vm._u([{key:\"no-options\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.$helpers.isNotEmpty(_vm.searchFiltersSearchTerm) && _vm.searchFiltersSearchTerm.length >= _vm.$const.selectSearchTermMinLength ? _vm.$const.selectSearchNoResultsText : _vm.$const.selectSearchNotStartedText)+\"\\n \")]},proxy:true},{key:\"option\",fn:function(option){return [_c('div',{staticClass:\"d-flex\"},[_c('span',{staticClass:\"flex-grow-1\"},[_c('b-badge',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],attrs:{\"pill\":\"\",\"variant\":\"primary\",\"title\":_vm.getSearchFiltersOptionTitle(option)}},[_vm._v(\"\\n \"+_vm._s(_vm.getSearchFiltersOptionBadgeText(option))+\"\\n \")]),_vm._v(\"\\n \"+_vm._s(_vm.getSearchFiltersOptionLabel(option))+\"\\n \")],1),_c('span',{staticClass:\"align-self-center font-small-2 font-italic text-muted\"},[_vm._v(\"\\n \"+_vm._s(_vm.getSearchFiltersOptionAdditionalInfo(option))+\"\\n \")])])]}}]),model:{value:(_vm.searchFiltersSelectedOption),callback:function ($$v) {_vm.searchFiltersSelectedOption=$$v},expression:\"searchFiltersSelectedOption\"}})],1),_c('b-col',{attrs:{\"cols\":\"12 mt-1\"}},[_c('div',{staticClass:\"tags-container\"},_vm._l((_vm.filterTags),function(tag,index){return _c('div',{key:index,staticClass:\"chip mr-1\"},[_c('div',{staticClass:\"chip-body\"},[_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"chip-text\",attrs:{\"title\":tag.title}},[_vm._v(_vm._s(tag.displayName))]),_c('div',{staticClass:\"chip-closeable\",on:{\"click\":function($event){return tag.remove()}}},[_c('i',{staticClass:\"feather icon-x\"})])])])}),0)])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Prop, Vue, Watch} from 'vue-property-decorator'\nimport {\n IHomeSearchUsersSection,\n OrganizationOrMapElementSelectOption,\n UsersSearchFilters,\n UserItemDto,\n UsersSearchResultDto, MapRegionDto\n} from \"@/global\";\nimport Helpers from '@/helpers'\nimport appUtils from '@/plugins/app-utils'\n// @ts-ignore\nimport debounce from 'debounce';\nimport usersApi from '@/api/users'\nimport mapApi from '@/api/map'\nimport UserInfoSection from \"@/views/home/UserInfoSection.vue\";\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\nimport ContainerLoading from \"@/components/ContainerLoading.vue\";\n\ninterface IFilterTag {\n displayName: string;\n title: string | null;\n\n organizationId: number | null\n mapRegionId: number | null\n mapDistrictId: number | null\n mapPointId: number | null\n\n remove: () => void;\n}\n\nclass UsersSearchFiltersCache implements UsersSearchFilters {\n public static filtersLocalStorageKey = \"search-users-filters\";\n\n // filters\n searchTerm: string;\n mapRegionId: number | null;\n mapDistrictId: number | null;\n mapPointId: number | null;\n organizationIds: number[];\n\n // filter tags\n mapRegionName: string | null;\n mapDistrictName: string | null;\n mapPointName: string | null;\n organizationNames: string[];\n organizationFullNames: string[];\n\n version = 1;\n\n constructor(oldFilters: UsersSearchFiltersCache | null) {\n // initial\n this.searchTerm = \"\";\n this.mapRegionId = null;\n this.mapDistrictId = null;\n this.mapPointId = null;\n this.organizationIds = [];\n\n this.mapRegionName = null;\n this.mapDistrictName = null;\n this.mapPointName = null;\n this.organizationNames = [];\n this.organizationFullNames = [];\n\n if (Helpers.isExists(oldFilters) && Helpers.isNumeric(oldFilters!.version)) {\n if (oldFilters!.version <= 1) {\n this.searchTerm = oldFilters!.searchTerm;\n this.mapRegionId = oldFilters!.mapRegionId;\n this.mapDistrictId = oldFilters!.mapDistrictId;\n this.mapPointId = oldFilters!.mapPointId;\n this.organizationIds = Helpers.isArray(oldFilters!.organizationIds) ? oldFilters!.organizationIds : [];\n\n this.mapRegionName = oldFilters!.mapRegionName;\n this.mapDistrictName = oldFilters!.mapDistrictName;\n this.mapPointName = oldFilters!.mapPointName;\n this.organizationNames = Helpers.isArray(oldFilters!.organizationNames) ? oldFilters!.organizationNames : [];\n this.organizationFullNames = Helpers.isArray(oldFilters!.organizationFullNames) ? oldFilters!.organizationFullNames : [];\n }\n }\n }\n\n static getFromCache(): UsersSearchFiltersCache {\n const cachedObjString = window.localStorage.getItem(UsersSearchFiltersCache.filtersLocalStorageKey);\n\n if (Helpers.isNotEmpty(cachedObjString)) {\n return new UsersSearchFiltersCache(JSON.parse(cachedObjString!));\n }\n\n return new UsersSearchFiltersCache(null);\n }\n\n initMapRegions(mapRegions: MapRegionDto[]) {\n appUtils.generateMapSelectOptionsFromDtos(mapRegions, this.mapRegionId, this.mapDistrictId, (mapRegionOptions, mapDistrictOptions, mapPointOptions) => {\n if (Helpers.isNumeric(this.mapRegionId)) {\n const mapRegionOption = Helpers.findFirstInArray(mapRegionOptions, x => x.id === this.mapRegionId);\n\n if (Helpers.isExists(mapRegionOption)) {\n this.mapRegionName = mapRegionOption!.label;\n } else {\n this.mapRegionId = null;\n }\n }\n\n if (Helpers.isNumeric(this.mapDistrictId)) {\n const mapDistrictOption = Helpers.findFirstInArray(mapDistrictOptions, x => x.id === this.mapDistrictId);\n\n if (Helpers.isExists(mapDistrictOption)) {\n this.mapDistrictName = mapDistrictOption!.label;\n } else {\n this.mapDistrictId = null;\n }\n }\n\n if (Helpers.isNumeric(this.mapPointId)) {\n const mapPointOption = Helpers.findFirstInArray(mapPointOptions, x => x.id === this.mapPointId);\n\n if (Helpers.isExists(mapPointOption)) {\n this.mapPointName = mapPointOption!.label;\n } else {\n this.mapPointId = null;\n }\n }\n })\n }\n\n setMapElements(mapRegionId: number | null, mapRegionName: string | null,\n mapDistrictId: number | null, mapDistrictName: string | null,\n mapPointId: number | null, mapPointName: string | null) {\n\n if (Helpers.isNumeric(mapRegionId)) {\n this.mapRegionId = mapRegionId;\n\n if (Helpers.isNotEmpty(mapRegionName)) {\n this.mapRegionName = mapRegionName;\n }\n } else {\n this.mapRegionId = null;\n this.mapRegionName = null;\n }\n\n if (Helpers.isNumeric(mapDistrictId)) {\n this.mapDistrictId = mapDistrictId;\n\n if (Helpers.isNotEmpty(mapDistrictName)) {\n this.mapDistrictName = mapDistrictName;\n }\n } else {\n this.mapDistrictId = null;\n this.mapDistrictName = null;\n }\n\n if (Helpers.isNumeric(mapPointId)) {\n this.mapPointId = mapPointId;\n\n if (Helpers.isNotEmpty(mapPointName)) {\n this.mapPointName = mapPointName;\n }\n } else {\n this.mapPointId = null;\n this.mapPointName = null;\n }\n\n this.updateCache();\n }\n\n addOrganization(organizationId: number, organizationName: string, organizationFullName: string) {\n this.organizationIds.push(organizationId);\n this.organizationNames.push(organizationName);\n this.organizationFullNames.push(organizationFullName);\n\n this.updateCache();\n }\n\n removeOrganization(organizationId: number) {\n const removeIndex = this.organizationIds.indexOf(organizationId);\n\n if (removeIndex >= 0) {\n this.organizationIds.splice(removeIndex, 1);\n this.organizationNames.splice(removeIndex, 1);\n this.organizationFullNames.splice(removeIndex, 1);\n\n this.updateCache();\n }\n }\n\n private updateCache() {\n window.localStorage.setItem(UsersSearchFiltersCache.filtersLocalStorageKey, JSON.stringify(this));\n }\n}\n\n@Component({\n components: {\n UserInfoSection, ContainerLoading\n }\n})\nexport default class HomeSearchUsersSection extends Vue implements IHomeSearchUsersSection {\n @Prop(Function) readonly onMapFilterChanged: ((mapRegionId: number | null, mapDistrictId: number | null, mapPointId: number | null) => void) | undefined;\n\n isInit = false;\n isFilterTagsViewInit = false;\n isUsersLoading = false;\n isUsersAppending = false;\n users: UserItemDto[] = [];\n\n usersPage = 1;\n isMorePagesAvailable = false;\n\n searchFiltersSearchTerm = \"\";\n searchFiltersSelectedOption: OrganizationOrMapElementSelectOption | null = null;\n searchFiltersOptions: OrganizationOrMapElementSelectOption[] = [];\n\n isFilterTagsOpen = false;\n filterTags: IFilterTag[] = [];\n\n filters: UsersSearchFiltersCache = null;\n\n get filterTagCount() {\n return this.filterTags.length\n }\n\n get isSearchTermValidFalseOnly() {\n return this.$helpers.isNotEmpty(this.filters.searchTerm) ? (this.filters.searchTerm.length >= this.$const.selectSearchTermMinLength ? null : false) : null;\n }\n\n get isSearchTermErrorTooltipShowed() {\n return this.isSearchTermValidFalseOnly === false;\n }\n\n created() {\n this.filters = UsersSearchFiltersCache.getFromCache();\n\n mapApi.searchableMapRegionsCached((regions) => {\n this.filters.initMapRegions(regions);\n this.initFilterTagsFromFilters();\n }, this.showError);\n\n // global event\n EventBus.$on(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n }\n\n beforeDestroy() {\n EventBus.$off(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n }\n\n // global event handler\n changeUserInFavorites(data: { userId: number, isInFavorites: boolean }) {\n if (this.$helpers.isArray(this.users)) {\n for (let i = 0; i < this.users.length; i++) {\n if (this.users[i].id === data.userId) {\n this.users[i].isInFavorites = data.isInFavorites;\n }\n }\n }\n }\n\n @Watch(\"filters.searchTerm\")\n onUserSearchTermChanged(val: string, oldval: string) {\n let newParsed = this.$helpers.isNotEmpty(val) && val.length >= this.$const.selectSearchTermMinLength ? val : null;\n let oldParsed = this.$helpers.isNotEmpty(oldval) && oldval.length >= this.$const.selectSearchTermMinLength ? oldval : null;\n\n if (newParsed !== oldParsed) {\n this.updateUsersWithTimer(false);\n }\n }\n\n tryInit() {\n if (!this.isInit) {\n this.updateUsers(false);\n this.updateFilterTagsView();\n\n this.isInit = true;\n }\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n toggleFilterTags() {\n this.isFilterTagsOpen = !this.isFilterTagsOpen;\n this.updateFilterTagsView();\n }\n\n updateFilterTagsView() {\n this.$nextTick(() => {\n let userSearchResultsContainer = this.$refs.userSearchResultsContainer as HTMLElement;\n let filterTagsContainer = this.$refs.filterTagsContainer as HTMLElement;\n let filterTagsHeader = this.$refs.filterTagsHeader as HTMLElement;\n let filterTagsContent = this.$refs.filterTagsContent as HTMLElement;\n\n const filterTagsHeaderRect = filterTagsHeader.getBoundingClientRect();\n const filterTagsContentRect = filterTagsContent.getBoundingClientRect();\n\n let containerHeight = filterTagsHeaderRect.height + 5;\n\n if (this.isFilterTagsOpen) {\n containerHeight += filterTagsContentRect.height;\n }\n\n userSearchResultsContainer.style.bottom = containerHeight + 'px';\n filterTagsContainer.style.height = containerHeight + 'px';\n\n if (!this.isFilterTagsViewInit) {\n this.isFilterTagsViewInit = true;\n }\n });\n }\n\n getSearchFiltersOptionTitle(option: OrganizationOrMapElementSelectOption) {\n if (this.$helpers.isExists(option.organizationId)) {\n return 'Організація';\n } else {\n if (this.$helpers.isExists(option.mapPointId)) {\n return 'Населений пункт'\n }\n else if (this.$helpers.isExists(option.mapDistrictId)) {\n return 'Район'\n }\n else if (this.$helpers.isExists(option.mapRegionId)) {\n return 'Область'\n }\n }\n }\n\n getSearchFiltersOptionBadgeText(option: OrganizationOrMapElementSelectOption) {\n if (this.$helpers.isExists(option.organizationId)) {\n return 'Орг';\n } else {\n if (this.$helpers.isExists(option.mapPointId)) {\n return 'Нп'\n }\n else if (this.$helpers.isExists(option.mapDistrictId)) {\n return 'Рн'\n }\n else if (this.$helpers.isExists(option.mapRegionId)) {\n return 'Об'\n }\n }\n }\n\n getSearchFiltersOptionLabel(option: OrganizationOrMapElementSelectOption) {\n if (this.$helpers.isExists(option.organizationId)) {\n return option.label;\n } else {\n if (this.$helpers.isExists(option.mapPointId)) {\n return option.mapPointName\n }\n else if (this.$helpers.isExists(option.mapDistrictId)) {\n return `${option.mapDistrictName} р-н`;\n }\n else if (this.$helpers.isExists(option.mapRegionId)) {\n return `${option.mapRegionName} обл.`;\n }\n }\n }\n\n getSearchFiltersOptionAdditionalInfo(option: OrganizationOrMapElementSelectOption) {\n if (this.$helpers.isExists(option.organizationId)) {\n return option.organizationFullName;\n } else {\n if (this.$helpers.isExists(option.mapPointId)) {\n if (this.$helpers.isExists(option.mapDistrictId)) {\n return `${option.mapRegionName} обл., ${option.mapDistrictName} р-н`;\n } else if (this.$helpers.isExists(option.mapRegionId)) {\n return `${option.mapRegionName} обл.`;\n }\n }\n else if (this.$helpers.isExists(option.mapDistrictId)) {\n return `${option.mapRegionName} обл.`;\n }\n else if (this.$helpers.isExists(option.mapRegionId)) {\n }\n }\n\n return ''\n }\n\n organizationInTagsRemoved(organizationId: number) {\n if (this.filters.organizationIds.indexOf(organizationId) === -1) return;\n\n // update filters\n this.filters.removeOrganization(organizationId);\n\n this.updateFilterTagsView();\n\n this.updateUsers(false);\n }\n\n mapElementsInTagsAfterRemove(mapRegionId: number | null, mapDistrictId: number | null, mapPointId: number | null) {\n if (this.filters.mapRegionId === mapRegionId &&\n this.filters.mapDistrictId === mapDistrictId &&\n this.filters.mapPointId === mapPointId) return;\n\n // update filters\n this.filters.setMapElements(mapRegionId, null, mapDistrictId, null, mapPointId, null);\n\n if (this.$helpers.isFunction(this.onMapFilterChanged)) {\n this.onMapFilterChanged!(mapRegionId, mapDistrictId, mapPointId);\n }\n\n this.updateFilterTagsView();\n\n this.updateUsers(false);\n }\n\n changeMapFilter(mapRegionId: number | null, mapRegionName: string | null,\n mapDistrictId: number | null, mapDistrictName: string | null,\n mapPointId: number | null, mapPointName: string | null) {\n if (this.filters.mapRegionId === mapRegionId &&\n this.filters.mapDistrictId === mapDistrictId &&\n this.filters.mapPointId === mapPointId) return;\n\n // update filters\n this.filters.setMapElements(mapRegionId, mapRegionName, mapDistrictId, mapDistrictName, mapPointId, mapPointName);\n\n this.updateFilterTags({\n label: '',\n organizationId: null,\n organizationFullName: '',\n\n mapRegionId: mapRegionId,\n mapRegionName: mapRegionName!,\n mapDistrictId: mapDistrictId,\n mapDistrictName: mapDistrictName!,\n mapPointId: mapPointId,\n mapPointName: mapPointName!,\n });\n\n this.updateUsers(false);\n }\n\n setFiltersFromOption(option: OrganizationOrMapElementSelectOption) {\n this.searchFiltersSelectedOption = null;\n\n if (this.$helpers.isExists(option)) {\n if (this.$helpers.isNumeric(option.organizationId)) {\n // update filters\n this.filters.addOrganization(option.organizationId!, option.label, option.organizationFullName);\n } else {\n // update filters\n this.filters.setMapElements(option.mapRegionId, option.mapRegionName,\n option.mapDistrictId, option.mapDistrictName, option.mapPointId, option.mapPointName);\n }\n }\n\n this.updateFilterTags(option);\n\n this.updateUsers(false);\n }\n\n initFilterTagsFromFilters() {\n if (this.$helpers.isNumeric(this.filters.mapRegionId) ||\n this.$helpers.isNumeric(this.filters.mapDistrictId) ||\n this.$helpers.isNumeric(this.filters.mapPointId)) {\n this.updateFilterTags({\n label: '',\n organizationId: null,\n organizationFullName: '',\n\n mapRegionId: this.filters.mapRegionId,\n mapRegionName: this.filters.mapRegionName!,\n mapDistrictId: this.filters.mapDistrictId,\n mapDistrictName: this.filters.mapDistrictName!,\n mapPointId: this.filters.mapPointId,\n mapPointName: this.filters.mapPointName!,\n });\n }\n\n for (let i = 0; i < this.filters.organizationIds.length; i++) {\n this.updateFilterTags({\n label: this.filters.organizationNames[i],\n organizationId: this.filters.organizationIds[i],\n organizationFullName: this.filters.organizationFullNames[i],\n\n mapRegionId: null,\n mapRegionName: '',\n mapDistrictId: null,\n mapDistrictName: '',\n mapPointId: null,\n mapPointName: '',\n });\n }\n }\n\n updateFilterTags(option: OrganizationOrMapElementSelectOption) {\n if (!this.$helpers.isExists(option)) return;\n\n if (this.$helpers.isNumeric(option.organizationId)) {\n this.filterTags.push({\n displayName: option.label,\n title: option.organizationFullName,\n organizationId: option.organizationId,\n mapRegionId: null,\n mapDistrictId: null,\n mapPointId: null,\n remove: () => {\n this.$helpers.removeInArray(this.filterTags, x => x.organizationId === option.organizationId);\n\n // update filters\n this.organizationInTagsRemoved(option.organizationId!);\n }\n })\n } else {\n // remove all map filters\n this.$helpers.removeInArray(this.filterTags, x => x.mapRegionId != null);\n this.$helpers.removeInArray(this.filterTags, x => x.mapDistrictId != null);\n this.$helpers.removeInArray(this.filterTags, x => x.mapPointId != null);\n\n if (this.$helpers.isNumeric(option.mapRegionId)) {\n this.filterTags.push({\n displayName: option.mapRegionName + \" обл.\",\n title: null,\n organizationId: null,\n mapRegionId: option.mapRegionId,\n mapDistrictId: null,\n mapPointId: null,\n remove: () => {\n this.$helpers.removeInArray(this.filterTags, x => x.mapRegionId === option.mapRegionId);\n\n if (this.$helpers.isNumeric(option.mapDistrictId)) {\n this.$helpers.removeInArray(this.filterTags, x => x.mapDistrictId === option.mapDistrictId);\n }\n if (this.$helpers.isNumeric(option.mapPointId)) {\n this.$helpers.removeInArray(this.filterTags, x => x.mapPointId === option.mapPointId);\n }\n\n // update filters\n this.mapElementsInTagsAfterRemove(null, null, null);\n }\n });\n\n if (this.$helpers.isNumeric(option.mapDistrictId)) {\n this.filterTags.push({\n displayName: option.mapDistrictName + \" р-н\",\n title: null,\n organizationId: null,\n mapRegionId: null,\n mapDistrictId: option.mapDistrictId,\n mapPointId: null,\n remove: () => {\n this.$helpers.removeInArray(this.filterTags, x => x.mapDistrictId === option.mapDistrictId);\n\n if (this.$helpers.isNumeric(option.mapPointId)) {\n this.$helpers.removeInArray(this.filterTags, x => x.mapPointId === option.mapPointId);\n }\n\n // update filters\n this.mapElementsInTagsAfterRemove(option.mapRegionId, null, null);\n }\n });\n\n // district point\n if (this.$helpers.isNumeric(option.mapPointId)) {\n this.filterTags.push({\n displayName: option.mapPointName,\n title: null,\n organizationId: null,\n mapRegionId: null,\n mapDistrictId: null,\n mapPointId: option.mapPointId,\n remove: () => {\n this.$helpers.removeInArray(this.filterTags, x => x.mapPointId === option.mapPointId);\n\n // update filters\n this.mapElementsInTagsAfterRemove(option.mapRegionId, option.mapDistrictId, null);\n }\n })\n }\n } else {\n // region point\n if (this.$helpers.isNumeric(option.mapPointId)) {\n this.filterTags.push({\n displayName: option.mapPointName,\n title: null,\n organizationId: null,\n mapRegionId: null,\n mapDistrictId: null,\n mapPointId: option.mapPointId,\n remove: () => {\n this.$helpers.removeInArray(this.filterTags, x => x.mapPointId === option.mapPointId);\n\n // update filters\n this.mapElementsInTagsAfterRemove(option.mapRegionId, null, null);\n }\n })\n }\n }\n }\n }\n\n this.updateFilterTagsView();\n }\n\n searchSearchFilters(searchTerm: string, loadingCb: (isLoading: boolean) => void) {\n this.searchFiltersSearchTerm = searchTerm;\n\n if (!this.$helpers.isNotEmpty(this.searchFiltersSearchTerm) || this.searchFiltersSearchTerm.length < this.$const.selectSearchTermMinLength) {\n this.searchFiltersOptions = [];\n } else {\n loadingCb(true);\n this.updateSearchFiltersWithTimer(this, loadingCb);\n }\n }\n\n updateSearchFiltersWithTimer = debounce((inst: HomeSearchUsersSection, loadingCb: (isLoading: boolean) => void) => {\n usersApi.userSearchFilters(inst.searchFiltersSearchTerm, inst.filters, options => {\n inst.searchFiltersOptions = options;\n\n loadingCb(false);\n }, errorMessage => {\n inst.showError(errorMessage);\n\n loadingCb(false);\n });\n }, 750);\n\n updateUsersWithTimer = debounce((isUsersAppendMode: boolean) => {\n this.updateUsers(isUsersAppendMode);\n }, 750);\n\n appendMoreUsers() {\n if (!this.isUsersLoading && !this.isUsersAppending) {\n this.updateUsers(true);\n }\n }\n\n updateUsers(isUsersAppendMode: boolean) {\n if (!isUsersAppendMode) {\n this.usersPage = 1;\n this.isMorePagesAvailable = false;\n } else {\n if (this.isMorePagesAvailable) {\n this.usersPage++;\n } else {\n return;\n }\n }\n\n this.isUsersLoading = true;\n this.isUsersAppending = isUsersAppendMode;\n\n usersApi.search(this.usersPage, this.filters, usersResult => {\n if (isUsersAppendMode) {\n this.users.push(...usersResult.items);\n } else{\n this.users = usersResult.items;\n }\n\n this.isMorePagesAvailable = usersResult.isMoreItemsAvailable;\n\n this.isUsersLoading = false;\n this.isUsersAppending = false;\n\n this.$forceUpdate();\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.isUsersLoading = false;\n this.isUsersAppending = false;\n });\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeSearchUsersSection.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeSearchUsersSection.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./HomeSearchUsersSection.vue?vue&type=template&id=2fd59ab7&scoped=true&\"\nimport script from \"./HomeSearchUsersSection.vue?vue&type=script&lang=ts&\"\nexport * from \"./HomeSearchUsersSection.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./HomeSearchUsersSection.vue?vue&type=style&index=0&id=2fd59ab7&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2fd59ab7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-container',[_c('b-row',[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"search\",\"placeholder\":\"Пошук (прізвище, ім'я, по батькові, посада)\",\"id\":\"favoriteUsersSection-filtersSearchTerm\",\"state\":_vm.isSearchTermValidFalseOnly},model:{value:(_vm.filterSearchTerm),callback:function ($$v) {_vm.filterSearchTerm=$$v},expression:\"filterSearchTerm\"}}),_c('b-tooltip',{attrs:{\"target\":\"favoriteUsersSection-filtersSearchTerm\",\"variant\":\"danger\",\"triggers\":\"manual\",\"show\":_vm.isSearchTermErrorTooltipShowed}},[_vm._v(_vm._s(_vm.$const.searchTermMinLengthText))])],1)],1)],1),_c('b-container',{staticClass:\"favorite-users-results-container\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.favoriteUsers.length === 0 && !_vm.isFavoriteUsersLoading),expression:\"favoriteUsers.length === 0 && !isFavoriteUsersLoading\"}],staticClass:\"empty-label-container justify-content-center align-items-center h-100\"},[_c('span',{staticClass:\"empty-label\"},[_vm._v(\"ПУСТО\")])]),_c('ContainerLoading',{attrs:{\"offset\":{ left: '14px', right: '14px' },\"with-border\":\"\",\"is-loading\":_vm.isFavoriteUsersLoading && !_vm.isFavoriteUsersAppending}}),_c('b-row',{staticClass:\"user-search-results\"},[_c('b-col',{staticClass:\"user-search-results-wrapper\",attrs:{\"cols\":\"12\"}},[_c('vue-perfect-scrollbar',{on:{\"ps-y-reach-end\":_vm.appendMoreFavoriteUsers}},[_c('div',{staticClass:\"w-full h-full relative\"},[_c('div',{staticClass:\"users-search-result w-full\"},[_vm._l((_vm.favoriteUsers),function(user){return _c('UserInfoSection',{key:user.id,class:{ 'is-deleted': !user.isInFavorites },attrs:{\"user\":user}})}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isFavoriteUsersAppending),expression:\"isFavoriteUsersAppending\"}],staticClass:\"text-center pt-50 pb-50\"},[_c('b-spinner',{attrs:{\"label\":\"Завантаження...\",\"variant\":\"success\"}})],1)],2)])])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Prop, Vue, Watch} from 'vue-property-decorator'\nimport {IHomeFavoriteUsersSection, UserItemDto} from \"@/global\";\nimport UserInfoSection from \"@/views/home/UserInfoSection.vue\";\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\nimport debounce from 'debounce';\nimport usersApi from '@/api/users'\nimport ContainerLoading from \"@/components/ContainerLoading.vue\";\n\n@Component({\n components: {\n UserInfoSection, ContainerLoading\n }\n})\nexport default class HomeFavoriteUsersSection extends Vue implements IHomeFavoriteUsersSection {\n isInit = false;\n isFavoriteUsersLoading = false;\n isFavoriteUsersAppending = false;\n favoriteUsers = [];\n\n usersPage = 1;\n isMorePagesAvailable = false;\n\n filterSearchTerm = \"\";\n\n get isSearchTermValidFalseOnly() {\n return this.$helpers.isNotEmpty(this.filterSearchTerm) ? (this.filterSearchTerm.length >= this.$const.selectSearchTermMinLength ? null : false) : null;\n }\n\n get isSearchTermErrorTooltipShowed() {\n return this.isSearchTermValidFalseOnly === false;\n }\n\n created() {\n // global event\n EventBus.$on(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n }\n\n beforeDestroy() {\n EventBus.$off(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n }\n\n // global event handler\n changeUserInFavorites(data: { userId: number, isInFavorites: boolean }) {\n if (this.$helpers.isArray(this.favoriteUsers)) {\n let isAnyUserFound = false;\n\n for (let i = 0; i < this.favoriteUsers.length; i++) {\n if (this.favoriteUsers[i].id === data.userId) {\n this.favoriteUsers[i].isInFavorites = data.isInFavorites;\n isAnyUserFound = true;\n }\n }\n\n if (data.isInFavorites && !isAnyUserFound) {\n this.updateFavoriteUsers(false);\n }\n }\n }\n\n tryInit() {\n if (!this.isInit) {\n this.updateFavoriteUsers(false);\n\n this.isInit = true;\n }\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n @Watch(\"filterSearchTerm\")\n onFavoriteUsersSearchTermChanged(val: string, oldval: string) {\n this.updateFavoriteUsersWithTimer(false);\n }\n\n updateFavoriteUsersWithTimer = debounce((isUsersAppendMode: boolean) => {\n this.updateFavoriteUsers(isUsersAppendMode);\n }, 750);\n\n appendMoreFavoriteUsers() {\n if (!this.isFavoriteUsersLoading && !this.isFavoriteUsersAppending) {\n this.updateFavoriteUsers(true);\n }\n }\n\n updateFavoriteUsers(isUsersAppendMode: boolean) {\n if (!isUsersAppendMode) {\n this.usersPage = 1;\n this.isMorePagesAvailable = false;\n } else {\n if (this.isMorePagesAvailable) {\n this.usersPage++;\n } else {\n return;\n }\n }\n\n this.isFavoriteUsersLoading = true;\n this.isFavoriteUsersAppending = isUsersAppendMode;\n\n usersApi.favoriteUsers(this.usersPage, this.filterSearchTerm, usersResult => {\n if (isUsersAppendMode) {\n this.favoriteUsers.push(...usersResult.items);\n } else{\n this.favoriteUsers = usersResult.items;\n }\n\n this.isMorePagesAvailable = usersResult.isMoreItemsAvailable;\n\n this.isFavoriteUsersLoading = false;\n this.isFavoriteUsersAppending = false;\n\n this.$forceUpdate();\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.isFavoriteUsersLoading = false;\n this.isFavoriteUsersAppending = false;\n });\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeFavoriteUsersSection.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeFavoriteUsersSection.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./HomeFavoriteUsersSection.vue?vue&type=template&id=76feac20&\"\nimport script from \"./HomeFavoriteUsersSection.vue?vue&type=script&lang=ts&\"\nexport * from \"./HomeFavoriteUsersSection.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./HomeFavoriteUsersSection.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"recent-calls-section\"},[_c('ContainerLoading',{attrs:{\"offset\":{ left: '14px', right: '14px' },\"with-border\":\"\",\"is-loading\":_vm.isRecentCallsLoading && !_vm.isRecentCallsAppending}}),_c('vue-perfect-scrollbar',{on:{\"ps-y-reach-end\":_vm.appendMoreRecentCalls}},[_c('div',{staticClass:\"w-100 h-100 relative\"},[_c('div',{staticClass:\"empty-label-container d-flex justify-content-center align-items-center h-100\",class:{ 'force-hide': _vm.recentCallsGroups.length !== 0 || _vm.isRecentCallsLoading }},[_c('span',{staticClass:\"empty-label\"},[_vm._v(\"ПУСТО\")])]),_c('div',{staticClass:\"ml-2 mr-1\"},_vm._l((_vm.recentCallsGroups),function(recentCalls,index){return _c('div',{key:index},[_c('div',{staticClass:\"text-muted text-center\",class:index > 0 ? 'mt-1' : ''},[_vm._v(_vm._s(_vm._f(\"moment\")(recentCalls[0].createdOn,\"LL\")))]),_vm._l((recentCalls),function(call){return _c('div',{key:call.id,staticClass:\"recent-call\"},[_c('UserInfoSection',{attrs:{\"user\":_vm.isIncomingCall(call) ? call.caller : call.callee},scopedSlots:_vm._u([{key:\"before-avatar\",fn:function(){return [_c('div',{staticClass:\"mr-50\"},[_c('i',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.html\",modifiers:{\"hover\":true,\"html\":true}}],staticClass:\"feather call-status\",class:[_vm.isIncomingCall(call) ? (call.isMissed ? 'icon-phone-missed' : 'icon-phone-incoming') : 'icon-phone-outgoing',\n _vm.newCallIds.indexOf(call.id) >= 0 ? (call.isMissed ? 'text-danger' : 'text-success') : ''],attrs:{\"title\":_vm.getCallTitle(call)}})])]},proxy:true}],null,true)})],1)})],2)}),0),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isRecentCallsAppending),expression:\"isRecentCallsAppending\"}],staticClass:\"text-center pt-50 pb-50\"},[_c('b-spinner',{attrs:{\"label\":\"Завантаження...\",\"variant\":\"success\"}})],1)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport {IHomeRecentCallsSection, PhoneCallItemDto, UserItemDto} from \"@/global\";\nimport * as enums from '@/global-enum'\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\nimport telephonyApi from '@/api/telephony'\nimport moment from 'moment'\nimport UserInfoSection from \"@/views/home/UserInfoSection.vue\";\nimport ContainerLoading from \"@/components/ContainerLoading.vue\";\n\n@Component({\n components: {\n UserInfoSection, ContainerLoading\n }\n})\nexport default class HomeRecentCallsSection extends Vue implements IHomeRecentCallsSection {\n isInit = false;\n isRecentCallsLoading = false;\n isRecentCallsAppending = false;\n allRecentCalls: PhoneCallItemDto[] = [];\n recentCallsGroups: PhoneCallItemDto[][] = [];\n\n newCallIds: number[] = [];\n\n usersPage = 1;\n isMorePagesAvailable = false;\n\n get allUsers() {\n let users: UserItemDto[] = [];\n\n for (let i = 0; i < this.recentCallsGroups.length; i++) {\n for (let j = 0; j < this.recentCallsGroups[i].length; j++) {\n const call = this.recentCallsGroups[i][j];\n\n if (this.isIncomingCall(call)) {\n users.push(call.caller)\n } else {\n users.push(call.callee)\n }\n }\n }\n\n return users;\n }\n\n created() {\n // global event\n EventBus.$on(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n EventBus.$on(EventBusModel.newPhoneCallEventName, this.newPhoneCall);\n }\n\n beforeDestroy() {\n // global event\n EventBus.$off(EventBusModel.userInFavoritesChangedEventName, this.changeUserInFavorites);\n EventBus.$off(EventBusModel.newPhoneCallEventName, this.newPhoneCall);\n }\n\n // global event handler\n changeUserInFavorites(data: { userId: number, isInFavorites: boolean }) {\n const users = this.allUsers;\n\n if (this.$helpers.isArray(users)) {\n let isAnyUserFound = false;\n\n for (let i = 0; i < users.length; i++) {\n if (users[i].id === data.userId) {\n users[i].isInFavorites = data.isInFavorites;\n isAnyUserFound = true;\n }\n }\n\n if (data.isInFavorites && !isAnyUserFound) {\n this.updateRecentCalls(false);\n }\n }\n }\n\n newPhoneCall(phoneCall: PhoneCallItemDto) {\n if (this.isInit) {\n this.allRecentCalls.unshift(phoneCall);\n this.updateCallGroups();\n }\n\n this.newCallIds.push(phoneCall.id);\n }\n\n isIncomingCall(call: PhoneCallItemDto) {\n return call.type === enums.PhoneCallItemType_Incoming;\n }\n\n getCallTitle(call: PhoneCallItemDto) {\n return `${this.isIncomingCall(call) ? 'Вхідний' : 'Вихідний'} дзвінок
(${moment(call.createdOn).format(\"LLL\")})`\n }\n\n tryInit() {\n if (!this.isInit) {\n this.updateRecentCalls(false);\n\n this.isInit = true;\n }\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n updateCallGroups() {\n this.recentCallsGroups = [];\n\n let prevCreatedOnDate: moment.Moment | null = null;\n let prevRecentCallsGroup: PhoneCallItemDto[] = [];\n\n for (let i = 0; i < this.allRecentCalls.length; i++) {\n const call = this.allRecentCalls[i];\n\n const callCreatedOnDate = moment(call.createdOn);\n\n if (!this.$helpers.isExists(prevCreatedOnDate) ||\n prevCreatedOnDate!.date() !== callCreatedOnDate!.date() ||\n prevCreatedOnDate!.month() !== callCreatedOnDate!.month() ||\n prevCreatedOnDate!.year() !== callCreatedOnDate!.year()) {\n if (this.$helpers.isExists(prevCreatedOnDate)) {\n this.recentCallsGroups.push(prevRecentCallsGroup);\n }\n\n prevCreatedOnDate = callCreatedOnDate;\n prevRecentCallsGroup = [];\n }\n\n prevRecentCallsGroup.push(call);\n }\n\n if (prevRecentCallsGroup.length > 0) {\n this.recentCallsGroups.push(prevRecentCallsGroup);\n }\n }\n\n appendMoreRecentCalls() {\n if (!this.isRecentCallsLoading && !this.isRecentCallsAppending) {\n this.updateRecentCalls(true);\n }\n }\n\n updateRecentCalls(isUsersAppendMode: boolean) {\n if (!isUsersAppendMode) {\n this.usersPage = 1;\n this.isMorePagesAvailable = false;\n } else {\n if (this.isMorePagesAvailable) {\n this.usersPage++;\n } else {\n return;\n }\n }\n\n this.isRecentCallsLoading = true;\n this.isRecentCallsAppending = isUsersAppendMode;\n\n telephonyApi.phoneCalls(this.usersPage, phoneCallsResult => {\n if (isUsersAppendMode) {\n this.allRecentCalls.push(...phoneCallsResult.items);\n } else{\n this.allRecentCalls = phoneCallsResult.items;\n }\n\n this.isMorePagesAvailable = phoneCallsResult.isMoreItemsAvailable;\n\n this.updateCallGroups();\n\n this.isRecentCallsLoading = false;\n this.isRecentCallsAppending = false;\n\n this.$forceUpdate();\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.isRecentCallsLoading = false;\n this.isRecentCallsAppending = false;\n });\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeRecentCallsSection.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeRecentCallsSection.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./HomeRecentCallsSection.vue?vue&type=template&id=072fcb12&scoped=true&\"\nimport script from \"./HomeRecentCallsSection.vue?vue&type=script&lang=ts&\"\nexport * from \"./HomeRecentCallsSection.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./HomeRecentCallsSection.vue?vue&type=style&index=0&id=072fcb12&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"072fcb12\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('i',{staticClass:\"knowledge-base-popup-open feather icon-info text-light cursor-pointer\",on:{\"click\":_vm.openKnowledgeBasePopup}}),_c('b-modal',{attrs:{\"centered\":\"\",\"hide-footer\":\"\",\"size\":\"lg\",\"title\":\"База знань\",\"no-close-on-backdrop\":\"\"},on:{\"hidden\":_vm.onKnowledgeBasePopupClosed},model:{value:(_vm.knowledgeBasePopup.isActive),callback:function ($$v) {_vm.$set(_vm.knowledgeBasePopup, \"isActive\", $$v)},expression:\"knowledgeBasePopup.isActive\"}},[_c('b-container',{staticClass:\"knowledge-base-popup mb-1\"},[_c('b-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.$helpers.isExists(_vm.knowledgeBasePopup.openArticle) && !_vm.knowledgeBasePopup.isOpenArticleLoading),expression:\"!$helpers.isExists(knowledgeBasePopup.openArticle) && !knowledgeBasePopup.isOpenArticleLoading\"}]},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"search\",\"id\":\"knowledgeBasePopup-filterSearchTerm\",\"placeholder\":\"Пошук статті\",\"state\":_vm.isKnowledgeBasePopupFilterSearchTermValidFalseOnly,\"trim\":\"\"},model:{value:(_vm.knowledgeBasePopup.filterSearchTerm),callback:function ($$v) {_vm.$set(_vm.knowledgeBasePopup, \"filterSearchTerm\", $$v)},expression:\"knowledgeBasePopup.filterSearchTerm\"}}),_c('b-tooltip',{attrs:{\"target\":\"knowledgeBasePopup-filterSearchTerm\",\"variant\":\"danger\",\"triggers\":\"manual\",\"show\":_vm.isKnowledgeBasePopupFilterSearchTermErrorTooltipShowed}},[_vm._v(_vm._s(_vm.$const.searchTermMinLengthText))]),_c('hr'),_c('div',{staticClass:\"articles-with-categories\"},[_c('vue-perfect-scrollbar',{staticClass:\"scroll-container\"},_vm._l((_vm.knowledgeBasePopup.groupedArticles),function(group){return _c('div',{staticClass:\"category-holder mb-50\"},[_c('div',{staticClass:\"category-button p-1 cursor-pointer\",on:{\"click\":function($event){group.isOpen = !group.isOpen}}},[_vm._v(_vm._s(group.groupName))]),_c('b-collapse',{model:{value:(group.isOpen),callback:function ($$v) {_vm.$set(group, \"isOpen\", $$v)},expression:\"group.isOpen\"}},[_c('b-list-group',{staticClass:\"list-group-flush\"},_vm._l((group.articles),function(article){return _c('b-list-group-item',{key:article.id,staticClass:\"hover-underline\",attrs:{\"button\":\"\"},on:{\"click\":function($event){return _vm.openKnowledgeBaseArticle(article.id)}}},[_vm._v(\"\\n \"+_vm._s(article.title)+\"\\n \")])}),1)],1)],1)}),0)],1)],1)],1),(_vm.$helpers.isExists(_vm.knowledgeBasePopup.openArticle))?_c('b-row',[_c('b-col',[_c('b-row',[_c('b-col',[_c('b-button',{staticClass:\"float-left\",attrs:{\"variant\":\"outline-secondary\",\"size\":\"sm\"},on:{\"click\":function($event){_vm.knowledgeBasePopup.openArticle = null}}},[_vm._v(\"Назад\")])],1)],1),_c('hr'),_c('h3',{staticClass:\"text-center\"},[_vm._v(\"\\n \"+_vm._s(_vm.knowledgeBasePopup.openArticle.title)+\"\\n \")]),_c('div',{staticClass:\"quill-editor-content\",domProps:{\"innerHTML\":_vm._s(_vm.knowledgeBasePopup.openArticle.content)}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.$helpers.isNotEmptyArray(_vm.knowledgeBasePopup.openArticle.attachmentFileIds)),expression:\"$helpers.isNotEmptyArray(knowledgeBasePopup.openArticle.attachmentFileIds)\"}],staticClass:\"mt-2\"},[_c('h5',[_vm._v(\"\\n Файли\\n \"),_c('b-spinner',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.knowledgeBasePopup.isAttachmentPreviewsLoading),expression:\"knowledgeBasePopup.isAttachmentPreviewsLoading\"}],staticClass:\"mb-25\",attrs:{\"label\":\"Завантаження...\",\"small\":\"\"}})],1),_vm._l((_vm.knowledgeBasePopup.attachmentPreviews),function(preview,index){return _c('a',{key:preview.id,staticClass:\"mt-1\",attrs:{\"target\":\"_blank\",\"href\":_vm.$files.previewUrl(preview)}},[_c('b-alert',{staticClass:\"hover-underline\",class:index === _vm.knowledgeBasePopup.attachmentPreviews.length - 1 ? 'mb-0' : '',attrs:{\"show\":\"\",\"variant\":\"success\"}},[_c('span',{staticClass:\"float-left text-success mx-50\"},[_c('i',{staticClass:\"feather icon-download\"})]),_vm._v(\"\\n \"+_vm._s(preview.fileName)+_vm._s(preview.fileExtension)+\" (\"+_vm._s(_vm._f(\"prettyBytes\")(preview.fileSizeBytes))+\")\\n \")])],1)})],2)],1)],1):_vm._e()],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.knowledgeBasePopup.isSearchLoading || _vm.knowledgeBasePopup.isOpenArticleLoading),expression:\"knowledgeBasePopup.isSearchLoading || knowledgeBasePopup.isOpenArticleLoading\"}],staticClass:\"text-center\"},[_c('b-spinner',{staticStyle:{\"width\":\"3rem\",\"height\":\"3rem\"},attrs:{\"label\":\"Завантаження...\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {Component, Prop, Vue, Watch} from 'vue-property-decorator'\nimport {FilePreviewDto, KnowledgeBaseArticleDetailsDto, KnowledgeBaseArticleSearchItemDto} from \"@/global\";\nimport knowledgeBaseApi from '@/api/knowledge-base'\nimport filesApi from '@/api/files'\nimport debounce from \"debounce\";\n\ninterface KnowledgeBaseArticlesGroup {\n isOpen: boolean\n groupName: string\n articles: KnowledgeBaseArticleSearchItemDto[]\n}\n\n@Component({\n})\nexport default class HomeKnowledgeBaseButton extends Vue {\n knowledgeBasePopup = {\n isActive: false,\n isSearchLoading: false,\n isOpenArticleLoading: false,\n\n articlesPage: 1,\n isMorePagesAvailable: false,\n\n filterSearchTerm: \"\",\n\n articles: [],\n groupedArticles: [],\n\n openArticle: null,\n\n isAttachmentPreviewsLoading: false,\n attachmentPreviews: []\n };\n\n get isKnowledgeBasePopupFilterSearchTermValidFalseOnly() {\n return this.$helpers.isNotEmpty(this.knowledgeBasePopup.filterSearchTerm) ? (this.knowledgeBasePopup.filterSearchTerm.length >= this.$const.selectSearchTermMinLength ? null : false) : null;\n }\n\n get isKnowledgeBasePopupFilterSearchTermErrorTooltipShowed() {\n return this.isKnowledgeBasePopupFilterSearchTermValidFalseOnly === false;\n }\n\n openKnowledgeBasePopup() {\n this.updateArticles(true, false);\n\n this.knowledgeBasePopup.isActive = true;\n }\n\n openKnowledgeBaseArticle(articleId: number) {\n if (this.knowledgeBasePopup.isOpenArticleLoading) return;\n\n this.knowledgeBasePopup.isOpenArticleLoading = true;\n\n knowledgeBaseApi.getArticleDetails(articleId, articleDetails => {\n this.knowledgeBasePopup.openArticle = articleDetails;\n\n this.initAttachmentPreviews();\n\n this.knowledgeBasePopup.isOpenArticleLoading = false;\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.knowledgeBasePopup.isOpenArticleLoading = false;\n });\n }\n\n onKnowledgeBasePopupClosed() {\n // reset values\n this.knowledgeBasePopup.filterSearchTerm = \"\";\n this.knowledgeBasePopup.openArticle = null;\n }\n\n showError(errorMessage?: string) {\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\n title: \"Помилка\",\n variant: \"danger\"\n })\n }\n\n initAttachmentPreviews() {\n if (this.$helpers.isExists(this.knowledgeBasePopup.openArticle) &&\n this.$helpers.isNotEmptyArray(this.knowledgeBasePopup.openArticle!.attachmentFileIds)) {\n\n this.knowledgeBasePopup.isAttachmentPreviewsLoading = true;\n\n filesApi.previews(this.knowledgeBasePopup.openArticle!.attachmentFileIds, null, previews => {\n this.knowledgeBasePopup.attachmentPreviews = previews;\n\n this.knowledgeBasePopup.isAttachmentPreviewsLoading = false;\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.knowledgeBasePopup.isAttachmentPreviewsLoading = false;\n });\n }\n }\n\n @Watch(\"knowledgeBasePopup.filterSearchTerm\")\n onKBPopupFilterSearchTermChanged(val: string, oldval: string) {\n this.updateArticlesWithTimer(false);\n }\n\n updateArticleGroups(isGroupOpen: boolean) {\n let groupedArticles = this.$helpers\n .groupBy(this.knowledgeBasePopup.articles, x => x.categoryName);\n\n this.knowledgeBasePopup.groupedArticles = [];\n\n for(const groupName in groupedArticles) {\n this.knowledgeBasePopup.groupedArticles.push({\n isOpen: isGroupOpen,\n groupName: groupName,\n articles: groupedArticles[groupName]\n })\n }\n }\n\n updateArticlesWithTimer = debounce((isAppendMode: boolean) => {\n this.updateArticles(false, isAppendMode);\n }, 750);\n\n updateArticles(isInit: boolean, isAppendMode: boolean) {\n if (!isAppendMode) {\n this.knowledgeBasePopup.articlesPage = 1;\n this.knowledgeBasePopup.isMorePagesAvailable = false;\n } else {\n if (this.knowledgeBasePopup.isMorePagesAvailable) {\n this.knowledgeBasePopup.articlesPage++;\n } else {\n return;\n }\n }\n\n this.knowledgeBasePopup.isSearchLoading = true;\n knowledgeBaseApi.searchArticles(this.knowledgeBasePopup.articlesPage, this.knowledgeBasePopup.filterSearchTerm, articlesResult => {\n if (isAppendMode) {\n this.knowledgeBasePopup.articles.push(...articlesResult.items);\n } else{\n this.knowledgeBasePopup.articles = articlesResult.items;\n }\n\n this.knowledgeBasePopup.isMorePagesAvailable = articlesResult.isMoreItemsAvailable;\n\n this.updateArticleGroups(!isInit);\n\n this.knowledgeBasePopup.isSearchLoading = false;\n }, errorMessage => {\n this.showError(errorMessage);\n\n this.knowledgeBasePopup.isSearchLoading = false;\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeKnowledgeBaseButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HomeKnowledgeBaseButton.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./HomeKnowledgeBaseButton.vue?vue&type=template&id=34df209a&\"\nimport script from \"./HomeKnowledgeBaseButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./HomeKnowledgeBaseButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./HomeKnowledgeBaseButton.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Watch } from 'vue-property-decorator'\nimport InteractiveMap from '@/components/InteractiveMap.vue';\nimport HomeSearchUsersSection from \"@/views/home/HomeSearchUsersSection.vue\";\nimport HomeFavoriteUsersSection from \"@/views/home/HomeFavoriteUsersSection.vue\";\nimport HomeRecentCallsSection from \"@/views/home/HomeRecentCallsSection.vue\";\nimport {\n IHomeFavoriteUsersSection, IHomeRecentCallsSection,\n IHomeSearchUsersSection, IInteractiveMap,\n IInteractiveMapData_District,\n IInteractiveMapData_Point,\n IInteractiveMapData_Region, PhoneCallItemDto\n} from \"@/global\";\nimport HomeKnowledgeBaseButton from \"@/components/HomeKnowledgeBaseButton.vue\";\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\n\n@Component({\n components: {\n HomeSearchUsersSection,\n HomeFavoriteUsersSection,\n HomeRecentCallsSection,\n InteractiveMap,\n HomeKnowledgeBaseButton,\n },\n})\nexport default class Home extends Vue {\n selectedTab = 0;\n\n isAnyMissedUnseenPhoneCalls = false;\n unseenPhoneCallsCount = 0;\n\n created() {\n // global event\n EventBus.$on(EventBusModel.newPhoneCallEventName, this.newPhoneCall);\n }\n\n mounted() {\n this.tabChanged(this.selectedTab);\n }\n\n beforeDestroy() {\n // global event\n EventBus.$off(EventBusModel.newPhoneCallEventName, this.newPhoneCall);\n }\n\n // global event handler\n newPhoneCall(phoneCall: PhoneCallItemDto) {\n if (this.selectedTab !== 2) {\n this.unseenPhoneCallsCount++;\n\n if (!this.isAnyMissedUnseenPhoneCalls && phoneCall.isMissed) {\n this.isAnyMissedUnseenPhoneCalls = true;\n }\n }\n }\n\n getInteractiveMap() {\n return this.$refs.interactiveMap as unknown as IInteractiveMap;\n }\n getSearchUsersSection() {\n return this.$refs.searchUsersSection as unknown as IHomeSearchUsersSection;\n }\n\n getFavoriteUsersSection() {\n return this.$refs.favoriteUsersSection as unknown as IHomeFavoriteUsersSection;\n }\n\n getRecentCallsSection() {\n return this.$refs.recentCallsSection as unknown as IHomeRecentCallsSection;\n }\n\n tabChanged(currentIndex: number) {\n switch (currentIndex) {\n case 0:\n this.getSearchUsersSection().tryInit();\n break;\n case 1:\n this.getFavoriteUsersSection().tryInit();\n break;\n case 2:\n this.getRecentCallsSection().tryInit();\n\n this.unseenPhoneCallsCount = 0;\n this.isAnyMissedUnseenPhoneCalls = false;\n break;\n default:\n throw new Error(\"Can't init section tab\");\n }\n }\n\n getMapInitValues() {\n return {\n mapRegionId: this.getSearchUsersSection().filters.mapRegionId,\n mapDistrictId: this.getSearchUsersSection().filters.mapDistrictId,\n mapPointId: this.getSearchUsersSection().filters.mapPointId\n }\n }\n\n onMapFilterChanged(mapRegionId: number | null, mapDistrictId: number | null, mapPointId: number | null) {\n this.getInteractiveMap().changeMap(mapRegionId, mapDistrictId, mapPointId)\n }\n\n mapSelectionChanged(selectedRegion: IInteractiveMapData_Region | null,\n selectedDistrict: IInteractiveMapData_District | null,\n selectedPoint: IInteractiveMapData_Point | null) {\n let mapRegionId: number | null = null;\n let mapRegionName = '';\n\n let mapDistrictId: number | null = null;\n let mapDistrictName = '';\n\n let mapPointId: number | null = null;\n let mapPointName = '';\n\n if (this.$helpers.isExists(selectedRegion)) {\n mapRegionId = selectedRegion!.id;\n mapRegionName = selectedRegion!.name;\n }\n if (this.$helpers.isExists(selectedDistrict)) {\n mapDistrictId = selectedDistrict!.id;\n mapDistrictName = selectedDistrict!.name;\n }\n if (this.$helpers.isExists(selectedPoint)) {\n mapPointId = selectedPoint!.id;\n mapPointName = selectedPoint!.name;\n }\n\n this.getSearchUsersSection().changeMapFilter(\n mapRegionId, mapRegionName,\n mapDistrictId, mapDistrictName,\n mapPointId, mapPointName);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=f735692e&\"\nimport script from \"./Home.vue?vue&type=script&lang=ts&\"\nexport * from \"./Home.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-row',{staticClass:\"flexbox-container\"},[_c('b-col',{staticClass:\"d-flex justify-content-center\",attrs:{\"cols\":\"11\",\"xl\":\"8\"}},[_c('div',{staticClass:\"card bg-authentication rounded-0 mb-0\"},[_c('b-row',{staticClass:\"m-0\"},[_c('b-col',{staticClass:\"d-lg-block d-none text-center px-1 py-0\",attrs:{\"lg\":\"6\",\"align-self\":\"center\"}},[_c('img',{attrs:{\"src\":\"/images/login.png\",\"alt\":\"\"}})]),_c('b-col',{staticClass:\"p-0\",attrs:{\"lg\":\"6\",\"cols\":\"12\"}},[_c('div',{staticClass:\"card rounded-0 mb-0 px-2\"},[_c('div',{staticClass:\"card-header pb-1\"},[_c('div',{staticClass:\"card-title\"},[_c('h4',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.isForgotPasswordMode ? 'Змінити пароль' : 'Увійти'))])])]),_c('p',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isForgotPasswordMode),expression:\"isForgotPasswordMode\"}],staticClass:\"px-2\"},[_vm._v(\"\\n Для зміни пароля, будь ласка, введіть ваше ім'я користувача.\\n \")]),_c('p',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isForgotPasswordMode),expression:\"!isForgotPasswordMode\"}],staticClass:\"px-2\"},[_vm._v(\"\\n Ласкаво просимо, будь ласка, увійдіть до свого облікового запису.\\n \")]),_c('div',{staticClass:\"card-content pb-2\"},[_c('div',{staticClass:\"card-body pt-1\"},[_c('b-form',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isForgotPasswordMode),expression:\"!isForgotPasswordMode\"}]},[_c('b-form-group',{staticClass:\"position-relative has-icon-left\"},[_c('b-form-input',{directives:[{name:\"validate\",rawName:\"v-validate\",value:('required'),expression:\"'required'\"}],key:\"username-input\",attrs:{\"id\":\"username-input\",\"name\":\"username-input\",\"placeholder\":\"Ім'я користувача\",\"data-vv-as\":\"\\\"Ім'я користувача\\\"\",\"data-vv-scope\":\"login\",\"state\":_vm.validateState('username-input', 'login'),\"aria-describedby\":\"username-input-feedback\",\"trim\":\"\",\"disabled\":_vm.$store.state.auth.isLoginInProgress},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.login($event)}},model:{value:(_vm.username),callback:function ($$v) {_vm.username=$$v},expression:\"username\"}}),_c('div',{staticClass:\"form-control-position\"},[_c('i',{staticClass:\"feather icon-user\"})]),_c('b-form-invalid-feedback',{attrs:{\"id\":\"username-input-feedback\"}},[_vm._v(\"\\n \"+_vm._s(_vm.veeErrors.first('login.username-input'))+\"\\n \")])],1),_c('b-form-group',{staticClass:\"position-relative has-icon-left\"},[_c('b-form-input',{directives:[{name:\"validate\",rawName:\"v-validate\",value:('required|min:' + _vm.$const.minPasswordLength),expression:\"'required|min:' + $const.minPasswordLength\"}],key:\"password-input\",attrs:{\"id\":\"password-input\",\"name\":\"password-input\",\"type\":\"password\",\"placeholder\":\"Пароль\",\"data-vv-as\":\"\\\"Пароль\\\"\",\"data-vv-scope\":\"login\",\"state\":_vm.validateState('password-input', 'login'),\"aria-describedby\":\"password-input-feedback\",\"disabled\":_vm.$store.state.auth.isLoginInProgress},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.login($event)}},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}}),_c('div',{staticClass:\"form-control-position\"},[_c('i',{staticClass:\"feather icon-lock\"})]),_c('b-form-invalid-feedback',{attrs:{\"id\":\"password-input-feedback\"}},[_vm._v(\"\\n \"+_vm._s(_vm.veeErrors.first('login.password-input'))+\"\\n \")])],1),_c('b-form-group',[_c('div',{staticClass:\"text-right\"},[_c('b-link',{staticClass:\"card-link\",attrs:{\"disabled\":_vm.isButtonsDisabled || _vm.$store.state.auth.isLoginInProgress},on:{\"click\":function($event){return _vm.setForgotPasswordMode(true)}}},[_vm._v(\"Забули пароль?\")])],1)]),_c('b-button',{staticClass:\"float-right\",attrs:{\"variant\":\"primary\",\"disabled\":_vm.isButtonsDisabled || _vm.$store.state.auth.isLoginInProgress || !_vm.isValidationScopeValid('login')},on:{\"click\":_vm.login}},[_vm._v(\"Увійти\")])],1),_c('b-form',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isForgotPasswordMode),expression:\"isForgotPasswordMode\"}]},[_c('b-form-group',{staticClass:\"position-relative has-icon-left\"},[_c('b-form-input',{directives:[{name:\"validate\",rawName:\"v-validate\",value:('required'),expression:\"'required'\"}],key:\"forgotPasswordUsername-input\",attrs:{\"id\":\"forgotPasswordUsername-input\",\"name\":\"forgotPasswordUsername-input\",\"placeholder\":\"Ім'я користувача\",\"data-vv-as\":\"\\\"Ім'я користувача\\\"\",\"data-vv-scope\":\"forgotPassword\",\"state\":_vm.validateState('forgotPasswordUsername-input', 'forgotPassword'),\"aria-describedby\":\"forgotPasswordUsername-input-feedback\",\"trim\":\"\"},model:{value:(_vm.forgotPasswordUsername),callback:function ($$v) {_vm.forgotPasswordUsername=$$v},expression:\"forgotPasswordUsername\"}}),_c('div',{staticClass:\"form-control-position\"},[_c('i',{staticClass:\"feather icon-user\"})]),_c('b-form-invalid-feedback',{attrs:{\"id\":\"forgotPasswordUsername-input-feedback\"}},[_vm._v(\"\\n \"+_vm._s(_vm.veeErrors.first('forgotPassword.forgotPasswordUsername-input'))+\"\\n \")])],1),_c('b-button',{staticClass:\"float-left\",attrs:{\"variant\":\"secondary\",\"disabled\":_vm.isButtonsDisabled},on:{\"click\":function($event){return _vm.setForgotPasswordMode(false)}}},[_vm._v(\"Відміна\")]),_c('b-button',{staticClass:\"float-right\",attrs:{\"variant\":\"primary\",\"disabled\":_vm.isButtonsDisabled || !_vm.isValidationScopeValid('forgotPassword')},on:{\"click\":_vm.forgotPassword}},[_vm._v(\"Змінити пароль\")])],1)],1)])])])],1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Watch, Vue } from 'vue-property-decorator'\r\nimport Helpers from '@/helpers'\r\nimport {AuthModule} from '@/store/modules/auth'\r\nimport usersApi from '@/api/users'\r\n\r\n@Component\r\nexport default class Login extends Vue {\r\n isButtonsDisabled = false;\r\n\r\n username = process.env.NODE_ENV === 'development' ? 'admin' : '';\r\n password = process.env.NODE_ENV === 'development' ? '11111' : '';\r\n\r\n isForgotPasswordMode = false;\r\n forgotPasswordUsername = '';\r\n\r\n @Watch('$store.state.auth.isAuthenticated')\r\n onAuthIsAuthenticatedChanged(val: boolean, oldVal: boolean) {\r\n this.tryAutoLogin();\r\n }\r\n\r\n // methods\r\n isValidationScopeValid(scope: string) {\r\n return this.$appUtils.vvIsValidationScopeValid(this, scope);\r\n }\r\n\r\n validateState(ref: string, scope?: string) {\r\n return this.$appUtils.vvValidateState(this, ref, scope);\r\n }\r\n\r\n showError(errorMessage?: string) {\r\n this.$bvToast.toast(errorMessage || \"Спробуйте пізніше\", {\r\n title: \"Помилка\",\r\n variant: \"danger\"\r\n })\r\n }\r\n\r\n setForgotPasswordMode(isEnabled: boolean) {\r\n this.username = \"\";\r\n this.password = \"\";\r\n this.forgotPasswordUsername = \"\";\r\n\r\n this.isForgotPasswordMode = isEnabled;\r\n\r\n this.$validator.reset();\r\n }\r\n\r\n async login() {\r\n let isValid = await this.$validator.validateAll('login');\r\n\r\n if (isValid) {\r\n this.isButtonsDisabled = true;\r\n\r\n const isAlreadyAuthenticated = AuthModule.isAuthenticated;\r\n\r\n const isSuccess = await AuthModule.login({\r\n acl: this.$acl,\r\n username: this.username,\r\n password: this.password,\r\n showError: (message) => {\r\n this.showError(message);\r\n\r\n this.isButtonsDisabled = false;\r\n }\r\n });\r\n\r\n if (isSuccess) {\r\n if (isAlreadyAuthenticated) {\r\n this.$router.push(this.$helpers.isNotEmpty(this.$route.query.to) ? this.$route.query.to.toString() : '/');\r\n } else {\r\n // tryAutoLogin automatically push to home\r\n }\r\n } else {\r\n this.isButtonsDisabled = false;\r\n }\r\n }\r\n }\r\n\r\n async forgotPassword() {\r\n let isValid = await this.$validator.validateAll('forgotPassword');\r\n\r\n if (isValid) {\r\n this.isButtonsDisabled = true;\r\n\r\n usersApi.sendPasswordReset(this.forgotPasswordUsername, data => {\r\n if (data.success) {\r\n this.forgotPasswordUsername = \"\";\r\n this.isForgotPasswordMode = false;\r\n\r\n this.$bvToast.toast(\"Посилання на зміну пароля успішно відправлено на пошту\", {\r\n title: \"Успіх\",\r\n variant: \"success\"\r\n });\r\n } else {\r\n this.$bvToast.toast(\"Посилання на зміну пароля не вдалося відправити\", {\r\n title: \"Помилка\",\r\n variant: \"danger\"\r\n });\r\n }\r\n\r\n this.isButtonsDisabled = false;\r\n }, errorMessage => {\r\n this.isButtonsDisabled = false;\r\n\r\n this.showError(errorMessage)\r\n });\r\n }\r\n }\r\n\r\n tryAutoLogin() {\r\n if (AuthModule.isAuthenticated) {\r\n this.$router.push(this.$helpers.isNotEmpty(this.$route.query.to) ? this.$route.query.to.toString() : '/');\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=434cfbb7&\"\nimport script from \"./Login.vue?vue&type=script&lang=ts&\"\nexport * from \"./Login.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\nimport Vue from 'vue'\r\nimport Router from 'vue-router'\r\nimport store from \"@/store/root\";\r\nimport * as aclTypes from \"@/plugins/acl-types\";\r\nimport { AuthModule } from \"@/store/modules/auth\"\r\nimport mapApi from '@/api/map'\r\n\r\nimport MainLayout from \"@/layouts/Main.vue\";\r\nimport FullPageLayout from \"@/layouts/FullPage.vue\";\r\nimport TransitView from \"@/layouts/TransitView.vue\";\r\n\r\nconst AdminAccess_KnowledgeBaseArticles = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-access/KnowledgeBaseArticles.vue\");\r\nconst AdminAccess_EditKnowledgeBaseArticle = () => import(\"@/views/admin-access/EditKnowledgeBaseArticle.vue\");\r\nconst AdminAccess_Users = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-access/Users.vue\");\r\nconst AdminAccess_EditUser = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-access/EditUser.vue\");\r\n\r\nconst AdminPanel = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/AdminPanel.vue\");\r\nconst AdminPanel_Server = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/Server.vue\");\r\nconst AdminPanel_Organizations = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/Organizations.vue\");\r\nconst AdminPanel_EditOrganization = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/EditOrganization.vue\");\r\nconst AdminPanel_TelephonyServers = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/TelephonyServers.vue\");\r\nconst AdminPanel_EditTelephonyServer = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/EditTelephonyServer.vue\");\r\nconst AdminPanel_EditMap = () => import(/* webpackChunkName: \"admin\" */ \"@/views/admin-panel/EditMap.vue\");\r\n\r\nimport Home from \"@/views/home/Home.vue\";\r\n\r\n//import Blank from \"@/views/other/Blank.vue\";\r\nconst Error404Page = () => import(/* webpackChunkName: \"user-actions\" */ \"@/views/other/Error404.vue\");\r\nimport LoginPage from \"@/views/other/Login.vue\";\r\n\r\nconst CreateUserPage = () => import(/* webpackChunkName: \"user-actions\" */ \"@/views/user/CreateUser.vue\");\r\nconst UserProfile = () => import(\"@/views/user/UserProfile.vue\");\r\nconst ResetPasswordPage = () => import(/* webpackChunkName: \"user-actions\" */ \"@/views/user/ResetPassword.vue\");\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 scrollBehavior () {\r\n return { x: 0, y: 0 }\r\n },\r\n routes: [\r\n {\r\n // =============================================================================\r\n // MAIN LAYOUT\r\n // =============================================================================\r\n path: '',\r\n component: MainLayout,\r\n children: [\r\n {\r\n path: '/',\r\n name: 'home',\r\n component: Home,\r\n meta: {\r\n rule: aclTypes.AccessRules_Public,\r\n \r\n title: \"Головна\",\r\n icon: \"icon-home\",\r\n \r\n isScreenHeightPage: true,\r\n }\r\n },\r\n {\r\n path: '/profile',\r\n name: 'profile',\r\n component: UserProfile,\r\n meta: {\r\n rule: aclTypes.AccessRules_Public,\r\n \r\n title: \"Профіль\",\r\n pageTitle: \"Профіль\",\r\n }\r\n },\r\n {\r\n path: '/users',\r\n component: TransitView,\r\n children: [\r\n {\r\n path: '',\r\n name: 'users-table',\r\n component: AdminAccess_Users,\r\n meta: {\r\n rule: aclTypes.AccessRules_Users,\r\n \r\n title: \"Абоненти\",\r\n pageTitle: \"Абоненти\",\r\n }\r\n },\r\n {\r\n path: ':id/edit',\r\n name: 'edit-user',\r\n component: AdminAccess_EditUser,\r\n meta: {\r\n rule: aclTypes.AccessRules_Users,\r\n \r\n title: \"Редагувати абонента\",\r\n pageTitle: \"Редагувати абонента\"\r\n }\r\n },\r\n ],\r\n meta: {\r\n rule: aclTypes.AccessRules_Users,\r\n \r\n title: \"Абоненти\",\r\n icon: \"icon-users\",\r\n }\r\n },\r\n {\r\n path: '/knowledge-base',\r\n component: TransitView,\r\n children: [\r\n {\r\n path: '',\r\n name: 'knowledge-base-articles-table',\r\n component: AdminAccess_KnowledgeBaseArticles,\r\n meta: {\r\n rule: aclTypes.AccessRules_KnowledgeBase,\r\n \r\n title: \"База знань\",\r\n pageTitle: \"База знань\",\r\n }\r\n },\r\n {\r\n path: 'create',\r\n name: 'create-knowledge-base-article',\r\n component: AdminAccess_EditKnowledgeBaseArticle,\r\n meta: {\r\n rule: aclTypes.AccessRules_KnowledgeBase,\r\n \r\n title: \"Створити статтю\",\r\n pageTitle: \"Створити статтю\",\r\n }\r\n },\r\n {\r\n path: ':id/edit-article',\r\n name: 'edit-knowledge-base-article',\r\n component: AdminAccess_EditKnowledgeBaseArticle,\r\n meta: {\r\n rule: aclTypes.AccessRules_KnowledgeBase,\r\n \r\n title: \"Редагувати статтю\",\r\n pageTitle: \"Редагувати статтю\",\r\n }\r\n },\r\n ],\r\n meta: {\r\n rule: aclTypes.AccessRules_KnowledgeBase,\r\n \r\n title: \"База знань\",\r\n icon: \"icon-book\",\r\n }\r\n },\r\n {\r\n path: '/admin-panel',\r\n component: TransitView,\r\n children: [\r\n {\r\n path: '',\r\n name: 'admin-panel',\r\n component: AdminPanel,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Панель адміністрування\",\r\n pageTitle: \"Панель адміністрування\"\r\n }\r\n },\r\n {\r\n path: 'server',\r\n name: 'server',\r\n component: AdminPanel_Server,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Сервер\",\r\n pageTitle: \"Сервер\"\r\n }\r\n },\r\n {\r\n path: 'edit-map',\r\n name: 'edit-map',\r\n component: AdminPanel_EditMap,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Редактор мапи\",\r\n pageTitle: \"Редактор мапи\"\r\n }\r\n },\r\n {\r\n path: 'organizations',\r\n name: 'organizations-table',\r\n component: AdminPanel_Organizations,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Організації\",\r\n pageTitle: \"Організації\",\r\n }\r\n },\r\n {\r\n path: 'organizations/create',\r\n name: 'create-organization',\r\n component: AdminPanel_EditOrganization,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Створити організацію\",\r\n pageTitle: \"Створити організацію\",\r\n }\r\n },\r\n {\r\n path: 'organizations/:id/edit',\r\n name: 'edit-organization',\r\n component: AdminPanel_EditOrganization,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Редагувати організацію\",\r\n pageTitle: \"Редагувати організацію\",\r\n }\r\n },\r\n {\r\n path: 'telephony-servers',\r\n name: 'telephony-servers-table',\r\n component: AdminPanel_TelephonyServers,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Сервери телефонії\",\r\n pageTitle: \"Сервери телефонії\",\r\n }\r\n },\r\n {\r\n path: 'telephony-servers/create',\r\n name: 'create-telephony-server',\r\n component: AdminPanel_EditTelephonyServer,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Створити сервер телефонії\",\r\n pageTitle: \"Створити сервер телефонії\",\r\n }\r\n },\r\n {\r\n path: 'telephony-servers/:id/edit',\r\n name: 'edit-telephony-server',\r\n component: AdminPanel_EditTelephonyServer,\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Редагувати сервер телефонії\",\r\n pageTitle: \"Редагувати сервер телефонії\",\r\n }\r\n },\r\n ],\r\n meta: {\r\n rule: aclTypes.AccessRules_SystemAdmin,\r\n \r\n title: \"Панель адміністрування\",\r\n icon: \"icon-shield\",\r\n }\r\n },\r\n ],\r\n },\r\n // =============================================================================\r\n // FULL PAGE LAYOUT\r\n // =============================================================================\r\n {\r\n path: '',\r\n component: FullPageLayout,\r\n children: [\r\n {\r\n path: '/login',\r\n name: 'login',\r\n component: LoginPage,\r\n meta: {\r\n isAnonymousAllowed: true,\r\n rule: aclTypes.AccessRules_Public\r\n }\r\n },\r\n {\r\n path: ':key/create-user',\r\n name: 'create-user',\r\n component: CreateUserPage,\r\n meta: {\r\n isAnonymousAllowed: true,\r\n rule: aclTypes.AccessRules_Public,\r\n \r\n isBackgroundImageHidden: true,\r\n }\r\n },\r\n {\r\n path: ':key/reset-password',\r\n name: 'reset-password',\r\n component: ResetPasswordPage,\r\n meta: {\r\n isAnonymousAllowed: true,\r\n rule: aclTypes.AccessRules_Public,\r\n \r\n isBackgroundImageHidden: true,\r\n }\r\n },\r\n {\r\n path: '/error-404',\r\n name: 'error-404',\r\n component: Error404Page,\r\n meta: {\r\n isAnonymousAllowed: true,\r\n rule: aclTypes.AccessRules_Public\r\n }\r\n },\r\n ]\r\n },\r\n // Ignore\r\n {\r\n path: '',\r\n children: [\r\n {\r\n path: '/api',\r\n name: 'api',\r\n },\r\n {\r\n path: '/ws',\r\n name: 'websocket',\r\n },\r\n ],\r\n },\r\n // Redirect to 404 page, if no match found\r\n {\r\n path: '*',\r\n redirect: '/error-404'\r\n }\r\n ],\r\n});\r\n\r\nrouter.afterEach(() => {\r\n // Remove initial loading\r\n const appLoading = document.getElementById('loading-bg')\r\n if (appLoading) {\r\n appLoading.style.display = \"none\";\r\n }\r\n});\r\n\r\nrouter.beforeEach((to, from, next) => {\r\n mapApi.invalidateCache();\r\n \r\n if (to.meta.isAnonymousAllowed ||\r\n AuthModule.isAuthenticated) {\r\n return next();\r\n }\r\n \r\n next({ name: 'login', query: { to: to.path } });\r\n});\r\n\r\nexport default router\r\n","import Vue from 'vue'\n// @ts-ignore\nimport { AclInstaller, AclCreate, AclRule } from 'vue-acl'\nimport router from '@/router'\nimport * as aclTypes from '@/plugins/acl-types'\n\nVue.use(AclInstaller);\n\nexport default new AclCreate({\n initial: aclTypes.AccessRules_Public,\n notfound: '/login',\n router,\n acceptLocalRules: true,\n globalRules: {\n [aclTypes.AccessRules_Public]: new AclRule(aclTypes.AccessRules_Public).generate(),\n [aclTypes.AccessRules_SystemAdmin]: new AclRule(aclTypes.AccessRules_SystemAdmin).generate(),\n [aclTypes.AccessRules_Users]: new AclRule(aclTypes.AccessRules_SystemAdmin).or(aclTypes.AccessRules_Users).generate(),\n [aclTypes.AccessRules_KnowledgeBase]: new AclRule(aclTypes.AccessRules_SystemAdmin).or(aclTypes.AccessRules_KnowledgeBase).generate(),\n }\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"v-select\",class:_vm.stateClasses,attrs:{\"dir\":_vm.dir}},[_c('div',{ref:\"toggle\",staticClass:\"vs__dropdown-toggle\",on:{\"mousedown\":function($event){$event.preventDefault();return _vm.toggleDropdown($event)}}},[_c('div',{ref:\"selectedOptions\",staticClass:\"vs__selected-options\",class:{ 'is-multiple-select': _vm.multiple }},[_vm._l((_vm.selectedValue),function(option){return _vm._t(\"selected-option-container\",[_c('span',{key:_vm.getOptionKey(option),staticClass:\"vs__selected\"},[_vm._t(\"selected-option\",[_vm._v(\"\\n \"+_vm._s(_vm.getOptionLabel(option))+\"\\n \")],null,_vm.normalizeOptionForSlot(option)),(_vm.multiple)?_c('button',{staticClass:\"vs__deselect\",attrs:{\"disabled\":_vm.disabled,\"type\":\"button\",\"aria-label\":\"Deselect option\"},on:{\"click\":function($event){return _vm.deselect(option)}}},[_c(_vm.childComponents.Deselect,{tag:\"component\"})],1):_vm._e()],2)],{\"option\":_vm.normalizeOptionForSlot(option),\"deselect\":_vm.deselect,\"multiple\":_vm.multiple,\"disabled\":_vm.disabled})}),_vm._t(\"search\",[_c('input',_vm._g(_vm._b({staticClass:\"vs__search\"},'input',_vm.scope.search.attributes,false),_vm.scope.search.events))],null,_vm.scope.search)],2),_c('div',{staticClass:\"vs__actions\"},[_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showClearButton),expression:\"showClearButton\"}],staticClass:\"vs__clear\",attrs:{\"disabled\":_vm.disabled,\"type\":\"button\",\"title\":\"Clear selection\"},on:{\"click\":_vm.clearSelection}},[_c(_vm.childComponents.Deselect,{tag:\"component\"})],1),_vm._t(\"open-indicator\",[(!_vm.noDrop)?_c(_vm.childComponents.OpenIndicator,_vm._b({tag:\"component\"},'component',_vm.scope.openIndicator.attributes,false)):_vm._e()],null,_vm.scope.openIndicator),_vm._t(\"spinner\",[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.mutableLoading),expression:\"mutableLoading\"}],staticClass:\"vs__spinner\"},[_vm._v(\"Loading...\")])],null,_vm.scope.spinner)],2)]),_c('transition',{attrs:{\"name\":_vm.transition}},[(_vm.dropdownOpen)?_c('ul',{ref:\"dropdownMenu\",staticClass:\"vs__dropdown-menu\",attrs:{\"role\":\"listbox\"},on:{\"mousedown\":_vm.onMousedown,\"mouseup\":_vm.onMouseUp}},[_vm._l((_vm.filteredOptions),function(option,index){return _c('li',{key:_vm.getOptionKey(option),staticClass:\"vs__dropdown-option\",class:{ 'vs__dropdown-option--selected': _vm.isOptionSelected(option), 'vs__dropdown-option--highlight': index === _vm.typeAheadPointer },attrs:{\"role\":\"option\"},on:{\"mouseover\":function($event){_vm.typeAheadPointer = index},\"mousedown\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.select(option)}}},[_vm._t(\"option\",[_vm._v(\"\\n \"+_vm._s(_vm.getOptionLabel(option))+\"\\n \")],null,_vm.normalizeOptionForSlot(option))],2)}),(!_vm.filteredOptions.length)?_c('li',{staticClass:\"vs__no-options\",on:{\"mousedown\":function($event){$event.stopPropagation();}}},[_vm._t(\"no-options\",[_vm._v(\"Sorry, no matching options.\")])],2):_vm._e()],2):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\n watch: {\n typeAheadPointer() {\n this.maybeAdjustScroll();\n }\n },\n\n methods: {\n /**\n * Adjust the scroll position of the dropdown list\n * if the current pointer is outside of the\n * overflow bounds.\n * @returns {*}\n */\n maybeAdjustScroll() {\n let pixelsToPointerTop = this.pixelsToPointerTop();\n let pixelsToPointerBottom = this.pixelsToPointerBottom();\n\n if (pixelsToPointerTop <= this.viewport().top) {\n return this.scrollTo(pixelsToPointerTop);\n } else if (pixelsToPointerBottom >= this.viewport().bottom) {\n return this.scrollTo(this.viewport().top + this.pointerHeight());\n }\n },\n\n /**\n * The distance in pixels from the top of the dropdown\n * list to the top of the current pointer element.\n * @returns {number}\n */\n pixelsToPointerTop() {\n let pixelsToPointerTop = 0;\n if (this.$refs.dropdownMenu) {\n for (let i = 0; i < this.typeAheadPointer; i++) {\n pixelsToPointerTop += this.$refs.dropdownMenu.children[i]\n .offsetHeight;\n }\n }\n return pixelsToPointerTop;\n },\n\n /**\n * The distance in pixels from the top of the dropdown\n * list to the bottom of the current pointer element.\n * @returns {*}\n */\n pixelsToPointerBottom() {\n return this.pixelsToPointerTop() + this.pointerHeight();\n },\n\n /**\n * The offsetHeight of the current pointer element.\n * @returns {number}\n */\n pointerHeight() {\n let element = this.$refs.dropdownMenu\n ? this.$refs.dropdownMenu.children[this.typeAheadPointer]\n : false;\n return element ? element.offsetHeight : 0;\n },\n\n /**\n * The currently viewable portion of the dropdownMenu.\n * @returns {{top: (string|*|number), bottom: *}}\n */\n viewport() {\n return {\n top: this.$refs.dropdownMenu ? this.$refs.dropdownMenu.scrollTop : 0,\n bottom: this.$refs.dropdownMenu\n ? this.$refs.dropdownMenu.offsetHeight +\n this.$refs.dropdownMenu.scrollTop\n : 0\n };\n },\n\n /**\n * Scroll the dropdownMenu to a given position.\n * @param position\n * @returns {*}\n */\n scrollTo(position) {\n return this.$refs.dropdownMenu\n ? (this.$refs.dropdownMenu.scrollTop = position)\n : null;\n }\n }\n};\n","export default {\n data() {\n return {\n typeAheadPointer: -1\n }\n },\n\n watch: {\n filteredOptions() {\n this.typeAheadPointer = 0\n }\n },\n\n methods: {\n /**\n * Move the typeAheadPointer visually up the list by\n * subtracting the current index by one.\n * @return {void}\n */\n typeAheadUp() {\n if (this.typeAheadPointer > 0) {\n this.typeAheadPointer--\n if( this.maybeAdjustScroll ) {\n this.maybeAdjustScroll()\n }\n }\n },\n\n /**\n * Move the typeAheadPointer visually down the list by\n * adding the current index by one.\n * @return {void}\n */\n typeAheadDown() {\n if (this.typeAheadPointer < this.filteredOptions.length - 1) {\n this.typeAheadPointer++\n if( this.maybeAdjustScroll ) {\n this.maybeAdjustScroll()\n }\n }\n },\n\n /**\n * Select the option at the current typeAheadPointer position.\n * Optionally clear the search input on selection.\n * @return {void}\n */\n typeAheadSelect() {\n if( this.filteredOptions[ this.typeAheadPointer ] ) {\n this.select( this.filteredOptions[ this.typeAheadPointer ] );\n } else if (this.taggable && this.search.length){\n this.select(this.search)\n }\n\n if( this.clearSearchOnSelect ) {\n this.search = \"\";\n }\n },\n }\n}\n","export default {\n props: {\n /**\n * Toggles the adding of a 'loading' class to the main\n * .v-select wrapper. Useful to control UI state when\n * results are being processed through AJAX.\n */\n loading: {\n type: Boolean,\n default: false,\n },\n },\n\n data () {\n return {\n mutableLoading: false,\n };\n },\n\n watch: {\n /**\n * Anytime the search string changes, emit the\n * 'search' event. The event is passed with two\n * parameters: the search string, and a function\n * that accepts a boolean parameter to toggle the\n * loading state.\n *\n * @emits search\n */\n search () {\n this.$emit('search', this.search, this.toggleLoading);\n },\n\n /**\n * Sync the loading prop with the internal\n * mutable loading value.\n * @param val\n */\n loading (val) {\n this.mutableLoading = val;\n },\n },\n\n methods: {\n /**\n * Toggle this.loading. Optionally pass a boolean\n * value. If no value is provided, this.loading\n * will be set to the opposite of it's current value.\n * @param toggle Boolean\n * @returns {*}\n */\n toggleLoading (toggle = null) {\n if (toggle == null) {\n return (this.mutableLoading = !this.mutableLoading);\n }\n return (this.mutableLoading = toggle);\n },\n },\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"10\",\"height\":\"10\"}},[_c('path',{attrs:{\"d\":\"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Deselect.vue?vue&type=template&id=1021c190&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"14\",\"height\":\"10\"}},[_c('path',{attrs:{\"d\":\"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./OpenIndicator.vue?vue&type=template&id=fc3fee6c&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Deselect from './Deselect';\nimport OpenIndicator from './OpenIndicator';\n\nexport default {\n Deselect,\n OpenIndicator\n}\n","const DROPDOWN_EDGE_MARGIN = 30\r\n\r\n/**\r\n * An object that contains offset values of an element.\r\n * @typedef {Object} Offset\r\n * @property {number} top\r\n * @property {number} left\r\n * @property {number} maxHeight\r\n */\r\n\r\nexport default {\r\n /**\r\n * Positioning the dropdown list.\r\n * @param {HTMLElement} baseElement element to positioning relative of\r\n * @param {HTMLElement} targetElement element for positioning.\r\n * @param {string} [aboveCssClass='above'] CSS class to apply\r\n * if target element should be positioning above the base element.\r\n */\r\n positionDropdown (forceAbovePosition, baseElement, targetElement) {\r\n const offset = baseElement && baseElement.getBoundingClientRect();\r\n const maxHeight = window.innerHeight - offset.top - DROPDOWN_EDGE_MARGIN;\r\n \r\n const isBaseElementVisible = offset.top < window.innerHeight && offset.bottom >= 0;\r\n \r\n if (!isBaseElementVisible) return null;\r\n \r\n if (baseElement && targetElement) {\r\n const targetHeight = targetElement.offsetHeight;\r\n \r\n targetElement.style.width = `${offset.width}px`;\r\n \r\n if (forceAbovePosition || maxHeight < targetHeight && offset.top > targetHeight / 2) {\r\n let top = offset.top - targetHeight + 1;\r\n \r\n if (top < 0) {\r\n top = 0;\r\n targetElement.style.maxHeight = `${offset.top}px`;\r\n }\r\n \r\n return true;\r\n } else {\r\n if (maxHeight < targetHeight) {\r\n targetElement.style.maxHeight = `${maxHeight}px`;\r\n }\r\n \r\n return false;\r\n }\r\n }\r\n \r\n return null;\r\n },\r\n \r\n /**\r\n * Get a scrollable elements that is parent of the target element.\r\n * @param {HTMLElement} targetElement.\r\n * @return {Array} array of scrollable DOM elements.\r\n */\r\n getScrollableElements(targetElement) {\r\n const elements = []\r\n let el = targetElement.parentElement\r\n \r\n while (el && el.tagName !== 'HTML') {\r\n if (el.offsetHeight < el.scrollHeight) {\r\n elements.push(el)\r\n }\r\n el = el.parentElement\r\n }\r\n \r\n return elements\r\n }\r\n}\r\n","\n\n\n\n\n\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Select.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Select.vue?vue&type=template&id=07e34764&\"\nimport script from \"./Select.vue?vue&type=script&lang=js&\"\nexport * from \"./Select.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import VueSelect from './components/Select.vue'\nimport mixins from './mixins/index'\n\nexport default VueSelect\nexport { VueSelect, mixins }\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.$props.tagname,_vm._g({tag:\"section\",staticClass:\"ps-container\",on:{\"~mouseover\":function($event){return _vm.update($event)}}},_vm.$listeners),[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=e5a2bb14&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',_vm._b({staticClass:\"divider\",class:[_vm.data.class, _vm.data.staticClass]},'div',_vm.data.attrs,false),[_c('span',{staticClass:\"divider-text\",class:_vm.props.textClasses},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\n\n@Component({\n directives: {\n\n }\n})\nexport default class AppDivider extends Vue {\n @Prop([String, Array, Object]) textClasses: String | undefined;\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDivider.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDivider.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AppDivider.vue?vue&type=template&id=1bd70087&scoped=true&functional=true&\"\nimport script from \"./AppDivider.vue?vue&type=script&lang=ts&\"\nexport * from \"./AppDivider.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n \"1bd70087\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"page-loader-container\",style:({ height: _vm.currentHeight })},[_c('b-spinner',{staticStyle:{\"width\":\"4rem\",\"height\":\"4rem\"},attrs:{\"label\":\"Завантаження...\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\nimport {Component, Prop, Vue, Watch} from 'vue-property-decorator'\nimport {UiModule} from \"@/store/modules/ui\";\n\n@Component\nexport default class PageLoadingIndicator extends Vue {\n @Prop({ type: Number, default: 25 }) bottomOffset: number | undefined;\n\n currentHeight = \"100vh\";\n\n mounted() {\n this.updateContainerHeight()\n }\n\n @Watch(\"$store.state.ui.windowHeight\")\n updateContainerHeight() {\n if (this.$helpers.isNumeric(UiModule.windowHeight)) {\n this.currentHeight = (UiModule.windowHeight! - this.bottomOffset! * UiModule.windowHeight! / 100) + 'px';\n } else {\n this.currentHeight = (window.innerHeight - this.bottomOffset! * window.innerHeight! / 100) + 'px';\n }\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageLoadingIndicator.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageLoadingIndicator.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PageLoadingIndicator.vue?vue&type=template&id=729465e0&scoped=true&\"\nimport script from \"./PageLoadingIndicator.vue?vue&type=script&lang=ts&\"\nexport * from \"./PageLoadingIndicator.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./PageLoadingIndicator.vue?vue&type=style&index=0&id=729465e0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"729465e0\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\n\n// @ts-ignore\nimport vSelect from '@/components/vue-select/index.js'\n//import vSelect from 'vue-select'\n// @ts-ignore\nimport VuePerfectScrollbar from \"@/components/vue-perfect-scrollbar/index\";\nimport AppDivider from \"@/components/AppDivider.vue\";\nimport PageLoadingIndicator from \"@/components/PageLoadingIndicator.vue\";\n\n// Register components\n//\nVue.component(\"v-select\", vSelect);\nVue.component(\"vue-perfect-scrollbar\", VuePerfectScrollbar);\nVue.component(\"app-divider\", AppDivider);\nVue.component(\"page-loading-indicator\", PageLoadingIndicator);\n","import Vue from 'vue'\n\nconst BYTE_UNITS = ['Б', 'кБ', 'МБ', 'ГБ', 'ТБ', 'ПБ', 'ЕБ', 'ЗБ', 'ЙБ'];\nconst BIT_UNITS = ['б', 'кбіт', 'Мбіт', 'Гбіт', 'Тбіт', 'Пбіт', 'Ебіт', 'Збіт', 'Йбіт'];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number: number, locale: string) => {\n let result = number.toString();\n if (typeof locale === 'string') {\n result = number.toLocaleString(locale);\n } else if (locale === true) {\n result = number.toLocaleString();\n }\n \n return result;\n};\n\n// https://github.com/sindresorhus/pretty-bytes\nVue.filter('prettyBytes', (number: number, options: { bits: boolean, signed: boolean, locale: string }) => {\n if (!Number.isFinite(number)) {\n throw new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n }\n \n options = Object.assign({bits: false}, options);\n const UNITS = options.bits ? BIT_UNITS : BYTE_UNITS;\n \n if (options.signed && number === 0) {\n return ' 0 ' + UNITS[0];\n }\n \n const isNegative = number < 0;\n const prefix = isNegative ? '-' : (options.signed ? '+' : '');\n \n if (isNegative) {\n number = -number;\n }\n \n if (number < 1) {\n const numberString = toLocaleString(number, options.locale);\n return prefix + numberString + ' ' + UNITS[0];\n }\n \n const exponent = Math.min(Math.floor(Math.log10(number) / 3), UNITS.length - 1);\n // eslint-disable-next-line unicorn/prefer-exponentiation-operator\n number = Number((number / Math.pow(1000, exponent)).toPrecision(3));\n const numberString = toLocaleString(number, options.locale);\n \n const unit = UNITS[exponent];\n \n return prefix + numberString + ' ' + unit;\n});\n","import Vue from 'vue'\n\n// https://github.com/vuejs/vue/issues/1829\nVue.mixin({\n methods: {\n $withoutWatchers (cb) {\n let thisInst: { _watchers: any[] } = this;\n\n const watchers = thisInst._watchers.map((watcher) => ({ cb: watcher.cb, sync: watcher.sync }))\n\n for (let index in thisInst._watchers) {\n thisInst._watchers[index] = Object.assign(thisInst._watchers[index], { cb: () => null, sync: true })\n }\n\n cb()\n\n for (let index in thisInst._watchers) {\n thisInst._watchers[index] = Object.assign(thisInst._watchers[index], watchers[index])\n }\n }\n }\n})\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport Helpers, { HelpersModel } from \"@/helpers\";\r\nimport appUtils, {AppUtilsModel} from \"@/plugins/app-utils\";\r\nimport files, {FilesModel} from \"@/plugins/files\";\r\n\r\n// css vars support in IE11\r\nimport cssVars from 'css-vars-ponyfill';\r\ncssVars();\r\n\r\n// Feather font icons\r\nimport './assets/fonts/feather/iconfont.css';\r\n\r\n// Font Awesome font icons\r\nimport './assets/fonts/font-awesome/css/font-awesome.css';\r\n\r\n// Portal Vue\r\nimport PortalVue from 'portal-vue'\r\nVue.use(PortalVue);\r\n\r\n// Bootstrap Vue\r\n// IE11\r\nimport '@babel/polyfill'\r\nimport 'intersection-observer' // Optional\r\nimport BootstrapVue from 'bootstrap-vue'\r\nVue.use(BootstrapVue);\r\n\r\n// Moment Vue\r\nimport moment from 'moment'\r\n// @ts-ignore\r\nimport MomentVue from 'vue-moment'\r\n// workaround\r\nimport 'moment/locale/uk'\r\n\r\nVue.use(MomentVue, {\r\n moment\r\n});\r\n\r\n// Theme Configurations\r\nimport '../themeConfig'\r\n\r\n// ACL\r\nimport acl from '@/plugins/acl'\r\n\r\n// Globally Registered Components\r\nimport './globalComponents'\r\n\r\n// Styles: SCSS\r\nimport '@/assets/scss/main.scss'\r\n\r\n// Vue Router\r\nimport router from './router'\r\n\r\n// Vuex Store\r\nimport store from './store/root'\r\n\r\n// App Filters & Mixins\r\nimport './plugins/filters'\r\nimport './plugins/mixins'\r\n\r\n// VeeValidate\r\nimport VeeValidate, {ErrorBag, FieldBag, Validator} from 'vee-validate';\r\n// @ts-ignore\r\nimport uk from 'vee-validate/dist/locale/uk';\r\nVue.use(VeeValidate, { fieldsBagName: 'veeFields', errorBagName: 'veeErrors' });\r\nValidator.localize('uk', uk);\r\n// custom validators\r\nValidator.extend('appPassword', {\r\n getMessage: field => 'Поле ' + field + ' повинно містити 1 літеру нижнього регістра, 1 літеру верхнього регістра та 1 цифру',\r\n validate: (value) => {\r\n let hasUpperCaseLetter = false;\r\n let hasLowerCaseLetter = false;\r\n let hasDecimalDigit = false;\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n const character = value.charAt(i);\r\n\r\n // (important) check isNumeric first\r\n if (Helpers.isNumeric(character)) hasDecimalDigit = true;\r\n else if (character === character.toUpperCase()) hasUpperCaseLetter = true;\r\n else if (character === character.toLowerCase()) hasLowerCaseLetter = true;\r\n }\r\n return hasUpperCaseLetter && hasLowerCaseLetter && hasDecimalDigit;\r\n }\r\n});\r\nValidator.extend('appUserFullName', {\r\n getMessage: field => 'Поле ' + field + ' може містити букви та одне тире посередині',\r\n validate: (value, skipValues) => {\r\n if (Helpers.isArray(skipValues) && (skipValues)!.indexOf(value) >= 0) return true;\r\n\r\n if (Helpers.isNotEmpty(value)) {\r\n const dashCount = (value.match(/-/g) || []).length;\r\n if (dashCount > 1) return false;\r\n }\r\n\r\n return /^([А-ЩЬЮЯЄІЇҐ]|[А-ЩЬЮЯЄІЇҐ]+-?[А-ЩЬЮЯЄІЇҐ]+)$/i.test(value);\r\n }\r\n});\r\n\r\n// Other Utils\r\n//\r\ninterface AppConstants {\r\n mainPhoneName: string\r\n tableMaxItemsPerPage: number\r\n selectNoOptionsText: string\r\n selectSearchNotStartedText: string\r\n selectSearchTermMinLength: number\r\n selectSearchNoResultsText: string\r\n minPasswordLength: number\r\n maxPasswordLength: number\r\n maxFileSizeBytes: number\r\n avatarSmallImageSize: number\r\n avatarLargeImageSize: number\r\n}\r\nexport interface Acl {\r\n change(param: string | string[]): void;\r\n get: string | string[];\r\n not: Acl;\r\n check(ruleName: string): boolean\r\n onChange?(newPermission: string | string[]): void\r\n}\r\ndeclare module 'vue/types/vue' {\r\n interface Vue {\r\n readonly veeErrors: ErrorBag\r\n readonly veeFields: FieldBag\r\n readonly $const: AppConstants\r\n readonly $helpers: HelpersModel\r\n readonly $appUtils: AppUtilsModel\r\n readonly $acl: Acl\r\n readonly $files: FilesModel\r\n\r\n readonly $withoutWatchers: (cb: () => void) => void\r\n }\r\n}\r\ndeclare global {\r\n interface Window {\r\n App: Vue;\r\n }\r\n}\r\n\r\nVue.use({\r\n install (Vue, options) {\r\n Vue.prototype.$const = {\r\n mainPhoneName: \"основний\",\r\n tableMaxItemsPerPage: 50, // get from server\r\n selectNoOptionsText: \"Немає відповідних варіантів.\",\r\n selectSearchNotStartedText: \"Введіть слово для пошуку (мінімум 3 символа).\",\r\n selectSearchTermMinLength: 3,\r\n selectSearchNoResultsText: \"Не знайдено жодних результатів.\",\r\n searchTermMinLengthText: \"Строка пошуку повинна мати мінімум 3 символа\",\r\n minPasswordLength: 5,\r\n maxPasswordLength: 15,\r\n maxFileSizeBytes: 100000000, // ~100 mb\r\n avatarSmallImageSize: 36,\r\n avatarLargeImageSize: 128,\r\n };\r\n Vue.prototype.$helpers = Helpers;\r\n Vue.prototype.$appUtils = appUtils;\r\n Vue.prototype.$files = files;\r\n }\r\n});\r\n\r\nVue.config.productionTip = false;\r\n\r\n// @ts-ignore\r\nwindow.App = new Vue({ router, store, acl, render: h => h(App) }).$mount('#app');\r\n","/**\r\n * The WebSocketManager JavaScript Client. See https://github.com/radu-matei/websocket-manager/ for more information.\r\n */\r\nvar WebSocketManager = (function () {\r\n /**\r\n * Create a new web socket manager.\r\n * @param {any} url The web socket url (must start with ws://).\r\n */\r\n var constructor = function (url) {\r\n if (url === undefined) console.error(\"WebSocketManager constructor requires valid 'url'.\");\r\n let _this = this;\r\n \r\n /** Collection of methods on this client. */\r\n this.methods = [];\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Create a new networking message.\r\n */\r\n var Message = function (messageType, data) {\r\n this.$type = 'WebSocketManager.Common.Message';\r\n this.messageType = messageType;\r\n this.data = data;\r\n };\r\n /** Text message (constant: 0). */\r\n Message.Text = 0;\r\n /** Remote method invocation request message (constant: 1). */\r\n Message.MethodInvocation = 1;\r\n /** Connection event message (constant: 2). */\r\n Message.ConnectionEvent = 2;\r\n /** Remote method return value message (constant: 3). */\r\n Message.MethodReturnValue = 3;\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Create a new invocation descriptor.\r\n * @param {any} methodName The name of the remote method.\r\n * @param {any} args The arguments passed to the method.\r\n * @param {any} identifier The unique identifier of the invocation.\r\n */\r\n var InvocationDescriptor = function (methodName, args, identifier) {\r\n this.$type = 'WebSocketManager.Common.InvocationDescriptor';\r\n this.methodName = methodName;\r\n this.arguments = {\r\n $type: 'System.Object[]',\r\n $values: args\r\n };\r\n this.identifier = {\r\n $type: \"System.Guid\",\r\n $value: identifier\r\n };\r\n };\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Represents the return value of a method that was executed remotely.\r\n * @param {any} identifier The unique identifier of the invocation.\r\n * @param {any} result The result of the method call.\r\n * @param {any} exception The remote exception of the method call.\r\n */\r\n var InvocationResult = function (identifier, result, exception) {\r\n this.$type = 'WebSocketManager.Common.InvocationResult';\r\n this.result = result;\r\n this.exception = exception;\r\n this.identifier = {\r\n $type: \"System.Guid\",\r\n $value: identifier\r\n };\r\n if (exception !== undefined) {\r\n this.exception = {\r\n $type: \"WebSocketManager.Common.RemoteException\",\r\n message: exception\r\n }\r\n }\r\n };\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Collection of primitive type names and their C# mappings.\r\n */\r\n var typemappings = {\r\n guid: 'System.Guid',\r\n uuid: 'System.Guid', // convenience alias\r\n bool: 'System.Boolean',\r\n byte: 'System.Byte',\r\n sbyte: 'System.SByte',\r\n char: 'System.Char',\r\n decimal: 'System.Decimal',\r\n double: 'System.Double',\r\n float: 'System.Single',\r\n int: 'System.Int32',\r\n uint: 'System.UInt32',\r\n long: 'System.Int64',\r\n ulong: 'System.UInt64',\r\n short: 'System.Int16',\r\n ushort: 'System.UInt16',\r\n string: 'System.String',\r\n object: 'System.Object' // generic\r\n };\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Generates a UUID using a random number generator and the current time.\r\n * This is not truly unique but it's good enough (TM).\r\n */\r\n var uuid = function () { // Public Domain/MIT\r\n var d = new Date().getTime();\r\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\r\n d += performance.now(); // use high-precision timer if available\r\n }\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n }\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n var parseCSharpObject = function (obj) {\r\n if (typeof obj.$values !== \"undefined\" &&\r\n obj.$values !== null &&\r\n (Array.isArray ? Array.isArray(obj.$values) : obj.$values instanceof Array)) {\r\n var results = [];\r\n \r\n for (let i = 0; i < obj.$values.length; i++) {\r\n results.push(parseCSharpObject(obj.$values[i]))\r\n }\r\n \r\n return results;\r\n } else {\r\n var result = {};\r\n for (let key in obj) {\r\n var value = null;\r\n if (typeof obj[key] !== \"undefined\" && obj[key] !== null) {\r\n if (typeof obj[key] === \"object\") {\r\n if (obj[key].$type === \"System.Object\") {\r\n value = parseCSharpObject(obj[key]);\r\n } else {\r\n value = obj[key].$value;\r\n }\r\n } else {\r\n value = obj[key];\r\n }\r\n }\r\n \r\n if (key !== \"$type\") {\r\n result[key] = value;\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n }\r\n \r\n /**\r\n * Takes a C# collection of $type+$value and turns them into a simple array of values.\r\n * @param {any} collection The C# collection of $type+$value.\r\n */\r\n var parseCSharpArguments = function (collection) {\r\n var args = [];\r\n for (var i = 0; i < collection.length; i++) {\r\n if (collection[i]) {\r\n if (collection[i].$type === \"System.Object\") {\r\n args.push(parseCSharpObject(collection[i]));\r\n } else {\r\n args.push(collection[i].$value);\r\n }\r\n } else {\r\n args.push(null);\r\n }\r\n }\r\n return args;\r\n }\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * The waiting remote invocations for Client to Server method calls (return values).\r\n */\r\n var waitingRemoteInvocations = {};\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Called whenever the socket opens the connection.\r\n * @param {any} event The associated event data.\r\n */\r\n var onSocketOpen = function (event) {\r\n };\r\n \r\n /**\r\n * Called whenever the socket closes the connection.\r\n * @param {any} event The associated event data.\r\n */\r\n var onSocketClose = function (event) {\r\n // public event:\r\n if (_this.onDisconnected !== undefined) _this.onDisconnected();\r\n };\r\n \r\n /**\r\n * Called whenever the socket has an error.\r\n * @param {any} event The associated event data.\r\n */\r\n var onSocketError = function (event) {\r\n console.error(\"WebSocketManager error:\");\r\n console.error(event);\r\n };\r\n \r\n /**\r\n * Called whenever there is an incoming message.\r\n * @param {any} message The Message that was received.\r\n */\r\n var onSocketMessage = function (message) {\r\n // CONNECTION EVENT\r\n if (message.messageType === Message.ConnectionEvent) {\r\n // we received the unique identifier from the server.\r\n _this.id = message.data.$value;\r\n // public event:\r\n if (_this.onConnected !== undefined) _this.onConnected(_this.id);\r\n }\r\n \r\n // TEXT EVENT\r\n else if (message.messageType === Message.Text) {\r\n // public event:\r\n if (_this.onMessage !== undefined) _this.onMessage(message.data.$value);\r\n }\r\n \r\n // METHOD INVOCATION EVENT\r\n else if (message.messageType === Message.MethodInvocation) {\r\n var data = JSON.parse(message.data.$value);\r\n // find the method.\r\n if (_this.methods[data.methodName.$value] !== undefined) {\r\n // call the method and catch any exceptions.\r\n var result, error = undefined;\r\n try {\r\n var args = parseCSharpArguments(data.arguments['$values']);\r\n result = _this.methods[data.methodName.$value].apply(_this, args);\r\n }\r\n catch (e) { error = e; }\r\n \r\n // if the server desires a result we send a method return value.\r\n if (data.identifier.$value !== '00000000-0000-0000-0000-000000000000') {\r\n // an error occured so let the server know.\r\n if (error !== undefined) {\r\n // send web-socket message to the server.\r\n _this.socket.send(JSON.stringify(new Message(Message.MethodReturnValue,\r\n JSON.stringify(new InvocationResult(data.identifier.$value, null, \"A remote exception occured: \" + error))\r\n )));\r\n }\r\n // send result value to the server.\r\n else {\r\n // try finding an appropriate C# type.\r\n if (typemappings[result[0]] !== undefined)\r\n result[0] = typemappings[result[0]];\r\n // send web-socket message to the server.\r\n _this.socket.send(JSON.stringify(new Message(Message.MethodReturnValue,\r\n JSON.stringify(new InvocationResult(data.identifier.$value, { $type: result[0], $value: result[1] }))\r\n )));\r\n }\r\n }\r\n } else console.error(\"WebSocketManager: Server attempted to invoke unknown method '\" + data.methodName.$value + \"'!\");\r\n }\r\n \r\n // METHOD RETURN VALUE EVENT\r\n else if (message.messageType === Message.MethodReturnValue) {\r\n var data = JSON.parse(message.data.$value);\r\n // find the waiting remote invocation.\r\n var callback = waitingRemoteInvocations[data.identifier.$value];\r\n // remove it from the waiting list.\r\n delete waitingRemoteInvocations[data.identifier.$value];\r\n // call the callback.\r\n if (data.exception !== null) {\r\n callback(undefined, data.exception.message.$value);\r\n }\r\n else {\r\n if (data.result !== null) {\r\n callback(parseCSharpObject(data.result), undefined);\r\n } else {\r\n callback(null, undefined);\r\n }\r\n }\r\n }\r\n \r\n //console.log(message);\r\n };\r\n \r\n ///////////////////////////////////////////////////////////////////////////////////////////\r\n \r\n /**\r\n * Connects to the server.\r\n */\r\n this.connect = function () {\r\n // create a new web-socket connection to the server.\r\n _this.socket = new WebSocket(url);\r\n \r\n _this.socket.onopen = function (event) {\r\n onSocketOpen(event);\r\n }\r\n \r\n _this.socket.onclose = function (event) {\r\n // run all the callbacks on the waiting list so the program continues.\r\n Object.keys(waitingRemoteInvocations).forEach(function (guid) {\r\n waitingRemoteInvocations[guid](undefined, 'The web-socket connection was closed.');\r\n });\r\n waitingRemoteInvocations = {};\r\n \r\n onSocketClose(event);\r\n }\r\n \r\n _this.socket.onerror = function (event) {\r\n onSocketError(event);\r\n }\r\n \r\n _this.socket.onmessage = function (event) {\r\n onSocketMessage(JSON.parse(event.data));\r\n }\r\n };\r\n \r\n this.close = function (code) {\r\n if (_this.socket) {\r\n _this.socket.close(code);\r\n }\r\n }\r\n \r\n /**\r\n * Invoke a remote method on the server only, without a return value.\r\n * @param {any} method The name of the remote method to be invoked.\r\n */\r\n this.invokeOnly = function (method) {\r\n var args = [];\r\n // iterate through all arguments and find type/value relationships.\r\n for (var i = 1; i < arguments.length; i += 2) {\r\n var type = arguments[i];\r\n var value = arguments[i + 1];\r\n // try finding an appropriate C# type.\r\n if (typemappings[type] !== undefined)\r\n type = typemappings[type];\r\n // even if we can't find a C# type we assume the user knows what he's doing.\r\n args.push({ $type: type, $value: value });\r\n }\r\n \r\n // send web-socket message to the server.\r\n _this.socket.send(JSON.stringify(new Message(Message.MethodInvocation,\r\n JSON.stringify(new InvocationDescriptor(method, args, '00000000-0000-0000-0000-000000000000'))\r\n )));\r\n }\r\n \r\n /**\r\n * Invoke a remote method on the server, with a callback for the return value.\r\n * @param {any} method The name of the remote method to be invoked.\r\n */\r\n this.invoke = function (method) {\r\n var args = [];\r\n // iterate through all arguments and find type/value relationships.\r\n for (var i = 1; i < arguments.length - 1; i += 2) {\r\n var type = arguments[i];\r\n var value = arguments[i + 1];\r\n // try finding an appropriate C# type.\r\n if (typemappings[type] !== undefined)\r\n type = typemappings[type];\r\n // even if we can't find a C# type we assume the user knows what he's doing.\r\n args.push({ $type: type, $value: value });\r\n }\r\n // the last argument should be the callback method.\r\n var callback = arguments[arguments.length - 1];\r\n // generate a unique identifier to associate return values.\r\n var guid = uuid();\r\n // put this call on the waiting list.\r\n waitingRemoteInvocations[guid] = callback;\r\n \r\n // send web-socket message to the server.\r\n _this.socket.send(JSON.stringify(new Message(Message.MethodInvocation,\r\n JSON.stringify(new InvocationDescriptor(method, args, guid))\r\n )));\r\n }\r\n };\r\n \r\n return constructor;\r\n})();\r\n\r\nexport default WebSocketManager;\r\n","\r\nimport Helpers from '@/helpers'\r\n// @ts-ignore\r\nimport WebSocketManager from '@/components/web-socket-manager/WebSocketManager'\r\nimport {AuthModule} from \"@/store/modules/auth\";\r\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\r\nimport {CurrentCalleeInfoDto, CurrentUserInfoDto, PhoneCallItemDto, UserAuthDto, UserItemDto} from \"@/global\";\r\nimport {TelephonyModule} from \"@/store/modules/telephony\";\r\n\r\nexport default class WebsocketClient {\r\n private static _connection: any;\r\n private static _tryReconnectAttempts = 0;\r\n private static _tryReconnectTimeout: any;\r\n \r\n static tryConnect(token: string) {\r\n if (!Helpers.isExists(WebsocketClient._connection)) {\r\n let connection = new WebSocketManager(`ws://${location.host}/ws`);\r\n \r\n connection.onConnected = (socketId: string) => {\r\n console.log(\"[WS] Connected\", socketId);\r\n \r\n if (Helpers.isExists(WebsocketClient._tryReconnectTimeout)) {\r\n clearTimeout(WebsocketClient._tryReconnectTimeout);\r\n WebsocketClient._tryReconnectTimeout = null;\r\n }\r\n \r\n WebsocketClient._tryReconnectAttempts = 0;\r\n \r\n connection.invoke('Register', 'string', token, (result: boolean, error: string) => {\r\n if (result) {\r\n console.log(\"[WS] Registered\");\r\n \r\n connection.invoke('GetCurrentContext', (result: object[], error: string) => {\r\n if (Helpers.isArray(result)) {\r\n console.log(\"[WS] GetCurrentContext\", result);\r\n \r\n if (result.length > 0) {\r\n const currentUserInfo = result[0] as CurrentUserInfoDto;\r\n \r\n AuthModule.updateAuthUser({\r\n avatarFileId: currentUserInfo.avatarFileId,\r\n fullName: currentUserInfo.fullName,\r\n shortFullName: currentUserInfo.shortFullName,\r\n fullMainPhoneNumberFormatted: currentUserInfo.fullMainPhoneNumberFormatted\r\n });\r\n }\r\n \r\n if (result.length > 1) {\r\n const currentCalleeInfo = result[1] as CurrentCalleeInfoDto;\r\n \r\n connection.methods.controllableCallStarted(currentCalleeInfo.robotCallPhoneNumber, currentCalleeInfo.callee);\r\n }\r\n }\r\n })\r\n }\r\n });\r\n };\r\n \r\n connection.onDisconnected = () => {\r\n console.log(\"[WS] Disconnected\");\r\n \r\n WebsocketClient._connection = null;\r\n \r\n // try connect\r\n if (AuthModule.isAuthenticated) {\r\n console.log(\"[WS] Trying reconnect after timeout\");\r\n WebsocketClient._tryReconnectAttempts++;\r\n \r\n if (Helpers.isExists(WebsocketClient._tryReconnectTimeout)) {\r\n clearTimeout(WebsocketClient._tryReconnectTimeout);\r\n WebsocketClient._tryReconnectTimeout = null;\r\n }\r\n \r\n const currentTimeout = WebsocketClient._tryReconnectAttempts <= 2 ? 100 : 10000;\r\n \r\n WebsocketClient._tryReconnectTimeout = setTimeout(() => {\r\n WebsocketClient.tryConnect(token);\r\n }, currentTimeout);\r\n }\r\n };\r\n \r\n connection.methods.updateUser = (currentUserInfo: CurrentUserInfoDto) => {\r\n if (Helpers.isExists(currentUserInfo)) {\r\n console.log(\"[WS] updateUser\", currentUserInfo);\r\n \r\n AuthModule.updateAuthUser({\r\n avatarFileId: currentUserInfo.avatarFileId,\r\n fullName: currentUserInfo.fullName,\r\n shortFullName: currentUserInfo.shortFullName,\r\n fullMainPhoneNumberFormatted: currentUserInfo.fullMainPhoneNumberFormatted\r\n });\r\n }\r\n };\r\n \r\n connection.methods.forceLogout = () => {\r\n console.log(\"[WS] forceLogout\");\r\n // trigger global event\r\n EventBus.$emit(EventBusModel.logoutEventName);\r\n };\r\n \r\n connection.methods.controllableCallStarted = (robotCallPhoneNumber: string | null, callee: UserItemDto) => {\r\n console.log(`[WS] controllableCallStarted (${Helpers.isNotEmpty(robotCallPhoneNumber) ? \"Robot:\" + robotCallPhoneNumber : \"Source\"})`, callee);\r\n \r\n TelephonyModule.controllableCallStarted({\r\n robotCallPhoneNumber: robotCallPhoneNumber,\r\n toUserId: callee.id!\r\n });\r\n \r\n // trigger global event\r\n EventBus.$emit(EventBusModel.controllableCallStartedEventName, robotCallPhoneNumber, callee);\r\n };\r\n \r\n connection.methods.controllableCallEnded = () => {\r\n console.log(`[WS] controllableCallEnded`);\r\n \r\n TelephonyModule.controllableCallEnded();\r\n \r\n // trigger global event\r\n EventBus.$emit(EventBusModel.controllableCallEndedEventName);\r\n };\r\n \r\n connection.methods.newPhoneCallRecord = (phoneCall: PhoneCallItemDto) => {\r\n console.log(\"[WS] newPhoneCallRecord\", phoneCall);\r\n // trigger global event\r\n EventBus.$emit(EventBusModel.newPhoneCallEventName, phoneCall);\r\n };\r\n \r\n connection.connect();\r\n \r\n WebsocketClient._connection = connection;\r\n }\r\n }\r\n \r\n static disconnect() {\r\n if (Helpers.isExists(WebsocketClient._connection)) {\r\n WebsocketClient._connection.close(1000);\r\n WebsocketClient._connection = null;\r\n }\r\n }\r\n}\r\n","import { Module, VuexModule, Mutation, Action, getModule } from 'vuex-module-decorators'\r\nimport { UserAuthDto } from '@/global'\r\nimport * as types from '@/store/types'\r\nimport * as enums from '@/global-enum'\r\nimport * as aclTypes from '@/plugins/acl-types'\r\n\r\nimport store from \"@/store/root\";\r\nimport Helpers from '@/helpers'\r\nimport HttpClient from '@/plugins/http-client'\r\nimport usersApi from '@/api/users'\r\nimport {Acl} from \"@/main\";\r\nimport WebsocketClient from \"@/plugins/websocket-client\";\r\n\r\nexport interface IAuthState {\r\n isLoginInProgress: boolean\r\n isAuthenticated: boolean\r\n userInfo: UserAuthDto | null\r\n permissions: string | string[]\r\n obtainUserInfo: () => UserAuthDto | null\r\n \r\n [types.AUTH_LOGIN_STARTED](): void\r\n [types.AUTH_UPDATE_USERINFO](payload: UserAuthDto | null): void\r\n [types.AUTH_UPDATE_ACL_PERMISSIONS](payload: PermissionsUpdatePayload): void\r\n [types.AUTH_LOGIN_ENDED](): void\r\n \r\n tryInitAuthUser(payload: TryInitAuthUserPayload): UserAuthDto | null\r\n login(payload: LoginPayload): void\r\n logout(payload: LogoutPayload): void\r\n}\r\n\r\nexport interface LoginPayload {\r\n acl: Acl\r\n username: string\r\n password: string\r\n showError: (message: string) => void\r\n}\r\nexport interface PermissionsUpdatePayload {\r\n acl: Acl\r\n user: UserAuthDto | null\r\n}\r\nexport interface TryInitAuthUserPayload {\r\n acl: Acl\r\n}\r\nexport interface UpdateAuthUserPayload {\r\n avatarFileId: string\r\n fullName: string\r\n shortFullName: string\r\n fullMainPhoneNumberFormatted: string\r\n}\r\nexport interface LogoutPayload {\r\n acl: Acl\r\n}\r\n\r\nexport const localStorageUserInfoKey = \"userInfo\";\r\n\r\n@Module({ dynamic: true, store, name: 'auth' })\r\nexport default class Auth extends VuexModule implements IAuthState {\r\n static currentUserInfoVersion = 1;\r\n \r\n isLoginInProgress = false;\r\n isAuthenticated = false;\r\n userInfo: UserAuthDto | null = null;\r\n permissions: string[] = [];\r\n \r\n get obtainUserInfo(): () => UserAuthDto | null {\r\n return () => {\r\n if (Helpers.isExists(this.userInfo)) {\r\n return this.userInfo;\r\n } else {\r\n const localStorageUserInfoString = localStorage.getItem(localStorageUserInfoKey);\r\n \r\n if (Helpers.isNotEmpty(localStorageUserInfoString)) {\r\n const localStorageUserInfo = JSON.parse(localStorageUserInfoString!);\r\n \r\n if (Helpers.isObject(localStorageUserInfo)) {\r\n // check version\r\n if (!Helpers.isNumeric(localStorageUserInfo.version) ||\r\n localStorageUserInfo.version !== Auth.currentUserInfoVersion) {\r\n localStorage.removeItem(localStorageUserInfoKey);\r\n \r\n return null;\r\n } else {\r\n return localStorageUserInfo!;\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n }\r\n }\r\n }\r\n \r\n @Mutation\r\n AUTH_LOGIN_STARTED() {\r\n this.isLoginInProgress = true;\r\n }\r\n \r\n @Mutation\r\n AUTH_UPDATE_USERINFO(payload: UserAuthDto | null) {\r\n this.isAuthenticated = Helpers.isObject(payload);\r\n this.userInfo = payload;\r\n\r\n if (this.isAuthenticated) {\r\n this.userInfo!.version = Auth.currentUserInfoVersion;\r\n localStorage.setItem(localStorageUserInfoKey, JSON.stringify(this.userInfo));\r\n \r\n const token = this.userInfo!.token;\r\n HttpClient.setAuthToken(token);\r\n WebsocketClient.tryConnect(token);\r\n } else {\r\n localStorage.removeItem(localStorageUserInfoKey);\r\n HttpClient.setAuthToken('');\r\n WebsocketClient.disconnect();\r\n }\r\n }\r\n \r\n @Mutation\r\n AUTH_UPDATE_ACL_PERMISSIONS(payload: PermissionsUpdatePayload) {\r\n let rules = [aclTypes.AccessRules_Public];\r\n \r\n if (Helpers.isExists(payload.user) && Helpers.isNotEmptyArray(payload.user!.accesses)) {\r\n for (let i = 0; i < payload.user!.accesses.length; i++) {\r\n switch (payload.user!.accesses[i].type) {\r\n case enums.UserAccessType_SystemAdmin:\r\n rules.push(aclTypes.AccessRules_SystemAdmin);\r\n break;\r\n case enums.UserAccessType_Users:\r\n rules.push(aclTypes.AccessRules_Users);\r\n break;\r\n case enums.UserAccessType_KnowledgeBase:\r\n rules.push(aclTypes.AccessRules_KnowledgeBase);\r\n break;\r\n }\r\n }\r\n }\r\n \r\n payload.acl.change(rules);\r\n this.permissions = rules;\r\n }\r\n \r\n @Mutation\r\n AUTH_LOGIN_ENDED() {\r\n this.isLoginInProgress = false;\r\n }\r\n \r\n @Action({ commit: types.AUTH_UPDATE_USERINFO })\r\n tryInitAuthUser(payload: TryInitAuthUserPayload) {\r\n const user = this.obtainUserInfo();\r\n \r\n this.AUTH_UPDATE_ACL_PERMISSIONS({\r\n acl: payload.acl,\r\n user: user\r\n });\r\n \r\n return user;\r\n }\r\n \r\n @Action({ commit: types.AUTH_UPDATE_USERINFO })\r\n updateAuthUser(payload: UpdateAuthUserPayload) {\r\n const user = this.obtainUserInfo();\r\n \r\n if (Helpers.isExists(user)) {\r\n user!.avatarFileId = payload.avatarFileId;\r\n user!.fullName = payload.fullName;\r\n user!.shortFullName = payload.shortFullName;\r\n user!.fullMainPhoneNumberFormatted = payload.fullMainPhoneNumberFormatted;\r\n }\r\n \r\n return user;\r\n }\r\n \r\n @Action\r\n async login(payload: LoginPayload) {\r\n return new Promise((resolve, reject) => {\r\n this.AUTH_LOGIN_STARTED();\r\n \r\n usersApi.authenticate(\r\n payload.username,\r\n payload.password,\r\n (user) => {\r\n this.AUTH_UPDATE_ACL_PERMISSIONS({\r\n acl: payload.acl,\r\n user: user\r\n });\r\n this.AUTH_UPDATE_USERINFO(user);\r\n this.AUTH_LOGIN_ENDED();\r\n resolve(true);\r\n }, (errorMessage?: string) => {\r\n // Show error notification\r\n payload.showError(errorMessage!);\r\n \r\n this.AUTH_LOGIN_ENDED();\r\n resolve(false);\r\n });\r\n });\r\n }\r\n \r\n @Action({ commit: types.AUTH_UPDATE_USERINFO })\r\n logout(payload: LogoutPayload) {\r\n const user = null;\r\n \r\n usersApi.logout();\r\n \r\n this.AUTH_UPDATE_ACL_PERMISSIONS({\r\n acl: payload.acl,\r\n user: user\r\n });\r\n \r\n return user;\r\n }\r\n}\r\n\r\nexport const AuthModule = getModule(Auth);\r\n","\r\nimport HttpClient from '@/plugins/http-client'\r\nimport Helpers from '@/helpers'\r\nimport {AxiosRequestConfig} from \"axios\";\r\n\r\nexport default class ApiBase {\r\n static _defaultGetResponse(url: string, getOptions: AxiosRequestConfig | null, cb: (responseData: ResponseData) => void, errorCb: (errorMessage?: string) => void) {\r\n return HttpClient\r\n .get(url, getOptions as any)\r\n .then(response => {\r\n if (Helpers.isExists(response)) {\r\n switch (response!.status) {\r\n case 200:\r\n if (Helpers.isFunction(cb)) {\r\n if (Helpers.isObject(response!.data)) {\r\n cb!(response!.data);\r\n } else {\r\n errorCb('Неправильний формат відповіді від сервера');\r\n }\r\n }\r\n break;\r\n default:\r\n if (Helpers.isExists(response!.data) && Helpers.isExists(response!.data!.message)) {\r\n errorCb(response!.data!.message);\r\n } else {\r\n errorCb();\r\n }\r\n break;\r\n }\r\n } else {\r\n errorCb();\r\n }\r\n })\r\n // If error notify\r\n .catch((errorCtx) => {\r\n if (Helpers.isExists(errorCtx) && Helpers.isExists(errorCtx.response)) {\r\n if (Helpers.isExists(errorCtx!.response!.data) && Helpers.isExists(errorCtx!.response!.data!.message)) {\r\n errorCb(errorCtx!.response!.data!.message);\r\n } else {\r\n errorCb();\r\n }\r\n } else {\r\n errorCb();\r\n throw errorCtx;\r\n }\r\n });\r\n }\r\n \r\n static _defaultPostResponse(url: string, data: any, postOptions: AxiosRequestConfig | null, cb: ((responseData: ResponseData) => void) | null, errorCb: (errorMessage?: string) => void) {\r\n return HttpClient\r\n .post(url, data, postOptions as any)\r\n .then(response => {\r\n if (Helpers.isExists(response)) {\r\n switch (response!.status) {\r\n case 200:\r\n if (Helpers.isFunction(cb)) {\r\n if (Helpers.isObject(response!.data)) {\r\n cb!(response!.data);\r\n } else {\r\n errorCb('Неправильний формат відповіді від сервера');\r\n }\r\n }\r\n break;\r\n default:\r\n if (Helpers.isExists(response!.data) && Helpers.isExists(response!.data!.message)) {\r\n errorCb(response!.data!.message);\r\n } else {\r\n errorCb();\r\n }\r\n break;\r\n }\r\n } else {\r\n errorCb();\r\n }\r\n })\r\n // If error notify\r\n .catch((errorCtx) => {\r\n if (Helpers.isExists(errorCtx) && Helpers.isExists(errorCtx.response)) {\r\n if (Helpers.isExists(errorCtx!.response!.data) && Helpers.isExists(errorCtx!.response!.data!.message)) {\r\n errorCb(errorCtx!.response!.data!.message);\r\n } else {\r\n errorCb();\r\n }\r\n } else {\r\n errorCb();\r\n throw errorCtx;\r\n }\r\n });\r\n }\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#2196f3\",\"success\":\"#28c76f\",\"info\":\"#00cfe8\",\"danger\":\"#ea5455\",\"warning\":\"#ff9f43\",\"dark\":\"#1e1e1e\"};","\r\nexport const UserAccessType_SystemAdmin = 1;\r\nexport const UserAccessType_Users = 2;\r\nexport const UserAccessType_KnowledgeBase = 3;\r\n\r\nexport const UserContactInfoVisibilityType_AllContactInfo = 0;\r\nexport const UserContactInfoVisibilityType_AllPhones = 1;\r\nexport const UserContactInfoVisibilityType_AllEmails = 2;\r\nexport const UserContactInfoVisibilityType_MainPhone = 3;\r\nexport const UserContactInfoVisibilityType_MainEmail = 4;\r\nexport const UserContactInfoVisibilityType_AdditionalPhone = 5;\r\nexport const UserContactInfoVisibilityType_AdditionalEmail = 6;\r\n\r\nexport const MapPointType_District = 0;\r\nexport const MapPointType_Region = 1;\r\nexport const MapPointType_TopLevel = 2;\r\nexport const MapPointType_TopLevelSpecial = 3;\r\n\r\nexport const PhoneCallItemType_Incoming = 0;\r\nexport const PhoneCallItemType_Outgoing = 1;\r\n\r\nexport const AppLogType_Info = 0;\r\nexport const AppLogType_Error = 1;\r\n\r\nexport const FileMetatype_Undefined = 0;\r\nexport const FileMetatype_UserAvatar = 1;\r\nexport const FileMetatype_KnowledgeBaseArticleContent = 2;\r\nexport const FileMetatype_KnowledgeBaseArticleAttachment = 3;\r\n\r\n// view only\r\nexport const MapElementType_Region = 0;\r\nexport const MapElementType_District = 1;\r\nexport const MapElementType_Point = 2;\r\n\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#2196f3\",\"success\":\"#28c76f\",\"info\":\"#00cfe8\",\"danger\":\"#ea5455\",\"warning\":\"#ff9f43\",\"dark\":\"#1e1e1e\"};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageLoadingIndicator.vue?vue&type=style&index=0&id=729465e0&lang=scss&scoped=true&\"","\r\nimport {\r\n PhoneCallsResultDto\r\n} from '@/global'\r\nimport ApiBase from \"@/api/api-base\";\r\nimport Helpers from \"@/helpers\";\r\nimport {UsersSearchResultDto} from \"@/global\";\r\n\r\nexport default class extends ApiBase {\r\n static makeCall(toUserId: number, cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n return this._defaultGetResponse('/api/telephony/make-call', {\r\n params: { toUserId }\r\n }, cb, errorCb);\r\n }\r\n static cancelCall(isRobotCall: boolean, toUserId: number, cb: (data: { success: boolean }) => void, errorCb: (errorMessage?: string) => void) {\r\n return this._defaultGetResponse('/api/telephony/cancel-call', {\r\n params: { isRobotCall, toUserId }\r\n }, cb, errorCb);\r\n }\r\n \r\n static phoneCalls(page: number, cb: (phoneCallsResult: PhoneCallsResultDto) => void, errorCb: (errorMessage?: string) => void) {\r\n this._defaultGetResponse('/api/telephony/phone-calls', {\r\n params: { page }\r\n }, cb, errorCb);\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isInFavoritesUpdating),expression:\"!isInFavoritesUpdating\"},{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"fa text-warning cursor-pointer\",class:_vm.isInFavorites ? 'fa-star' : 'fa-star-o',attrs:{\"title\":_vm.isInFavorites ? 'Видалити із списку обраних' : 'Додати до списку обраних'},on:{\"click\":_vm.toggleUserIsFavorites}}),_c('b-spinner',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isInFavoritesUpdating),expression:\"isInFavoritesUpdating\"}],attrs:{\"label\":\"Завантаження...\",\"small\":\"\",\"variant\":\"warning\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator'\nimport usersApi from '@/api/users'\nimport EventBusModel, {EventBus} from \"@/plugins/event-bus\";\n\n@Component\nexport default class UserInFavoritesToggle extends Vue {\n @Prop({ type: Number, required: true }) userId: number | undefined;\n @Prop({ type: Boolean, required: true }) isInFavorites: boolean | undefined;\n\n isInFavoritesUpdating = false;\n\n toggleUserIsFavorites() {\n this.isInFavoritesUpdating = true;\n\n let userId = this.userId!;\n let newIsInFavorites = !this.isInFavorites;\n\n usersApi.setUserInFavorites(userId, newIsInFavorites, data => {\n if (data.success) {\n // trigger global event\n EventBus.$emit(EventBusModel.userInFavoritesChangedEventName, {\n userId: userId,\n isInFavorites: newIsInFavorites\n });\n\n this.isInFavoritesUpdating = false;\n }\n }, errorMessage => {\n console.warn(\"toggleUserIsFavorites error\", errorMessage);\n\n this.isInFavoritesUpdating = false;\n })\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserInFavoritesToggle.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserInFavoritesToggle.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./UserInFavoritesToggle.vue?vue&type=template&id=2cd688f4&scoped=true&\"\nimport script from \"./UserInFavoritesToggle.vue?vue&type=script&lang=ts&\"\nexport * from \"./UserInFavoritesToggle.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cd688f4\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}