{"version":3,"sources":["config.js","services/usersService.js","utils/axiosHeaders.js","redux/actions/authActions.js","redux/actions/types.js","services/userService.js","utils/localStorageUtils.js","components/common/Signin-Oidc.js","components/common/Signout-Oidc.js","components/common/AutoTruncateText.js","components/home/dashboard/widgets/StatCardWidget.js","redux/actions/statCardActions.js","components/home/dashboard/widgets/PaginatedStatCardWidget.js","services/dashboardService.js","redux/reducers/InitialState.js","redux/actions/pageActions.js","services/kbService.js","redux/actions/kbActions.js","components/home/dashboard/widgets/KBCardWidget.js","components/home/dashboard/widgets/resourceCard/PaginatedResourceCardWidget.js","utils/dateUtils.js","components/home/dashboard/widgets/GraphWidget.js","services/relativityStatsService.js","services/brainspaceStatsService.js","redux/actions/brainspaceStatsActions.js","services/blackoutStatsService.js","redux/actions/blackoutStatsActions.js","services/storageStatsService.js","redux/actions/storageStatsActions.js","services/readySuiteStatsService.js","redux/actions/readySuiteStatsActions.js","services/lsiTranslationStatsService.js","redux/actions/lsiTranslationStatsActions.js","services/webProcessingStatsService.js","redux/actions/webProcessingStatsActions.js","redux/actions/relativityStatsActions.js","services/fileTransferStatsService.js","redux/actions/fileTransferStatsActions.js","services/supportService.js","redux/actions/supportStatsActions.js","services/resourcesService.js","redux/actions/resourcesActions.js","services/maintenanceService.js","services/applicationSettingService.js","redux/actions/appSettingsActions.js","components/common/ModalBackgroundRemover.js","redux/actions/previewResourcesActions.js","redux/actions/selectedResourceActions.js","components/common/TextInput.js","services/partnersService.js","redux/actions/partnersActions.js","components/common/DropdownStyles.js","components/home/dashboard/widgets/resourceCard/ResourceCropper.js","components/home/dashboard/widgets/resourceCard/ResourceEdit.js","components/home/dashboard/widgets/resourceCard/ResourceCardPreview.js","components/home/dashboard/widgets/resourceCard/ResourceConfiguration.js","components/LoadingPage.js","components/home/ManageWidgetsModal.js","components/home/HomePage.js","services/auditsService.js","components/knowledgebase/KnowledgeBaseExpandableChapter.js","components/knowledgebase/KnowledgeBaseExpandableBook.js","components/common/ConfirmationModal.js","components/knowledgebase/KnowledgeBasePage.js","redux/actions/usersActions.js","services/servicesService.js","redux/actions/servicesActions.js","services/linksService.js","redux/actions/linksActions.js","services/groupsService.js","redux/actions/groupsActions.js","services/fileTransferService.js","redux/actions/fileTransferActions.js","services/jiraService.js","redux/actions/jiraActions.js","components/partners/PartnerEdit.js","components/partners/PartnerDetails.js","redux/actions/settingsActions.js","components/partners/PartnerRow.js","services/idpUserService.js","components/users/UserRow.js","components/virtualMachines/VirtualMachineRow.js","components/administration/roles/RoleRow.js","redux/actions/auditActions.js","components/administration/audits/AuditRow.js","components/administration/userStatus/UserStatusRow.js","components/common/PaginatedList.js","components/common/FilterTypes/TriToggleFilter.js","components/common/FilterTypes/RangeFilter.js","components/common/FilterTypes/MultiselectFilter.js","components/common/FilterSlideout.js","components/partners/PartnersPage.js","services/permissionsService.js","redux/actions/permissionsActions.js","components/users/UserDetails.js","components/users/UserEdit.js","components/users/MassUserEdit.js","components/users/UsersPage.js","services/virtualMachinesService.js","redux/actions/virtualMachinesActions.js","components/virtualMachines/VirtualMachinesPage.js","components/administration/AdministrationNavMenu.js","components/administration/AdministrationLayout.js","redux/actions/userStatusesActions.js","components/administration/userStatus/UserStatusPage.js","components/administration/audits/AuditDetails.js","components/administration/audits/AuditsPage.js","services/rolesService.js","redux/actions/rolesActions.js","components/administration/roles/RoleEdit.js","components/administration/roles/RolesPage.js","redux/actions/supportActions.js","services/communicationsService.js","redux/actions/communicationsActions.js","services/notificationsService.js","redux/actions/notificationActions.js","components/administration/settings/SettingsPage.js","utils/protectedRoute.js","components/administration/AdministrationPage.js","components/common/Login.js","redux/reducers/partnersReducer.js","redux/reducers/usersReducer.js","redux/reducers/jiraReducer.js","redux/reducers/rolesReducer.js","redux/reducers/fileTransferReducer.js","redux/reducers/groupsReducer.js","redux/reducers/communicationsReducer.js","redux/reducers/index.js","redux/reducers/authReducer.js","redux/reducers/userPreferencesReducer.js","redux/reducers/kbReducer.js","redux/reducers/resourcesReducer.js","redux/reducers/previewResourcesReducer.js","redux/reducers/selectedResourceReducer.js","redux/reducers/relativityStatsReducer.js","redux/reducers/brainspaceStatsReducer.js","redux/reducers/storageStatsReducer.js","redux/reducers/blackoutStatsReducer.js","redux/reducers/readySuiteStatsReducer.js","redux/reducers/webProcessingStatsReducer.js","redux/reducers/lsiTranslationStatsReducer.js","redux/reducers/fileTransferStatsReducer.js","redux/reducers/supportStatsReducer.js","redux/reducers/supportReducer.js","redux/reducers/servicesReducer.js","redux/reducers/settingsReducer.js","redux/reducers/linksReducer.js","redux/reducers/pageReducer.js","redux/reducers/virtualMachinesReducer.js","redux/reducers/permissionsReducer.js","redux/reducers/statCardReducer.js","redux/reducers/auditsReducer.js","redux/reducers/appSettingsReducer.js","redux/reducers/userStatusesReducer.js","redux/reducers/notificationReducer.js","redux/store.js","utils/authProvider.js","components/NavMenu.js","services/userPreferencesService.js","redux/actions/userPreferencesActions.js","components/SideNavMenu.js","components/Layout.js","components/PageNotFound.js","utils/ActivityTracker.js","components/PreDataLoader.js","components/App.js","index.js"],"names":["config","process","getUserAbortController","updateRequired","userInfo","a","axios","post","response","data","getUser","userId","AbortController","get","signal","catch","error","message","getUsers","massEditSubscriptionInfo","setAuthHeader","token","defaults","headers","common","updateUserActivity","dispatch","usersService","then","userActivity","type","lastActive","updateUserActivitySuccess","storeUser","user","access_token","payload","identityConfig","authority","client_id","redirect_uri","response_type","monitorSession","accessTokenExpiringNotificationTime","scope","post_logout_redirect_uri","userStore","WebStorageStateStore","store","window","localStorage","userManager","UserManager","console","signinRedirectCallback","signoutRedirect","signoutRedirectCallback","clearStaleState","removeUser","TabLocalStorage","name","this","set","value","setItem","getItem","SigninOidc","navigate","useNavigate","useEffect","defaultTab","storageTab","signinAsync","SignoutOidc","Navigate","signoutAsync","AutoTruncateText","text","theme","alignDirection","containerRef","useRef","useState","isTruncated","setIsTruncated","container","current","scrollWidth","clientWidth","handleResize","addEventListener","removeEventListener","ref","style","overflow","whiteSpace","textOverflow","textAlign","data-tip","data-type","data-arrow-color","data-background-color","data-border","StatCard","Stats","ReloadStats","sideNavState","isInEditMode","onDeleteItem","widgetHeight","useSelector","state","page","home","dashboardLayout","lg","find","x","i","title","h","resizableDivRef","titleRef","statContentRef","updateFontSize","offsetWidth","offsetHeight","updateElementSize","refItem","minSize","maxSize","sizeMultiplier","element","resizableDivElement","fontSize","className","onClick","icon","beat","stats","length","map","stat","label","pulse","updateCardNumber","cardNumber","PaginatedStatCard","statCard","subtitleRef","useDispatch","nextCardNumber","statCards","previousCardNumber","subTitle","statCardActions","href","target","layout","json","JSON","stringify","auth","isLoadingUser","permissions","canAssignRoles","userRoles","Date","now","userPreferences","preferenceName","preferenceValue","notifications","kb","books","searchResults","pdf","fileName","content","resources","previewResources","selectedResource","relativityStats","instances","selectedRelativityInstances","brainspaceStats","storageStats","webProcessingStats","blackoutStats","readySuiteStats","lsiTranslationStats","fileTransferStats","portals","supportStats","url","support","groups","defaultDashboardLayout","availableWidgets","isDashboardInEditMode","selectedContent","searchTerm","partners","isLoading","filterByColumn","textFilters","parentPartnerName","partnerADIdentifier","tams","sams","selectedPartner","availableServices","integrationServices","defaultSubscriptions","billingContacts","salesContacts","operationsContacts","authContacts","twoFactorMethods","availableGlobalLinks","externalLinks","defaultJiraOrganizations","mediaShuttlePortals","jiraGroups","availableJiraOrganizations","dataHeaders","dataField","width","filterable","pageNumber","filters","filterIdentifier","filterType","group","leftLabel","rightLabel","leftTooltip","rightTooltip","dataLabel","users","email","firstName","lastName","partnerName","lastLoginDate","selectedUser","pocs","subscriptions","roles","partnerId","twoFactorMethodId","twoFactorMethodName","jiraOrganizations","id","selectedUsers","allUsersSelected","datafield","virtualMachines","maxMemory","memoryAvailablePercentage","cpuCount","statusString","selectedMachine","selectedRole","audits","userEmail","action","actedUpon","createdDate","selectedAuditDetails","userActionAuditLogEntry","userActionAuditLogEntryId","userStatuses","emailAddress","partner","login","lastAction","selectedUserStatus","userPermissions","availableSubscriptions","availablePocs","communications","availableTemplates","fileTransfer","availablePortals","services","jira","availableOrganizations","availableGroups","settings","dataLimit","sortBy","ascending","enabled","isActive","recentlyUpdated","links","infrastructure","twoFA","internal","billing","operations","sales","emergencyNotifications","insightsNewsletter","oasisBlog","maintenance","ukMaintenance","relativityOneEmergency","revealEmergency","isSystemDefined","date","from","to","actions","types","names","appSettings","maintenanceMode","resourceCycleIntervalInSeconds","global","available","updateSelectedPartner","updateSelectedUser","updateSelectedUsers","updateSelectedRole","updateSelectedMachine","updateSearchTerm","recordType","clearTextFilters","toggleFilterByColumn","updatePageNumber","loadedPage","updateDashboardLayout","loadDashboardLayoutSuccess","updateDashboardEditMode","isEnabled","loadAvailableWidgets","dashboardService","widgets","loadAvailableWidgetsSuccess","loadUserDashboardLayout","parse","initialState","saveUserDashboardLayout","contentId","query","encodeURIComponent","loadPdfSuccess","loadKnowledgeBaseBooks","kbService","loadKnowledgeBaseBooksSuccess","loadKnowledgeBaseContent","searchKnowledgeBase","searchKBSuccess","getPdf","KBCard","selectedPages","setSelectedPages","contentRef","kbActions","toast","autoClose","pages","pagesOutsideOfChapters","book","contents","filter","flat","pagesInsideOfChapters","chapter","totalPageCount","pickFromThesePages","concat","pagePosition","Math","floor","random","splice","pageId","slug","PaginatedResourceCard","isPreview","intervalDelayValue","imageRef","intervalId","setIntervalId","iterationCounter","setIterationCounter","activeCardNumber","setActiveCardNumber","nextButtonRef","startAutoRotate","clearInterval","goToNextCard","stopAutoRotate","setInterval","elementType","newSize","height","onMouseEnter","onMouseLeave","some","p","data-delay-show","bootstrap","document","getElementById","backdrop","keyboard","show","ReactTooltip","rebuild","resource","selectedCardNumber","findIndex","r","resourceId","goToCard","siteLink","contentTitle","description","src","contentImg","getLocalDateTime","dateTime","toLocaleString","getLocalDate","toLocaleDateString","getLocalTime","format","toLocaleTimeString","GraphWidget","widgetTitle","setData","dataVersionId","setDataVersionId","brand","setBrand","getBrandName","lastYear","past12monthsDates","getPast12MonthsDates","fullYearStatsHistory","statHistory","forEach","statDateTime","getMonth","getFullYear","push","statValue","sort","b","setYear","toJSON","previousValue","GraphTooltip","active","rawDate","dateUtils","split","month","day","year","n","toFixed","prettifyUnits","GraphDot","props","cx","cy","color","y","monthsDates","currentDate","unshift","setMonth","class","transform","alt","ResponsiveContainer","AreaChart","Area","dataKey","dot","key","Tooltip","offset","allowEscapeViewBox","wrapperStyle","zIndex","x1","y1","x2","y2","stopColor","stopOpacity","relativityInstances","loadBrainspaceStats","brainspaceStatsService","loadBrainspaceStatsSuccess","loadBlackoutStats","blackoutStatsService","loadBlackoutStatsSuccess","loadStorageStats","storageStatsService","loadStorageStatsSuccess","loadReadySuiteStats","readySuiteStatsService","loadReadySuiteStatsSuccess","loadLsiTranslationStats","lsiTranslationStatsService","loadLsiTranslationStatsSuccess","loadWebProcessingStats","webProcessingStatsService","loadWebProcessingStatsSuccess","loadRelativityStats","relativityStatsService","loadRelativityStatsSuccess","loadRelativityInstances","loadRelativityInstancesSuccess","saveUserRelativityInstances","saveUserRelativityInstancesSuccess","loadUserRelativityInstances","loadUserRelativityInstancesSuccess","loadFileTransferStats","fileTransferStatsService","loadFileTransferStatsSuccess","loadPartnerPortals","loadPartnerPortalsSuccess","updatedGroups","loadSupportStats","supportStatsService","loadSupportStatsSuccess","loadSupportUrl","supportUrl","loadSupportUrlSuccess","updateResources","loadResources","resourcesService","saveResources","reason","applicationSettingName","loadMaintenanceMode","maintenanceService","loadMaintenanceModeSuccess","loadResourceCycleInterval","applicationSettingService","loadResourceCycleIntervalSuccess","removeModalBackground","modalBackdrops","getElementsByClassName","remove","updatePreviewResources","updateSelectedResource","TextInput","onChange","placeholder","wrapperClass","isRequired","disabled","maxlength","textArea","rows","cols","htmlFor","autoComplete","getPartnerAbortController","partnerInfo","getPartner","loadPartnerSuccess","loadPartner","partnersService","loadPartners","loadPartnersSuccess","pageActions","disablePartner","disablePartnerSuccess","enablePartner","enablePartnerSuccess","savePartner","savedPartner","savePartnerSuccess","createPartnerSuccess","PaginatedListMenuStyleLight","background","control","provided","opacity","isDisabled","valueContainer","singleValue","menu","option","backgroundColor","isFocused","isSelected","input","PaginatedListMenuStyleDark","DropdownSelectStyleLight","DropdownSelectStyleDark","MultiSelectStyleLight","multiValue","multiValueRemove","display","multiValueLabel","MultiSelectStyleDark","ResourceCropper","onCropperSave","aspect","crop","setCrop","croppedImage","setCroppedImage","image","setImage","makeClientCrop","croppedImageDataUrl","getCroppedImg","canvas","createElement","pixelRatio","devicePixelRatio","scaleX","naturalWidth","scaleY","naturalHeight","ctx","getContext","setTransform","imageSmoothingQuality","drawImage","toDataURL","tabindex","role","data-bs-dismiss","aria-label","ruleOfThirds","onImageLoaded","onComplete","percentCrop","ResourceEdit","setResource","resourceIndex","setResourceIndex","errors","setErrors","isAdded","setIsAdded","isSelectedFileValid","setIsSelectedFileValid","inputImageValue","setInputImageValue","enabledPartners","selectAllOption","partnersActions","indexOf","contentThumbnailUrl","resourceIsValid","allPartnersSelected","Object","keys","handleResourceChange","event","editedResource","showCropModal","onSubmit","preventDefault","updatedResources","previewResourcesActions","getInstance","hide","sortOrder","shift","isSearchable","isMulti","closeMenuOnSelect","classNamePrefix","values","selectedPartners","everyPartnerSelected","every","allOptionSelected","warning","menuPosition","menuPlacement","options","styles","accept","file","files","includes","reader","FileReader","imageStr","result","readAsDataURL","croppedImg","ResourceCardPreview","homeResourceCard","querySelector","previewResourceCard","domRect","getBoundingClientRect","ResourceConfiguration","allResources","isSaving","setIsSaving","handleRemoveResource","currentTarget","resourcesCopy","index","parseInt","replace","handleMoveResourceUp","swapSortOrder","swappedResource","handleMoveResourceDown","resourcesActions","empty","data-class","newResource","contentLink","selectedResourceActions","removeResourceName","moveResourceUpName","moveResourceDownName","LoadingPage","ManageWidgetsModal","availableRelativityInstances","defaultWidgets","relativityInstance","relativityInstanceId","friendlyName","instance","relativityStatsActions","widget","editedWidgets","currentLayoutWidget","defaultWidget","editedLayout","widgetName","HomePage","HomePageGrid","useMemo","WidthProvider","Responsive","brainspaceStatsActions","storageStatsActions","blackoutStatsActions","readySuiteStatsActions","webProcessingStatsActions","lsiTranslationStatsActions","supportStatsActions","fileTransferStatsActions","appSettingsActions","ModalBackgroundRemover","fireResizeEvent","dispatchEvent","Event","toggleEditMode","handleDeleteItem","widgetId","updatedLayoutLg","updatedLayout","undefined","layouts","breakpoints","maxRows","rowHeight","margin","containerPadding","isDraggable","isResizable","onLayoutChange","currentLayout","allLayouts","handleOnLayoutChange","isBounded","useCSSTransforms","logPageView","pageName","logContentViewWithInfo","contentName","info","KnowledgeBaseExpandableChapter","handleSelectedContentClicked","isExpanded","setIsExpanded","chapterId","KnowledgeBaseExpandableBook","bookId","ConfirmationModal","displayValue","dangerouslySetInnerHTML","__html","KnowledgeBasePage","params","useParams","querySearchTerm","search","useLocation","React","URLSearchParams","useQuery","isSearching","setIsSearching","knowledgeBasePdf","pdfLoading","setPdfLoading","auditsService","scrollTop","delayDebounce","setTimeout","clearTimeout","link","download","MouseEvent","autocomplete","fade","searchResult","searchResultId","previewHtml","html","replaceAll","finally","loadUserSuccess","loadUsers","loadUsersSuccess","disableUser","returnedUser","disableUserSuccess","enableUser","enableUserSuccess","resetUser2fa","resetUser2faSuccess","resetUserPassword","resetUserPasswordSuccess","saveUser","savedUser","saveUserSuccess","createUserSuccess","loadAuthServices","servicesService","loadAuthServicesSuccess","loadPartnerServices","loadPartnerServicesSuccess","loadAvailableLinks","linksService","loadAvailableLinksSuccess","loadGlobalLinks","globalLinks","loadGlobalLinksSuccess","loadAvailableSubscriptions","groupsService","loadAvailableSubscriptionsSuccess","loadAvailablePocs","loadAvailablePocsSuccess","loadAvailablePortals","fileTransferService","loadAvailablePortalsSuccess","loadAvailableJiraOrganizations","jiraService","organizations","loadAvailableJiraOrganizationsSuccess","loadAvailableJiraGroups","loadAvailableJiraGroupsSuccess","PartnerEdit","setIsLoading","editModal","setEditModal","refreshPartnerToastId","setRefreshPartnerToastId","newJiraOrganizations","setNewJiraOrganizations","activeTab","setActiveTab","billingPocList","setBillingPocList","newBillingPocList","setNewBillingPocList","salesPocList","setSalesPocList","newSalesPocList","setNewSalesPocList","operationalPocList","setOperationalPocList","newOperationalPocList","setNewOperationalPocList","authPocList","setAuthPocList","newAuthPocList","setNewAuthPocList","partnerUsers","setPartnerUsers","setPartner","sortJiraOrganizations","organizationA","organizationB","toLowerCase","sortGlobalLinks","globalLinkA","globalLinkB","allPartners","authServices","linksActions","fileTransferActions","servicesActions","jiraActions","refreshMessage","refreshPartner","dismissToast","_isShown","returnedPartner","dismiss","checkUpdateRequired","useCallback","newToastId","position","hideProgressBar","closeOnClick","closeButton","draggable","service","poc","operationalContacts","gl","el","externalLinkId","abort","updateRequiredIntervalId","s","isDeleted","partnerIsValid","updatePartner","parentPartnerId","externalLinkLabel","externalLinkUrl","noExternalLinks","fileTransferPortals","hubSpotCompany","handlePartnerChange","SortableMultiValue","SortableElement","innerProps","onMouseDown","e","stopPropagation","MultiValue","SortableMultiValueLabel","SortableHandle","MultiValueLabel","SortableSelect","SortableContainer","Select","handleExternalLinkChange","newLinks","handleGlobalToggle","handleRemoveLink","hasEditPointOfContactsPermission","up","hasEditPartnersPermission","hasEditPartnerTAMsSAMsPermission","hasEditJiraUserGroupPermission","hasEditJiraUserOrganizationPermission","oasisUsers","isCreate","jiraOrganization","mediaShuttleUrl","accountingPocGroup","salesPocGroup","operationsPocGroup","securityPocGroup","pocUpdates","nPoc","updates","pu","innerPoc","reduce","updateUser","pocUpdate","update","is","communicationsService","as","usersActions","success","variant","usersWithService","toastId","serviceId","handleRemoveService","data-bs-toggle","aria-haspopup","aria-expanded","handleAddService","aria-labelledby","visible","selectedTAMs","tam","selectedSAMs","sam","selectedSubscriptions","subscriptionId","subscription","groupId","org","selectedOrganizations","organization","selectedGroups","g","selectedMethods","removedTwoFactorMethods","ptfm","sm","usersWithRemovedMethod","m","method","globalLink","urlName","labelName","checkBoxName","removeLinkName","checked","useDragHandle","axis","onSortEnd","oldIndex","newIndex","sortedPortals","array","slicedArray","slice","arrayMove","distance","updateBeforeSortStart","node","selectedPortals","portalId","portal","components","aorg","updatedProperties","PartnerDetails","detailsModal","setDetailsModal","arialabelledby","createdBy","hour","minute","lastModifiedBy","lastModifiedDate","join","sub","updateFilterSetting","setting","PartnerRow","handleEditPartner","onDoubleClick","hasEnabledUsers","sendEmail","emailType","withCredentials","UserRow","userProfile","profile","handleEditUser","canEditUser","dr","car","roleId","username","canEnableUser","canDisableUser","canResetPassword","canReset2FA","canInviteUser","permission","selectingUsers","isPasswordSet","idpUserService","twoFactorEnabled","VirtualMachineRow","powerButtonClass","virtualMachineId","virtualMachineRole","isManageable","RoleRow","handleEditRole","loadAuditDetails","audit","auditDetails","loadAudits","loadAuditsSuccess","AuditRow","handleDisplayAuditDetails","auditsActions","UserStatusRow","PaginatedList","RecordType","selectedEntitiesCount","setSelectedEntitiesCount","allUsersChecked","setAllUsersChecked","filterSettings","showColumnFilters","RenderComponent","handleSortByChange","getStartingIndex","getEndingIndex","getTotalRecords","getFilteredData","getSortedData","sortData","previousMonthDate","newCompareDate","filterServices","originalData","filterSetting","serviceName","newFilteredData","entity","filterPocs","pocValue","filterSubscriptions","subscriptionName","filteredData","getSearchedData","filteredTam","filteredSam","setHours","machine","userStatus","getCsvData","csvData","claim","claimType","claimLabel","filtered","totalPages","ceil","dataA","dataB","toggleSelectAll","filteredSelectAllData","handleColumnSearch","textFilter","hover","small","borderless","header","startIndex","endIndex","getPaginatedData","filename","warn","TriToggleFilter","Filter","togglePosition","setTogglePosition","firstPoint","setFirstPoint","secondPoint","setSecondPoint","thirdPoint","setThirdPoint","filterValue","filterIsActive","settingsActions","min","max","RangeFilter","colSpan","DateRangePicker","showOneCalendar","MultiselectFilter","availableActions","Set","availableTypes","availableNames","availableUsers","availablePartners","availableTams","availableSams","FilterSlideout","isPaneOpen","setIsPaneOpen","left","right","hasChanged","hasFiltersClass","handleTogglePane","horizontal","filterGroups","filterSwitch","PartnersPage","columnFiltersPopulated","setColumnFiltersPopulated","partnerServices","groupsActions","noFilters","data-event-off","oasisPartner","ps","getUserRoles","loadUserRolesSuccess","loadPermissions","permissionsService","loadPermissionsSuccess","loadUserPermissions","loadUserPermissionsSuccess","loadCanAssignRoles","loadCanAssignRolesSuccess","UserDetails","setUser","refreshUser","claims","twoFactorMethodClaims","c","jiraGroup","UserEdit","refreshUserToastId","setRefreshUserToastId","unconfirmedUser","setUnconfirmedUser","userPartnerAuthServices","userIsValid","userTwoFactorMethodClaims","partnerTwoFactorMethods","u","match","authClaimErrors","hasViewPartnersPermission","ptfc","utfc","handleUserChange","handleServiceClaimChange","updatedUser","serviceCategories","cat","shouldSendInviteEmail","permissionsActions","userPartner","newServiceName","handleNewServiceAdd","availableUserServices","partnerIntegrationServices","ds","availableService","loginService","supportService","companyPocs","selectedPocs","selectedRoles","isClearable","serviceClaims","MassUserEdit","setSelectedSubscriptions","massAction","setMassAction","UserInfoMins","Subscriptions","ShouldAdd","currentSubs","defaultChecked","UsersPage","newUser","userIntegrationServices","userAvailableServices","restartInfo","stopInfo","updateVirtualMachineStatusSuccess","status","loadVirtualMachines","virtualMachinesService","loadVirtualMachinesSuccess","startVirtualMachine","restartVirtualMachine","stopVirtualMachine","VirtualMachinesPage","virtualMachinesActions","handleStartVMConfirmed","handleRestartVMConfirmed","handleStopVMConfirmed","AdministrationNavMenu","setVisible","handleNavClickLogging","expand","colorScheme","toggleable","fluid","tag","RRNavLink","AdministrationLayout","children","Component","loadUserStatuses","loadUserStatusesSuccess","UserStatusPage","userStatusesActions","AuditDetails","detail","AuditsPage","roleInfo","getRole","delete","loadRoleSuccess","loadRoles","rolesService","loadRolesSuccess","deleteRole","saveRole","savedRole","saveRoleSuccess","createRoleSuccess","RoleEdit","refreshRoleToastId","setRefreshRoleToastId","setRole","allRoles","permissionA","permissionB","refreshRole","returnedRole","rolesActions","log","roleIsValid","updateRole","selectedPermissions","permissionId","RolesPage","loadGroups","loadGroupsSuccess","updateGroups","updateGroupsSuccess","communicationInfo","loadAvailableTemplates","templates","loadAvailableTemplatesSuccess","notification","loadNotifications","notificationService","loadNotificationsSuccess","saveNotification","saveNotificationSuccess","removeNotification","removeNotificationSuccess","updateNotification","updateNotificationSuccess","SettingsPage","endTime","notificationId","alert","setAlert","setSelectedGroups","selectedSendComGroups","setSelectedSendComGroups","emailTemplateId","selectedTemplate","setSelectedTemplate","sortGroups","groupA","groupB","availableSendComGroups","supportActions","communicationsActions","notificationActions","intervalNotificationCheck","maintenanceModeLabel","handleAlertChange","alertIsValid","sendComIsValid","template","sendComGroups","trigger","triggerTagName","triggerClassName","triggerOpenedClassName","openedClassName","DatePicker","handleEndTimeChange","disabledDate","isBefore","hideHours","isToday","getHours","shouldHideHour","hideMinutes","isThisHour","getMinutes","shouldHideMinute","size","supportGroups","newSelectedGroups","isAvailableForSelection","selectedGroup","supportGroup","toString","editedAlert","ProtectedRoute","redirectTo","hasPermission","location","origin","redirectUri","customLoginIdentityConfig","signinRedirect","customLoginRedirect","AdministrationPage","path","Login","sortPartners","partnerA","partnerB","sortUsers","userA","userB","sortOrganizations","sortRoles","roleA","roleB","sortPortals","portalA","portalB","sortTemplates","templateA","templateB","rootReducer","combineReducers","userPreference","userPreferenceId","virtualMachine","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","applyMiddleware","thunk","AuthProvider","manager","onUserLoaded","expires_in","onUserUnloaded","onAccessTokenExpiring","signinSilent","onAccessTokenExpired","onUserSignedOut","events","addUserLoaded","addUserUnloaded","addAccessTokenExpiring","addAccessTokenExpired","addUserSignedOut","removeUserLoaded","removeUserUnloaded","removeAccessTokenExpiring","removeAccessTokenExpired","removeUserSignedOut","Children","only","NavMenu","setLinks","partnerLinks","intervalMaintenanceCheck","ToastMessage","closeToast","toastProps","Link","end","nav","inNavbar","data-bs-popper","caret","family_name","given_name","pathname","loadUserPreferences","userPreferencesService","loadUserPreferencesSuccess","saveUserPreference","savedUserPreference","saveUserPreferenceSuccess","SideNavMenu","setIsActive","setWidth","userPreferredSideNav","setUserPreferredSideNav","showRelativityPopup","showFileTransferPopup","relativityReferenceElement","setRelativityReferenceElement","relativityPopperElement","setRelativityPopperElement","usePopper","placement","relativityPopperStyles","relativityPopperAttributes","attributes","relativitySideNavChildRef","fileTransferReferenceElement","setFileTransferReferenceElement","fileTransferPopperElement","setFileTransferPopperElement","fileTransferPopperStyles","fileTransferPopperAttributes","fileTransferSideNavChildRef","adminHomeLink","adminHomePageName","handleWindowResize","handleClickOutsideSideNavPopups","updateSideNavMenuState","body","innerWidth","contains","classList","handleLogLoginSupport","handleFileTransferNavLogging","portalName","updatedSideNavStatePreference","userPreferencesActions","rel","baseUrl","updatedThemePreference","toggledSideNavState","handleToggleSideNav","ReactDOM","createPortal","popper","Layout","PageNotFound","userActivityUpdate","getState","isMaintenanceModeEnabled","isSysAdmin","userRole","stayLoggedInToastId","signedOut","stillActive","logoutNonSysAdminUsersDuringMaintenance","loadingIntervalId","permissionService","permissionActions","logoutCheckIntervalId","expiringMessage","msFromLastActive","ONE_HOUR","pauseOnFocusLoss","pauseOnHover","handleStayLoggedIn","onClose","handleStayLoggedInClose","checkUserActivity","onClickCapture","PreDataLoader","toArray","App","library","add","fas","far","fad","loadUserFromStorage","CustomProvider","ActivityTracker","selectedPageId","effect","render"],"mappings":"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","file":"static/js/main.e67a0ddf.chunk.js","sourcesContent":["export const config = {\r\n IDENTITY_URL: process.env.REACT_APP_IDENTITY_URL,\r\n OASIS_PORTAL_URL: process.env.REACT_APP_OASIS_PORTAL_URL\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport let getUserAbortController = [];\r\n\r\nexport async function updateRequired(userInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/update-required', userInfo);\r\n return response.data;\r\n}\r\n\r\nexport async function getUser(userId) {\r\n getUserAbortController[userId] = new AbortController();\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/user?userId=' + userId, { signal: getUserAbortController[userId].signal }).catch(error => {\r\n if (error.message != \"canceled\" && error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function getUserPartnerName() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/user/partner-name');\r\n return response.data;\r\n}\r\n\r\nexport async function getUsers() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/user/list');\r\n return response.data;\r\n}\r\n\r\nexport async function disableUser(userInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/disable', userInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function enableUser(userInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/enable', userInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function resetUser2fa(userInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/reset2fa', userInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error;\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function resetUserPassword(userInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/resetpassword', userInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error;\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function saveUser(userInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/save', userInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data\r\n}\r\n\r\nexport async function updateUserActivity() {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/updateUserActivity').catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function getAllLoggedInUserStatuses() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/user/getAllLoggedInUserSessions');\r\n return response.data;\r\n}\r\n\r\nexport async function massEditSubscriptions(massEditSubscriptionInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/user/massOperation/subscriptions', massEditSubscriptionInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data\r\n}","import axios from 'axios'\r\n\r\nexport function setAuthHeader(token) {\r\n axios.defaults.headers.common['Authorization'] = token ? 'Bearer ' + token : ''\r\n}","import * as types from './types'\r\nimport * as userService from '../../services/userService'\r\nimport * as usersService from '../../services/usersService'\r\nimport { setAuthHeader } from '../../utils/axiosHeaders'\r\n\r\nexport function loadUserSuccess(user) {\r\n return { type: types.LOAD_USER_AUTH_SUCCESS, user }\r\n}\r\n\r\nexport function updateUserActivitySuccess(userActivity) {\r\n return { type: types.UPDATE_USER_ACTIVITY, lastActive: userActivity.lastActive }\r\n}\r\n\r\nexport function loadUser() {\r\n return function (dispatch) {\r\n return userService.loadUser()\r\n .then(user => {\r\n dispatch(loadUserSuccess(user));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function updateUserActivity() {\r\n return function (dispatch) {\r\n return usersService.updateUserActivity()\r\n .then(userActivity => {\r\n dispatch(updateUserActivitySuccess(userActivity));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function storeUser(user) {\r\n setAuthHeader(user.access_token);\r\n return {\r\n type: types.STORE_USER,\r\n payload: user\r\n }\r\n}\r\n\r\nexport function loadingUser() {\r\n return {\r\n type: types.LOADING_USER\r\n }\r\n}\r\n\r\nexport function storeUserError() {\r\n return {\r\n type: types.STORE_USER_ERROR\r\n }\r\n}\r\n\r\nexport function userExpired() {\r\n return {\r\n type: types.USER_EXPIRED\r\n }\r\n}\r\n\r\nexport function userSignedOut() {\r\n return {\r\n type: types.USER_SIGNED_OUT\r\n }\r\n}","export const STORE_USER = 'STORE_USER';\r\nexport const USER_SIGNED_OUT = 'USER_SIGNED_OUT';\r\nexport const USER_EXPIRED = 'USER_EXPIRED';\r\nexport const STORE_USER_ERROR = 'STORE_USER_ERROR';\r\nexport const LOADING_USER = 'LOADING_USER';\r\nexport const UPDATE_DATALIMIT_SETTING = 'UPDATE_DATALIMIT_SETTING';\r\nexport const UPDATE_SORTBY_SETTING = 'UPDATE_SORTBY_SETTING';\r\nexport const UPDATE_FILTER_SETTING = 'UPDATE_FILTER_SETTING';\r\nexport const LOAD_USER_AUTH_SUCCESS = 'LOAD_USER_AUTH_SUCCESS';\r\nexport const LOAD_KNOWLEDGEBASE_BOOKS_SUCCESS = 'LOAD_KNOWLEDGEBASE_BOOKS_SUCCESS';\r\nexport const LOAD_KNOWLEDGEBASE_PAGE_SUCCESS = 'LOAD_KNOWLEDGEBASE_PAGE_SUCCESS';\r\nexport const CLEAR_KB_SEARCH_RESULTS = 'CLEAR_KB_SEARCH_RESULTS';\r\nexport const UPDATE_SELECTED_KB_CONTENT = 'UPDATE_SELECTED_KB_CONTENT';\r\nexport const CLEAR_SELECTED_KB_CONTENT = 'CLEAR_SELECTED_KB_CONTENT';\r\nexport const SEARCH_KB_SUCCESS = 'SEARCH_KB_SUCCESS';\r\nexport const LOAD_KB_PDF_SUCCESS = 'LOAD_KB_PDF_SUCCESS';\r\nexport const UPDATE_RESOURCES = 'UPDATE_RESOURCES';\r\nexport const UPDATE_PREVIEW_RESOURCES = 'UPDATE_PREVIEW_RESOURCES';\r\nexport const UPDATE_SELECTED_RESOURCE = 'UPDATE_SELECTED_RESOURCE';\r\nexport const CLEAR_SELECTED_RESOURCE = 'CLEAR_SELECTED_RESOURCE';\r\nexport const LOAD_RELATIVITY_STATS_SUCCESS = 'LOAD_RELATIVITY_STATS_SUCCESS';\r\nexport const LOAD_RELATIVITY_INSTANCES_SUCCESS = 'LOAD_RELATIVITY_LINK_SUCCESS';\r\nexport const LOAD_BRAINSPACE_STATS_SUCCESS = 'LOAD_BRAINSPACE_STATS_SUCCESS';\r\nexport const LOAD_STORAGE_STATS_SUCCESS = 'LOAD_STORAGE_STATS_SUCCESS';\r\nexport const LOAD_BLACKOUT_STATS_SUCCESS = 'LOAD_BLACKOUT_STATS_SUCCESS';\r\nexport const LOAD_READYSUITE_STATS_SUCCESS = 'LOAD_READYSUITE_STATS_SUCCESS';\r\nexport const LOAD_LSI_TRANSLATION_STATS_SUCCESS = 'LOAD_LSI_TRANSLATION_STATS_SUCCESS';\r\nexport const LOAD_WEBPROCESSING_STATS_SUCCESS = 'LOAD_WEBPROCESSING_STATS_SUCCESS';\r\nexport const CLEAR_RELATIVITY_STATS = 'CLEAR_RELATIVITY_STATS';\r\nexport const CLEAR_BRAINSPACE_STATS = 'CLEAR_BRAINSPACE_STATS';\r\nexport const CLEAR_STORAGE_STATS = 'CLEAR_STORAGE_STATS';\r\nexport const CLEAR_BLACKOUT_STATS = 'CLEAR_BLACKOUT_STATS';\r\nexport const CLEAR_READYSUITE_STATS = 'CLEAR_READYSUITE_STATS';\r\nexport const CLEAR_LSI_TRANSLATION_STATS = 'CLEAR_LSI_TRANSLATION_STATS';\r\nexport const CLEAR_WEBPROCESSING_STATS = 'CLEAR_WEBPROCESSING_STATS';\r\nexport const SAVE_USER_RELATIVITY_INSTANCES_SUCCESS = 'SAVE_USER_RELATIVITY_INSTANCES_SUCCESS';\r\nexport const LOAD_USER_RELATIVITY_INSTANCES_SUCCESS = 'LOAD_USER_RELATIVITY_INSTANCES_SUCCESS';\r\nexport const LOAD_SUPPORT_STATS_SUCCESS = 'LOAD_SUPPORT_STATS_SUCCESS';\r\nexport const LOAD_SUPPORT_URL_SUCCESS = 'LOAD_SUPPORT_LINK_SUCCESS';\r\nexport const CLEAR_SUPPORT_STATS = 'CLEAR_SUPPORT_STATS';\r\nexport const LOAD_SUPPORT_GROUPS_SUCCESS = 'LOAD_SUPPORT_GROUPS_SUCCESS';\r\nexport const UPDATE_SUPPORT_GROUPS_SUCCESS = 'UPDATE_SUPPORT_GROUPS_SUCCESS';\r\nexport const LOAD_FILE_TRANSFER_STATS_SUCCESS = 'LOAD_FILE_TRANSFER_STATS_SUCCESS';\r\nexport const LOAD_PARTNER_PORTALS_SUCCESS = 'LOAD_PARTNER_PORTALS_SUCCESS';\r\nexport const CLEAR_FILE_TRANSFER_STATS = 'CLEAR_FILE_TRANSFER_STATS';\r\nexport const LOAD_PARTNER_SUCCESS = 'LOAD_PARTNER_SUCCESS';\r\nexport const LOAD_PARTNERS_SUCCESS = 'LOAD_PARTNERS_SUCCESS';\r\nexport const UPDATE_SELECTED_PARTNER = 'UPDATE_SELECTED_PARTNER';\r\nexport const CLEAR_SELECTED_PARTNER = 'CLEAR_SELECTED_PARTNER';\r\nexport const UPDATE_SELECTED_USER = 'UPDATE_SELECTED_USER';\r\nexport const UPDATE_SELECTED_USERS = 'UPDATE_SELECTED_USERS';\r\nexport const ALL_USERS_SELECTED = 'ALL_USERS_SELECTED';\r\nexport const CLEAR_SELECTED_USER = 'CLEAR_SELECTED_USER';\r\nexport const CLEAR_SELECTED_USERS = 'CLEAR_SELECTED_USERS';\r\nexport const UPDATE_PARTNERS = 'UPDATE_PARTNERS';\r\nexport const SEARCH_PARTNERS = 'SEARCH_PARTNERS';\r\nexport const UPDATE_PAGE_NUMBER = 'UPDATE_PAGE_NUMBER';\r\nexport const UPDATE_SEARCH_TERM = 'UPDATE_SEARCH_TERM';\r\nexport const UPDATE_TEXT_FILTER = 'UPDATE_TEXT_FILTER';\r\nexport const CLEAR_TEXT_FILTERS = 'CLEAR_TEXT_FILTERS';\r\nexport const TOGGLE_FILTER_BY_COLUMN = 'TOGGLE_FILTER_BY_COLUMN';\r\nexport const DISABLE_PARTNER_SUCCESS = 'DISABLE_PARTNER_SUCCESS';\r\nexport const ENABLE_PARTNER_SUCCESS = 'ENABLE_PARTNER_SUCCESS';\r\nexport const SAVE_PARTNER_SUCCESS = 'SAVE_PARTNER_SUCCESS';\r\nexport const CREATE_PARTNER_SUCCESS = 'CREATE_PARTNER_SUCCESS';\r\nexport const LOAD_USER_SUCCESS = 'LOAD_USER_SUCCESS';\r\nexport const LOAD_USERS_SUCCESS = 'LOAD_USERS_SUCCESS';\r\nexport const LOAD_PERMISSION_LEVELS_SUCCESS = 'LOAD_PERMISSION_LEVELS_SUCCESS';\r\nexport const DISABLE_USER_SUCCESS = 'DISABLE_USER_SUCCESS';\r\nexport const ENABLE_USER_SUCCESS = 'ENABLE_USER_SUCCESS';\r\nexport const SAVE_USER_SUCCESS = 'SAVE_USER_SUCCESS';\r\nexport const CREATE_USER_SUCCESS = 'CREATE_USER_SUCCESS';\r\nexport const LOAD_AUTH_SERVICES_SUCCESS = 'LOAD_AUTH_SERVICES_SUCCESS';\r\nexport const LOAD_PARTNER_SERVICES_SUCCESS = 'LOAD_PARTNER_SERVICES_SUCCESS';\r\nexport const UPDATE_USER_ACTIVITY = 'UPDATE_USER_ACTIVITY';\r\nexport const RESET_2FA_SUCCESS = 'RESET_2FA-SUCCESS';\r\nexport const RESET_PASSWORD_SUCCESS = 'RESET_PASSWORD_SUCCESS';\r\nexport const LOAD_GLOBAL_LINKS_SUCCESS = 'LOAD_GLOBAL_LINKS_SUCCESS';\r\nexport const LOAD_AVAILABLE_LINKS_SUCCESS = 'LOAD_AVAILABLE_LINKS_SUCCESS';\r\nexport const LOAD_AVAILABLE_JIRA_ORGANIZATIONS_SUCCESS = 'LOAD_AVAILABLE_JIRA_ORGANIZATIONS_SUCCESS';\r\nexport const LOAD_AVAILABLE_JIRA_GROUPS_SUCCESS = 'LOAD_AVAILABLE_JIRA_GROUPS_SUCCESS';\r\nexport const LOAD_VIRTUAL_MACHINES_SUCCESS = 'LOAD_VIRTUAL_MACHINES_SUCCESS';\r\nexport const UPDATE_VIRTUAL_MACHINE_STATUS_SUCCESS = \"UPDATE_VIRTUAL_MACHINE_STATUS_SUCCESS\";\r\nexport const UPDATE_SELECTED_MACHINE = 'UPDATE_SELECTED_MACHINE';\r\nexport const LOAD_ROLE_SUCCESS = 'LOAD_ROLE_SUCCESS';\r\nexport const LOAD_ROLES_SUCCESS = 'LOAD_ROLES_SUCCESS';\r\nexport const DELETE_ROLE_SUCCESS = 'DELETE_ROLE_SUCCESS';\r\nexport const SAVE_ROLE_SUCCESS = 'SAVE_ROLE_SUCCESS';\r\nexport const CREATE_ROLE_SUCCESS = 'CREATE_ROLE_SUCCESS';\r\nexport const LOAD_PERMISSIONS_SUCCESS = 'LOAD_PERMISSIONS_SUCCESS';\r\nexport const LOAD_USER_PERMISSIONS_SUCCESS = 'LOAD_USER_PERMISSIONS_SUCCESS';\r\nexport const LOAD_CAN_ASSIGN_ROLES_SUCCESS = 'LOAD_CAN_ASSIGN_ROLES_SUCCESS';\r\nexport const LOAD_USER_ROLES_SUCCESS = 'LOAD_USER_ROLES_SUCCESS';\r\nexport const UPDATE_SELECTED_ROLE = 'UPDATE_SELECTED_ROLE';\r\nexport const CLEAR_SELECTED_ROLE = 'CLEAR_SELECTED_ROLE';\r\nexport const DELETE_SELECTED_ROLE = 'DELETE_SELECTED_ROLE';\r\nexport const LOADED_PAGE = 'LOADED_PAGE';\r\nexport const LOAD_AVAILABLE_PORTALS_SUCCESS = 'LOAD_AVAILABLE_PORTALS_SUCCESS'\r\nexport const UPDATE_STAT_CARD_NUMBER = 'UPDATE_STAT_CARD_NUMBER';\r\nexport const LOAD_AUDITS_SUCCESS = 'LOAD_AUDITS_SUCCESS';\r\nexport const UPDATE_SELECTED_AUDIT_DETAILS = 'UPDATE_SELECTED_AUDIT_DETAILS';\r\nexport const CLEAR_SELECTED_AUDIT_DETAILS = 'CLEAR_SELECTED_AUDIT_DETAILS';\r\nexport const LOAD_MAINTENANCE_MODE_SUCCESS = 'LOAD_MAINTENANCE_MODE_SUCCESS';\r\nexport const LOAD_RESOURCE_CYCLE_INTERVAL_SUCCESS = 'LOAD_RESOURCE_CYCLE_INTERVAL_SUCCESS';\r\nexport const LOAD_USER_STATUSES_SUCCESS = 'LOAD_USER_STATUSES_SUCCESS';\r\nexport const LOAD_USER_PREFERENCES_SUCCESS = 'LOAD_USER_PREFERENCES_SUCCESS';\r\nexport const SAVE_USER_PREFERENCE_SUCCESS = 'SAVE_USER_PREFERENCE_SUCCESS';\r\nexport const LOAD_AVAILABLE_SUBSCRIPTIONS_SUCCESS = 'LOAD_AVAILABLE_SUBSCRIPTIONS_SUCCESS';\r\nexport const LOAD_AVAILABLE_POCS_SUCCESS = 'LOAD_AVAILABLE_POCS_SUCCESS';\r\nexport const LOAD_AVAILABLE_TEMPLATES_SUCCESS = 'LOAD_AVAILABLE_TEMPLATES_SUCCESS';\r\nexport const LOAD_NOTIFICATIONS_SUCCESS = 'LOAD_NOTIFICATIONS_SUCCESS';\r\nexport const SAVE_NOTIFICATION_SUCCESS = 'SAVE_NOTIFICATION_SUCCESS';\r\nexport const REMOVE_NOTIFICATION_SUCCESS = 'REMOVE_NOTIFICATION_SUCCESS';\r\nexport const UPDATE_NOTIFICATION_SUCCESS = 'UPDATE_NOTIFICATION_SUCCESS';\r\nexport const LOAD_DASHBOARD_LAYOUT_SUCCESS = 'LOAD_DASHBOARD_LAYOUT_SUCCESS';\r\nexport const LOAD_AVAILABLE_WIDGETS_SUCCESS = 'LOAD_AVAILABLE_WIDGETS_SUCCESS';\r\nexport const UPDATE_DASHBOARD_LAYOUT = 'UPDATE_DASHBOARD_LAYOUT';\r\nexport const LOAD_DASHBOARD_WIDGETS_SUCCESS = 'LOAD_DASHBOARD_WIDGETS_SUCCESS';\r\nexport const UPDATE_DASHBOARD_EDIT_MODE = 'UPDATE_DASHBOARD_EDIT_MODE';\r\n","import { UserManager, WebStorageStateStore } from 'oidc-client';\r\nimport { storeUserError, storeUser } from '../redux/actions/authActions'\r\nimport { config } from '../config';\r\nimport { setAuthHeader } from '../utils/axiosHeaders';\r\n\r\nconst identityConfig = {\r\n authority: config.IDENTITY_URL,\r\n client_id: \"oasisportalclient\",\r\n redirect_uri: config.OASIS_PORTAL_URL + \"signin-oidc\",\r\n response_type: \"code\",\r\n monitorSession: false,\r\n accessTokenExpiringNotificationTime: 60,\r\n scope: \"offline_access openid profile address permissionlevel roles username dashboard_url mediashuttle_url client_name email oasisportalapi oasisvmmapi\",\r\n post_logout_redirect_uri: config.OASIS_PORTAL_URL + \"signout-oidc\",\r\n userStore: new WebStorageStateStore({ store: window.localStorage })\r\n};\r\n\r\nconst userManager = new UserManager(identityConfig);\r\n\r\nexport async function loadUser() {\r\n let user = await userManager.getUser();\r\n if (user) {\r\n setAuthHeader(user.access_token);\r\n }\r\n return user;\r\n}\r\n\r\nexport async function loadUserFromStorage(store) {\r\n try {\r\n let user = await userManager.getUser()\r\n if (!user) { return store.dispatch(storeUserError()) }\r\n store.dispatch(storeUser(user))\r\n } catch (e) {\r\n console.error(`User not found: ${e}`)\r\n store.dispatch(storeUserError())\r\n }\r\n}\r\n\r\nexport function signinRedirect() {\r\n return userManager.signinRedirect()\r\n}\r\n\r\nexport function customLoginRedirect(redirectUri) {\r\n const customLoginIdentityConfig = {\r\n authority: config.IDENTITY_URL,\r\n client_id: \"oasisportalclient\",\r\n redirect_uri: redirectUri + \"/signin-oidc\",\r\n response_type: \"code\",\r\n monitorSession: false,\r\n scope: \"openid profile address permissionlevel roles username dashboard_url mediashuttle_url client_name email oasisportalapi\",\r\n post_logout_redirect_uri: redirectUri + \"/signout-oidc\",\r\n userStore: new WebStorageStateStore({ store: window.localStorage })\r\n };\r\n const customLoginUserManager = new UserManager(customLoginIdentityConfig);\r\n return customLoginUserManager.signinRedirect();\r\n}\r\n\r\nexport function signinRedirectCallback() {\r\n return userManager.signinRedirectCallback()\r\n}\r\n\r\nexport function signoutRedirect() {\r\n return userManager.signoutRedirect()\r\n}\r\n\r\nexport function signoutRedirectCallback() {\r\n userManager.clearStaleState()\r\n userManager.removeUser()\r\n return userManager.signoutRedirectCallback()\r\n}\r\n\r\nexport default userManager","class TabLocalStorage\r\n{\r\n constructor() {\r\n let name = \"OasisPortal_CurrentTab\";\r\n\r\n this.set = (value) =>\r\n {\r\n localStorage.setItem(name, value);\r\n }\r\n\r\n this.get = () =>\r\n {\r\n return localStorage.getItem(name);\r\n }\r\n }\r\n}\r\n\r\nexport { TabLocalStorage };","import React, { useEffect } from 'react'\r\nimport { signinRedirectCallback } from '../../services/userService'\r\nimport { TabLocalStorage } from '../../utils/localStorageUtils'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nfunction SigninOidc() {\r\n const navigate = useNavigate()\r\n useEffect(() => {\r\n async function signinAsync() {\r\n try {\r\n await signinRedirectCallback();\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n\r\n var defaultTab = \"/\";\r\n\r\n var storageTab = new TabLocalStorage().get();\r\n\r\n defaultTab = storageTab ?? defaultTab;\r\n\r\n navigate(defaultTab)\r\n }\r\n signinAsync()\r\n }, [navigate])\r\n\r\n return (\r\n <>\r\n \r\n )\r\n}\r\n\r\nexport default SigninOidc\r\n","import React, { useEffect } from 'react'\r\nimport { signoutRedirectCallback } from '../../services/userService'\r\nimport { useNavigate } from 'react-router-dom'\r\n\r\nfunction SignoutOidc() {\r\n const Navigate = useNavigate()\r\n useEffect(() => {\r\n async function signoutAsync() {\r\n await signoutRedirectCallback()\r\n Navigate('/')\r\n }\r\n signoutAsync()\r\n }, [Navigate])\r\n\r\n return (\r\n <>\r\n \r\n )\r\n}\r\n\r\nexport default SignoutOidc\r\n","import React, { useRef, useEffect, useState } from 'react';\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\nconst AutoTruncateText = ({ text, theme, alignDirection }) => {\r\n const containerRef = useRef(null);\r\n const [isTruncated, setIsTruncated] = useState(false);\r\n\r\n useEffect(() => {\r\n const container = containerRef.current;\r\n if (container.scrollWidth > container.clientWidth) {\r\n setIsTruncated(true);\r\n } else {\r\n setIsTruncated(false);\r\n }\r\n }, [containerRef.current?.scrollWidth]);\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const container = containerRef.current;\r\n\r\n if (container.scrollWidth > container.clientWidth) {\r\n setIsTruncated(true);\r\n } else {\r\n setIsTruncated(false);\r\n }\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n\r\n handleResize();\r\n\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n { isTruncated ?\r\n \r\n { text }\r\n \r\n : { text }\r\n }\r\n \r\n );\r\n};\r\n\r\nexport default AutoTruncateText;","import React, { useRef, useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport AutoTruncateText from '../../../common/AutoTruncateText';\r\n\r\nfunction StatCard({ Stats, theme, ReloadStats, sideNavState, isInEditMode = false, onDeleteItem }) {\r\n\r\n const widgetHeight = useSelector(state => state.page.home.dashboardLayout.lg.find(x => x.i == Stats.title).h);\r\n\r\n const resizableDivRef = useRef(null);\r\n const titleRef = useRef(null);\r\n const statContentRef = useRef(null);\r\n\r\n useEffect(() => {\r\n updateFontSize();\r\n }, [resizableDivRef?.current?.offsetWidth, resizableDivRef?.current?.offsetHeight]);\r\n\r\n const updateFontSize = () => {\r\n //lower size multiplier allows ref element to be bigger \r\n updateElementSize(titleRef, 12, 35, 35);\r\n updateElementSize(statContentRef, 10, 20, 45);\r\n }\r\n\r\n const updateElementSize = (refItem, minSize, maxSize, sizeMultiplier) => {\r\n const element = refItem.current;\r\n const resizableDivElement = resizableDivRef.current;\r\n\r\n const fontSize = (resizableDivElement.offsetHeight + resizableDivElement.offsetWidth) / sizeMultiplier;\r\n\r\n element.style.fontSize = fontSize + 'px';\r\n\r\n //handle min max size of header\r\n if (fontSize < minSize || widgetHeight < 4) {\r\n element.style.fontSize = minSize + 'px';\r\n }\r\n\r\n if (fontSize > maxSize) {\r\n element.style.fontSize = maxSize + 'px';\r\n }\r\n }\r\n\r\n return (\r\n
\r\n { isInEditMode == true ?\r\n
onDeleteItem() }>\r\n \r\n \r\n \r\n
:\r\n \"\"\r\n }\r\n
\r\n
\r\n
{ Stats.title }
\r\n
\r\n { Stats.error ?\r\n
\r\n \r\n
: ''\r\n }\r\n
\r\n
\r\n { Stats.stats.length > 0 ?\r\n Stats.stats.map(stat => {\r\n return (\r\n
\r\n
\r\n
{ stat.value }
\r\n
\r\n )\r\n })\r\n :\r\n (Stats.error ?\r\n
\r\n { Stats.error }\r\n
\r\n :\r\n
\r\n \r\n
)\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default StatCard;","import * as types from \"./types\";\r\n\r\nexport function updateCardNumber(cardNumber) {\r\n return { type: types.UPDATE_STAT_CARD_NUMBER, cardNumber };\r\n}","import React, { useRef, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as statCardActions from '../../../../redux/actions/statCardActions';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport AutoTruncateText from '../../../common/AutoTruncateText';\r\n\r\nfunction PaginatedStatCard({ Stats, ReloadStats, theme, sideNavState, isInEditMode = false, onDeleteItem }) {\r\n\r\n const cardNumber = useSelector(state => state.statCard.cardNumber);\r\n const widgetHeight = useSelector(state => state.page.home.dashboardLayout.lg.find(x => x.i == Stats.title).h);\r\n\r\n const resizableDivRef = useRef(null);\r\n const titleRef = useRef(null);\r\n const subtitleRef = useRef(null);\r\n const statContentRef = useRef(null);\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n updateFontSize();\r\n }, [resizableDivRef?.current?.offsetWidth, resizableDivRef?.current?.offsetHeight]);\r\n\r\n const goToNextCard = () => { dispatch(statCardActions.updateCardNumber(nextCardNumber())); }\r\n\r\n const nextCardNumber = () => {\r\n if (cardNumber > Stats.statCards.length - 1) {\r\n return 1;\r\n } else {\r\n return cardNumber + 1;\r\n }\r\n }\r\n\r\n const goToPreviousCard = () => { dispatch(statCardActions.updateCardNumber(previousCardNumber())); }\r\n\r\n const previousCardNumber = () => {\r\n if (cardNumber < 2) {\r\n return Stats.statCards.length;\r\n } else {\r\n return cardNumber - 1;\r\n }\r\n }\r\n\r\n const updateFontSize = () => {\r\n //lower size multiplier allows ref element to be bigger \r\n updateElementSize(titleRef, 12, 35, 35);\r\n updateElementSize(subtitleRef, 10, 20, 45);\r\n updateElementSize(statContentRef, 10, 20, 45);\r\n }\r\n\r\n const updateElementSize = (refItem, minSize, maxSize, sizeMultiplier) => {\r\n const element = refItem.current;\r\n const resizableDivElement = resizableDivRef.current;\r\n\r\n const fontSize = (resizableDivElement.offsetHeight + resizableDivElement.offsetWidth) / sizeMultiplier;\r\n\r\n element.style.fontSize = fontSize + 'px';\r\n\r\n //handle min max size of header\r\n if (fontSize < minSize || widgetHeight < 4) {\r\n element.style.fontSize = minSize + 'px';\r\n }\r\n\r\n if (fontSize > maxSize) {\r\n element.style.fontSize = maxSize + 'px';\r\n }\r\n }\r\n\r\n return (\r\n
\r\n { isInEditMode == true ?\r\n
onDeleteItem() }>\r\n \r\n \r\n \r\n
:\r\n \"\"\r\n }\r\n
\r\n
\r\n
{ Stats.title }
\r\n
\r\n
\r\n
\r\n
\r\n { Stats.statCards[cardNumber - 1].error ?\r\n Stats.statCards[cardNumber - 1].error === \"No File Transfer Available\" ?\r\n \"\"\r\n :
\r\n \r\n
\r\n : \"\"\r\n }\r\n
\r\n
\r\n { Stats.statCards.length > 1 ?\r\n
\r\n \r\n
\r\n : \"\"\r\n }\r\n
\r\n { Stats.statCards[cardNumber - 1].stats && Stats.statCards[cardNumber - 1].stats.length > 0 ?\r\n Stats.statCards[cardNumber - 1].stats.map(stat => {\r\n\r\n return (\r\n
\r\n
\r\n
{ stat.value }
\r\n
\r\n )\r\n })\r\n :\r\n (Stats.statCards[cardNumber - 1].error ?\r\n (Stats.statCards[cardNumber - 1].error === \"No \" + Stats.title + \" Available\" ?\r\n
\r\n Submit a Support ticket to set up a Media Shuttle portal for fast and secure data transfer to and from Oasis.\r\n
\r\n :\r\n
\r\n { Stats.statCards[cardNumber - 1].error }\r\n
\r\n )\r\n :\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n { Stats.statCards.length > 1 ?\r\n
\r\n \r\n
\r\n :\r\n \"\"\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PaginatedStatCard;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getUserDashboardLayout() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/dashboard/layout');\r\n return response.data;\r\n}\r\n\r\nexport async function saveUserDashboardLayout(layout) {\r\n const json = { layout : JSON.stringify(layout) }\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/Dashboard/layout/save', json);\r\n return response.data;\r\n}\r\n\r\nexport async function getAvailableWidgets() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/dashboard/widgets');\r\n return response.data;\r\n}\r\n\r\n","export default {\r\n auth: {\r\n user: null,\r\n isLoadingUser: false,\r\n permissions: [],\r\n canAssignRoles: [],\r\n userRoles: [],\r\n lastActive: new Date(Date.now() + 1)\r\n },\r\n userPreferences: [\r\n {\r\n preferenceName: \"Theme\",\r\n preferenceValue: \"Light\"\r\n },\r\n {\r\n preferenceName: \"SideNavState\",\r\n preferenceValue: \"Open\"\r\n }\r\n ],\r\n notifications: [],\r\n kb: { books: [], searchResults: [], pdf: { fileName: \"\", content: \"\" } },\r\n resources: [],\r\n previewResources: [],\r\n selectedResource: {},\r\n relativityStats: {\r\n title: \"Relativity\",\r\n stats: [],\r\n instances: [],\r\n selectedRelativityInstances: []\r\n },\r\n brainspaceStats: {\r\n title: \"Brainspace\",\r\n stats: []\r\n },\r\n storageStats: {\r\n title: \"Storage\",\r\n stats: []\r\n },\r\n webProcessingStats: {\r\n title: \"Relativity Web Processing\",\r\n stats: []\r\n },\r\n blackoutStats: {\r\n title: \"Blackout\",\r\n stats: []\r\n },\r\n readySuiteStats: {\r\n title: \"ReadySuite\",\r\n stats: []\r\n },\r\n lsiTranslationStats: {\r\n title: \"LSI Translation\",\r\n stats: []\r\n },\r\n fileTransferStats: {\r\n title: \"File Transfer\",\r\n statCards: [{\r\n subTitle: \"\",\r\n stats: []\r\n }],\r\n portals: []\r\n },\r\n supportStats: {\r\n title: \"Support\",\r\n stats: [],\r\n url: \"\"\r\n },\r\n support: { groups: [] },\r\n statCard: { cardNumber: 1 },\r\n page: {\r\n home: {\r\n dashboardLayout: {//add new widgets here\r\n lg: [\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 0,\r\n \"i\": \"Relativity Workspaces\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 2,\r\n \"y\": 0,\r\n \"i\": \"Relativity Users\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 3,\r\n \"i\": \"Relativity Hosted Size\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 2,\r\n \"y\": 3,\r\n \"i\": \"Relativity Documents\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 4,\r\n \"h\": 6,\r\n \"x\": 4,\r\n \"y\": 0,\r\n \"i\": \"Support\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 4,\r\n \"h\": 6,\r\n \"x\": 8,\r\n \"y\": 0,\r\n \"i\": \"File Transfer\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 6,\r\n \"h\": 7,\r\n \"x\": 0,\r\n \"y\": 6,\r\n \"i\": \"Knowledge Base\",\r\n \"minW\": 2,\r\n \"maxW\": 6,\r\n \"minH\": 4,\r\n \"maxH\": 7\r\n },\r\n {\r\n \"w\": 6,\r\n \"h\": 7,\r\n \"x\": 6,\r\n \"y\": 6,\r\n \"i\": \"Resources\",\r\n \"minW\": 4,\r\n \"maxW\": 6,\r\n \"minH\": 5,\r\n \"maxH\": 7\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 9,\r\n \"i\": \"Brainspace Documents\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 12,\r\n \"i\": \"Storage Staging Size\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6,\r\n \"moved\": false,\r\n \"static\": false\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 10,\r\n \"y\": 9,\r\n \"i\": \"Storage Archive Size\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6,\r\n \"moved\": false,\r\n \"static\": false\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 2,\r\n \"y\": 9,\r\n \"i\": \"Blackout Native Redacted Documents\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 4,\r\n \"y\": 9,\r\n \"i\": \"Blackout Native Redactions Placed\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 6,\r\n \"y\": 9,\r\n \"i\": \"Blackout Image Redacted Documents\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 8,\r\n \"y\": 9,\r\n \"i\": \"Blackout Redacted Pages\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 2,\r\n \"y\": 12,\r\n \"i\": \"ReadySuite Number of Users\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 4,\r\n \"y\": 16,\r\n \"i\": \"LSI Translation Document Count\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 6,\r\n \"y\": 16,\r\n \"i\": \"LSI Translation Case Count\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 8,\r\n \"y\": 16,\r\n \"i\": \"Relativity Web Processing Discovered Size\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 19,\r\n \"i\": \"Relativity Web Processing Discovered Documents\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n }\r\n ]\r\n },\r\n defaultDashboardLayout: {//this handles the default layout for new users\r\n lg: [\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 0,\r\n \"i\": \"Relativity Workspaces\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 2,\r\n \"y\": 0,\r\n \"i\": \"Relativity Users\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 0,\r\n \"y\": 3,\r\n \"i\": \"Relativity Hosted Size\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 2,\r\n \"h\": 3,\r\n \"x\": 2,\r\n \"y\": 3,\r\n \"i\": \"Relativity Documents\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 4,\r\n \"h\": 6,\r\n \"x\": 4,\r\n \"y\": 0,\r\n \"i\": \"Support\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 4,\r\n \"h\": 6,\r\n \"x\": 8,\r\n \"y\": 0,\r\n \"i\": \"File Transfer\",\r\n \"minW\": 2,\r\n \"maxW\": 4,\r\n \"minH\": 3,\r\n \"maxH\": 6\r\n },\r\n {\r\n \"w\": 6,\r\n \"h\": 7,\r\n \"x\": 0,\r\n \"y\": 6,\r\n \"i\": \"Knowledge Base\",\r\n \"minW\": 2,\r\n \"maxW\": 6,\r\n \"minH\": 4,\r\n \"maxH\": 7\r\n },\r\n {\r\n \"w\": 6,\r\n \"h\": 7,\r\n \"x\": 6,\r\n \"y\": 6,\r\n \"i\": \"Resources\",\r\n \"minW\": 4,\r\n \"maxW\": 6,\r\n \"minH\": 5,\r\n \"maxH\": 7\r\n }\r\n ]\r\n },\r\n availableWidgets: [],\r\n isDashboardInEditMode: false\r\n },\r\n kb: {\r\n selectedContent: {},\r\n searchTerm: \"\"\r\n },\r\n partners: {\r\n isLoading: true,\r\n searchTerm: \"\",\r\n filterByColumn: false,\r\n textFilters: {\r\n name: \"\",\r\n parentPartnerName: \"\",\r\n partnerADIdentifier: \"\",\r\n tams: \"\",\r\n sams: \"\"\r\n },\r\n selectedPartner: {\r\n availableServices: [], integrationServices: [], defaultSubscriptions: [], billingContacts: [], salesContacts: [],\r\n operationsContacts: [], authContacts: [], twoFactorMethods: [],\r\n availableGlobalLinks: [], externalLinks: [],\r\n defaultJiraOrganizations: [], mediaShuttlePortals: [], jiraGroups: [], tams: [], sams: [], availableJiraOrganizations: []\r\n },\r\n dataHeaders: [\r\n { text: \"Name\", dataField: \"name\", width: \"25%\", filterable: true },\r\n { text: \"Parent Partner\", dataField: \"parentPartnerName\", width: \"25%\", filterable: true },\r\n { text: \"Identifier\", dataField: \"partnerADIdentifier\", width: \"8%\", filterable: true },\r\n { text: \"TAMs\", dataField: \"tams\", width: \"16%\", filterable: true },\r\n { text: \"SAMs\", dataField: \"sams\", width: \"16%\", filterable: true },\r\n { text: \"\", dataField: \"\", width: \"10%\", filterable: false }\r\n ],\r\n pageNumber: 1,\r\n filters: [\r\n {\r\n filterIdentifier: \"enabled\",\r\n filterType: \"triStateToggle\",\r\n group: \"Miscellaneous\",\r\n leftLabel: \"Enabled\",\r\n rightLabel: \"Disabled\",\r\n leftTooltip: \"\", rightTooltip: \"\"\r\n },\r\n {\r\n filterIdentifier: \"recentlyUpdated\",\r\n filterType: \"triStateToggle\",\r\n group: \"Miscellaneous\",\r\n leftLabel: \"Recent\",\r\n rightLabel: \"Not Recent\",\r\n leftTooltip: \"Partners that have been updated in the last month\",\r\n rightTooltip: \"Partners that were last updated over a month ago\"\r\n },\r\n {\r\n filterIdentifier: \"communications\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"Comms\",\r\n rightLabel: \"No Comms\",\r\n leftTooltip: \"Partners that have the communications service\",\r\n rightTooltip: \"Partners that do not have the communications service\"\r\n },\r\n {\r\n filterIdentifier: \"links\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"Links\",\r\n rightLabel: \"No Links\",\r\n leftTooltip: \"Partners that have the links service\",\r\n rightTooltip: \"Partners that do not have the links service\"\r\n },\r\n {\r\n filterIdentifier: \"support\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"Support\",\r\n rightLabel: \"No Support\",\r\n leftTooltip: \"Partners that have the support service\",\r\n rightTooltip: \"Partners that do not have the support service\"\r\n },\r\n {\r\n filterIdentifier: \"twoFA\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"Has 2FA\",\r\n rightLabel: \"No 2FA\",\r\n leftTooltip: \"Partners that have two factor authentication enabled\",\r\n rightTooltip: \"Partners that have two factor authentication disabled\"\r\n },\r\n { filterIdentifier: \"tams\", filterType: \"multiSelect\", label: \"Tam(s)\" },\r\n { filterIdentifier: \"sams\", filterType: \"multiSelect\", label: \"Sam(s)\" }\r\n ],\r\n dataLabel: \"Partners\"\r\n },\r\n users: {\r\n isLoading: true,\r\n searchTerm: \"\",\r\n filterByColumn: false,\r\n textFilters: {\r\n email: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n partnerName: \"\",\r\n lastLoginDate: \"\"\r\n },\r\n selectedUser: {\r\n integrationServices: [], availableServices: [], pocs: [], subscriptions: [], jiraGroups: [],\r\n roles: [], partnerId: 0, partnerName: \"Select a Partner...\",\r\n twoFactorMethodId: null, twoFactorMethodName: \"\", jiraOrganizations: [{ id: 0, name: \"No Organization\" }]\r\n },\r\n selectedUsers: [],\r\n allUsersSelected: false,\r\n dataHeaders: [\r\n { text: \"\", datafield: \"all\", width: \"0%\", filterable: false },\r\n { text: \"Email\", dataField: \"email\", width: \"25%\", filterable: true },\r\n { text: \"First Name\", dataField: \"firstName\", width: \"18%\", filterable: true },\r\n { text: \"Last Name\", dataField: \"lastName\", width: \"18%\", filterable: true },\r\n { text: \"Partner\", dataField: \"partnerName\", width: \"18%\", filterable: true },\r\n { text: \"Last Login\", dataField: \"lastLoginDate\", width: \"11%\", filterable: false },\r\n { text: \"\", dataField: \"\", width: \"10%\", filterable: false }\r\n ],\r\n pageNumber: 1,\r\n filters: [\r\n {\r\n filterIdentifier: \"enabled\",\r\n filterType: \"triStateToggle\",\r\n group: \"Miscellaneous\",\r\n leftLabel: \"Enabled\",\r\n rightLabel: \"Disabled\",\r\n leftTooltip: \"\",\r\n rightTooltip: \"\"\r\n },\r\n {\r\n filterIdentifier: \"internal\",\r\n filterType: \"triStateToggle\",\r\n group: \"Miscellaneous\",\r\n leftLabel: \"Internal\",\r\n rightLabel: \"External\",\r\n leftTooltip: \"Users that have the login service\",\r\n rightTooltip: \"Users that do not have the login service\"\r\n },\r\n {\r\n filterIdentifier: \"recentlyUpdated\",\r\n filterType: \"triStateToggle\",\r\n group: \"Miscellaneous\",\r\n leftLabel: \"Recent\",\r\n rightLabel: \"Not Recent\",\r\n leftTooltip: \"Users that have been updated this month\",\r\n rightTooltip: \"Users that were last updated over a month ago\"\r\n },\r\n {\r\n filterIdentifier: \"communications\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"Comms\",\r\n rightLabel: \"No Comms\",\r\n leftTooltip: \"Users that have the communications service\",\r\n rightTooltip: \"Users that do not have the communications service\"\r\n },\r\n {\r\n filterIdentifier: \"twoFA\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"2FA Enabled\",\r\n rightLabel: \"2FA Disabled\",\r\n leftTooltip: \"Users that have two factor authentication enabled\",\r\n rightTooltip: \"Users that have two factor authentication disabled\"\r\n },\r\n {\r\n filterIdentifier: \"support\",\r\n filterType: \"triStateToggle\",\r\n group: \"Service\",\r\n leftLabel: \"Support\",\r\n rightLabel: \"No Support\",\r\n leftTooltip: \"Users that have the support service\",\r\n rightTooltip: \"Users that do not have the support service\"\r\n },\r\n {\r\n filterIdentifier: \"auth\",\r\n filterType: \"triStateToggle\",\r\n group: \"Point Of Contact\",\r\n leftLabel: \"Security\",\r\n rightLabel: \"Not Security\",\r\n leftTooltip: \"Users that are listed as a Security Point of Contact\",\r\n rightTooltip: \"Users that are not listed as a Security Point of Contact\"\r\n },\r\n {\r\n filterIdentifier: \"billing\",\r\n filterType: \"triStateToggle\",\r\n group: \"Point Of Contact\",\r\n leftLabel: \"Accounting\",\r\n rightLabel: \"Not Accounting\",\r\n leftTooltip: \"Users that are listed as an Accounting Point of Contact\",\r\n rightTooltip: \"Users that are not listed as an Accounting Point of Contact\"\r\n },\r\n {\r\n filterIdentifier: \"operations\",\r\n filterType: \"triStateToggle\",\r\n group: \"Point Of Contact\",\r\n leftLabel: \"Operations\",\r\n rightLabel: \"Not Operations\",\r\n leftTooltip: \"Users that are listed as an Operations Point of Contact\",\r\n rightTooltip: \"Users that are not listed as an Operations Point of Contact\"\r\n },\r\n {\r\n filterIdentifier: \"sales\",\r\n filterType: \"triStateToggle\",\r\n group: \"Point Of Contact\",\r\n leftLabel: \"Sales\",\r\n rightLabel: \"Not Sales\",\r\n leftTooltip: \"Users that are listed as a Sales Point of Contact\",\r\n rightTooltip: \"Users that are not listed as a Sales Point of Contact\"\r\n },\r\n {\r\n filterIdentifier: \"emergencyNotifications\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"Emergency\",\r\n rightLabel: \"No Emergency\",\r\n leftTooltip: \"Users that have a subscription to Emergency Notifications\",\r\n rightTooltip: \"Users that do not have a subscription to Emergency Notifications\"\r\n },\r\n {\r\n filterIdentifier: \"insightsNewsletter\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"Insights\",\r\n rightLabel: \"No Insights\",\r\n leftTooltip: \"Users that have a subscription to the Insights Newsletter\",\r\n rightTooltip: \"Users that do not have a subscription to the Insights Newsletter\"\r\n },\r\n {\r\n filterIdentifier: \"oasisBlog\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"Oasis Blog\",\r\n rightLabel: \"No Oasis Blog\",\r\n leftTooltip: \"Users that have a subscription to the Oasis Blog\",\r\n rightTooltip: \"Users that do not have a subscription to the Oasis Blog\"\r\n },\r\n {\r\n filterIdentifier: \"maintenance\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"Maintenance\",\r\n rightLabel: \"No Maintenance\",\r\n leftTooltip: \"Users that have a subscription to the Maintenance/End of Month Notifications\",\r\n rightTooltip: \"Users that do not have a subscription to the Maintenance/End of Month Notifications\"\r\n },\r\n {\r\n filterIdentifier: \"ukMaintenance\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"UK Maintenance\",\r\n rightLabel: \"No UK Maintenance\",\r\n leftTooltip: \"Users that have a subscription to the UK Maintenance Communications\",\r\n rightTooltip: \"Users that do not have a subscription to the UK Maintenance Communications\"\r\n },\r\n {\r\n filterIdentifier: \"relativityOneEmergency\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"RelativityOne Emergency\",\r\n rightLabel: \"No RelativityOne Emergency\",\r\n leftTooltip: \"Users that have a subscription to the RelativityOne Emergency\",\r\n rightTooltip: \"Users that do not have a subscription to the RelativityOne Emergency\"\r\n },\r\n {\r\n filterIdentifier: \"revealEmergency\",\r\n filterType: \"triStateToggle\",\r\n group: \"Subscription\",\r\n leftLabel: \"Reveal Emergency\",\r\n rightLabel: \"No Reveal Emergency\",\r\n leftTooltip: \"Users that have a subscription to the Reveal Emergency\",\r\n rightTooltip: \"Users that do not have a subscription to the Reveal Emergency\"\r\n }\r\n ],\r\n dataLabel: \"Users\"\r\n },\r\n virtualMachines: {\r\n isLoading: true,\r\n searchTerm: \"\",\r\n filterByColumn: false,\r\n textFilters: {\r\n name: \"\",\r\n partnerName: \"\",\r\n maxMemory: \"\",\r\n memoryAvailablePercentage: \"\",\r\n cpuCount: \"\",\r\n statusString: \"\"\r\n },\r\n selectedMachine: {},\r\n dataHeaders: [\r\n { text: \"Name\", dataField: \"name\", width: \"23%\", filterable: true },\r\n { text: \"Partner\", dataField: \"partnerName\", width: \"22%\", filterable: true },\r\n { text: \"Max Memory\", dataField: \"maxMemory\", width: \"14%\", filterable: false },\r\n { text: \"Memory Available\", dataField: \"memoryAvailablePercentage\", width: \"15%\", filterable: false },\r\n { text: \"# of Cores\", dataField: \"cpuCount\", width: \"12%\", filterable: false },\r\n { text: \"Status\", dataField: \"statusString\", width: \"8%\", filterable: true },\r\n { text: \"\", dataField: \"\", width: \"6%\", filterable: false }\r\n ],\r\n pageNumber: 1,\r\n filters: [],\r\n dataLabel: \"Virtual Machines\"\r\n },\r\n roles: {\r\n isLoading: true,\r\n searchTerm: \"\",\r\n filterByColumn: false,\r\n textFilters: {\r\n name: \"\",\r\n partnerName: \"\"\r\n },\r\n selectedRole: {\r\n partnerId: 0,\r\n permissions: [],\r\n canAssignRoles: []\r\n },\r\n dataHeaders: [\r\n { text: \"Name\", dataField: \"name\", width: \"47%\", filterable: true },\r\n { text: \"Partner\", dataField: \"partnerName\", width: \"47%\", filterable: true },\r\n { text: \"\", dataField: \"\", width: \"6%\", filterable: false }\r\n ],\r\n pageNumber: 1,\r\n filters: [\r\n {\r\n filterIdentifier: \"isSystemDefined\",\r\n filterType: \"triStateToggle\",\r\n group: \"Miscellaneous\",\r\n leftLabel: \"System\",\r\n rightLabel: \"User\",\r\n leftTooltip: \"Roles that are defined by the app\",\r\n rightTooltip: \"Roles created by users\"\r\n }\r\n ],\r\n dataLabel: \"Roles\"\r\n },\r\n audits: {\r\n isLoading: true,\r\n searchTerm: \"\",\r\n filterByColumn: false,\r\n textFilters: {\r\n userEmail: \"\",\r\n partnerName: \"\",\r\n action: \"\",\r\n actedUpon: \"\",\r\n name: \"\",\r\n createdDate: \"\"\r\n },\r\n selectedAuditDetails: {\r\n userActionAuditLogEntry: {\r\n actedUpon: \"\",\r\n action: \"\",\r\n createdDate: \"\",\r\n partnerId: \"\",\r\n partnerName: \"\",\r\n name: \"\",\r\n userActionAuditLogEntryId: \"\",\r\n userEmail: \"\",\r\n userId: \"\"\r\n }\r\n },\r\n dataHeaders: [\r\n { text: \"User\", dataField: \"userEmail\", width: \"20%\", filterable: true },\r\n { text: \"Partner\", dataField: \"partnerName\", width: \"20%\", filterable: true },\r\n { text: \"Action\", dataField: \"action\", width: \"14%\", filterable: true },\r\n { text: \"Type\", dataField: \"actedUpon\", width: \"10%\", filterable: true },\r\n { text: \"Name\", dataField: \"name\", width: \"18%\", filterable: true },\r\n { text: \"Timestamp\", dataField: \"createdDate\", width: \"18%\", filterable: false },\r\n { text: \"\", datafield: \"\", width: \"4%\", filterable: false }\r\n ],\r\n pageNumber: 1,\r\n filters: [\r\n { filterIdentifier: \"date\", filterType: \"range\", label: \"Date Range\" },\r\n { filterIdentifier: \"users\", filterType: \"multiSelect\", label: \"User(s)\" },\r\n { filterIdentifier: \"partners\", filterType: \"multiSelect\", label: \"Partner(s)\" },\r\n { filterIdentifier: \"actions\", filterType: \"multiSelect\", label: \"Action(s)\" },\r\n { filterIdentifier: \"types\", filterType: \"multiSelect\", label: \"Type(s)\" },\r\n { filterIdentifier: \"names\", filterType: \"multiSelect\", label: \"Name(s)\" }\r\n\r\n ],\r\n dataLabel: \"Audits\"\r\n },\r\n userStatuses: {\r\n isLoading: true,\r\n searchTerm: \"\",\r\n filterByColumn: false,\r\n textFilters: {\r\n emailAddress: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n partner: \"\",\r\n login: \"\",\r\n lastAction: \"\"\r\n },\r\n selectedUserStatus: {},\r\n dataHeaders: [\r\n { text: \"Email Address\", dataField: \"emailAddress\", width: \"22%\", filterable: true },\r\n { text: \"First Name\", dataField: \"firstName\", width: \"14%\", filterable: true },\r\n { text: \"Last Name\", dataField: \"lastName\", width: \"14%\", filterable: true },\r\n { text: \"Partner\", dataField: \"partner\", width: \"20%\", filterable: true },\r\n { text: \"Login\", dataField: \"login\", width: \"15%\", filterable: false },\r\n { text: \"Last Action\", dataField: \"lastAction\", width: \"15%\", filterable: false }\r\n ],\r\n pageNumber: 1,\r\n filters: [],\r\n dataLabel: \"User Status\"\r\n }\r\n },\r\n partners: [],\r\n users: [],\r\n virtualMachines: [],\r\n roles: [],\r\n permissions: [],\r\n userPermissions: [],\r\n audits: [],\r\n userStatuses: [],\r\n groups: { availableSubscriptions: [], availablePocs: [] },\r\n communications: { availableTemplates: [] },\r\n fileTransfer: { availablePortals: [] },\r\n services: { auth: [], partner: [] },\r\n jira: { availableOrganizations: [], availableGroups: [] },\r\n settings: {\r\n partners: {\r\n dataLimit: 25,\r\n sortBy: { value: \"name\", ascending: true },\r\n filters: {\r\n enabled: { isActive: true, value: true },\r\n recentlyUpdated: { isActive: false, value: true },\r\n communications: { isActive: false, value: true },\r\n links: { isActive: false, value: true },\r\n support: { isActive: false, value: true },\r\n infrastructure: { isActive: false, value: true },\r\n twoFA: { isActive: false, value: true },\r\n tams: { isActive: false, value: [] },\r\n sams: { isActive: false, value: [] }\r\n }\r\n },\r\n users: {\r\n dataLimit: 25,\r\n sortBy: { value: \"email\", ascending: true },\r\n filters: {\r\n enabled: { isActive: true, value: true },\r\n internal: { isActive: true, value: true },\r\n recentlyUpdated: { isActive: false, value: true },\r\n communications: { isActive: false, value: true },\r\n twoFA: { isActive: false, value: true },\r\n support: { isActive: false, value: true },\r\n auth: { isActive: false, value: true },\r\n billing: { isActive: false, value: true },\r\n operations: { isActive: false, value: true },\r\n sales: { isActive: false, value: true },\r\n emergencyNotifications: { isActive: false, value: true },\r\n insightsNewsletter: { isActive: false, value: true },\r\n oasisBlog: { isActive: false, value: true },\r\n maintenance: { isActive: false, value: true },\r\n ukMaintenance: { isActive: false, value: true },\r\n relativityOneEmergency: { isActive: false, value: true },\r\n revealEmergency: { isActive: false, value: true }\r\n }\r\n },\r\n virtualMachines: {\r\n dataLimit: 25,\r\n sortBy: { value: \"name\", ascending: true },\r\n filters: {}\r\n },\r\n roles: {\r\n dataLimit: 25,\r\n sortBy: { value: \"name\", ascending: true },\r\n filters: {\r\n isSystemDefined: { isActive: true, value: false }\r\n }\r\n },\r\n audits: {\r\n dataLimit: 25,\r\n sortBy: { value: \"createdDate\", ascending: false },\r\n filters: {\r\n date: { isActive: false, value: { from: \"\", to: \"\" } },\r\n users: { isActive: false, value: [] },\r\n actions: { isActive: false, value: [] },\r\n types: { isActive: false, value: [] },\r\n partners: { isActive: false, value: [] },\r\n names: { isActive: false, value: [] }\r\n }\r\n },\r\n userStatuses: {\r\n dataLimit: 25,\r\n sortBy: { value: \"lastAction\", ascending: false },\r\n filters: {}\r\n }\r\n },\r\n appSettings: { maintenanceMode: \"disabled\", resourceCycleIntervalInSeconds: 6 },\r\n links: { global: [], available: [] }\r\n}","import * as types from \"./types\";\r\nimport * as dashboardService from \"../../services/dashboardService\";\r\nimport initialState from '../../redux/reducers/InitialState.js';\r\n\r\nexport function updateSelectedKBContent(selectedContent) {\r\n return { type: types.UPDATE_SELECTED_KB_CONTENT, selectedContent };\r\n}\r\n\r\nexport function clearSelectedKBContent() {\r\n return { type: types.CLEAR_SELECTED_KB_CONTENT };\r\n}\r\n\r\nexport function updateSelectedPartner(selectedPartner) {\r\n return { type: types.UPDATE_SELECTED_PARTNER, selectedPartner };\r\n}\r\n\r\nexport function clearSelectedPartner() {\r\n return { type: types.CLEAR_SELECTED_PARTNER };\r\n}\r\n\r\nexport function updateSelectedUser(selectedUser) {\r\n return { type: types.UPDATE_SELECTED_USER, selectedUser };\r\n}\r\n\r\nexport function updateSelectedUsers(selectedUsers) {\r\n return { type: types.UPDATE_SELECTED_USERS, selectedUsers };\r\n}\r\n\r\nexport function clearSelectedUser() {\r\n return { type: types.CLEAR_SELECTED_USER };\r\n}\r\n\r\nexport function clearSelectedUsers() {\r\n return { type: types.CLEAR_SELECTED_USERS };\r\n}\r\n\r\nexport function updateSelectedRole(selectedRole) {\r\n return { type: types.UPDATE_SELECTED_ROLE, selectedRole };\r\n}\r\n\r\nexport function updateSelectedMachine(selectedMachine) {\r\n return { type: types.UPDATE_SELECTED_MACHINE, selectedMachine };\r\n}\r\n\r\nexport function clearSelectedRole() {\r\n return { type: types.CLEAR_SELECTED_ROLE };\r\n}\r\n\r\nexport function updateSelectedAuditDetails(auditDetails) {\r\n return { type: types.UPDATE_SELECTED_AUDIT_DETAILS, auditDetails };\r\n}\r\n\r\nexport function clearSelectedAuditDetails() {\r\n return { type: types.CLEAR_SELECTED_AUDIT_DETAILS };\r\n}\r\n\r\nexport function updateSearchTerm(recordType, searchTerm) {\r\n return { type: types.UPDATE_SEARCH_TERM, recordType, searchTerm };\r\n}\r\n\r\nexport function updateTextFilter(recordType, textFilter, searchTerm) {\r\n return { type: types.UPDATE_TEXT_FILTER, recordType, textFilter, searchTerm };\r\n}\r\n\r\nexport function clearTextFilters(recordType) {\r\n return { type: types.CLEAR_TEXT_FILTERS, recordType };\r\n}\r\n\r\nexport function toggleFilterByColumn(recordType, filterByColumn) {\r\n return { type: types.TOGGLE_FILTER_BY_COLUMN, recordType, filterByColumn };\r\n}\r\n\r\nexport function updatePageNumber(recordType, pageNumber) {\r\n return { type: types.UPDATE_PAGE_NUMBER, recordType, pageNumber };\r\n}\r\n\r\nexport function loadedPage(recordType) {\r\n return { type: types.LOADED_PAGE, recordType };\r\n}\r\n\r\nexport function allUsersSelected(recordType, allUsersSelected) {\r\n return { type: types.ALL_USERS_SELECTED, recordType, allUsersSelected };\r\n}\r\n\r\nexport function updateDashboardLayout(dashboardLayout) {\r\n return { type: types.UPDATE_DASHBOARD_LAYOUT, dashboardLayout }\r\n}\r\n\r\nexport function loadDashboardLayoutSuccess(dashboardLayout) {\r\n return { type: types.LOAD_DASHBOARD_LAYOUT_SUCCESS, dashboardLayout };\r\n}\r\n\r\nexport function loadAvailableWidgetsSuccess(widgets) {\r\n return { type: types.LOAD_AVAILABLE_WIDGETS_SUCCESS, widgets };\r\n}\r\n\r\nexport function updateDashboardEditMode(isEnabled) {\r\n return { type: types.UPDATE_DASHBOARD_EDIT_MODE, isEnabled };\r\n}\r\n\r\nexport function loadAvailableWidgets() {\r\n return function (dispatch) {\r\n return dashboardService.getAvailableWidgets()\r\n .then(widgets => {\r\n dispatch(loadAvailableWidgetsSuccess(widgets));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadUserDashboardLayout() {\r\n return function (dispatch) {\r\n return dashboardService.getUserDashboardLayout()\r\n .then(dashboardLayout => {\r\n if(dashboardLayout){\r\n dispatch(loadDashboardLayoutSuccess(JSON.parse(dashboardLayout.layout)));\r\n }\r\n else {\r\n //load default layout\r\n dispatch(loadDashboardLayoutSuccess(initialState.page.home.defaultDashboardLayout));\r\n }\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function saveUserDashboardLayout(layout) {\r\n return function (dispatch) {\r\n return dashboardService.saveUserDashboardLayout(layout)\r\n .then(dashboardLayout => {\r\n dispatch(loadDashboardLayoutSuccess(JSON.parse(dashboardLayout.layout)));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getBooks() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/knowledgebase/books');\r\n return response.data;\r\n}\r\n\r\nexport async function getContent(type, contentId) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/knowledgebase/content/' + type + '/' + contentId);\r\n return response.data;\r\n}\r\n\r\nexport async function searchKnowledgeBase(query) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/knowledgebase/search?query=' + encodeURIComponent(query))\r\n return response.data;\r\n}\r\n\r\nexport async function getPdf(contentId) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/knowledgebase/exportPdf?contentId=' + contentId );\r\n return response.data;\r\n}","import * as pageActions from \"../actions/pageActions\";\r\nimport * as types from \"./types\";\r\nimport * as kbService from \"../../services/kbService\";\r\n\r\nexport function searchKBSuccess(searchResults) {\r\n return { type: types.SEARCH_KB_SUCCESS, searchResults }\r\n}\r\n\r\nexport function loadKnowledgeBaseBooksSuccess(books) {\r\n return { type: types.LOAD_KNOWLEDGEBASE_BOOKS_SUCCESS, books }\r\n}\r\n\r\nexport function clearKBSearchResults() {\r\n return { type: types.CLEAR_KB_SEARCH_RESULTS }\r\n}\r\n\r\nexport function loadPdfSuccess(pdf) {\r\n return { type: types.LOAD_KB_PDF_SUCCESS, pdf }\r\n}\r\n\r\nexport function loadKnowledgeBaseBooks() {\r\n return function (dispatch) {\r\n return kbService.getBooks()\r\n .then(books => {\r\n dispatch(loadKnowledgeBaseBooksSuccess(books));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadKnowledgeBaseContent(type, contentId) {\r\n return function (dispatch) {\r\n return kbService.getContent(type, contentId)\r\n .then(content => {\r\n dispatch(pageActions.updateSelectedKBContent(content));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function searchKnowledgeBase(query) {\r\n return function (dispatch) {\r\n return kbService.searchKnowledgeBase(query)\r\n .then(searchResults => {\r\n dispatch(searchKBSuccess(searchResults));\r\n dispatch(pageActions.clearSelectedKBContent());\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function getPdf(contentId) {\r\n return function (dispatch) {\r\n return kbService.getPdf(contentId)\r\n .then(pdf => {\r\n dispatch(loadPdfSuccess(pdf));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function clearPdf() {\r\n return function (dispatch) {\r\n dispatch(loadPdfSuccess({ fileName: \"\", content: \"\" }));\r\n }\r\n}","import React, { useState, useRef, useEffect } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { toast } from 'react-toastify';\r\nimport * as kbActions from '../../../../redux/actions/kbActions';\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction KBCard({ theme, sideNavState, isInEditMode = false, onDeleteItem }) {\r\n\r\n const [selectedPages, setSelectedPages] = useState([]);\r\n\r\n const books = useSelector(state => state.kb.books);\r\n const widgetHeight = useSelector(state => state.page.home.dashboardLayout.lg.find(x => x.i == \"Knowledge Base\").h);\r\n const resizableDivRef = useRef(null);\r\n const titleRef = useRef(null);\r\n const contentRef = useRef(null);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(kbActions.loadKnowledgeBaseBooks()).catch(error => {\r\n toast.error(\"Loading KB Books Failed: \" + error, { autoClose: false });\r\n });\r\n }, [])\r\n\r\n useEffect(() => {\r\n let pages = [];\r\n let pagesOutsideOfChapters = books.map(book => book.contents.filter(content => content.type == \"page\")).flat();\r\n let chapters = books.map(book => book.contents.filter(content => content.type == \"chapter\")).flat();\r\n let pagesInsideOfChapters = chapters.map(chapter => chapter.pages).flat();\r\n let totalPageCount = pagesInsideOfChapters.length + pagesOutsideOfChapters.length;\r\n let pickFromThesePages = [...pagesOutsideOfChapters.concat(pagesInsideOfChapters)];\r\n for (let i = 0; i < (totalPageCount < 5 ? totalPageCount : 5); i++) {\r\n let pagePosition = Math.floor(Math.random() * pickFromThesePages.length);\r\n pages[i] = pickFromThesePages[pagePosition];\r\n pickFromThesePages.splice(pagePosition, 1);\r\n }\r\n setSelectedPages(pages);\r\n }, [books])\r\n\r\n useEffect(() => {\r\n updateFontSize();\r\n }, [resizableDivRef?.current?.offsetWidth, resizableDivRef?.current?.offsetHeight]);\r\n\r\n const updateFontSize = () => {\r\n //lower size multiplier allows ref element to be bigger \r\n updateElementSize(titleRef, 12, 35, 35);\r\n updateElementSize(contentRef, 10, 20, 70);\r\n }\r\n\r\n const updateElementSize = (refItem, minSize, maxSize, sizeMultiplier) => {\r\n const element = refItem.current;\r\n const resizableDivElement = resizableDivRef.current;\r\n\r\n const fontSize = (resizableDivElement.offsetHeight + resizableDivElement.offsetWidth) / sizeMultiplier;\r\n\r\n element.style.fontSize = fontSize + 'px';\r\n\r\n //handle min max size of header\r\n if (fontSize < minSize || widgetHeight < 5) {\r\n element.style.fontSize = minSize + 'px';\r\n }\r\n\r\n if (fontSize > maxSize) {\r\n element.style.fontSize = maxSize + 'px';\r\n }\r\n }\r\n\r\n return (\r\n
\r\n { isInEditMode == true ?\r\n
onDeleteItem() }>\r\n \r\n \r\n \r\n
:\r\n \"\"\r\n }\r\n
\r\n
\r\n
Knowledge Base
\r\n
\r\n
\r\n
\r\n { selectedPages.length > 0 ? selectedPages.map((page) => {\r\n return (\r\n
\r\n { page.name }\r\n
\r\n )\r\n }) :
}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default KBCard;","import React, { useEffect, useRef, useState } from 'react';\r\nimport { useSelector } from \"react-redux\";\r\nimport * as bootstrap from 'bootstrap';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport AutoTruncateText from '../../../../common/AutoTruncateText';\r\n\r\nfunction PaginatedResourceCard({ isPreview, theme, sideNavState, isInEditMode = false, onDeleteItem }) {\r\n\r\n const auth = useSelector(state => state.auth);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const resources = useSelector(state => isPreview ? state.previewResources : state.resources);\r\n const intervalDelayValue = useSelector(state => state.appSettings.resourceCycleIntervalInSeconds);\r\n\r\n const resizableDivRef = useRef(null);\r\n const titleRef = useRef(null);\r\n const contentRef = useRef(null);\r\n const imageRef = useRef(null);\r\n\r\n const [intervalId, setIntervalId] = useState();\r\n const [iterationCounter, setIterationCounter] = useState(0);\r\n\r\n const [activeCardNumber, setActiveCardNumber] = useState(1);\r\n const nextButtonRef = useRef(null);\r\n\r\n useEffect(() => {\r\n startAutoRotate();\r\n return () => {\r\n clearInterval(intervalId);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n updateFontSize();\r\n }, [resizableDivRef?.current?.offsetWidth, resizableDivRef?.current?.offsetHeight]);\r\n\r\n useEffect(() => {\r\n goToNextCard();\r\n }, [iterationCounter]);\r\n\r\n useEffect(() => {\r\n setActiveCardNumber(1);\r\n }, [resources.length])\r\n\r\n const stopAutoRotate = () => {\r\n clearInterval(intervalId);\r\n }\r\n\r\n const startAutoRotate = () => {\r\n stopAutoRotate();\r\n var id = setInterval(() => {\r\n if (nextButtonRef.current != null) {\r\n setIterationCounter(current => current + 1);\r\n }\r\n else {\r\n clearInterval(id);\r\n }\r\n }, (intervalDelayValue * 1000));\r\n\r\n setIntervalId(id);\r\n }\r\n\r\n const goToNextCard = () => {\r\n setActiveCardNumber(nextCardNumber());\r\n }\r\n\r\n const nextCardNumber = () => {\r\n if (activeCardNumber > resources.length - 1) {\r\n return 1;\r\n } else {\r\n return activeCardNumber + 1;\r\n }\r\n }\r\n\r\n const goToPreviousCard = () => {\r\n setActiveCardNumber(previousCardNumber());\r\n }\r\n\r\n const previousCardNumber = () => {\r\n if (activeCardNumber < 2) {\r\n return resources.length;\r\n } else {\r\n return activeCardNumber - 1;\r\n }\r\n }\r\n\r\n const goToCard = (resource) => {\r\n var selectedCardNumber = resources.findIndex((r) => r.resourceId == resource.resourceId) + 1;\r\n\r\n setActiveCardNumber(selectedCardNumber);\r\n }\r\n\r\n const handleConfigureResources = () => {\r\n if (!isPreview) {\r\n new bootstrap.Modal(document.getElementById('resource-configuration-modal'), { backdrop: 'static', keyboard: false }).show();\r\n ReactTooltip.rebuild();\r\n }\r\n }\r\n\r\n const updateFontSize = () => {\r\n //lower size multiplier allows ref element to be bigger \r\n updateElementSize(titleRef, 12, 35, 35, 'text');\r\n updateElementSize(contentRef, 10, 20, 70, 'text');\r\n updateElementSize(imageRef, 50, 150, 7, 'image');\r\n }\r\n\r\n const updateElementSize = (refItem, minSize, maxSize, sizeMultiplier, elementType) => {\r\n if (!refItem || !refItem.current) {\r\n return;\r\n }\r\n\r\n const element = refItem.current;\r\n const resizableDivElement = resizableDivRef.current;\r\n\r\n const newSize = (resizableDivElement.offsetHeight + resizableDivElement.offsetWidth) / sizeMultiplier;\r\n\r\n if (elementType === 'text') {\r\n element.style.fontSize = newSize + 'px';\r\n\r\n //handle min max size of header\r\n if (newSize < minSize) {\r\n element.style.fontSize = minSize + 'px';\r\n }\r\n\r\n if (newSize > maxSize) {\r\n element.style.fontSize = maxSize + 'px';\r\n }\r\n } else if (elementType === 'image') {\r\n element.style.width = newSize + 'px';\r\n element.style.height = newSize + 'px';\r\n\r\n //handle min max size of header\r\n if (newSize < minSize) {\r\n element.style.width = minSize + 'px';\r\n element.style.height = minSize + 'px';\r\n }\r\n\r\n if (newSize > maxSize) {\r\n element.style.width = maxSize + 'px';\r\n element.style.height = maxSize + 'px';\r\n }\r\n }\r\n\r\n }\r\n\r\n return (\r\n <>\r\n
stopAutoRotate() } onMouseLeave={ () => startAutoRotate() }>\r\n { isInEditMode == true ?\r\n
onDeleteItem() }>\r\n \r\n \r\n \r\n
:\r\n \"\"\r\n }\r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ConfigureResources\") ?\r\n
\r\n handleConfigureResources() }>\r\n \r\n \r\n
\r\n : \"\"\r\n }\r\n
\r\n { resources.length > 1 && resources[activeCardNumber - 1] ?\r\n resources.map((resource) => {\r\n return (\r\n <>\r\n goToCard(resource) } icon={ \"fas fa-regular fa-circle-small \" + (resource.resourceId == resources[activeCardNumber - 1].resourceId ? \"\" : \"fa-duotone\") } className=\"clickable pe-2\" />\r\n \r\n )\r\n }) : \"\"\r\n }\r\n
\r\n
\r\n
\r\n { resources.length > 0 && resources[activeCardNumber - 1] && resources[activeCardNumber - 1].siteLink ?\r\n \r\n
\r\n
\r\n : resources.length > 0 && resources[activeCardNumber - 1] ?\r\n
\r\n
\r\n
\r\n : \"\"\r\n }\r\n
\r\n
\r\n
\r\n { resources.length > 1 && resources[activeCardNumber - 1] ?\r\n
\r\n goToPreviousCard() } />\r\n
\r\n : \"\"\r\n }\r\n { resources.length > 0 && resources[activeCardNumber - 1] ?\r\n <>\r\n
\r\n
\r\n
\r\n { resources[activeCardNumber - 1].description }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n :
}\r\n { resources.length > 1 && resources[activeCardNumber - 1] ?\r\n
\r\n goToNextCard() } ref={ nextButtonRef } />\r\n
\r\n : \"\"\r\n }\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default PaginatedResourceCard;","export function getLocalDateTime(dateTime) {\r\n if (dateTime) {\r\n return new Date(dateTime + 'Z').toLocaleString()\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\nexport function getLocalDate(dateTime) {\r\n if (dateTime) {\r\n return new Date(dateTime + 'Z').toLocaleDateString()\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\nexport function getLocalTime(dateTime, format) {\r\n if (dateTime) {\r\n return format ? new Date(dateTime + 'Z').toLocaleTimeString([], format) : new Date(dateTime + 'Z').toLocaleTimeString();\r\n } else {\r\n return \"\";\r\n }\r\n}","import React, { useEffect, useRef, useState } from 'react';\r\nimport { config } from '../../../../config';\r\nimport { AreaChart, Area, ResponsiveContainer, Tooltip } from 'recharts';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport * as dateUtils from '../../../../utils/dateUtils';\r\nimport { useSelector } from \"react-redux\";\r\nimport AutoTruncateText from '../../../common/AutoTruncateText';\r\n\r\nfunction GraphWidget({ Stats, theme, sideNavState, isInEditMode = false, onDeleteItem, widgetTitle }) {\r\n\r\n const [data, setData] = useState([]);\r\n const [dataVersionId, setDataVersionId] = useState(0);\r\n const [brand, setBrand] = useState(\"\");\r\n\r\n const selectedRelativityInstances = useSelector(state => state.relativityStats.selectedRelativityInstances);\r\n const widgetHeight = useSelector(state => state.page.home.dashboardLayout.lg.find(x => x.i == widgetTitle).h);\r\n const resizableDivRef = useRef(null);\r\n const titleRef = useRef(null);\r\n const contentRef = useRef(null);\r\n\r\n useEffect(() => {\r\n setBrand(getBrandName());\r\n }, [])\r\n\r\n useEffect(() => {\r\n let now = new Date();\r\n let lastYear = new Date();\r\n let past12monthsDates = getPast12MonthsDates();\r\n var fullYearStatsHistory = [...Stats.statHistory] ;\r\n\r\n //create empty stat history for months without data\r\n past12monthsDates.forEach( (date) => {\r\n if(!fullYearStatsHistory.some(x => new Date(x.statDateTime).getMonth() == date.getMonth() && new Date(x.statDateTime).getFullYear() == date.getFullYear())){\r\n fullYearStatsHistory.push({ statDateTime: date, statValue: 0})\r\n }\r\n });\r\n\r\n //sort stat dates ascending\r\n fullYearStatsHistory.sort((a, b) => {\r\n return new Date(a.statDateTime) - new Date(b.statDateTime)\r\n });\r\n\r\n lastYear.setYear(now.getFullYear() - 1);\r\n\r\n if (Stats.statHistory.length > 0) {\r\n setData(\r\n fullYearStatsHistory.map(x => ({\r\n name: x.statDateTime,\r\n value: x.statValue\r\n }))\r\n );\r\n } \r\n else {\r\n setData([\r\n { name: lastYear.toJSON(), value: 0 },\r\n { name: now.toJSON(), value: 0 }\r\n ]);\r\n } \r\n\r\n //force rerender of graph so dots show\r\n setDataVersionId((previousValue) => previousValue + 1);\r\n\r\n }, [Stats])\r\n\r\n useEffect(() => {\r\n updateFontSize();\r\n }, [resizableDivRef?.current?.offsetWidth, resizableDivRef?.current?.offsetHeight]);\r\n\r\n const prettifyUnits = (n) => {\r\n\r\n switch (Stats?.label) {\r\n case 'Hosted Size':\r\n case 'Staging Server Size':\r\n case 'Archive Server Size':\r\n case 'Discovered Document Size':\r\n if (n > 1024.0) {\r\n return (n / 1024.0).toFixed(1) + \" TB\";\r\n }\r\n else if (n / 1024.0 > 1024.0) {\r\n return (n / 1024.0 / 1024.0).toFixed(1) + \" MB\";\r\n }\r\n else {\r\n return (n).toFixed(1) + \" GB\";\r\n }\r\n default:\r\n if (n < 1e3) return n;\r\n if (n >= 1e3 && n < 1e6) {\r\n return (n / 1e3).toFixed(1) + \" K\";\r\n }\r\n if (n >= 1e6 && n < 1e9) {\r\n return (n / 1e6).toFixed(1) + \" M\";\r\n }\r\n if (n >= 1e9 && n < 1e12) {\r\n return (n / 1e9).toFixed(1) + \" B\";\r\n }\r\n if (n >= 1e12) {\r\n return (n / 1e12).toFixed(1) + \" T\";\r\n }\r\n }\r\n }\r\n\r\n const GraphTooltip = ({ payload, active }) => {\r\n\r\n if (active) {\r\n let rawDate = payload[0].payload.name;\r\n let value = payload[0].payload.value;\r\n let [month, day, year] = dateUtils.getLocalDate(rawDate).split('/');\r\n let date = new Date(year, month - 1, day);\r\n date = date.toLocaleDateString('en-US', { year: 'numeric', month: 'long' });\r\n\r\n value = prettifyUnits(value);\r\n\r\n if (selectedRelativityInstances?.length == 0){\r\n return (\r\n
\r\n

Select a Relativity Instance

\r\n
\r\n );\r\n }\r\n\r\n if (dateUtils.getLocalDate(rawDate) != \"Invalid Date\") {\r\n return (\r\n
\r\n

{ date }

\r\n

{ value }

\r\n
\r\n );\r\n } \r\n }\r\n return null;\r\n }\r\n\r\n const GraphDot = (props) => {\r\n const { cx, cy } = props;\r\n\r\n if (data) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const updateFontSize = () => {\r\n //lower size multiplier allows ref element to be bigger \r\n updateElementSize(titleRef, 12, 35, 35);\r\n updateElementSize(contentRef, 12, 35, 35);\r\n }\r\n\r\n const updateElementSize = (refItem, minSize, maxSize, sizeMultiplier) => {\r\n const element = refItem.current;\r\n const resizableDivElement = resizableDivRef.current;\r\n\r\n const fontSize = (resizableDivElement.offsetHeight + resizableDivElement.offsetWidth) / sizeMultiplier;\r\n\r\n element.style.fontSize = fontSize + 'px';\r\n\r\n //handle min max size of header\r\n if (fontSize < minSize || widgetHeight < 5) {\r\n element.style.fontSize = minSize + 'px';\r\n }\r\n\r\n if (fontSize > maxSize) {\r\n element.style.fontSize = maxSize + 'px';\r\n }\r\n }\r\n\r\n const getBrandName = () => {\r\n if (widgetTitle == \"Relativity Workspaces\" || widgetTitle == \"Relativity Users\" || widgetTitle == \"Relativity Hosted Size\" || widgetTitle == \"Relativity Documents\") {\r\n return \"Relativity\";\r\n }\r\n\r\n if (widgetTitle == \"Brainspace Documents\") {\r\n return \"Brainspace\";\r\n }\r\n\r\n if (widgetTitle == \"Storage Archive Size\" || widgetTitle == \"Storage Staging Size\") {\r\n return \"Storage\"\r\n }\r\n\r\n if (widgetTitle == \"Blackout Native Redacted Documents\" || widgetTitle == \"Blackout Native Redactions Placed\" || widgetTitle == \"Blackout Image Redacted Documents\" || widgetTitle == \"Blackout Redacted Pages\") {\r\n return \"Blackout\"\r\n }\r\n\r\n if (widgetTitle == \"ReadySuite Number of Users\") {\r\n return \"ReadySuite\"\r\n }\r\n\r\n if (widgetTitle == \"Relativity Web Processing Discovered Documents\" || widgetTitle == \"Relativity Web Processing Discovered Size\") {\r\n return \"Relativity Web Processing\"\r\n }\r\n\r\n if (widgetTitle == \"LSI Translation Document Count\" || widgetTitle == \"LSI Translation Case Count\") {\r\n return \"LSI Translation\"\r\n }\r\n } \r\n\r\n const getPast12MonthsDates = () => {\r\n let monthsDates = [];\r\n let currentDate = new Date();\r\n\r\n for (let i = 0; i < 12; i++) {\r\n monthsDates.unshift(new Date(currentDate));\r\n currentDate.setMonth(currentDate.getMonth() - 1);\r\n }\r\n\r\n return monthsDates;\r\n }\r\n\r\n return (\r\n
\r\n { isInEditMode == true ?\r\n
onDeleteItem() }>\r\n \r\n \r\n \r\n
:\r\n \"\"\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n { Stats?.value }\r\n
\r\n \r\n { brand == \"Relativity\" ?\r\n
\r\n \r\n \r\n
: \"\"\r\n }\r\n { brand == \"Brainspace\" ?\r\n : \"\"\r\n }\r\n { brand == \"Storage\" ?\r\n : \"\"\r\n }\r\n { brand == \"Blackout\" ?\r\n : \"\"\r\n }\r\n { brand == \"ReadySuite\" ?\r\n : \"\"\r\n }\r\n { brand == \"Relativity Web Processing\" ?\r\n : \"\"\r\n }\r\n { brand == \"LSI Translation\" ?\r\n : \"\"\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n } key={ \"data_\" + dataVersionId } />\r\n } wrapperStyle={ { zIndex: 3 } } />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default GraphWidget;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getRelativityStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/relativity/stats');\r\n return response.data;\r\n}\r\n\r\nexport async function getRelativityInstances() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/relativity/instances');\r\n return response.data;\r\n}\r\n\r\nexport async function saveUserRelativityInstances(relativityInstances) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/relativity/save/instances', relativityInstances);\r\n return response.data;\r\n}\r\n\r\nexport async function getUserRelativityInstances() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/relativity/user/instances');\r\n return response.data;\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getBrainspaceStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/brainspace/stats');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as brainspaceStatsService from \"../../services/brainspaceStatsService\";\r\n\r\nexport function loadBrainspaceStatsSuccess(brainspaceStats) {\r\n return { type: types.LOAD_BRAINSPACE_STATS_SUCCESS, brainspaceStats }\r\n}\r\n\r\nexport function clearBrainspaceStats() {\r\n return { type: types.CLEAR_BRAINSPACE_STATS }\r\n}\r\n\r\nexport function reloadBrainspaceStats() {\r\n return function (dispatch) {\r\n dispatch(clearBrainspaceStats());\r\n dispatch(loadBrainspaceStats());\r\n }\r\n}\r\n\r\nexport function loadBrainspaceStats() {\r\n return function (dispatch) {\r\n return brainspaceStatsService.getBrainspaceStats()\r\n .then(brainspaceStats => {\r\n dispatch(loadBrainspaceStatsSuccess(brainspaceStats));\r\n })\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getBlackoutStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/blackout/stats');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as blackoutStatsService from \"../../services/blackoutStatsService\";\r\n\r\nexport function loadBlackoutStatsSuccess(blackoutStats) {\r\n return { type: types.LOAD_BLACKOUT_STATS_SUCCESS, blackoutStats }\r\n}\r\n\r\nexport function clearBlackoutStats() {\r\n return { type: types.CLEAR_BLACKOUT_STATS }\r\n}\r\n\r\nexport function reloadBlackoutStats() {\r\n return function (dispatch) {\r\n dispatch(clearBlackoutStats());\r\n dispatch(loadBlackoutStats());\r\n }\r\n}\r\n\r\nexport function loadBlackoutStats() {\r\n return function (dispatch) {\r\n return blackoutStatsService.getBlackoutStats()\r\n .then(blackoutStats => {\r\n dispatch(loadBlackoutStatsSuccess(blackoutStats));\r\n })\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getStorageStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/storage/stats');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as storageStatsService from \"../../services/storageStatsService\";\r\n\r\nexport function loadStorageStatsSuccess(storageStats) {\r\n return { type: types.LOAD_STORAGE_STATS_SUCCESS, storageStats }\r\n}\r\n\r\nexport function clearStorageStats() {\r\n return { type: types.CLEAR_STORAGE_STATS }\r\n}\r\n\r\nexport function reloadStorageStats() {\r\n return function (dispatch) {\r\n dispatch(clearStorageStats());\r\n dispatch(loadStorageStats());\r\n }\r\n}\r\n\r\nexport function loadStorageStats() {\r\n return function (dispatch) {\r\n return storageStatsService.getStorageStats()\r\n .then(storageStats => {\r\n dispatch(loadStorageStatsSuccess(storageStats));\r\n })\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getReadySuiteStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/readySuite/stats');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as readySuiteStatsService from \"../../services/readySuiteStatsService\";\r\n\r\nexport function loadReadySuiteStatsSuccess(readySuiteStats) {\r\n return { type: types.LOAD_READYSUITE_STATS_SUCCESS, readySuiteStats }\r\n}\r\n\r\nexport function clearReadySuiteStats() {\r\n return { type: types.CLEAR_READYSUITE_STATS }\r\n}\r\n\r\nexport function reloadReadySuiteStats() {\r\n return function (dispatch) {\r\n dispatch(clearReadySuiteStats());\r\n dispatch(loadReadySuiteStats());\r\n }\r\n}\r\n\r\nexport function loadReadySuiteStats() {\r\n return function (dispatch) {\r\n return readySuiteStatsService.getReadySuiteStats()\r\n .then(readySuiteStats => {\r\n dispatch(loadReadySuiteStatsSuccess(readySuiteStats));\r\n })\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getLsiTranslationStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/lsiTranslation/stats');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as lsiTranslationStatsService from \"../../services/lsiTranslationStatsService\";\r\n\r\nexport function loadLsiTranslationStatsSuccess(lsiTranslationStats) {\r\n return { type: types.LOAD_LSI_TRANSLATION_STATS_SUCCESS, lsiTranslationStats }\r\n}\r\n\r\nexport function clearLsiTranslationStats() {\r\n return { type: types.CLEAR_LSI_TRANSLATION_STATS }\r\n}\r\n\r\nexport function reloadLsiTranslationStats() {\r\n return function (dispatch) {\r\n dispatch(clearLsiTranslationStats());\r\n dispatch(loadLsiTranslationStats());\r\n }\r\n}\r\n\r\nexport function loadLsiTranslationStats() {\r\n return function (dispatch) {\r\n return lsiTranslationStatsService.getLsiTranslationStats()\r\n .then(lsiTranslationStats => {\r\n dispatch(loadLsiTranslationStatsSuccess(lsiTranslationStats));\r\n })\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getWebProcessingStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/webprocessing/stats');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as webProcessingStatsService from \"../../services/webProcessingStatsService\";\r\n\r\nexport function loadWebProcessingStatsSuccess(webProcessingStats) {\r\n return { type: types.LOAD_WEBPROCESSING_STATS_SUCCESS, webProcessingStats }\r\n}\r\n\r\nexport function clearWebProcessingStats() {\r\n return { type: types.CLEAR_WEBPROCESSING_STATS }\r\n}\r\n\r\nexport function reloadWebProcessingStats() {\r\n return function (dispatch) {\r\n dispatch(clearWebProcessingStats());\r\n dispatch(loadWebProcessingStats());\r\n }\r\n}\r\n\r\nexport function loadWebProcessingStats() {\r\n return function (dispatch) {\r\n return webProcessingStatsService.getWebProcessingStats()\r\n .then(webProcessingStats => {\r\n dispatch(loadWebProcessingStatsSuccess(webProcessingStats));\r\n })\r\n };\r\n}","import * as types from \"./types\";\r\nimport * as relativityStatsService from \"../../services/relativityStatsService\";\r\nimport { loadBrainspaceStats } from \"./brainspaceStatsActions\";\r\nimport { loadBlackoutStats } from \"./blackoutStatsActions\";\r\nimport { loadStorageStats } from \"./storageStatsActions\";\r\nimport { loadReadySuiteStats } from \"./readySuiteStatsActions\";\r\nimport { loadLsiTranslationStats } from \"./lsiTranslationStatsActions\";\r\nimport { loadWebProcessingStats } from \"./webProcessingStatsActions\";\r\n\r\nexport function loadRelativityStatsSuccess(relativityStats) {\r\n return { type: types.LOAD_RELATIVITY_STATS_SUCCESS, relativityStats }\r\n}\r\n\r\nexport function clearRelativityStats() {\r\n return { type: types.CLEAR_RELATIVITY_STATS}\r\n}\r\n\r\nexport function loadRelativityInstancesSuccess(relativityInstances) {\r\n return { type: types.LOAD_RELATIVITY_INSTANCES_SUCCESS, relativityInstances }\r\n}\r\n\r\nexport function saveUserRelativityInstancesSuccess(relativityInstances) {\r\n return { type: types.SAVE_USER_RELATIVITY_INSTANCES_SUCCESS, relativityInstances };\r\n}\r\n\r\nexport function loadUserRelativityInstancesSuccess(relativityInstances) {\r\n return { type: types.LOAD_USER_RELATIVITY_INSTANCES_SUCCESS, relativityInstances }\r\n}\r\n\r\nexport function reloadRelativityStats() {\r\n return function (dispatch) {\r\n dispatch(clearRelativityStats());\r\n dispatch(loadRelativityStats());\r\n }\r\n}\r\n\r\nexport function loadRelativityStats() {\r\n return function (dispatch) {\r\n return relativityStatsService.getRelativityStats()\r\n .then(relativityStats => {\r\n dispatch(loadRelativityStatsSuccess(relativityStats));\r\n })\r\n };\r\n}\r\n\r\nexport function loadRelativityInstances() {\r\n return function (dispatch) {\r\n return relativityStatsService.getRelativityInstances()\r\n .then(relativityInstances => {\r\n dispatch(loadRelativityInstancesSuccess(relativityInstances));\r\n })\r\n };\r\n}\r\n\r\nexport function saveUserRelativityInstances(relativityInstances) {\r\n return function (dispatch) {\r\n return relativityStatsService.saveUserRelativityInstances(relativityInstances)\r\n .then((relativityInstances) => {\r\n dispatch(saveUserRelativityInstancesSuccess(relativityInstances));\r\n dispatch(loadRelativityStats());\r\n dispatch(loadBrainspaceStats());\r\n dispatch(loadBlackoutStats());\r\n dispatch(loadLsiTranslationStats());\r\n dispatch(loadStorageStats());\r\n dispatch(loadReadySuiteStats());\r\n dispatch(loadWebProcessingStats());\r\n })\r\n };\r\n}\r\n\r\nexport function loadUserRelativityInstances() {\r\n return function (dispatch) {\r\n return relativityStatsService.getUserRelativityInstances()\r\n .then((relativityInstances) => {\r\n dispatch(loadUserRelativityInstancesSuccess(relativityInstances));\r\n })\r\n }\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getFileTransferStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/filetransfer/stats');\r\n return response.data;\r\n}\r\n\r\nexport async function getPartnerPortals() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/filetransfer/partner/portals');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as statCardActions from '../actions/statCardActions';\r\nimport * as fileTransferStatsService from \"../../services/fileTransferStatsService\";\r\n\r\nexport function loadFileTransferStatsSuccess(fileTransferStats) {\r\n return { type: types.LOAD_FILE_TRANSFER_STATS_SUCCESS, fileTransferStats }\r\n}\r\n\r\nexport function clearFileTransferStats() {\r\n return { type: types.CLEAR_FILE_TRANSFER_STATS }\r\n}\r\n\r\nexport function loadPartnerPortalsSuccess(portals) {\r\n return { type: types.LOAD_PARTNER_PORTALS_SUCCESS, portals }\r\n}\r\n\r\nexport function reloadFileTransferStats(portalUrl) {\r\n return function (dispatch) {\r\n dispatch(statCardActions.updateCardNumber(1));\r\n dispatch(clearFileTransferStats());\r\n dispatch(loadFileTransferStats());\r\n }\r\n}\r\n\r\nexport function loadFileTransferStats() {\r\n return function (dispatch) {\r\n return fileTransferStatsService.getFileTransferStats()\r\n .then(fileTransferStats => {\r\n dispatch(loadFileTransferStatsSuccess(fileTransferStats));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadPartnerPortals() {\r\n return function (dispatch) {\r\n return fileTransferStatsService.getPartnerPortals()\r\n .then(portals => {\r\n dispatch(loadPartnerPortalsSuccess(portals));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getSupportStats() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/support/stats');\r\n return response.data;\r\n}\r\n\r\nexport async function getSupportUrl() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/support/url');\r\n return response.data;\r\n}\r\n\r\nexport async function getGroups() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/support/groups');\r\n return response.data\r\n}\r\n\r\nexport async function updateGroups(updatedGroups) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/support/groups', updatedGroups).catch(error => {\r\n if (error.message != \"canceled\" && error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as supportStatsService from \"../../services/supportService\";\r\n\r\nexport function loadSupportStatsSuccess(supportStats) {\r\n return { type: types.LOAD_SUPPORT_STATS_SUCCESS, supportStats }\r\n}\r\n\r\nexport function clearSupportStats() {\r\n return { type: types.CLEAR_SUPPORT_STATS }\r\n}\r\n\r\nexport function loadSupportUrlSuccess(supportUrl) {\r\n return { type: types.LOAD_SUPPORT_URL_SUCCESS, supportUrl }\r\n}\r\n\r\nexport function reloadSupportStats() {\r\n return function (dispatch) {\r\n dispatch(clearSupportStats());\r\n dispatch(loadSupportStats());\r\n }\r\n}\r\n\r\nexport function loadSupportStats() {\r\n return function (dispatch) {\r\n return supportStatsService.getSupportStats()\r\n .then(supportStats => {\r\n dispatch(loadSupportStatsSuccess(supportStats));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadSupportUrl() {\r\n return function (dispatch) {\r\n return supportStatsService.getSupportUrl()\r\n .then(supportUrl => {\r\n dispatch(loadSupportUrlSuccess(supportUrl));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getResources() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/resource/list');\r\n return response.data;\r\n}\r\n\r\nexport async function saveResources(resources) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/resource/save', resources).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data\r\n}","import * as types from \"./types\";\r\nimport * as resourcesService from \"../../services/resourcesService\";\r\n\r\nexport function updateResources(resources) {\r\n return { type: types.UPDATE_RESOURCES, resources };\r\n}\r\n\r\nexport function loadResources() {\r\n return function (dispatch) {\r\n return resourcesService.getResources()\r\n .then(resources => {\r\n dispatch(updateResources(resources));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function saveResources(resources) {\r\n return function (dispatch) {\r\n return resourcesService.saveResources(resources)\r\n .then(resources => {\r\n dispatch(updateResources(resources));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function enableMaintenanceMode() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/maintenance/mode/enabled');\r\n return response.data;\r\n}\r\n\r\nexport async function disableMaintenanceMode() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/maintenance/mode/disabled');\r\n return response.data;\r\n}\r\n\r\nexport async function getMaintenanceModeState() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/maintenance/mode').catch(error => {\r\n if (error.response.data.reason === \"Maintenance Mode Active\") {\r\n return { data: \"enabled\" };\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function sendMaintenanceCompleteEmail() {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/maintenance/sendemail/complete').catch(error => {\r\n throw error\r\n });\r\n\r\n if (response.data.error) {\r\n throw response.data.error;\r\n }\r\n\r\n return response.data;\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getApplicationSetting(applicationSettingName) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/applicationSetting/' + applicationSettingName);\r\n return response.data;\r\n}","import * as maintenanceService from '../../services/maintenanceService';\r\nimport * as applicationSettingService from '../../services/applicationSettingService';\r\nimport * as types from \"./types\";\r\n\r\nexport function loadMaintenanceModeSuccess(maintenanceMode) {\r\n return { type: types.LOAD_MAINTENANCE_MODE_SUCCESS, maintenanceMode };\r\n}\r\n\r\nexport function loadResourceCycleIntervalSuccess(resourceCycleIntervalInSeconds) {\r\n return { type: types.LOAD_RESOURCE_CYCLE_INTERVAL_SUCCESS, resourceCycleIntervalInSeconds };\r\n}\r\n\r\nexport function loadMaintenanceMode() {\r\n return function (dispatch) {\r\n return maintenanceService.getMaintenanceModeState()\r\n .then(maintenanceMode => {\r\n dispatch(loadMaintenanceModeSuccess(maintenanceMode));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function loadResourceCycleInterval() {\r\n return function (dispatch) {\r\n return applicationSettingService.getApplicationSetting(\"resourceCycleIntervalInSeconds\")\r\n .then(resourceCycleIntervalInSeconds => {\r\n dispatch(loadResourceCycleIntervalSuccess(resourceCycleIntervalInSeconds));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n","export function removeModalBackground() {\r\n let modalBackdrops = document.getElementsByClassName(\"modal-backdrop\");\r\n if (modalBackdrops.length > 0) {\r\n modalBackdrops[0].remove();\r\n }\r\n}","import * as types from \"./types\";\r\n\r\nexport function updatePreviewResources(resources) {\r\n return { type: types.UPDATE_PREVIEW_RESOURCES, resources };\r\n}","import * as types from \"./types\";\r\n\r\nexport function updateSelectedResource(selectedResource) {\r\n return { type: types.UPDATE_SELECTED_RESOURCE, selectedResource };\r\n}\r\n\r\nexport function clearSelectedResource() {\r\n return { type: types.CLEAR_SELECTED_RESOURCE };\r\n}","import React from \"react\";\r\n\r\nfunction TextInput({ name, label, onChange, placeholder, value, error, wrapperClass, isRequired, disabled, maxlength, textArea, rows, cols }) {\r\n if (error && error.length > 0) {\r\n wrapperClass += \" \" + \"has-error\";\r\n }\r\n\r\n return (\r\n
\r\n { label\r\n ? \r\n : \"\" }\r\n
\r\n { textArea ?\r\n !disabled ?\r\n \r\n : \r\n : !disabled ?\r\n \r\n : }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default TextInput;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport let getPartnerAbortController = [];\r\n\r\nexport async function updateRequired(partnerInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/partner/update-required', partnerInfo);\r\n return response.data;\r\n}\r\n\r\nexport async function getPartner(partnerId) {\r\n getPartnerAbortController[partnerId] = new AbortController();\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/partner?partnerId=' + partnerId, { signal: getPartnerAbortController[partnerId].signal }).catch(error => {\r\n if (error.message != \"canceled\" && error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function getPartners() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/partner/list');\r\n return response.data;\r\n}\r\n\r\nexport async function disablePartner(partnerId) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/partner/disable?partnerId=' + partnerId).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function enablePartner(partnerId) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/partner/enable?partnerId=' + partnerId).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function savePartner(partnerInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/partner/save', partnerInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data\r\n}","import * as pageActions from \"../actions/pageActions\";\r\nimport * as types from \"./types\";\r\nimport * as partnersService from \"../../services/partnersService\";\r\n\r\nexport function loadPartnerSuccess(partner) {\r\n return { type: types.LOAD_PARTNER_SUCCESS, partner }\r\n}\r\n\r\nexport function loadPartnersSuccess(partners) {\r\n return { type: types.LOAD_PARTNERS_SUCCESS, partners }\r\n}\r\n\r\nexport function disablePartnerSuccess(partner) {\r\n return { type: types.DISABLE_PARTNER_SUCCESS, partner }\r\n}\r\n\r\nexport function enablePartnerSuccess(partner) {\r\n return { type: types.ENABLE_PARTNER_SUCCESS, partner }\r\n}\r\n\r\nexport function savePartnerSuccess(partner) {\r\n return { type: types.SAVE_PARTNER_SUCCESS, partner }\r\n}\r\n\r\nexport function createPartnerSuccess(partner) {\r\n return { type: types.CREATE_PARTNER_SUCCESS, partner }\r\n}\r\n\r\nexport function loadPartner(partner) {\r\n return function (dispatch) {\r\n return partnersService.getPartner(partner.partnerId)\r\n .then(partner => {\r\n dispatch(loadPartnerSuccess(partner));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadPartners() {\r\n return function (dispatch) {\r\n return partnersService.getPartners()\r\n .then(partners => {\r\n dispatch(loadPartnersSuccess(partners));\r\n dispatch(pageActions.loadedPage(\"partners\"));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function disablePartner(partner) {\r\n return function (dispatch) {\r\n return partnersService.disablePartner(partner.partnerId)\r\n .then(partner => {\r\n dispatch(disablePartnerSuccess(partner));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}\r\n\r\nexport function enablePartner(partner) {\r\n return function (dispatch) {\r\n return partnersService.enablePartner(partner.partnerId)\r\n .then(partner => {\r\n dispatch(enablePartnerSuccess(partner));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}\r\n\r\nexport function savePartner(partner) {\r\n return function (dispatch) {\r\n return partnersService.savePartner(partner)\r\n .then(savedPartner => {\r\n partner.partnerId\r\n ? dispatch(savePartnerSuccess(savedPartner))\r\n : dispatch(createPartnerSuccess(savedPartner));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}","export const PaginatedListMenuStyleLight = {\r\n container: () => ({\r\n color: \"#131523\",\r\n background: \"#F1F7FD\"\r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n color: \"#131523\",\r\n background: \"#F1F7FD\",\r\n opacity: state.isDisabled ? \"0.5\" : \"1\"\r\n }),\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n singleValue: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n background: '#F1F7FD',\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n backgroundColor: state.isFocused || state.isSelected ? 'transparent' : 'transparent',\r\n color: state.isFocused || state.isSelected ? '#57A9DC' : '#131523',\r\n ':active': {\r\n backgroundColor: 'transparent'\r\n }\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n })\r\n};\r\n\r\nexport const PaginatedListMenuStyleDark = {\r\n container: () => ({\r\n color: \"#ffffff\",\r\n background: \"#161616\"\r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n color: \"#fff\",\r\n background: \"#161616\",\r\n opacity: state.isDisabled ? \"0.5\" : \"1\"\r\n }),\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n singleValue: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n background: '#161616',\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n backgroundColor: state.isFocused || state.isSelected ? 'transparent' : 'transparent',\r\n color: state.isFocused || state.isSelected ? '#57A9DC' : '#fff',\r\n ':active': {\r\n backgroundColor: 'transparent'\r\n }\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n })\r\n};\r\n\r\nexport const DropdownSelectStyleLight = {\r\n container: () => ({\r\n color: \"#131523\",\r\n background: \"#FFF\" \r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n color: \"#131523\",\r\n background: \"#FFF\",\r\n opacity: state.isDisabled ? \"0.5\" : \"1\",\r\n 'border-color': \"#92929D\"\r\n }),\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n singleValue: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n background: '#FFF',\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n backgroundColor: state.isFocused || state.isSelected ? 'transparent' : 'transparent',\r\n color: state.isFocused || state.isSelected ? '#57A9DC' : '#131523',\r\n ':active': {\r\n backgroundColor: 'transparent'\r\n }\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n })\r\n};\r\n\r\nexport const DropdownSelectStyleDark = {\r\n container: () => ({\r\n color: \"#ffffff\",\r\n background: \"#2c2c2c\"\r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n color: \"#fff\",\r\n background: \"#2c2c2c\",\r\n opacity: state.isDisabled ? \"0.5\" : \"1\",\r\n 'border-color': \"#92929D\"\r\n }),\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n singleValue: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n background: '#2c2c2c',\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n backgroundColor: state.isFocused || state.isSelected ? 'transparent' : 'transparent',\r\n color: state.isFocused || state.isSelected ? '#57A9DC' : '#fff',\r\n ':active': {\r\n backgroundColor: 'transparent'\r\n }\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n })\r\n};\r\n\r\nexport const MultiSelectStyleLight = {\r\n container: () => ({\r\n color: \"#131523\",\r\n background: \"#FFF\"\r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n color: \"#131523\",\r\n background: \"#FFF\",\r\n opacity: state.isDisabled ? \"0.5\" : \"1\",\r\n 'border-color': \"#92929D\"\r\n }),\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n singleValue: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n background: '#FFF',\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n backgroundColor: state.isFocused || state.isSelected ? 'transparent' : 'transparent',\r\n color: state.isFocused || state.isSelected ? '#57A9DC' : '#131523',\r\n ':active': {\r\n backgroundColor: 'transparent'\r\n }\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n multiValue: (provided) => ({\r\n ...provided,\r\n backgroundColor: 'transparent'\r\n }),\r\n multiValueRemove: (provided, state) => ({\r\n ...provided,\r\n display: state.isDisabled ? 'none' : 'inline-block', \r\n ':hover': {\r\n backgroundColor: 'transparent',\r\n color: '#C44046'\r\n }\r\n }),\r\n multiValueLabel: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n }),\r\n placeholder: (provided) => ({\r\n ...provided,\r\n color: '#131523'\r\n })\r\n};\r\n\r\nexport const MultiSelectStyleDark = {\r\n container: () => ({\r\n color: \"#ffffff\",\r\n background: \"#2c2c2c\"\r\n }),\r\n control: (provided, state) => ({\r\n ...provided,\r\n color: \"#fff\",\r\n background: \"#2c2c2c\",\r\n opacity: state.isDisabled ? \"0.5\" : \"1\",\r\n 'border-color': \"#92929D\"\r\n }),\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n singleValue: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n background: '#2c2c2c',\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n backgroundColor: state.isFocused || state.isSelected ? 'transparent' : 'transparent',\r\n color: state.isFocused || state.isSelected ? '#57A9DC' : '#fff',\r\n ':active': {\r\n backgroundColor: 'transparent'\r\n }\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n multiValue: (provided) => ({\r\n ...provided,\r\n backgroundColor: 'transparent'\r\n }),\r\n multiValueRemove: (provided, state) => ({\r\n ...provided,\r\n display: state.isDisabled ? 'none' : 'inline-block', \r\n ':hover': {\r\n backgroundColor: 'transparent',\r\n color: '#C44046'\r\n }\r\n }),\r\n multiValueLabel: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n }),\r\n placeholder: (provided) => ({\r\n ...provided,\r\n color: '#fff'\r\n })\r\n};","import React, { useEffect, useState } from 'react';\r\nimport ReactCrop from 'react-image-crop'\r\nimport 'react-image-crop/dist/ReactCrop.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction ResourceCropper({ resource, onCropperSave, theme }) {\r\n const [crop, setCrop] = useState({\r\n aspect: 1 / 1\r\n });\r\n\r\n const [croppedImage, setCroppedImage] = useState();\r\n const [image, setImage] = useState();\r\n\r\n useEffect(() => {\r\n //reset image and crop\r\n setCroppedImage(null);\r\n setCrop({ aspect: 1 / 1 });\r\n }, [resource.contentImg])\r\n\r\n const onCropChange = (crop, percentCrop) => {\r\n setCrop(crop);\r\n };\r\n\r\n const onImageLoaded = (image) => {\r\n setImage(image);\r\n };\r\n\r\n const onCropComplete = (crop) => {\r\n makeClientCrop(crop);\r\n };\r\n\r\n const makeClientCrop = (crop) => {\r\n if (image && crop.width && crop.height) {\r\n const croppedImageDataUrl = getCroppedImg(\r\n image,\r\n crop\r\n );\r\n setCroppedImage(croppedImageDataUrl);\r\n }\r\n }\r\n\r\n const getCroppedImg = (image, crop) => {\r\n const canvas = document.createElement('canvas');\r\n const pixelRatio = window.devicePixelRatio;\r\n const scaleX = image.naturalWidth / image.width;\r\n const scaleY = image.naturalHeight / image.height;\r\n const ctx = canvas.getContext('2d');\r\n\r\n canvas.width = crop.width * pixelRatio * scaleX;\r\n canvas.height = crop.height * pixelRatio * scaleY;\r\n\r\n ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\r\n ctx.imageSmoothingQuality = 'high';\r\n\r\n ctx.drawImage(\r\n image,\r\n crop.x * scaleX,\r\n crop.y * scaleY,\r\n crop.width * scaleX,\r\n crop.height * scaleY,\r\n 0,\r\n 0,\r\n crop.width * scaleX,\r\n crop.height * scaleY\r\n );\r\n\r\n var dataUrl = canvas.toDataURL();\r\n return dataUrl;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Resource Crop

\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
onCropperSave(croppedImage) }>Crop
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ResourceCropper;","import React, { useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport TextInput from '../../../../common/TextInput';\r\nimport { useEffect } from 'react';\r\nimport Select from 'react-select';\r\nimport * as bootstrap from 'bootstrap';\r\nimport * as previewResourcesActions from '../../../../../redux/actions/previewResourcesActions';\r\nimport * as partnersActions from '../../../../../redux/actions/partnersActions';\r\nimport * as styles from '../../../../common/DropdownStyles';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport ResourceCropper from './ResourceCropper';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction ResourceEdit({ theme }) {\r\n\r\n const [resource, setResource] = useState({});\r\n const [resourceIndex, setResourceIndex] = useState(0);\r\n const [errors, setErrors] = useState({});\r\n const [isAdded, setIsAdded] = useState(false);\r\n const [isSelectedFileValid, setIsSelectedFileValid] = useState();\r\n const [inputImageValue, setInputImageValue] = useState();\r\n\r\n const selectedResource = useSelector(state => state.selectedResource);\r\n const previewResources = useSelector(state => state.previewResources);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const partners = useSelector(state => state.partners);\r\n const enabledPartners = partners.filter(p => p.disabled === false);\r\n const selectAllOption = {\r\n value: \"All\",\r\n label: \"All\"\r\n };\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewPartners\")) {\r\n dispatch(partnersActions.loadPartners()).catch(error => {\r\n toast.error(\"Loading Partners Failed\" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n }, [])\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n setIsAdded(false);\r\n setResource(selectedResource);\r\n setResourceIndex(previewResources.indexOf(selectedResource));\r\n if (selectedResource.contentTitle === \"\") {\r\n setIsAdded(true);\r\n }\r\n\r\n //if contentThumbnail is empty clear value of input \r\n if (selectedResource.contentThumbnailUrl === '') {\r\n setInputImageValue('');\r\n } else {\r\n setIsSelectedFileValid(true);\r\n }\r\n }, [selectedResource])\r\n\r\n const handleResourceCheck = (event) => {\r\n event.preventDefault();\r\n let updatedResources = [...previewResources];\r\n if (!resourceIsValid()) {\r\n return;\r\n }\r\n updatedResources.splice(resourceIndex, 1, resource);\r\n dispatch(previewResourcesActions.updatePreviewResources(updatedResources));\r\n bootstrap.Modal.getInstance(document.getElementById('resource-edit-modal')).hide();\r\n }\r\n\r\n const resourceIsValid = () => {\r\n\r\n const errors = {};\r\n\r\n if (resource.contentTitle === \"\") {\r\n errors.contentTitle = \"(Required)\";\r\n }\r\n\r\n if (resource.contentThumbnailUrl === \"\" || !isSelectedFileValid) {\r\n errors.contentThumbnailUrl = \"(Required)\";\r\n }\r\n\r\n if (resource.description === \"\") {\r\n errors.description = \"(Required)\";\r\n }\r\n\r\n if (resource.partners.length === 0 && resource.allPartnersSelected === false) {\r\n errors.partners = \"(Required)\";\r\n }\r\n\r\n setErrors(errors);\r\n\r\n return Object.keys(errors).length === 0;\r\n }\r\n\r\n const handleResourceChange = (event) => {\r\n let { name, value } = event.target;\r\n let editedResource = { ...resource };\r\n if (name == 'contentTitle') {\r\n editedResource.contentTitle = value;\r\n setResource(editedResource);\r\n } else if (name == 'siteLink') {\r\n editedResource.siteLink = value;\r\n setResource(editedResource);\r\n } else if (name == 'description') {\r\n editedResource.description = value;\r\n setResource(editedResource);\r\n }\r\n }\r\n\r\n const handleResourceImageChange = (event) => {\r\n\r\n var file = event.target.files[0];\r\n let { value } = event.target;\r\n let editedResource = { ...resource };\r\n\r\n //file type not an image \r\n if (file && !file.type.includes(\"image\")) {\r\n toast.error(\"The file type is not supported. Please choose an image.\", { autoClose: false });\r\n setIsSelectedFileValid(false);\r\n return event.preventDefault();\r\n }\r\n\r\n setIsSelectedFileValid(true);\r\n\r\n const reader = new FileReader();\r\n reader.addEventListener(\"load\", () => {\r\n var imageStr = reader.result;\r\n editedResource.contentThumbnailUrl = value;\r\n editedResource.contentImg = imageStr;\r\n setResource(editedResource);\r\n setInputImageValue('');\r\n showCropModal();\r\n }, false);\r\n\r\n if (file) {\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n const showCropModal = () => {\r\n new bootstrap.Modal(document.getElementById('resource-cropper-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const hideCropModal = () => {\r\n bootstrap.Modal.getInstance(document.getElementById('resource-cropper-modal')).hide();\r\n }\r\n\r\n const handlePartnerResourceChange = (values) => {\r\n var selectedPartners = partners.filter(x => values.some(y => x.partnerId === y.value));\r\n var everyPartnerSelected = enabledPartners.every(x => values.some(y => y.value === x.partnerId));\r\n var allOptionSelected = values.some(x => x.value == \"All\");\r\n\r\n //prevent update of last All partners resource\r\n if (previewResources.filter(x => x.allPartnersSelected).length == 1 && resource.allPartnersSelected == true) {\r\n toast.warning(\"Atleast 1 resource must have 'All Partners' selected.\")\r\n return;\r\n }\r\n\r\n //if every partner selected, override to the all partner option\r\n if (everyPartnerSelected) {\r\n let editedResource = { ...resource, partners: enabledPartners };\r\n editedResource.allPartnersSelected = true;\r\n setResource(editedResource);\r\n return;\r\n }\r\n\r\n if (allOptionSelected) {\r\n if (values.length > 1) {\r\n //if first selection wasnt all but was later selected \r\n if (values[0].value != \"All\") {\r\n let editedResource = { ...resource, partners: enabledPartners };\r\n editedResource.allPartnersSelected = true;\r\n setResource(editedResource);\r\n return;\r\n }\r\n\r\n //if first option is the all option then replace with selected partner\r\n let editedResource = { ...resource, partners: selectedPartners };\r\n editedResource.allPartnersSelected = false;\r\n setResource(editedResource);\r\n return;\r\n }\r\n\r\n //if all option is the only option selected\r\n let editedResource = { ...resource, partners: enabledPartners };\r\n editedResource.allPartnersSelected = true;\r\n setResource(editedResource);\r\n return;\r\n }\r\n\r\n //set selectedPartners\r\n let editedResource = { ...resource, partners: selectedPartners };\r\n editedResource.allPartnersSelected = false;\r\n setResource(editedResource);\r\n }\r\n\r\n const handleResourceEditClose = () => {\r\n if (isAdded === true) {\r\n let updatedResources = [...previewResources];\r\n for (let i = 0; i < (updatedResources.length); i++) {\r\n updatedResources[i].sortOrder = updatedResources[i].sortOrder - 1;\r\n }\r\n updatedResources.shift();\r\n dispatch(previewResourcesActions.updatePreviewResources(updatedResources));\r\n }\r\n setErrors({});\r\n }\r\n\r\n const getPartnerOptions = () => [selectAllOption, ...enabledPartners.map(partner => ({\r\n value: partner.partnerId,\r\n label: partner.name\r\n }))]\r\n\r\n const onCropperSave = (croppedImg) => {\r\n if (croppedImg) {\r\n let editedResource = { ...resource };\r\n editedResource.contentImg = croppedImg;\r\n setResource(editedResource);\r\n }\r\n hideCropModal();\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{ isAdded === false ? \"Edit Resource\" : \"New Resource\" }

\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n ({\r\n value: partner.partnerId,\r\n label: partner.name\r\n })) }\r\n onChange={ handlePartnerResourceChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ getPartnerOptions() }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n { resource.contentImg ? :
}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n * Required\r\n

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ResourceEdit;","import React, { useEffect } from 'react';\r\nimport PaginatedResourceCard from './PaginatedResourceCardWidget';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction ResourceCardPreview({ theme }) {\r\n\r\n useEffect(() => {\r\n let homeResourceCard = document.querySelector('#home-resource-card');\r\n let previewResourceCard = document.querySelector('#resource-card-preview');\r\n let domRect = homeResourceCard.getBoundingClientRect();\r\n previewResourceCard.style.width = domRect.width + 'px';\r\n previewResourceCard.style.height = domRect.height + 'px';\r\n }, [])\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Resource Card Preview

\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ResourceCardPreview;","import React, { useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport { useEffect } from 'react';\r\nimport * as bootstrap from 'bootstrap';\r\nimport * as resourcesActions from '../../../../../redux/actions/resourcesActions';\r\nimport * as previewResourcesActions from '../../../../../redux/actions/previewResourcesActions';\r\nimport * as selectedResourceActions from '../../../../../redux/actions/selectedResourceActions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport ResourceEdit from './ResourceEdit';\r\nimport ResourceCardPreview from './ResourceCardPreview';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction ResourceConfiguration({ theme }) {\r\n\r\n const allResources = useSelector(state => state.resources);\r\n\r\n const previewResources = useSelector(state => state.previewResources);\r\n\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(previewResourcesActions.updatePreviewResources(allResources));\r\n }, [allResources])\r\n\r\n const handleResourcesSave = (event) => {\r\n setIsSaving(true);\r\n event.preventDefault();\r\n dispatch(resourcesActions.saveResources(previewResources)).then(empty => {\r\n bootstrap.Modal.getInstance(document.getElementById('resource-configuration-modal')).hide()\r\n setIsSaving(false);\r\n dispatch(resourcesActions.loadResources()).catch(error => {\r\n toast.error(\"Loading Resources Failed:\" + error, { autoClose: false })\r\n });\r\n }).catch(error => {\r\n setIsSaving(false);\r\n toast.error(\"Saving Resources Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const handleAddResource = () => {\r\n let newResource = {\r\n resourceId: 0,\r\n siteLink: \"\",\r\n contentTitle: \"\",\r\n contentLink: \"\",\r\n contentThumbnailUrl: \"\",\r\n description: \"\",\r\n sortOrder: 1,\r\n allPartnersSelected: true,\r\n partners: []\r\n }\r\n let resourcesCopy = [...previewResources]\r\n for (let i = 0; i < (resourcesCopy.length); i++) {\r\n resourcesCopy[i].sortOrder = resourcesCopy[i].sortOrder + 1;\r\n }\r\n resourcesCopy.splice(0, 0, newResource);\r\n dispatch(previewResourcesActions.updatePreviewResources(resourcesCopy));\r\n dispatch(selectedResourceActions.updateSelectedResource(newResource));\r\n new bootstrap.Modal(document.getElementById('resource-edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleRemoveResource = (event) => {\r\n if (previewResources.length > 1) {\r\n let { name } = event.currentTarget;\r\n let resourcesCopy = [...previewResources];\r\n let index = parseInt(name.replace('remove-resource', ''));\r\n\r\n let resourceRemoved = previewResources[index];\r\n\r\n //prevent removal of last all partners resource\r\n if (resourceRemoved.allPartnersSelected === true && previewResources.filter(x => x.allPartnersSelected).length == 1) {\r\n toast.warning(\"You cannot remove the last resource associated with 'All Partners'.\")\r\n return;\r\n }\r\n\r\n for (let i = index + 1; i < resourcesCopy.length; i++) {\r\n resourcesCopy[i].sortOrder = resourcesCopy[i].sortOrder - 1;\r\n }\r\n resourcesCopy.splice(index, 1);\r\n dispatch(previewResourcesActions.updatePreviewResources(resourcesCopy));\r\n } else {\r\n toast.warning(\"You cannot remove the last resource\")\r\n }\r\n }\r\n\r\n const handleEditResource = (selectedResource) => {\r\n dispatch(selectedResourceActions.updateSelectedResource(selectedResource));\r\n new bootstrap.Modal(document.getElementById('resource-edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleShowResourceCardPreview = () => {\r\n new bootstrap.Modal(document.getElementById('resource-card-preview-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleMoveResourceUp = (event) => {\r\n let { name } = event.currentTarget;\r\n let resourcesCopy = [...previewResources];\r\n let index = parseInt(name.replace('move-up-resource', ''));\r\n if (index > 0) {\r\n let swapSortOrder = resourcesCopy[index].sortOrder;\r\n resourcesCopy[index].sortOrder = resourcesCopy[index - 1].sortOrder;\r\n resourcesCopy[index - 1].sortOrder = swapSortOrder;\r\n let swappedResource = resourcesCopy.splice(index, 1);\r\n resourcesCopy.splice(index - 1, 0, swappedResource[0]);\r\n dispatch(previewResourcesActions.updatePreviewResources(resourcesCopy));\r\n }\r\n }\r\n\r\n const handleMoveResourceDown = (event) => {\r\n let { name } = event.currentTarget;\r\n let resourcesCopy = [...previewResources];\r\n let index = parseInt(name.replace('move-down-resource', ''));\r\n if (index < (resourcesCopy.length - 1)) {\r\n let swapSortOrder = resourcesCopy[index].sortOrder;\r\n resourcesCopy[index].sortOrder = resourcesCopy[index + 1].sortOrder;\r\n resourcesCopy[(index + 1)].sortOrder = swapSortOrder;\r\n let swappedResource = resourcesCopy.splice(index, 1);\r\n resourcesCopy.splice(index + 1, 0, swappedResource[0]);\r\n dispatch(previewResourcesActions.updatePreviewResources(resourcesCopy));\r\n }\r\n }\r\n\r\n const handleResourceConfigureClose = () => {\r\n dispatch(resourcesActions.loadResources()).catch(error => {\r\n toast.error(\"Loading Resources Failed:\" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Configure Resources

\r\n \r\n \r\n \r\n
\r\n
\r\n { (isSaving) ?\r\n
\r\n : \"\"\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n { previewResources.length > 0 ?\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n : \"\"\r\n }\r\n
\r\n { previewResources.map(resource => {\r\n let index = previewResources.indexOf(resource);\r\n let removeResourceName = \"remove-resource\" + index;\r\n let moveResourceUpName = \"move-up-resource\" + index;\r\n let moveResourceDownName = \"move-down-resource\" + index;\r\n return (\r\n
\r\n
20 ? resource.contentTitle : \"\" }\r\n data-delay-show=\"500\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n data-class=\"modal-tip\"\r\n >\r\n { resource.contentTitle }\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n }) }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n { isSaving ?\r\n
Saving...
\r\n : \r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ResourceConfiguration;","import React from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nexport default function LoadingPage() {\r\n return (\r\n
LOADING
\r\n )\r\n}","import React from 'react'\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as relativityStatsActions from '../../redux/actions/relativityStatsActions'\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport initialState from '../../redux/reducers/InitialState.js';\r\nimport Select from 'react-select';\r\nimport * as styles from '../common/DropdownStyles';\r\nimport { toast } from 'react-toastify';\r\n\r\nfunction ManageWidgetsModal({ theme }) { \r\n const layout = useSelector(state => state.page.home.dashboardLayout);\r\n const availableWidgets = useSelector(state => state.page.home.availableWidgets);\r\n const relativityStats = useSelector(state => state.relativityStats);\r\n const availableRelativityInstances = useSelector(state => state.relativityStats.instances);\r\n const selectedRelativityInstances = useSelector(state => state.relativityStats.selectedRelativityInstances);\r\n const defaultWidgets = initialState.page.home.dashboardLayout;//initial widget layout\r\n \r\n const dispatch = useDispatch();\r\n\r\n const onWidgetChange = (event) => {\r\n var editedWidgets = [];\r\n event.forEach(( widget ) => {\r\n if(layout.lg.some( x => x.i == widget.value)){\r\n //keep formatting for existing widgets\r\n var currentLayoutWidget = layout.lg.find(x => x.i == widget.value);\r\n editedWidgets.push(currentLayoutWidget);\r\n }\r\n else{\r\n //use widgets from default widgets when adding new\r\n var defaultWidget = defaultWidgets.lg.find(x => x.i == widget.value);\r\n editedWidgets.push(defaultWidget);\r\n }\r\n })\r\n\r\n var editedLayout = {...layout, lg: editedWidgets};\r\n dispatch(pageActions.updateDashboardLayout(editedLayout));\r\n }\r\n\r\n const handleRelativityInstanceChange = (event) => {\r\n var instances = event.map(instance => ({\r\n relativityInstanceId: instance.value,\r\n friendlyName: instance.label\r\n }));\r\n\r\n dispatch(relativityStatsActions.saveUserRelativityInstances(instances)).catch(error => {\r\n toast.error(\"Saving User Relativity Instance Failed:\" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Dashboard Settings

\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n ({\r\n value: relativityInstance.relativityInstanceId,\r\n label: relativityInstance.friendlyName\r\n })) }\r\n onChange={ handleRelativityInstanceChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ availableRelativityInstances.map(relativityInstance => ({\r\n value: relativityInstance.relativityInstanceId,\r\n label: relativityInstance.friendlyName\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n /> \r\n
\r\n
\r\n
\r\n \r\n ({\r\n value: widget.i,\r\n label: widget.i\r\n })) }\r\n onChange={ onWidgetChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ availableWidgets?.map(widget => ({\r\n value: widget.widgetName,\r\n label: widget.widgetName\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n /> \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ManageWidgetsModal;","import React, { useEffect, useState, useMemo } from 'react';\r\nimport StatCard from './dashboard/widgets/StatCardWidget';\r\nimport PaginatedStatCard from './dashboard/widgets/PaginatedStatCardWidget';\r\nimport KBCard from './dashboard/widgets/KBCardWidget';\r\nimport PaginatedResourceCard from './dashboard/widgets/resourceCard/PaginatedResourceCardWidget';\r\nimport GraphWidget from './dashboard/widgets/GraphWidget';\r\nimport { toast } from 'react-toastify';\r\nimport * as relativityStatsActions from '../../redux/actions/relativityStatsActions';\r\nimport * as brainspaceStatsActions from '../../redux/actions/brainspaceStatsActions';\r\nimport * as storageStatsActions from '../../redux/actions/storageStatsActions';\r\nimport * as blackoutStatsActions from '../../redux/actions/blackoutStatsActions';\r\nimport * as readySuiteStatsActions from '../../redux/actions/readySuiteStatsActions';\r\nimport * as webProcessingStatsActions from '../../redux/actions/webProcessingStatsActions';\r\nimport * as lsiTranslationStatsActions from '../../redux/actions/lsiTranslationStatsActions';\r\nimport * as fileTransferStatsActions from '../../redux/actions/fileTransferStatsActions';\r\nimport * as supportStatsActions from '../../redux/actions/supportStatsActions';\r\nimport * as resourcesActions from '../../redux/actions/resourcesActions';\r\nimport * as appSettingsActions from '../../redux/actions/appSettingsActions';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport * as ModalBackgroundRemover from '../common/ModalBackgroundRemover';\r\nimport ResourceConfiguration from './dashboard/widgets/resourceCard/ResourceConfiguration';\r\nimport LoadingPage from '../LoadingPage';\r\nimport { Responsive, WidthProvider } from 'react-grid-layout';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport ManageWidgetsModal from './ManageWidgetsModal';\r\nimport * as bootstrap from 'bootstrap';\r\n\r\nfunction HomePage({ theme, sideNavState }) {\r\n\r\n const relativityStats = useSelector(state => state.relativityStats);\r\n const brainspaceStats = useSelector(state => state.brainspaceStats);\r\n const storageStats = useSelector(state => state.storageStats);\r\n const blackoutStats = useSelector(state => state.blackoutStats);\r\n const readySuiteStats = useSelector(state => state.readySuiteStats);\r\n const lsiTranslationStats = useSelector(state => state.lsiTranslationStats);\r\n const supportStats = useSelector(state => state.supportStats);\r\n const fileTransferStats = useSelector(state => state.fileTransferStats);\r\n const webProcessingStats = useSelector(state => state.webProcessingStats);\r\n const layout = useSelector(state => state.page.home.dashboardLayout);\r\n const isDashboardInEditMode = useSelector(state => state.page.home.isDashboardInEditMode);\r\n\r\n const HomePageGrid = useMemo(() => WidthProvider(Responsive), []);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(relativityStatsActions.loadUserRelativityInstances()).then(() => {\r\n dispatch(relativityStatsActions.loadRelativityStats()).catch(error => {\r\n toast.error(\"Loading Relativity Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(brainspaceStatsActions.loadBrainspaceStats()).catch(error => {\r\n toast.error(\"Loading Brainspace Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(storageStatsActions.loadStorageStats()).catch(error => {\r\n toast.error(\"Loading Storage Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(blackoutStatsActions.loadBlackoutStats()).catch(error => {\r\n toast.error(\"Loading Blackout Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(readySuiteStatsActions.loadReadySuiteStats()).catch(error => {\r\n toast.error(\"Loading ReadySuite Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(webProcessingStatsActions.loadWebProcessingStats()).catch(error => {\r\n toast.error(\"Loading WebProcessing Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(lsiTranslationStatsActions.loadLsiTranslationStats()).catch(error => {\r\n toast.error(\"Loading LSI Translation Stats Failed:\" + error, { autoClose: false })\r\n });\r\n }).catch(error => {\r\n toast.error(\"Loading User Relativity Instances Failed:\" + error, { autoClose: false });\r\n })\r\n\r\n dispatch(supportStatsActions.loadSupportStats()).catch(error => {\r\n toast.error(\"Loading Support Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(fileTransferStatsActions.loadFileTransferStats()).catch(error => {\r\n toast.error(\"Loading File Transfer Stats Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(resourcesActions.loadResources()).catch(error => {\r\n toast.error(\"Loading Resources Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(appSettingsActions.loadResourceCycleInterval()).catch(error => {\r\n toast.error(\"Loading App Setting Failed: \" + error, { autoClose: false });\r\n });\r\n\r\n dispatch(pageActions.updateDashboardLayout({ lg: [] }));//load empty layout\r\n dispatch(pageActions.loadUserDashboardLayout()).catch(error => {\r\n toast.error(\"Loading User Dashboard Layout Failed: \" + error, { autoClose: false });\r\n });\r\n dispatch(pageActions.loadAvailableWidgets()).catch(error => {\r\n toast.error(\"Loading Available Dashboard Widgets Failed: \" + error, { autoClose: false });\r\n });\r\n\r\n ModalBackgroundRemover.removeModalBackground();\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n fireResizeEvent();\r\n }, [sideNavState]);\r\n\r\n const fireResizeEvent = () => {\r\n window.dispatchEvent(new Event('resize'));\r\n }\r\n\r\n const reloadSupportStats = () => {\r\n dispatch(supportStatsActions.reloadSupportStats());\r\n }\r\n\r\n const reloadFileTransferStats = () => {\r\n dispatch(fileTransferStatsActions.reloadFileTransferStats());\r\n }\r\n\r\n const toggleEditMode = () => {\r\n dispatch(pageActions.updateDashboardEditMode(!isDashboardInEditMode));\r\n }\r\n\r\n const handleManageWidgetClick = () => {\r\n new bootstrap.Modal(document.getElementById('manage-widgets-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleSaveLayoutChangesClick = () => {\r\n dispatch(pageActions.saveUserDashboardLayout(layout));\r\n toggleEditMode();\r\n }\r\n\r\n const handleOnLayoutChange = (currentLayout, allLayouts) => {\r\n dispatch(pageActions.updateDashboardLayout(allLayouts));\r\n }\r\n\r\n const handleDeleteItem = (widgetId) => {\r\n const updatedLayoutLg = layout.lg.filter(x => x.i !== widgetId);\r\n const updatedLayout = { ...layout, lg: updatedLayoutLg };\r\n dispatch(pageActions.updateDashboardLayout(updatedLayout));\r\n }\r\n\r\n const cancelLayoutClick = () => {\r\n toggleEditMode();\r\n dispatch(pageActions.loadUserDashboardLayout()).catch(error => {\r\n toast.error(\"Loading User Dashboard Layout: \" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n { theme != undefined ?\r\n <>\r\n
\r\n { isDashboardInEditMode ?\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n : \"\"\r\n }\r\n
\r\n\r\n handleOnLayoutChange(currentLayout, allLayouts) }\r\n isBounded={ true }\r\n useCSSTransforms={ false }\r\n >\r\n { layout.lg.some(x => x.i == \"Relativity Workspaces\") ?\r\n
\r\n 0 ? relativityStats.stats.find(x => x.label === \"Workspaces\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme } sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Relativity Workspaces\") }\r\n widgetTitle=\"Relativity Workspaces\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Relativity Users\") ?\r\n
\r\n 0 ? relativityStats.stats.find(x => x.label === \"Users\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Relativity Users\") }\r\n widgetTitle=\"Relativity Users\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Relativity Hosted Size\") ?\r\n
\r\n 0 ? relativityStats.stats.find(x => x.label === \"Hosted Size\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Relativity Hosted Size\") }\r\n widgetTitle=\"Relativity Hosted Size\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Relativity Documents\") ?\r\n
\r\n 0 ? relativityStats.stats.find(x => x.label === \"Documents\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Relativity Documents\") }\r\n widgetTitle=\"Relativity Documents\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Brainspace Documents\") ?\r\n
\r\n 0 ? brainspaceStats.stats.find(x => x.label === \"Documents\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Brainspace Documents\") }\r\n widgetTitle=\"Brainspace Documents\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Blackout Native Redacted Documents\") ?\r\n
\r\n 0 ? blackoutStats.stats.find(x => x.label === \"Native Redacted Documents\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Blackout Native Redacted Documents\") }\r\n widgetTitle=\"Blackout Native Redacted Documents\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Blackout Native Redactions Placed\") ?\r\n
\r\n 0 ? blackoutStats.stats.find(x => x.label === \"Native Redactions Placed\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Blackout Native Redactions Placed\") }\r\n widgetTitle=\"Blackout Native Redactions Placed\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Blackout Image Redacted Documents\") ?\r\n
\r\n 0 ? blackoutStats.stats.find(x => x.label === \"Image Redacted Documents\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Blackout Image Redacted Documents\") }\r\n widgetTitle=\"Blackout Image Redacted Documents\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Blackout Redacted Pages\") ?\r\n
\r\n 0 ? blackoutStats.stats.find(x => x.label === \"Redacted Pages\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Blackout Redacted Pages\") }\r\n widgetTitle=\"Blackout Redacted Pages\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"ReadySuite Number of Users\") ?\r\n
\r\n 0 ? readySuiteStats.stats.find(x => x.label === \"Number of Users\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"ReadySuite Number of Users\") }\r\n widgetTitle=\"ReadySuite Number of Users\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Relativity Web Processing Discovered Documents\") ?\r\n
\r\n 0 ? webProcessingStats.stats.find(x => x.label === \"Discovered Documents\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Relativity Web Processing Discovered Documents\") }\r\n widgetTitle=\"Relativity Web Processing Discovered Documents\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Relativity Web Processing Discovered Size\") ?\r\n
\r\n 0 ? webProcessingStats.stats.find(x => x.label === \"Discovered Document Size\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Relativity Web Processing Discovered Size\") }\r\n widgetTitle=\"Relativity Web Processing Discovered Size\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"LSI Translation Document Count\") ?\r\n
\r\n 0 ? lsiTranslationStats.stats.find(x => x.label === \"Number of Documents\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"LSI Translation Document Count\") }\r\n widgetTitle=\"LSI Translation Document Count\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"LSI Translation Case Count\") ?\r\n
\r\n 0 ? lsiTranslationStats.stats.find(x => x.label === \"Number of Cases\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"LSI Translation Case Count\") }\r\n widgetTitle=\"LSI Translation Case Count\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Support\") ?\r\n
\r\n handleDeleteItem(\"Support\") } />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"File Transfer\") ?\r\n
\r\n handleDeleteItem(\"File Transfer\") } />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Knowledge Base\") ?\r\n
\r\n handleDeleteItem(\"Knowledge Base\") } />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Resources\") ?\r\n
\r\n handleDeleteItem(\"Resources\") } />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Storage Archive Size\") ?\r\n
\r\n 0 ? storageStats.stats.find(x => x.label === \"Archive Server Size\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Storage Archive Size\") }\r\n widgetTitle=\"Storage Archive Size\"\r\n />\r\n
: <>\r\n }\r\n { layout.lg.some(x => x.i == \"Storage Staging Size\") ?\r\n
\r\n 0 ? storageStats.stats.find(x => x.label === \"Staging Server Size\") : { label: \"Loading...\", value: \"0\", statHistory: [] } }\r\n theme={ theme }\r\n sideNavState={ sideNavState }\r\n isInEditMode={ isDashboardInEditMode }\r\n onDeleteItem={ () => handleDeleteItem(\"Storage Staging Size\") }\r\n widgetTitle=\"Storage Staging Size\"\r\n />\r\n
: <>\r\n }\r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport default HomePage;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getAuditDetails(userActionAuditLogEntryId) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/audit/' + userActionAuditLogEntryId + '/details').catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function getAudits() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/audit').catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function logPageView(pageName) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/audit/view/page/' + pageName).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function logContentViewWithInfo(contentName, info) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/audit/view/page/' + contentName + '/additionalInfo/' + encodeURIComponent(info)).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function logLoginSupport() {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/audit/login/support').catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function logConfidentialityAgreement(name) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/audit/confidentialityAgreement?name=' + encodeURIComponent(name)).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { useSelector } from 'react-redux';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nfunction KnowledgeBaseExpandableChapter({ chapter, type, handleSelectedContentClicked }) {\r\n\r\n const selectedContent = useSelector(state => state.page.kb.selectedContent);\r\n\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n\r\n const handleRowExpand = () => {\r\n setIsExpanded(isExpanded => !isExpanded);\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedContent) {\r\n setIsExpanded(selectedContent.chapterId === chapter.contentId || (selectedContent.contentId === chapter.contentId && type === \"chapter\"));\r\n }\r\n }, [selectedContent])\r\n\r\n return (\r\n <>\r\n { chapter.pages.length > 0 ?\r\n
\r\n
handleRowExpand() }>\r\n
\r\n handleSelectedContentClicked() } className={ chapter.contentId === selectedContent.contentId && type === \"chapter\" ? \"selected\" : \"\" } to={ \"/KnowledgeBase/chapter/\" + chapter.contentId + \"/\" + encodeURIComponent(chapter.slug) }> { chapter.name }\r\n
\r\n
\r\n \r\n
\r\n
\r\n { isExpanded &&\r\n <>\r\n { chapter.pages.map((page) => (\r\n
\r\n handleSelectedContentClicked() } className={ page.pageId === selectedContent.contentId && type === \"page\" ? \"selected\" : \"\" } to={ \"/KnowledgeBase/page/\" + page.pageId + \"/\" + encodeURIComponent(page.slug ? page.slug : page.name) }> { page.name }\r\n
\r\n )\r\n ) }\r\n \r\n }\r\n
\r\n : \"\" }\r\n \r\n )\r\n};\r\n\r\nexport default KnowledgeBaseExpandableChapter;","import React, { useEffect, useState } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { useSelector } from 'react-redux';\r\nimport KnowledgeBaseExpandableChapter from '../knowledgebase/KnowledgeBaseExpandableChapter';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nfunction KnowledgeBaseExpandableBook({ book, type, handleSelectedContentClicked }) {\r\n\r\n const selectedContent = useSelector(state => state.page.kb.selectedContent);\r\n\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n\r\n const handleRowExpand = () => {\r\n setIsExpanded(isExpanded => !isExpanded);\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedContent) {\r\n setIsExpanded(selectedContent.bookId === book.bookId || (selectedContent.contentId === book.bookId && type === \"book\"));\r\n } \r\n }, [selectedContent])\r\n\r\n return (\r\n <>\r\n { book.contents.length > 0 ?\r\n
\r\n
handleRowExpand() }>\r\n
\r\n handleSelectedContentClicked() } className={ book.bookId === selectedContent.contentId && type === \"book\" ? \"selected\" : \"\" } to={ \"/KnowledgeBase/book/\" + book.bookId + \"/\" + encodeURIComponent(book.slug) }> { book.name }\r\n
\r\n
\r\n \r\n
\r\n
\r\n { isExpanded &&\r\n <>\r\n { book.contents.map((content) => {\r\n if (content.type == \"chapter\") {\r\n return (\r\n handleSelectedContentClicked() } />\r\n )\r\n } else if (content.type == \"page\") {\r\n return (\r\n
\r\n handleSelectedContentClicked() } className={ content.contentId === selectedContent.contentId && type === \"page\" ? \"selected\" : \"\" } to={ \"/KnowledgeBase/page/\" + content.contentId + \"/\" + encodeURIComponent(content.slug ? content.slug : content.name) }> { content.name }\r\n
\r\n )\r\n }\r\n }) }\r\n \r\n }\r\n
\r\n : \"\" }\r\n \r\n )\r\n};\r\n\r\nexport default KnowledgeBaseExpandableBook;","import React from 'react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction ConfirmationModal({ id, title, displayValue, onSubmit, theme }) {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{ title }

\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ConfirmationModal;","import React, { useEffect, useState } from 'react';\r\nimport { Link, useLocation, useNavigate, useParams } from 'react-router-dom';\r\nimport { toast } from 'react-toastify';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as kbActions from '../../redux/actions/kbActions';\r\nimport * as auditsService from '../../services/auditsService';\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport KnowledgeBaseExpandableBook from '../knowledgebase/KnowledgeBaseExpandableBook';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction KnowledgeBasePage({ theme }) {\r\n function useQuery() {\r\n const { search } = useLocation();\r\n\r\n return React.useMemo(() => new URLSearchParams(search), [search]);\r\n }\r\n let params = useParams();\r\n let navigate = useNavigate();\r\n let query = useQuery();\r\n let querySearchTerm = query.get(\"searchTerm\");\r\n\r\n const type = params.type;\r\n const contentId = params.contentId;\r\n\r\n const [isSearching, setIsSearching] = useState(false);\r\n\r\n const searchTerm = useSelector(state => querySearchTerm ? querySearchTerm : state.page.kb.searchTerm);\r\n\r\n const searchResults = useSelector(state => state.kb.searchResults);\r\n\r\n const books = useSelector(state => state.kb.books);\r\n\r\n const selectedContent = useSelector(state => state.page.kb.selectedContent);\r\n\r\n const knowledgeBasePdf = useSelector(state => state.kb.pdf);\r\n const [pdfLoading, setPdfLoading] = useState(false);\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(kbActions.loadKnowledgeBaseBooks()).catch(error => {\r\n toast.error(\"Loading KB Books Failed: \" + error, { autoClose: false });\r\n });\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (selectedContent.name) {\r\n auditsService.logContentViewWithInfo(\"Knowledge Base\", \"Viewed \" + type + \" - \" + selectedContent.name);\r\n }\r\n document.getElementById('right-scrolling-div').scrollTop = 0;\r\n }, [selectedContent]);\r\n\r\n useEffect(() => {\r\n if (contentId && type) {\r\n dispatch(kbActions.loadKnowledgeBaseContent(type, contentId));\r\n } else {\r\n dispatch(pageActions.clearSelectedKBContent());\r\n }\r\n dispatch(pageActions.updateSearchTerm(\"kb\", \"\"));\r\n }, [contentId, type])\r\n\r\n useEffect(() => {\r\n var delayDebounce = null;\r\n if (searchTerm != \"\") {\r\n setIsSearching(true);\r\n delayDebounce = setTimeout(() => {\r\n dispatch(kbActions.searchKnowledgeBase(searchTerm)).then(() => {\r\n setIsSearching(false);\r\n }).catch(error => {\r\n setIsSearching(false);\r\n toast.error(\"Searching KB Failed: \" + error, { autoClose: false });\r\n });\r\n }, 300);\r\n dispatch(pageActions.clearSelectedKBContent());\r\n } else {\r\n dispatch(kbActions.clearKBSearchResults());\r\n }\r\n\r\n return () => clearTimeout(delayDebounce)\r\n }, [searchTerm]);\r\n\r\n useEffect(() => {\r\n if(knowledgeBasePdf.fileName != \"\"){\r\n var link = document.createElement('a');\r\n link.href = knowledgeBasePdf.content;\r\n link.download = knowledgeBasePdf.fileName;\r\n link.dispatchEvent(new MouseEvent('click'));\r\n dispatch(kbActions.clearPdf());\r\n }\r\n }, [knowledgeBasePdf])\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"kb\", event.target.value));\r\n navigate(\"/KnowledgeBase/full/content/search?searchTerm=\" + encodeURIComponent(event.target.value));\r\n }\r\n\r\n const handleSelectedContentClicked = () => {\r\n dispatch(pageActions.updateSearchTerm(\"kb\", \"\"));\r\n }\r\n\r\n const handlePrintPdf = () => {\r\n new bootstrap.Modal(document.getElementById('print-to-pdf-confirmation-modal'), { backdrop: 'static', keyboard: false }).show(); \r\n }\r\n\r\n const handlePrintPdfConfirmed = (event) => {\r\n event.preventDefault();\r\n auditsService.logConfidentialityAgreement(selectedContent.name);\r\n bootstrap.Modal.getInstance(document.getElementById('print-to-pdf-confirmation-modal')).hide();\r\n setPdfLoading(true);\r\n\r\n dispatch(kbActions.getPdf(selectedContent.contentId)).catch(error => {\r\n toast.error(\"Print to PDF Failed: \" + error, { autoClose: false });\r\n }).finally(() => {\r\n setPdfLoading(false);\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

Knowledge Base

\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n { pdfLoading ? : }\r\n \r\n
\r\n
\r\n
\r\n { books.length > 0 ? books.map((book, i) => {\r\n return (\r\n handleSelectedContentClicked() } />\r\n )\r\n }) :
}\r\n
\r\n
\r\n\r\n { searchTerm != \"\" ? <>

Search Results

{ isSearching ?\r\n
Searching...
\r\n : searchResults.length > 0 ? searchResults.map(searchResult => (\r\n handleSelectedContentClicked() }>\r\n
\r\n
\r\n
\r\n
\r\n \r\n )) :
No search results
}
:\r\n selectedContent ?\r\n type == 'page' ?\r\n <>\r\n

{ selectedContent.name }

\r\n
\r\n \r\n :\r\n type == 'chapter' ?\r\n <>\r\n

{ selectedContent.name }

\r\n { selectedContent.name === \"Permission Denied\" ?\r\n

You do not have permission to view this content.

:\r\n
{ selectedContent.pages ? selectedContent.pages.map(page => (\r\n handleSelectedContentClicked() }>\r\n
\r\n
{ page.name }
\r\n
\r\n \r\n )) : \"\" }\r\n
}\r\n \r\n :\r\n type == 'book' ?\r\n <>\r\n

{ selectedContent.name }

\r\n { selectedContent.name === \"Permission Denied\" ?\r\n

You do not have permission to view this content.

:\r\n
{ selectedContent.contents ? selectedContent.contents.map(content => (\r\n handleSelectedContentClicked() }>\r\n
\r\n
{ content.name }
\r\n
\r\n \r\n )) : \"\" }\r\n
}\r\n \r\n : \"\"\r\n : \"\"\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
Do you accept these terms?` }\r\n onSubmit={ handlePrintPdfConfirmed }\r\n theme={ theme }\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default KnowledgeBasePage;","import * as pageActions from \"../actions/pageActions\";\r\nimport * as types from \"./types\";\r\nimport * as usersService from \"../../services/usersService\";\r\n\r\nexport function loadUserSuccess(user) {\r\n return { type: types.LOAD_USER_SUCCESS, user }\r\n}\r\n\r\nexport function loadUsersSuccess(users) {\r\n return { type: types.LOAD_USERS_SUCCESS, users }\r\n}\r\n\r\nexport function disableUserSuccess(user) {\r\n return { type: types.DISABLE_USER_SUCCESS, user }\r\n}\r\n\r\nexport function enableUserSuccess(user) {\r\n return { type: types.ENABLE_USER_SUCCESS, user }\r\n}\r\n\r\nexport function resetUser2faSuccess(user) {\r\n return { type: types.RESET_2FA_SUCCESS, user }\r\n}\r\n\r\nexport function resetUserPasswordSuccess(user) {\r\n return { type: types.RESET_PASSWORD_SUCCESS, user }\r\n}\r\n\r\nexport function saveUserSuccess(user) {\r\n return { type: types.SAVE_USER_SUCCESS, user }\r\n}\r\n\r\nexport function createUserSuccess(user) {\r\n return { type: types.CREATE_USER_SUCCESS, user }\r\n}\r\n\r\nexport function loadUser(user) {\r\n return function (dispatch) {\r\n return usersService.getUser(user.userId)\r\n .then(returnedUser => {\r\n dispatch(loadUserSuccess(returnedUser));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadUsers() {\r\n return function (dispatch) {\r\n return usersService.getUsers()\r\n .then(users => {\r\n dispatch(loadUsersSuccess(users));\r\n dispatch(pageActions.loadedPage(\"users\"));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function disableUser(user) {\r\n return function (dispatch) {\r\n return usersService.disableUser(user)\r\n .then(returnedUser => {\r\n dispatch(disableUserSuccess(returnedUser));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}\r\n\r\nexport function enableUser(user) {\r\n return function (dispatch) {\r\n return usersService.enableUser(user)\r\n .then(returnedUser => {\r\n dispatch(enableUserSuccess(returnedUser));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}\r\n\r\nexport function resetUser2fa(user) {\r\n return function (dispatch) {\r\n return usersService.resetUser2fa(user)\r\n .then(returnedUser => {\r\n dispatch(resetUser2faSuccess(returnedUser));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}\r\n\r\nexport function resetUserPassword(user) {\r\n return function (dispatch) {\r\n return usersService.resetUserPassword(user)\r\n .then(returnedUser => {\r\n dispatch(resetUserPasswordSuccess(returnedUser));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}\r\n\r\nexport function saveUser(user) {\r\n return function (dispatch) {\r\n return usersService.saveUser(user)\r\n .then(savedUser => {\r\n user.userId\r\n ? dispatch(saveUserSuccess(savedUser))\r\n : dispatch(createUserSuccess(savedUser));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getAuthServices() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/services/auth');\r\n return response.data;\r\n}\r\n\r\nexport async function getPartnerServices() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/services/partner');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as servicesService from \"../../services/servicesService\";\r\n\r\nexport function loadAuthServicesSuccess(services) {\r\n return { type: types.LOAD_AUTH_SERVICES_SUCCESS, services }\r\n}\r\n\r\nexport function loadPartnerServicesSuccess(services) {\r\n return { type: types.LOAD_PARTNER_SERVICES_SUCCESS, services }\r\n}\r\n\r\nexport function loadAuthServices() {\r\n return function (dispatch) {\r\n return servicesService.getAuthServices()\r\n .then(services => {\r\n dispatch(loadAuthServicesSuccess(services));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadPartnerServices() {\r\n return function (dispatch) {\r\n return servicesService.getPartnerServices()\r\n .then(services => {\r\n dispatch(loadPartnerServicesSuccess(services));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getAvailableLinks() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/links/available');\r\n return response.data;\r\n}\r\n\r\nexport async function getGlobalLinks() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/links/global');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as linksService from \"../../services/linksService\";\r\n\r\nexport function loadAvailableLinksSuccess(available) {\r\n return { type: types.LOAD_AVAILABLE_LINKS_SUCCESS, available }\r\n}\r\n\r\nexport function loadGlobalLinksSuccess(globalLinks) {\r\n return { type: types.LOAD_GLOBAL_LINKS_SUCCESS, globalLinks }\r\n}\r\n\r\nexport function loadAvailableLinks() {\r\n return function (dispatch) {\r\n return linksService.getAvailableLinks()\r\n .then(available => {\r\n dispatch(loadAvailableLinksSuccess(available));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function loadGlobalLinks() {\r\n return function (dispatch) {\r\n return linksService.getGlobalLinks()\r\n .then(globalLinks => {\r\n dispatch(loadGlobalLinksSuccess(globalLinks));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getAvailableSubscriptions() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/group/availablesubscriptions');\r\n return response.data;\r\n}\r\n\r\nexport async function getAvailablePocs() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/group/availablepocs');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as groupsService from \"../../services/groupsService\";\r\n\r\nexport function loadAvailableSubscriptionsSuccess(subscriptions) {\r\n return { type: types.LOAD_AVAILABLE_SUBSCRIPTIONS_SUCCESS, subscriptions }\r\n}\r\n\r\nexport function loadAvailablePocsSuccess(pocs) {\r\n return { type: types.LOAD_AVAILABLE_POCS_SUCCESS, pocs }\r\n}\r\n\r\nexport function loadAvailableSubscriptions() {\r\n return function (dispatch) {\r\n return groupsService.getAvailableSubscriptions()\r\n .then(subscriptions => {\r\n dispatch(loadAvailableSubscriptionsSuccess(subscriptions));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadAvailablePocs() {\r\n return function (dispatch) {\r\n return groupsService.getAvailablePocs()\r\n .then(pocs => {\r\n dispatch(loadAvailablePocsSuccess(pocs));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getAvailablePortals() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/filetransfer/portals');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as fileTransferService from \"../../services/fileTransferService\";\r\n\r\nexport function loadAvailablePortalsSuccess(portals) {\r\n return { type: types.LOAD_AVAILABLE_PORTALS_SUCCESS, portals }\r\n}\r\n\r\nexport function loadAvailablePortals() {\r\n return function (dispatch) {\r\n return fileTransferService.getAvailablePortals()\r\n .then(portals => {\r\n dispatch(loadAvailablePortalsSuccess(portals));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getAvailableJiraOrganizations() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/jira/availableorganizations');\r\n return response.data;\r\n}\r\n\r\nexport async function getAvailableJiraGroups() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/jira/availablegroups');\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as jiraService from \"../../services/jiraService\";\r\n\r\nexport function loadAvailableJiraOrganizationsSuccess(organizations) {\r\n return { type: types.LOAD_AVAILABLE_JIRA_ORGANIZATIONS_SUCCESS, organizations }\r\n}\r\n\r\nexport function loadAvailableJiraGroupsSuccess(groups) {\r\n return { type: types.LOAD_AVAILABLE_JIRA_GROUPS_SUCCESS, groups }\r\n}\r\n\r\nexport function loadAvailableJiraOrganizations() {\r\n return function (dispatch) {\r\n return jiraService.getAvailableJiraOrganizations()\r\n .then(organizations => {\r\n dispatch(loadAvailableJiraOrganizationsSuccess(organizations));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadAvailableJiraGroups() {\r\n return function (dispatch) {\r\n return jiraService.getAvailableJiraGroups()\r\n .then(groups => {\r\n dispatch(loadAvailableJiraGroupsSuccess(groups));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import { CNav, CNavItem, CNavLink, CTabContent, CTabPane } from '@coreui/bootstrap-react';\r\nimport * as bootstrap from 'bootstrap';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Select, { components } from 'react-select';\r\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\r\nimport { toast } from 'react-toastify';\r\nimport * as fileTransferActions from '../../redux/actions/fileTransferActions';\r\nimport * as jiraActions from '../../redux/actions/jiraActions';\r\nimport * as linksActions from '../../redux/actions/linksActions';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as partnersActions from '../../redux/actions/partnersActions';\r\nimport * as servicesActions from '../../redux/actions/servicesActions';\r\nimport * as usersActions from '../../redux/actions/usersActions';\r\nimport * as partnersService from '../../services/partnersService';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport * as styles from '../common/DropdownStyles';\r\nimport TextInput from '../common/TextInput';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction PartnerEdit({ theme }) {\r\n\r\n const [isLoading, setIsLoading] = useState();\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [editModal, setEditModal] = useState();\r\n const [refreshPartnerToastId, setRefreshPartnerToastId] = useState(\"\");\r\n const [newJiraOrganizations, setNewJiraOrganizations] = useState([]);\r\n const [activeTab, setActiveTab] = useState(\"Info\");\r\n const [errors, setErrors] = useState({});\r\n const [billingPocList, setBillingPocList] = useState([]);\r\n const [newBillingPocList, setNewBillingPocList] = useState([]);\r\n const [salesPocList, setSalesPocList] = useState([]);\r\n const [newSalesPocList, setNewSalesPocList] = useState([]);\r\n const [operationalPocList, setOperationalPocList] = useState([]);\r\n const [newOperationalPocList, setNewOperationalPocList] = useState([]);\r\n const [authPocList, setAuthPocList] = useState([]);\r\n const [newAuthPocList, setNewAuthPocList] = useState([]);\r\n const [partnerUsers, setPartnerUsers] = useState([]);\r\n const [partner, setPartner] = useState(useSelector(state => state.page.partners.selectedPartner));\r\n\r\n const sortJiraOrganizations = (organizationA, organizationB) => {\r\n var x = organizationA.name.toLowerCase();\r\n var y = organizationB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n }\r\n\r\n const sortGlobalLinks = (globalLinkA, globalLinkB) => {\r\n var x = globalLinkA.label.toLowerCase();\r\n var y = globalLinkB.label.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n }\r\n\r\n const selectedPartner = useSelector(state => state.page.partners.selectedPartner);\r\n const allPartners = useSelector(state => state.partners);\r\n const users = useSelector(state => state.users);\r\n const authServices = useSelector(state => state.services.auth);\r\n const availableSubscriptions = useSelector(state => state.groups.availableSubscriptions);\r\n const availablePocs = useSelector(state => state.groups.availablePocs);\r\n const jiraOrganizations = useSelector(state => state.jira.availableOrganizations.sort(sortJiraOrganizations));\r\n const portals = useSelector(state => state.fileTransfer.availablePortals);\r\n const globalLinks = useSelector(state => state.links.global);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const jiraGroups = useSelector(state => state.jira.availableGroups);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(linksActions.loadGlobalLinks()).catch(error => {\r\n toast.error(\"Loading Global Links Failed:\" + error, { autoClose: false });\r\n });\r\n dispatch(fileTransferActions.loadAvailablePortals()).catch(error => {\r\n toast.error(\"Loading Available Portals Failed:\" + error, { autoClose: false });\r\n });\r\n dispatch(servicesActions.loadAuthServices()).catch(error => {\r\n toast.error(\"Loading Available Auth Services Failed:\" + error, { autoClose: false });\r\n });\r\n if (userPermissions.some(p => p.name === \"ViewJiraOrganizations\")) {\r\n dispatch(jiraActions.loadAvailableJiraOrganizations()).catch(error => {\r\n toast.error(\"Loading Available Jira Organizations Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n if (userPermissions.some(p => p.name === \"ViewJiraGroups\")) {\r\n dispatch(jiraActions.loadAvailableJiraGroups()).catch(error => {\r\n toast.error(\"Loading Available Jira Groups Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n return () => {\r\n dispatch(pageActions.clearSelectedPartner());\r\n };\r\n }, [])\r\n\r\n const refreshMessage = (partner) => (\r\n
\r\n
\r\n { partner.name }
has been modified:\r\n
\r\n
\r\n To refresh click this message.\r\n
\r\n
\r\n Please note that refreshing will overwrite any current changes and saving new changes will not be permitted without a refresh.\r\n
\r\n
\r\n );\r\n\r\n const refreshPartner = (partnerId, dismissToast = false) => {\r\n if (editModal && editModal._isShown) {\r\n setIsLoading(true);\r\n partnersService.getPartner(partnerId)\r\n .then(returnedPartner => {\r\n dispatch(partnersActions.loadPartnerSuccess(returnedPartner));\r\n if (dismissToast) {\r\n toast.dismiss(refreshPartnerToastId);\r\n setRefreshPartnerToastId(\"\");\r\n }\r\n setPartner(returnedPartner);\r\n dispatch(pageActions.updateSelectedPartner(returnedPartner));\r\n })\r\n .catch(error => {\r\n if (error.message != \"canceled\") {\r\n toast.error(\"Loading Selected Partner Failed:\" + error, { autoClose: false });\r\n }\r\n }).finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n }\r\n\r\n const checkUpdateRequired = useCallback(async (partner) => {\r\n if (editModal && editModal._isShown) {\r\n if (partner.partnerId && !isSaving && !isLoading) {\r\n if (await partnersService.updateRequired(partner) && refreshPartnerToastId == '') {\r\n let newToastId = toast.warning(refreshMessage(partner), {\r\n autoClose: false,\r\n position: \"top-center\",\r\n hideProgressBar: true,\r\n closeOnClick: false,\r\n closeButton: false,\r\n draggable: false,\r\n onClick: () => refreshPartner(partner.partnerId, true)\r\n })\r\n setRefreshPartnerToastId(newToastId);\r\n }\r\n }\r\n }\r\n }, [refreshPartnerToastId, isSaving, isLoading, editModal]);\r\n\r\n useEffect(() => {\r\n setPartnerUsers(users.filter(user => user.partnerId == selectedPartner.partnerId && !user.disabled && user.integrationServices.some(service => service.name == 'Communications')));\r\n let billingContacts = users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Accounting\")).map(user => ({\r\n userId: user.userId,\r\n email: user.email\r\n }))\r\n let salesContacts = users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Sales\")).map(user => ({\r\n userId: user.userId,\r\n email: user.email\r\n }))\r\n let operationalContacts = users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Operations\")).map(user => ({\r\n userId: user.userId,\r\n email: user.email\r\n }))\r\n let authContacts = users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Security\")).map(user => ({\r\n userId: user.userId,\r\n email: user.email\r\n }))\r\n setBillingPocList(billingContacts);\r\n setSalesPocList(salesContacts);\r\n setOperationalPocList(operationalContacts);\r\n setAuthPocList(authContacts);\r\n setNewBillingPocList(billingPocList);\r\n setNewSalesPocList(salesContacts);\r\n setNewOperationalPocList(operationalContacts);\r\n setNewAuthPocList(authContacts);\r\n\r\n selectedPartner.availableGlobalLinks = globalLinks.filter(gl => !partner.externalLinks.some(el => el.externalLinkId == gl.externalLinkId));\r\n setPartner(selectedPartner);\r\n var editModal = document.getElementById('edit-modal');\r\n editModal.addEventListener('hidden.bs.modal', () => {\r\n if (partnersService.getPartnerAbortController[selectedPartner.partnerId]) {\r\n partnersService.getPartnerAbortController[selectedPartner.partnerId].abort();\r\n }\r\n dispatch(pageActions.clearSelectedPartner());\r\n setErrors({});\r\n setActiveTab(\"Info\");\r\n });\r\n setEditModal(bootstrap.Modal.getInstance(document.getElementById('edit-modal')));\r\n }, [selectedPartner])\r\n\r\n useEffect(() => {\r\n if (selectedPartner.partnerId) {\r\n refreshPartner(selectedPartner.partnerId);\r\n }\r\n }, [selectedPartner.partnerId, editModal])\r\n\r\n useEffect(() => {\r\n const updateRequiredIntervalId = setInterval(() => checkUpdateRequired(partner), 1000);\r\n return () => {\r\n clearInterval(updateRequiredIntervalId);\r\n };\r\n }, [checkUpdateRequired, partner])\r\n\r\n useEffect(() => {\r\n if (!partner.integrationServices.some(s => s.name === activeTab && !s.isDeleted)) {\r\n setActiveTab(\"Info\");\r\n }\r\n }, [partner.integrationServices])\r\n\r\n const handlePartnerSave = (event) => {\r\n setIsSaving(true);\r\n event.preventDefault();\r\n let updatePartner = { ...partner };\r\n let integrationServices = updatePartner.integrationServices;\r\n let isCreate = updatePartner.partnerId === undefined;\r\n if (!partnerIsValid(updatePartner)) {\r\n setIsSaving(false);\r\n return;\r\n }\r\n\r\n if (integrationServices.some(s => s.name === 'Communications' && s.isDeleted)) {\r\n updatePartner.defaultSubscriptions = []\r\n }\r\n\r\n if (integrationServices.some(s => s.name === \"Support\" && s.isDeleted)) {\r\n updatePartner.jiraOrganization.id = \"0\";\r\n updatePartner.jiraOrganization.name = \"Please Select a Jira Organization...\";\r\n updatePartner.jiraGroups = []\r\n }\r\n if (integrationServices.some(s => s.name === \"Links\" && s.isDeleted)) {\r\n updatePartner.externalLinks = [];\r\n }\r\n if (integrationServices.some(s => s.name === \"Login\" && s.isDeleted)) {\r\n updatePartner.twoFactorMethods = [];\r\n }\r\n\r\n if (updatePartner.mediaShuttleUrl === undefined) {\r\n updatePartner.mediaShuttleUrl = \"\";\r\n }\r\n\r\n //IdentifyThePocGroups\r\n let accountingPocGroup = availablePocs.find(poc => poc.name === \"Accounting\");\r\n let salesPocGroup = availablePocs.find(poc => poc.name === \"Sales\");\r\n let operationsPocGroup = availablePocs.find(poc => poc.name === \"Operations\");\r\n let securityPocGroup = availablePocs.find(poc => poc.name === \"Security\");\r\n\r\n //Find all the Poc Upodates\r\n let pocUpdates = newBillingPocList.filter(nPoc => !billingPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: accountingPocGroup, isAdded: true }] })).concat(\r\n billingPocList.filter(nPoc => !newBillingPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: accountingPocGroup, isAdded: false }] })),\r\n newSalesPocList.filter(nPoc => !salesPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: salesPocGroup, isAdded: true }] })),\r\n salesPocList.filter(nPoc => !newSalesPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: salesPocGroup, isAdded: false }] })),\r\n newOperationalPocList.filter(nPoc => !operationalPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: operationsPocGroup, isAdded: true }] })),\r\n operationalPocList.filter(nPoc => !newOperationalPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: operationsPocGroup, isAdded: false }] })),\r\n newAuthPocList.filter(nPoc => !authPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: securityPocGroup, isAdded: true }] })),\r\n authPocList.filter(nPoc => !newAuthPocList.some(poc => poc.userId == nPoc.userId)).map(poc => ({ userId: poc.userId, updates: [{ poc: securityPocGroup, isAdded: false }] })));\r\n\r\n //Reduce to a single user\r\n let combinedPocUpdates = pocUpdates.filter(poc => pocUpdates.indexOf(poc) == pocUpdates.findIndex(pu => pu.userId == poc.userId)).map(poc => {\r\n return pocUpdates.filter(innerPoc => poc.userId == innerPoc.userId).reduce((updateUser, user) => {\r\n updateUser.updates = updateUser.updates.concat(user.updates);\r\n return updateUser;\r\n });\r\n });\r\n\r\n //Update the users poc array for all updates and save user\r\n combinedPocUpdates.forEach(pocUpdate => {\r\n let updateUser = users.find(user => pocUpdate.userId == user.userId);\r\n pocUpdate.updates.forEach(update => {\r\n if (!updateUser.integrationServices.some(is => is.name === \"Communications\")) {\r\n let communicationsService = updateUser.availableServices.find(as => as.name === \"Communications\");\r\n let index = updateUser.availableServices.findIndex(as => as.name === \"Communications\");\r\n updateUser.integrationServices.push(communicationsService);\r\n updateUser.availableServices.splice(index, 1);\r\n }\r\n if (update.isAdded) {\r\n updateUser.pocs.push(update.poc);\r\n } else {\r\n let index = updateUser.pocs.findIndex(poc => poc.name == update.poc.name);\r\n updateUser.pocs.splice(index, 1);\r\n }\r\n });\r\n dispatch(usersActions.saveUser(updateUser));\r\n });\r\n\r\n dispatch(partnersActions.savePartner(updatePartner)).then(empty => {\r\n if (userPermissions.some(up => up.name === \"ViewJiraOrganizations\")) {\r\n dispatch(jiraActions.loadAvailableJiraOrganizations()).catch(error => {\r\n toast.error(\"Loading Available Jira Organizations Failed:\" + error, { autoClose: false });\r\n })\r\n }\r\n if (userPermissions.some(up => up.name === 'ViewJiraGroups')) {\r\n dispatch(jiraActions.loadAvailableJiraGroups()).catch(error => {\r\n toast.error(\"Loading Available Jira Groups Failed:\" + error, { autoClose: false });\r\n })\r\n }\r\n if ((integrationServices.some(s => s.name === \"Links\"))) {\r\n dispatch(linksActions.loadGlobalLinks()).catch(error => {\r\n toast.error(\"Loading Global Links Failed:\" + error, { autoClose: false })\r\n })\r\n }\r\n if ((integrationServices.some(s => s.name === \"File Transfer\"))) {\r\n dispatch(fileTransferActions.loadAvailablePortals()).catch(error => {\r\n toast.error(\"Loading Available Portals Failed:\" + error, { autoClose: false })\r\n })\r\n }\r\n if (isCreate) {\r\n toast.success(updatePartner.name + \" has been created\");\r\n } else {\r\n toast.success(updatePartner.name + \" has been saved\");\r\n }\r\n bootstrap.Modal.getInstance(document.getElementById('edit-modal')).hide()\r\n dispatch(pageActions.clearSelectedPartner());\r\n setIsSaving(false);\r\n }).catch(error => {\r\n setIsSaving(false);\r\n toast.error(\"Save Partner Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const partnerIsValid = (updatePartner) => {\r\n const { name, parentPartnerId, twoFactorMethods, partnerADIdentifier, partnerId,\r\n integrationServices, jiraGroups, externalLinks, mediaShuttlePortals } = updatePartner;\r\n const errors = {};\r\n\r\n if (!name) {\r\n errors.name = \"(Required)\";\r\n } else if (\r\n (\r\n !partnerId && allPartners.find(p =>\r\n p.name.toLowerCase() === name.toLowerCase()\r\n )\r\n ) ||\r\n (partnerId && (\r\n allPartners.find(p =>\r\n p.partnerId === partnerId\r\n ).name.toLowerCase() != name.toLowerCase()\r\n ) &&\r\n allPartners.find(p =>\r\n p.name.toLowerCase() === name.toLowerCase()\r\n )\r\n )\r\n ) {\r\n errors.name = \"(Duplicate Name)\";\r\n }\r\n\r\n if (!partnerADIdentifier) {\r\n errors.partnerADIdentifier = \"(Required)\";\r\n } else if (\r\n (\r\n !partnerId && allPartners.find(p =>\r\n p.partnerADIdentifier.toLowerCase() === partnerADIdentifier.toLowerCase()\r\n )\r\n ) ||\r\n (partnerId && (\r\n allPartners.find(p =>\r\n p.partnerId === partnerId\r\n ).partnerADIdentifier.toLowerCase() != partnerADIdentifier.toLowerCase()\r\n ) &&\r\n allPartners.find(p =>\r\n p.partnerADIdentifier.toLowerCase() === partnerADIdentifier.toLowerCase()\r\n )\r\n )\r\n ) {\r\n errors.partnerADIdentifier = \"(Duplicate ADI)\";\r\n }\r\n\r\n if (!parentPartnerId) {\r\n errors.parentPartnerId = \"(Required)\";\r\n }\r\n\r\n if (integrationServices.find(s => s.name === \"Support\" && !s.isDeleted) && jiraGroups.length < 1) {\r\n errors.jiraGroups = \"(Required)\";\r\n }\r\n\r\n if (integrationServices.find(s => s.name === \"Links\" && !s.isDeleted) && externalLinks.filter(el => el.label === \"\").length > 0) {\r\n errors.externalLinkLabel = \"(Required)\";\r\n }\r\n\r\n if (integrationServices.find(s => s.name === \"Links\" && !s.isDeleted) && externalLinks.filter(el => el.url === \"\").length > 0) {\r\n errors.externalLinkUrl = \"(Required)\";\r\n }\r\n\r\n if (integrationServices.some(s => s.name === \"Links\" && !s.isDeleted) && externalLinks.length < 1) {\r\n errors.noExternalLinks = \"(Add external links, or remove Links service)\";\r\n }\r\n\r\n if (integrationServices.some(s => s.name === \"File Transfer\" && !s.isDeleted) && mediaShuttlePortals.length < 1) {\r\n errors.fileTransferPortals = \"Must select at least one portal\";\r\n }\r\n\r\n if (errors.name || errors.parentPartnerId || errors.partnerADIdentifier) {\r\n setActiveTab(\"Info\");\r\n } else if (errors.hubSpotCompany) {\r\n setActiveTab(\"Communications\");\r\n } else if (errors.jiraGroups) {\r\n setActiveTab(\"Support\");\r\n } else if (errors.twoFactorMethods) {\r\n setActiveTab(\"Login\");\r\n } else if (errors.externalLinkLabel || errors.externalLinkUrl || errors.noExternalLinks) {\r\n setActiveTab(\"Links\");\r\n } else if (errors.fileTransferPortals) {\r\n setActiveTab(\"File Transfer\")\r\n }\r\n\r\n setErrors(errors);\r\n\r\n return Object.keys(errors).length === 0;\r\n }\r\n\r\n const handlePartnerChange = (event) => {\r\n const { name, value } = event.target;\r\n setPartner({ ...partner, [name]: name === \"parentPartnerId\" ? parseInt(value, 10) : value });\r\n }\r\n\r\n const handleParentPartnerSelectChange = (event) => {\r\n setPartner({ ...partner, parentPartnerId: event.value, parentPartnerName: event.label });\r\n }\r\n\r\n const handlePartnerTwoFactorChange = (event) => {\r\n\r\n let selectedMethods = event.map(e => ({ twoFactorMethodId: e.value, name: e.label }));\r\n let removedTwoFactorMethods = partner.twoFactorMethods.filter(ptfm => !selectedMethods.some(sm => sm.twoFactorMethodId == ptfm.twoFactorMethodId));\r\n let usersWithRemovedMethod = partnerUsers.filter(user => removedTwoFactorMethods.some(m => m.twoFactorMethodId == user.twoFactorMethodId));\r\n\r\n //prevent removal of two factor method if users currently using this login method\r\n if (usersWithRemovedMethod.length > 0) {\r\n toast.error(\"The two factor method '\" + usersWithRemovedMethod[0].twoFactorMethodName + \"' could not be removed because it is linked to \" + usersWithRemovedMethod.length + \" user\" + (usersWithRemovedMethod.length > 1 ? \"s\" : \"\") + \".\", {\r\n autoClose: false\r\n });\r\n\r\n return;\r\n }\r\n\r\n setPartner({ ...partner, twoFactorMethods: selectedMethods });\r\n }\r\n\r\n const handleJiraOrganizationChange = (event) => {\r\n if (event.length > 0) { \r\n let selectedOrganizations = event.map(e => jiraOrganizations.find(org => org.id === e.value));\r\n if(selectedOrganizations[selectedOrganizations.length - 1].id == \"0\"){\r\n selectedOrganizations = [{ id: \"0\", name: \"No Organization\" }];\r\n setNewJiraOrganizations(selectedOrganizations);\r\n new bootstrap.Modal(document.getElementById('jira-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }else if(selectedOrganizations[selectedOrganizations.length - 1].id == \"-1\"){\r\n selectedOrganizations = [{ id: \"-1\", name: \"--Managed by Jira Admins--\" }];\r\n setNewJiraOrganizations(selectedOrganizations);\r\n new bootstrap.Modal(document.getElementById('jira-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }else {\r\n selectedOrganizations = selectedOrganizations.filter(org => org.id != \"0\" && org.id != \"-1\");\r\n setNewJiraOrganizations(selectedOrganizations);\r\n new bootstrap.Modal(document.getElementById('jira-modal'), { backdrop: 'static', keyboard: false }).show();\r\n } \r\n\r\n } else {\r\n setNewJiraOrganizations([{ id: \"0\", name: \"No Organization\" }]);\r\n new bootstrap.Modal(document.getElementById('jira-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n }\r\n\r\n const handleAvailableJiraOrganizationChange = (event) => {\r\n let selectedOrganizations = event.map(e => jiraOrganizations.find(org => org.id === e.value));\r\n setPartner({ ...partner, availableJiraOrganizations: selectedOrganizations });\r\n }\r\n\r\n const handleJiraGroupsChange = (event) => {\r\n let selectedGroups = event.map(e => jiraGroups.find(g => g.groupId === e.value));\r\n setPartner({ ...partner, jiraGroups: selectedGroups });\r\n }\r\n\r\n const handlePortalsChange = (event) => {\r\n let selectedPortals = event.map(e => portals.find(p => p.portalId === e.value));\r\n selectedPortals.forEach((value, index) => {\r\n value.sort = index + 1\r\n });\r\n setPartner({ ...partner, mediaShuttlePortals: selectedPortals });\r\n }\r\n\r\n function arrayMove(array, from, to) {\r\n const slicedArray = array.slice();\r\n slicedArray.splice(\r\n to < 0 ? array.length + to : to,\r\n 0,\r\n slicedArray.splice(from, 1)[0]\r\n );\r\n return slicedArray;\r\n }\r\n\r\n const SortableMultiValue = SortableElement(\r\n (props) => {\r\n const onMouseDown = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n const innerProps = { ...props.innerProps, onMouseDown };\r\n return ;\r\n }\r\n );\r\n\r\n const SortableMultiValueLabel = SortableHandle(\r\n (props) => \r\n );\r\n\r\n const SortableSelect = SortableContainer(Select);\r\n\r\n const onPortalsSortEnd = ({ oldIndex, newIndex }) => {\r\n const sortedPortals = arrayMove([...partner.mediaShuttlePortals], oldIndex, newIndex);\r\n sortedPortals.forEach((value, index) => {\r\n value.sort = index + 1\r\n });\r\n setPartner({ ...partner, mediaShuttlePortals: sortedPortals })\r\n };\r\n\r\n const handleJiraOrganizationConfirmed = (event) => {\r\n event.preventDefault();\r\n //add any organizations that arent already in available jira organizations list\r\n var availableOrganizations = partner.availableJiraOrganizations;\r\n newJiraOrganizations.forEach(org => { \r\n if(!availableOrganizations.find( aorg => aorg.id == org.id))\r\n {\r\n availableOrganizations.push(org)\r\n } \r\n });\r\n\r\n const updatedProperties = {\r\n defaultJiraOrganizations: newJiraOrganizations,//add the new jiraorganizations\r\n availableJiraOrganizations: availableOrganizations\r\n }\r\n\r\n setPartner({ ...partner, ...updatedProperties } );\r\n\r\n bootstrap.Modal.getInstance(document.getElementById('jira-modal')).hide();\r\n }\r\n\r\n const handleExternalLinkChange = (event) => {\r\n let { name, value } = event.target;\r\n let newLinks = JSON.parse(JSON.stringify(partner.externalLinks));\r\n if (name.includes('url')) {\r\n name = name.replace('url', '')\r\n newLinks[name].url = value;\r\n } else {\r\n name = name.replace('label', '')\r\n newLinks[name].label = value;\r\n }\r\n setPartner({ ...partner, externalLinks: newLinks });\r\n }\r\n\r\n const handleGlobalToggle = (event) => {\r\n let { name } = event.currentTarget;\r\n let index = name.replace(\"check-box\", \"\")\r\n let externalLinks = JSON.parse(JSON.stringify(partner.externalLinks));\r\n externalLinks[index].global = !externalLinks[index].global\r\n setPartner({ ...partner, externalLinks });\r\n }\r\n\r\n const handleAddGlobalLink = (event) => {\r\n let globalLink = globalLinks.find(globalLink => globalLink.externalLinkId === event.value)\r\n let externalLinks = [...partner.externalLinks]\r\n externalLinks.unshift(globalLink);\r\n let availableGlobalLinks = [...partner.availableGlobalLinks];\r\n let index = availableGlobalLinks.indexOf(globalLink);\r\n availableGlobalLinks.splice(index, 1);\r\n setPartner({ ...partner, externalLinks, availableGlobalLinks });\r\n }\r\n\r\n const handleAddLink = () => {\r\n let externalLinks = [...partner.externalLinks]\r\n externalLinks.unshift({ externalLinkId: 0, url: \"\", label: \"\", global: false });\r\n setPartner({ ...partner, externalLinks });\r\n }\r\n\r\n const handleRemoveLink = (event) => {\r\n let { name } = event.currentTarget;\r\n let externalLinks = [...partner.externalLinks];\r\n let availableGlobalLinks = [...partner.availableGlobalLinks];\r\n let index = name.replace('remove-link', '');\r\n if (globalLinks.some(gl => gl.externalLinkId === externalLinks[index].externalLinkId)) {\r\n availableGlobalLinks.push(externalLinks[index]);\r\n availableGlobalLinks.sort(sortGlobalLinks);\r\n }\r\n externalLinks.splice(index, 1)\r\n setPartner({ ...partner, externalLinks, availableGlobalLinks });\r\n }\r\n\r\n const handleRemoveService = (service) => {\r\n let integrationServices = [...partner.integrationServices];\r\n let availableServices = [...partner.availableServices];\r\n let externalLinks = [...partner.externalLinks];\r\n let index = integrationServices.indexOf(service);\r\n\r\n //check if users assigned to service being removed have the removed service. If so then dont allow the removal of service\r\n let usersWithService = partnerUsers.filter(user => user.integrationServices.some(s => s.name == service.name));\r\n\r\n if (usersWithService.length > 0) {\r\n toast.error(\"The service '\" + service.name + \"' could not be removed because it is linked to \" + usersWithService.length + \" user\" + (usersWithService.length > 1 ? \"s\" : \"\") + \".\", {\r\n autoClose: false, toastId: service.serviceId\r\n });\r\n\r\n return;\r\n }\r\n\r\n integrationServices[index].isDeleted = true;\r\n availableServices.push(service);\r\n setPartner({\r\n ...partner,\r\n integrationServices,\r\n availableServices,\r\n externalLinks\r\n });\r\n setActiveTab(\"Info\");\r\n\r\n }\r\n\r\n const handleAddService = (service) => {\r\n let integrationServices = [...partner.integrationServices];\r\n if (integrationServices.some(is => is.isDeleted && is.serviceId == service.serviceId)) {\r\n let index = integrationServices.indexOf(service);\r\n integrationServices[index].isDeleted = false;\r\n } else {\r\n integrationServices.push(service);\r\n }\r\n let availableServices = [...partner.availableServices];\r\n let index = availableServices.indexOf(service);\r\n availableServices.splice(index, 1);\r\n setPartner({\r\n ...partner,\r\n integrationServices,\r\n availableServices\r\n });\r\n setActiveTab(service.name);\r\n }\r\n\r\n const handleBillingPocChange = (event) => {\r\n let selectedUsers = event.map(e => ({\r\n userId: e.value,\r\n email: e.label\r\n }));\r\n setNewBillingPocList(selectedUsers);\r\n };\r\n\r\n const handleSalesPocChange = (event) => {\r\n let selectedUsers = event.map(e => ({\r\n userId: e.value,\r\n email: e.label\r\n }));\r\n setNewSalesPocList(selectedUsers);\r\n };\r\n\r\n const handleOperationalPocChange = (event) => {\r\n let selectedUsers = event.map(e => ({\r\n userId: e.value,\r\n email: e.label\r\n }));\r\n setNewOperationalPocList(selectedUsers);\r\n };\r\n\r\n const handleAuthPocChange = (event) => {\r\n let selectedUsers = event.map(e => ({\r\n userId: e.value,\r\n email: e.label\r\n }));\r\n setNewAuthPocList(selectedUsers);\r\n };\r\n\r\n const handleDefaultSubscriptionsChange = (event) => {\r\n let selectedSubscriptions = event.map(e => ({\r\n subscriptionId: e.value,\r\n partnerId: selectedPartner.partnerId,\r\n name: e.label\r\n }));\r\n setPartner({\r\n ...partner,\r\n defaultSubscriptions: selectedSubscriptions\r\n });\r\n }\r\n\r\n const handleTAMsChange = (event) => {\r\n let selectedTAMs = event.map(e => users.find(user => user.userId === e.value));\r\n setPartner({\r\n ...partner,\r\n tams: selectedTAMs\r\n });\r\n }\r\n\r\n const handleSAMsChange = (event) => {\r\n let selectedSAMs = event.map(e => users.find(user => user.userId === e.value));\r\n setPartner({\r\n ...partner,\r\n sams: selectedSAMs\r\n });\r\n }\r\n\r\n const hasEditPointOfContactsPermission = userPermissions.some(up => up.name === \"EditPointOfContacts\");\r\n const hasEditPartnersPermission = userPermissions.some(up => up.name === \"EditPartners\");\r\n const hasEditPartnerTAMsSAMsPermission = userPermissions.some(up => up.name === \"EditPartnerTAMsSAMs\");\r\n const hasEditJiraUserGroupPermission = userPermissions.some(up => up.name === \"EditJiraUserGroup\");\r\n const hasEditJiraUserOrganizationPermission = userPermissions.some(up => up.name === \"EditJiraUserOrganization\");\r\n\r\n const oasisUsers = (users.length > 0 && allPartners.length > 0 && hasEditPartnerTAMsSAMsPermission) ? users.filter(user => user.partnerId === allPartners.find(partner => partner.name === \"Oasis\").partnerId) : [];\r\n\r\n const integrationServices = partner.integrationServices ? partner.integrationServices.filter(service => service.name != \"Support\") : [];\r\n\r\n const findName = (s) => {\r\n return availableSubscriptions.find(as => s.subscriptionId == as.groupId).name;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{ partner.partnerId ? \"Update Partner (\" + selectedPartner.name + \")\" : \"New Partner\" }

\r\n \r\n \r\n \r\n
\r\n
\r\n { (isSaving || isLoading) ?\r\n
\r\n : \"\"\r\n }\r\n
\r\n
\r\n \r\n \r\n setActiveTab(\"Info\") }\r\n >\r\n Info\r\n \r\n \r\n \r\n setActiveTab(\"Support\") }\r\n >\r\n Support\r\n \r\n \r\n { integrationServices.map(service => {\r\n if (!service.isDeleted) {\r\n return (\r\n \r\n setActiveTab(service.name) }\r\n >\r\n { service.name }{ hasEditPartnersPermission ? handleRemoveService(service) }> : \"\" }\r\n \r\n \r\n )\r\n }\r\n }) }\r\n { partner.availableServices.length > 0 ?\r\n
  • \r\n
    \r\n \r\n \r\n \r\n
    \r\n { partner.availableServices.map(service => {\r\n return (\r\n handleAddService(service) }\r\n >\r\n { service.name }\r\n \r\n )\r\n }) }\r\n
    \r\n
    \r\n
  • \r\n : \"\"\r\n }\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n p.partnerId != partner.partnerId).map(partner => ({\r\n value: partner.partnerId,\r\n label: partner.name\r\n })) }\r\n styles={ theme == 'light' ? styles.DropdownSelectStyleLight : styles.DropdownSelectStyleDark }\r\n isDisabled={ !hasEditPartnersPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n { hasEditPartnerTAMsSAMsPermission ?\r\n
    \r\n
    \r\n \r\n ({\r\n value: tam.userId,\r\n label: tam.firstName + \" \" + tam.lastName\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ oasisUsers.map(user => ({\r\n value: user.userId,\r\n label: user.firstName + \" \" + user.lastName\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: sam.userId,\r\n label: sam.firstName + \" \" + sam.lastName\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ oasisUsers.map(user => ({\r\n value: user.userId,\r\n label: user.firstName + \" \" + user.lastName\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n : \"\" }\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n ({\r\n value: subscription.subscriptionId,\r\n label: findName(subscription)\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ availableSubscriptions.map(subscription => ({\r\n value: subscription.groupId,\r\n label: subscription.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ partnerUsers.map(user => ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditPointOfContactsPermission }\r\n />\r\n
    \r\n
    \r\n \r\n ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ partnerUsers.map(user => ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditPointOfContactsPermission }\r\n />\r\n
    \r\n
    \r\n \r\n ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ partnerUsers.map(user => ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditPointOfContactsPermission }\r\n />\r\n
    \r\n
    \r\n \r\n ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ partnerUsers.map(user => ({\r\n value: user.userId,\r\n label: user.email\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditPointOfContactsPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: org.id,\r\n label: org.name\r\n })) }\r\n onChange={ handleAvailableJiraOrganizationChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ jiraOrganizations.map(organization => ({\r\n value: organization.id,\r\n label: organization.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditJiraUserOrganizationPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: org.id,\r\n label: org.name\r\n })) }\r\n onChange={ handleJiraOrganizationChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ jiraOrganizations.map(organization => ({\r\n value: organization.id,\r\n label: organization.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditJiraUserOrganizationPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n onChange={ handleJiraGroupsChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ jiraGroups.map(group => ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditJiraUserGroupPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: method.twoFactorMethodId,\r\n label: method.name\r\n })) }\r\n options={ authServices.map(service => ({\r\n value: service.twoFactorMethodId,\r\n label: service.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n { errors.noExternalLinks ?\r\n
    \r\n

    { errors.noExternalLinks }

    \r\n
    \r\n : \"\"\r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n ({\r\n value: globalLink.externalLinkId,\r\n label: globalLink.label\r\n }))\r\n : []\r\n }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n { partner.externalLinks.length > 0 ?\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n : \"\"\r\n }\r\n
    \r\n { partner.externalLinks.map(link => {\r\n let index = partner.externalLinks.indexOf(link);\r\n let urlName = \"url\" + index;\r\n let labelName = \"label\" + index;\r\n let checkBoxName = \"check-box\" + index;\r\n let removeLinkName = \"remove-link\" + index;\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n })\r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {/*{ This is a sortable select and cannot have the menu stay open after an item is selected react-sortable-hoc closeMenuOnSelect deprecated }*/ }\r\n { node.node.style.zIndex = 9999 } }\r\n onChange={ handlePortalsChange }\r\n value={ partner.mediaShuttlePortals.map(portal => ({\r\n value: portal.portalId,\r\n label: portal.name\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ portals.map(portal => ({\r\n value: portal.portalId,\r\n label: portal.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n components={ { MultiValue: SortableMultiValue, MultiValueLabel: SortableMultiValueLabel } }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n * Required\r\n

    \r\n
    \r\n
    \r\n
    \r\n { isSaving ?\r\n
    Saving...
    \r\n : isLoading ?
    Loading...
    \r\n : \r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Partner: \" + (selectedPartner.name ? selectedPartner.name : \"this new partner\") }\r\n onSubmit={ handleJiraOrganizationConfirmed }\r\n theme={ theme }\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default PartnerEdit;","import React, { useEffect, useState, useCallback } from 'react'\r\nimport { CNav, CNavItem, CNavLink, CTabContent, CTabPane } from '@coreui/bootstrap-react'\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as partnersActions from '../../redux/actions/partnersActions';\r\nimport * as partnersService from '../../services/partnersService';\r\nimport * as dateUtils from '../../utils/dateUtils';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction PartnerDetails({ theme }) {\r\n\r\n const [activeTab, setActiveTab] = useState(\"Info\");\r\n const [detailsModal, setDetailsModal] = useState();\r\n const [partner, setPartner] = useState(useSelector(state => state.page.partners.selectedPartner));\r\n\r\n const selectedPartner = useSelector(state => state.page.partners.selectedPartner);\r\n const availableSubscriptions = useSelector(state => state.groups.availableSubscriptions);\r\n const users = useSelector(state => state.users);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(pageActions.clearSelectedPartner());\r\n };\r\n }, [])\r\n\r\n useEffect(() => {\r\n setPartner(selectedPartner);\r\n var detailsModal = document.getElementById('details-modal');\r\n detailsModal.addEventListener('hidden.bs.modal', () => {\r\n if (partnersService.getPartnerAbortController[selectedPartner.partnerId]) {\r\n partnersService.getPartnerAbortController[selectedPartner.partnerId].abort();\r\n }\r\n dispatch(pageActions.clearSelectedPartner());\r\n setActiveTab(\"Info\");\r\n });\r\n setDetailsModal(bootstrap.Modal.getInstance(document.getElementById('details-modal')));\r\n }, [selectedPartner])\r\n\r\n const refreshPartner = (partnerId) => {\r\n if (detailsModal && detailsModal._isShown) {\r\n partnersService.getPartner(partnerId)\r\n .then(returnedPartner => {\r\n dispatch(partnersActions.loadPartnerSuccess(returnedPartner));\r\n setPartner(returnedPartner);\r\n dispatch(pageActions.updateSelectedPartner(returnedPartner));\r\n })\r\n .catch(error => {\r\n if (error.message != \"canceled\") {\r\n toast.error(\"Loading Selected Partner Failed:\" + error, { autoClose: false });\r\n }\r\n });\r\n }\r\n }\r\n\r\n const checkUpdateRequired = useCallback(async (partner) => {\r\n if (detailsModal && detailsModal._isShown) {\r\n if (await partnersService.updateRequired(partner)) {\r\n refreshPartner(partner.partnerId);\r\n }\r\n }\r\n }, [detailsModal]);\r\n\r\n useEffect(() => {\r\n const updateRequiredIntervalId = setInterval(() => checkUpdateRequired(partner), 1000);\r\n return () => {\r\n clearInterval(updateRequiredIntervalId);\r\n };\r\n }, [checkUpdateRequired, partner])\r\n\r\n useEffect(() => {\r\n if (selectedPartner.partnerId) {\r\n refreshPartner(selectedPartner.partnerId);\r\n }\r\n }, [selectedPartner.partnerId, detailsModal])\r\n\r\n const ableToEditPartnerServices = userPermissions.some(up => up.name === \"EditPartnerServices\");\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    { partner.name }

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n { partner.partnerId ?\r\n
    \r\n
    \r\n \r\n \r\n setActiveTab(\"Info\") }\r\n >\r\n Info\r\n \r\n \r\n { partner.integrationServices.map(service => {\r\n return (\r\n \r\n setActiveTab(service.name) }\r\n >\r\n { service.name }\r\n \r\n \r\n )\r\n }) }\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n Name :\r\n
    \r\n
    \r\n { partner.name }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Active Directory Identifier :\r\n
    \r\n
    \r\n { partner.partnerADIdentifier }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Parent Partner :\r\n
    \r\n
    \r\n { partner.parentPartnerName }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Media Shuttle Url :\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n Created By :\r\n
    \r\n
    \r\n { partner.createdBy }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Created Date :\r\n
    \r\n
    \r\n { dateUtils.getLocalDate(partner.createdDate) } { dateUtils.getLocalTime(partner.createdDate, { hour: '2-digit', minute: '2-digit' }) }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Last Modified By :\r\n
    \r\n
    \r\n { partner.lastModifiedBy }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Last Modified Date :\r\n
    \r\n
    \r\n { dateUtils.getLocalDate(partner.lastModifiedDate) } { dateUtils.getLocalTime(partner.lastModifiedDate, { hour: '2-digit', minute: '2-digit' }) }\r\n
    \r\n
    \r\n
    \r\n
    \r\n TAMs :\r\n
    \r\n
    \r\n { partner.tams.map(tam => tam.firstName + \" \" + tam.lastName).join(';') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n SAMs :\r\n
    \r\n
    \r\n { partner.sams.map(sam => sam.firstName + \" \" + sam.lastName).join(';') }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n Default New User Subscriptions :\r\n
    \r\n
    \r\n { partner.defaultSubscriptions.map(sub => {\r\n return availableSubscriptions.find(as => sub.subscriptionId == as.groupId).name\r\n }).join(', ') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Points of Contact\r\n
    \r\n
    \r\n
    \r\n
    \r\n Billing & Accounting :\r\n
    \r\n
    \r\n { users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Accounting\")).map(user => {\r\n return user.email\r\n }).join(', ') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Sales :\r\n
    \r\n
    \r\n { users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Sales\")).map(user => {\r\n return user.email\r\n }).join(', ') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Operational :\r\n
    \r\n
    \r\n { users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Operations\")).map(user => {\r\n return user.email\r\n }).join(', ') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Authorization & Security :\r\n
    \r\n
    \r\n { users.filter(user => user.partnerId === selectedPartner.partnerId && user.pocs.some(poc => poc.name === \"Security\")).map(user => {\r\n return user.email\r\n }).join(', ') }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n Jira Organizations :\r\n
    \r\n
    \r\n { partner.defaultJiraOrganizations.map(org => {\r\n return org.name\r\n }).join(', ') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Jira Groups :\r\n
    \r\n
    \r\n { partner.jiraGroups.map(group => {\r\n return group.name\r\n }).join(';') }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n Two Factor Methods :\r\n
    \r\n
    \r\n { partner.twoFactorMethods.map(method => {\r\n return method.name\r\n }).join(';') }\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n { partner.externalLinks.map(link => {\r\n return (\r\n
    \r\n
    \r\n
    { link.label }
    \r\n
    \r\n
    \r\n
    { link.url }
    \r\n
    \r\n
    \r\n )\r\n }) }\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n Portals :\r\n
    \r\n
    \r\n { partner.mediaShuttlePortals.map(portal => {\r\n return portal.name\r\n }).join(';') }\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default PartnerDetails;","import * as types from \"./types\";\r\n\r\nexport function updateDataLimitSetting(setting, recordType) {\r\n return function (dispatch) {\r\n return dispatch({ type: types.UPDATE_DATALIMIT_SETTING, setting, recordType });\r\n };\r\n}\r\n\r\nexport function updateSortBySetting(setting, recordType) {\r\n return function (dispatch) {\r\n return dispatch({ type: types.UPDATE_SORTBY_SETTING, setting, recordType });\r\n };\r\n}\r\n\r\nexport function updateFilterSetting(setting, recordType) {\r\n return function (dispatch) {\r\n return dispatch({ type: types.UPDATE_FILTER_SETTING, setting, recordType });\r\n };\r\n}","import React from 'react';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport { CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction PartnerRow({ data, theme }) {\r\n\r\n const users = useSelector(state => state.users);\r\n const partner = useSelector(state => state.partners.find(partner => partner.partnerId == data.partnerId));\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const dispatch = useDispatch();\r\n\r\n const handleEditPartner = () => {\r\n dispatch(pageActions.updateSelectedPartner(data));\r\n new bootstrap.Modal(document.getElementById('edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDisplayPartnerDetails = () => {\r\n dispatch(pageActions.updateSelectedPartner(data));\r\n new bootstrap.Modal(document.getElementById('details-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDisablePartner = () => {\r\n data.hasEnabledUsers = users.filter(user => !user.disabled && user.partnerId === data.partnerId).length > 0\r\n dispatch(pageActions.updateSelectedPartner(data));\r\n new bootstrap.Modal(document.getElementById('disable-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleEnablePartner = () => {\r\n dispatch(pageActions.updateSelectedPartner(data));\r\n new bootstrap.Modal(document.getElementById('enable-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n return (\r\n <>\r\n up.name == \"EditPartners\" || up.name == \"EditPartnerServices\") && partner.name != \"Oasis\" ? handleEditPartner : \"\" }>\r\n { partner.name }\r\n { partner.parentPartnerName }\r\n { partner.partnerADIdentifier }\r\n { partner.tams.map(tam => tam.firstName + \" \" + tam.lastName).join(';') }\r\n { partner.sams.map(sam => sam.firstName + \" \" + sam.lastName).join(';') }\r\n \r\n \r\n
    \r\n { userPermissions.some(up => up.name == \"EditPartners\" || up.name == \"EditPartnerServices\") && partner.name != \"Oasis\" ?\r\n Edit\r\n : \"\"\r\n }\r\n Details\r\n {\r\n partner.disabled ?\r\n userPermissions.some(up => up.name == \"EnablePartners\") ?\r\n Enable\r\n : \"\"\r\n : userPermissions.some(up => up.name == \"DisablePartners\") && partner.name != \"Oasis\" ?\r\n Disable\r\n : \"\"\r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n};\r\n\r\nexport default PartnerRow;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function sendEmail(userId, emailType) {\r\n const response = await axios.get(config.IDENTITY_URL + 'api/user/sendemail?userId=' + userId + '&emailType=' + emailType, { withCredentials: true });\r\n return response.data;\r\n}","import React from 'react';\r\nimport * as idpUserService from '../../services/idpUserService';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as dateUtils from '../../utils/dateUtils';\r\nimport { CTableDataCell, CTableRow } from '@coreui/bootstrap-react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction UserRow({ data, theme }) {\r\n\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const userProfile = useSelector(state => state.auth.user.profile);\r\n const canAssignRoles = useSelector(state => state.auth.canAssignRoles);\r\n const selectedUsers = useSelector(state => state.page.users.selectedUsers);\r\n const users = useSelector(state => state.users);\r\n const dispatch = useDispatch();\r\n\r\n const handleEditUser = () => {\r\n dispatch(pageActions.updateSelectedUser(data));\r\n new bootstrap.Modal(document.getElementById('edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDisplayUserDetails = () => {\r\n dispatch(pageActions.updateSelectedUser(data));\r\n new bootstrap.Modal(document.getElementById('details-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDisableUser = () => {\r\n dispatch(pageActions.updateSelectedUser(data));\r\n new bootstrap.Modal(document.getElementById('disable-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleEnableUser = () => {\r\n dispatch(pageActions.updateSelectedUser(data));\r\n new bootstrap.Modal(document.getElementById('enable-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleReset2faUser = () => {\r\n dispatch(pageActions.updateSelectedUser(data));\r\n new bootstrap.Modal(document.getElementById('reset-2fa-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleResetPasswordUser = () => {\r\n dispatch(pageActions.updateSelectedUser(data));\r\n new bootstrap.Modal(document.getElementById('reset-password-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleInviteUser = () => {\r\n idpUserService.sendEmail(data.userId, 'Invite').then(empty => {\r\n toast.success(data.email + \" has been invited\");\r\n }).catch(error => {\r\n toast.error(\"User Invite Failed: \" + error, { autoClose: false })\r\n })\r\n }\r\n\r\n const handleSelectUser = (event) => {\r\n let selectingUsers = [];\r\n let user = users.find(user => user.userId === event.target.value);\r\n if (event.target.checked === true) {\r\n selectingUsers = [...selectedUsers, user];\r\n } else {\r\n selectingUsers = selectedUsers.filter(user => user.userId != event.target.value);\r\n document.getElementById('users-check-all').checked = false;\r\n }\r\n dispatch(pageActions.updateSelectedUsers(selectingUsers));\r\n }\r\n\r\n const canEditUser = (userPermissions.some(up => up.name == \"EditUsers\") && (!data.roles.length > 0 || data.roles.some(dr => canAssignRoles.some(car => car.roleId == dr.roleId))))\r\n || (userPermissions.some(up => up.name == \"EditSelf\") && data.username == userProfile.email);\r\n\r\n const canEnableUser = userPermissions.some(up => up.name == \"EnableUsers\") && (!data.roles.length > 0 || data.roles.some(dr => canAssignRoles.some(car => car.roleId == dr.roleId)));\r\n const canDisableUser = userPermissions.some(up => up.name == \"DisableUsers\") && (!data.roles.length > 0 || data.roles.some(dr => canAssignRoles.some(car => car.roleId == dr.roleId)));\r\n const canResetPassword = userPermissions.some(up => up.name == \"ResetPasswordUsers\") && (!data.roles.length > 0 || data.roles.some(dr => canAssignRoles.some(car => car.roleId == dr.roleId)));\r\n const canReset2FA = userPermissions.some(up => up.name == \"Reset2FAUsers\") && (!data.roles.length > 0 || data.roles.some(dr => canAssignRoles.some(car => car.roleId == dr.roleId)));\r\n const canInviteUser = userPermissions.some(up => up.name == \"InviteUsers\") && (!data.roles.length > 0 || data.roles.some(dr => canAssignRoles.some(car => car.roleId == dr.roleId)));\r\n\r\n return (\r\n \r\n \r\n { userPermissions.some(permission => permission.name === \"EditUsers\") ?\r\n selectedUser.userId === data.userId) ? true : false } />\r\n : \"\"\r\n }\r\n \r\n { data.username }\r\n { data.firstName }\r\n { data.lastName }\r\n { data.partnerName }\r\n { dateUtils.getLocalDateTime(data.lastLoginDate) }\r\n \r\n \r\n
    \r\n { canEditUser ?\r\n Edit\r\n : \"\"\r\n }\r\n Details\r\n {\r\n (data.integrationServices.filter(service => service.name === 'Login').length > 0 && !data.isPasswordSet) &&\r\n canInviteUser ?\r\n Invite\r\n : \"\"\r\n }\r\n {\r\n (data.integrationServices.filter(service => service.name === 'Login').length > 0 && data.isPasswordSet) &&\r\n canResetPassword ?\r\n Reset Password\r\n : \"\"\r\n }\r\n {\r\n (data.twoFactorEnabled && canReset2FA) ?\r\n Reset 2FA\r\n : ''\r\n }\r\n {\r\n data.disabled ?\r\n canEnableUser ?\r\n Enable\r\n : \"\"\r\n : canDisableUser ?\r\n Disable\r\n : \"\"\r\n }\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default UserRow;","import React from 'react';\r\nimport { CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction VirtualMachineRow({ data, theme }) {\r\n\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handlePowerButtonClick = () => {\r\n if (data.statusString == \"Stopped\") {\r\n dispatch(pageActions.updateSelectedMachine(data));\r\n new bootstrap.Modal(document.getElementById('start-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n if (data.statusString == \"Running\") {\r\n dispatch(pageActions.updateSelectedMachine(data));\r\n document.getElementById('stop-description').value = '';\r\n new bootstrap.Modal(document.getElementById('stop-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n }\r\n\r\n const handleRestartButtonClick = () => {\r\n dispatch(pageActions.updateSelectedMachine(data));\r\n document.getElementById('restart-description').value = '';\r\n new bootstrap.Modal(document.getElementById('restart-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const powerButtonClass = data.statusString == \"Running\" ? \"power-btn-on\" : \"power-btn-off\";\r\n const powerTip = () => {\r\n if (data.statusString == \"Running\") {\r\n return \"Power Off\";\r\n }\r\n\r\n if (data.statusString == \"Stopped\") {\r\n return \"Power On\";\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n { data.name }\r\n { data.partnerName }\r\n { data.maxMemory } MB\r\n { data.memoryAvailablePercentage }%\r\n { data.cpuCount }\r\n \r\n { data.statusString == \"Starting\" || data.statusString == \"Restarting\" || data.statusString == \"Stopping\" ?\r\n { data.statusString }\r\n : data.statusString }\r\n \r\n \r\n { userPermissions.some(up => up.name == \"ManageVirtualMachines\") && data.virtualMachineRole.isManageable ?\r\n
    \r\n { data.statusString == \"Running\" || data.statusString == \"Stopped\" ?\r\n \r\n : \"\" }\r\n { data.statusString == \"Running\" ?\r\n \r\n : \"\" }\r\n
    \r\n : \"\" }\r\n\r\n
    \r\n
    \r\n \r\n )\r\n};\r\n\r\nexport default VirtualMachineRow;","import React from 'react';\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport { CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction RoleRow({ data, theme }) {\r\n\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const dispatch = useDispatch();\r\n\r\n const handleEditRole = () => {\r\n dispatch(pageActions.updateSelectedRole(data));\r\n new bootstrap.Modal(document.getElementById('edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDeleteRole = () => {\r\n dispatch(pageActions.updateSelectedRole(data));\r\n new bootstrap.Modal(document.getElementById('delete-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n return (\r\n <>\r\n up.name == \"EditRoles\") ? handleEditRole : \"\" }>\r\n { data.name }\r\n { data.partnerName }\r\n \r\n { !data.isSystemDefined ?\r\n
    \r\n { userPermissions.some(up => up.name == \"EditRoles\") ?\r\n \r\n : \"\"\r\n }\r\n { userPermissions.some(up => up.name == \"DeleteRoles\") ?\r\n \r\n : \"\"\r\n }\r\n
    \r\n : \"\"\r\n }\r\n
    \r\n
    \r\n \r\n )\r\n};\r\n\r\nexport default RoleRow;","import * as pageActions from \"../actions/pageActions\";\r\nimport * as types from \"./types\";\r\nimport * as auditsService from \"../../services/auditsService\";\r\n\r\nexport function loadAuditsSuccess(audits) {\r\n return { type: types.LOAD_AUDITS_SUCCESS, audits }\r\n}\r\n\r\nexport function loadAuditDetails(audit) {\r\n return function (dispatch) {\r\n return auditsService.getAuditDetails(audit.userActionAuditLogEntryId)\r\n .then(auditDetails => {\r\n dispatch(pageActions.updateSelectedAuditDetails(auditDetails));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadAudits() {\r\n return function (dispatch) {\r\n return auditsService.getAudits()\r\n .then(audits => {\r\n dispatch(loadAuditsSuccess(audits));\r\n dispatch(pageActions.loadedPage(\"audits\"));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import React, { useEffect } from 'react';\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport * as auditsActions from '../../../redux/actions/auditActions';\r\nimport * as dateUtils from '../../../utils/dateUtils';\r\nimport { CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport { useState } from 'react';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction AuditRow({ data }) {\r\n const dispatch = useDispatch();\r\n\r\n const handleDisplayAuditDetails = () => {\r\n dispatch(auditsActions.loadAuditDetails(data)).then(() => {\r\n new bootstrap.Modal(document.getElementById('details-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }).catch(error => {\r\n toast.error(\"Loading Audit Details Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n \r\n { data.userEmail }\r\n { data.partnerName }\r\n { data.action }\r\n { data.actedUpon }\r\n { data.name }\r\n { dateUtils.getLocalDateTime(data.createdDate) }\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n};\r\n\r\nexport default AuditRow;","import React from 'react';\r\nimport { CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport * as dateUtils from '../../../utils/dateUtils';\r\n\r\nfunction UserStatusRow({ data }) {\r\n return (\r\n <>\r\n \r\n { data.emailAddress }\r\n { data.firstName }\r\n { data.lastName }\r\n { data.partner }\r\n { dateUtils.getLocalDateTime(data.login) }\r\n { dateUtils.getLocalDateTime(data.lastAction) }\r\n \r\n \r\n )\r\n};\r\n\r\nexport default UserStatusRow;","import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Select from 'react-select';\r\nimport { CSVLink } from 'react-csv';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { CTable, CTableBody, CTableHead, CTableHeaderCell, CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport { PaginatedListMenuStyleLight, PaginatedListMenuStyleDark } from './DropdownStyles';\r\nimport * as settingsActions from '../../redux/actions/settingsActions';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as dateUtils from '../../utils/dateUtils';\r\nimport PartnerRow from '../partners/PartnerRow';\r\nimport UserRow from '../users/UserRow';\r\nimport VirtualMachineRow from '../virtualMachines/VirtualMachineRow';\r\nimport RoleRow from '../administration/roles/RoleRow';\r\nimport AuditRow from '../administration/audits/AuditRow';\r\nimport UserStatusRow from '../administration/userStatus/UserStatusRow';\r\nimport { toast } from 'react-toastify';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction PaginatedList({ RecordType, theme }) {\r\n\r\n const [selectedEntitiesCount, setSelectedEntitiesCount] = useState(\"\");\r\n const [allUsersChecked, setAllUsersChecked] = useState(false);\r\n\r\n const data = useSelector(state => state[RecordType]);\r\n const dataLimit = useSelector(state => state.settings[RecordType].dataLimit);\r\n const sortBy = useSelector(state => state.settings[RecordType].sortBy);\r\n const filterSettings = useSelector(state => state.settings[RecordType].filters);\r\n const pageNumber = useSelector(state => state.page[RecordType].pageNumber);\r\n const dataHeaders = useSelector(state => state.page[RecordType].dataHeaders);\r\n const dataLabel = useSelector(state => state.page[RecordType].dataLabel);\r\n const searchTerm = useSelector(state => state.page[RecordType].searchTerm.toLowerCase());\r\n const showColumnFilters = useSelector(state => state.page[RecordType].filterByColumn);\r\n const textFilters = useSelector(state => state.page[RecordType].textFilters)\r\n const isLoading = useSelector(state => state.page[RecordType].isLoading);\r\n const selectedUsers = useSelector(state => state.page.users.selectedUsers);\r\n const auth = useSelector(state => state.auth);\r\n const dispatch = useDispatch();\r\n\r\n let RenderComponent = PartnerRow;\r\n switch (RecordType) {\r\n case \"partners\":\r\n RenderComponent = PartnerRow;\r\n break;\r\n case \"users\":\r\n RenderComponent = UserRow;\r\n break;\r\n case \"virtualMachines\":\r\n RenderComponent = VirtualMachineRow;\r\n break;\r\n case \"roles\":\r\n RenderComponent = RoleRow;\r\n break;\r\n case \"audits\":\r\n RenderComponent = AuditRow;\r\n break;\r\n case \"userStatuses\":\r\n RenderComponent = UserStatusRow;\r\n break;\r\n };\r\n\r\n const handleDataLimitChange = (event) => {\r\n dispatch(settingsActions.updateDataLimitSetting(event.value, RecordType));\r\n }\r\n\r\n const handleMassOperationChange = (operation) => {\r\n if (operation === 'EditSubscriptions') {\r\n new bootstrap.Modal(document.getElementById('mass-user-edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n }\r\n\r\n const handleSortByChange = (sortBy) => {\r\n dispatch(settingsActions.updateSortBySetting(sortBy, RecordType));\r\n }\r\n\r\n const goToNextPage = () => { dispatch(pageActions.updatePageNumber(RecordType, pageNumber + 1)); }\r\n\r\n const goToPreviousPage = () => { dispatch(pageActions.updatePageNumber(RecordType, pageNumber - 1)); }\r\n\r\n const goToFirstPage = () => { dispatch(pageActions.updatePageNumber(RecordType, 1)); }\r\n\r\n const getStartingIndex = () => { return (pageNumber * dataLimit) - dataLimit; }\r\n\r\n const getEndingIndex = () => { return getStartingIndex() + dataLimit }\r\n\r\n const getTotalRecords = () => { return getFilteredData().length; }\r\n\r\n const goToLastPage = () => { dispatch(pageActions.updatePageNumber(RecordType, Math.ceil(getFilteredData().length / dataLimit))); }\r\n\r\n const getPaginatedData = () => {\r\n const startIndex = getStartingIndex();\r\n const endIndex = getEndingIndex();\r\n return getSortedData().slice(startIndex, endIndex);\r\n };\r\n\r\n const getSortedData = () => {\r\n return getFilteredData().sort(sortData);\r\n };\r\n\r\n const handleDownloadCSV = () => {\r\n if (getSortedData().length <= 0) {\r\n toast.warn('No ' + dataLabel + ' to export');\r\n return false;\r\n }\r\n }\r\n\r\n const previousMonthDate = () => {\r\n let newCompareDate = new Date();\r\n newCompareDate.setMonth(newCompareDate.getMonth() - 1);\r\n return newCompareDate;\r\n }\r\n\r\n const filterServices = (originalData, filterSetting, serviceName) => {\r\n let newFilteredData = originalData;\r\n if (filterSetting.isActive) {\r\n newFilteredData = originalData.filter(entity => entity.integrationServices.some(service => service.name === serviceName && !service.isDeleted) === filterSetting.value);\r\n }\r\n return newFilteredData;\r\n }\r\n\r\n const filterPocs = (originalData, filterSetting, pocValue) => {\r\n let newFilteredData = originalData;\r\n if (filterSetting.isActive) {\r\n newFilteredData = originalData.filter(user => user.pocs.some(poc => poc.name === pocValue) === filterSetting.value);\r\n }\r\n return newFilteredData;\r\n }\r\n\r\n const filterSubscriptions = (originalData, filterSetting, subscriptionName) => {\r\n let newFilteredData = originalData;\r\n if (filterSetting.isActive && filterSetting.value) {\r\n newFilteredData = originalData.filter(user => user.subscriptions.some(subscription => subscription.name === subscriptionName));\r\n } else if (filterSetting.isActive && !filterSetting.value) {\r\n newFilteredData = originalData.filter(user => !user.subscriptions.some(subscription => subscription.name === subscriptionName));\r\n }\r\n return newFilteredData;\r\n }\r\n\r\n const getFilteredData = () => {\r\n let filteredData = getSearchedData();\r\n switch (RecordType) {\r\n case \"partners\":\r\n if (filterSettings.enabled.isActive) {\r\n filteredData = filteredData.filter(partner => !partner.disabled == filterSettings.enabled.value);\r\n }\r\n if (filterSettings.recentlyUpdated.isActive) {\r\n filteredData = filteredData.filter(partner => Date.parse(partner.lastModifiedDate) >= previousMonthDate() === filterSettings.recentlyUpdated.value);\r\n }\r\n filteredData = filterServices(filteredData, filterSettings.communications, 'Communications');\r\n filteredData = filterServices(filteredData, filterSettings.links, 'Links');\r\n filteredData = filterServices(filteredData, filterSettings.support, 'Support');\r\n filteredData = filterServices(filteredData, filterSettings.infrastructure, 'Infrastructure');\r\n if (filterSettings.twoFA.isActive) {\r\n filteredData = filteredData.filter(partner => partner.twoFactorMethods.some(method => method.name != 'None') === filterSettings.twoFA.value);\r\n }\r\n if (filterSettings.tams.isActive) {\r\n filteredData = filteredData.filter(partner => filterSettings.tams.value.some(filteredTam => partner.tams.some(tam => (tam.firstName + \" \" + tam.lastName) === filteredTam.value)));\r\n }\r\n if (filterSettings.sams.isActive) {\r\n filteredData = filteredData.filter(partner => filterSettings.sams.value.some(filteredSam => partner.sams.some(sam => (sam.firstName + \" \" + sam.lastName) === filteredSam.value)));\r\n }\r\n return filteredData;\r\n case \"users\":\r\n if (filterSettings.enabled.isActive) {\r\n filteredData = filteredData.filter(user => !user.disabled === filterSettings.enabled.value);\r\n }\r\n if (filterSettings.recentlyUpdated.isActive) {\r\n filteredData = filteredData.filter(user => Date.parse(user.lastModifiedDate) >= previousMonthDate() === filterSettings.recentlyUpdated.value);\r\n }\r\n if (filterSettings.twoFA.isActive && filterSettings.twoFA.value) {\r\n filteredData = filteredData.filter(user => user.twoFactorMethodName != \"\" &&\r\n user.integrationServices.some(service => service.name === 'Login'));\r\n } else if (filterSettings.twoFA.isActive && !filterSettings.twoFA.value) {\r\n filteredData = filteredData.filter(user => user.twoFactorMethodName === \"\" ||\r\n !user.integrationServices.some(service => service.name === 'Login'));\r\n }\r\n filteredData = filterServices(filteredData, filterSettings.internal, 'Login');\r\n filteredData = filterServices(filteredData, filterSettings.communications, 'Communications');\r\n filteredData = filterServices(filteredData, filterSettings.support, 'Support');\r\n filteredData = filterPocs(filteredData, filterSettings.auth, 'Security');\r\n filteredData = filterPocs(filteredData, filterSettings.billing, 'Accounting');\r\n filteredData = filterPocs(filteredData, filterSettings.operations, 'Operations');\r\n filteredData = filterPocs(filteredData, filterSettings.sales, 'Sales');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.emergencyNotifications, 'Emergency Notifications (outages, critical issues, etc)');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.insightsNewsletter, 'Insights Newsletter (Monthly publication)');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.oasisBlog, 'Oasis Blog (eDiscovery Unredacted)');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.maintenance, 'Maintenance/End of Month Notifications');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.ukMaintenance, 'UK Maintenance Communications');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.relativityOneEmergency, 'RelativityOne Emergency');\r\n filteredData = filterSubscriptions(filteredData, filterSettings.revealEmergency, 'Reveal Emergency');\r\n return filteredData;\r\n case \"virtualMachines\":\r\n return filteredData;\r\n case \"roles\":\r\n if (filterSettings.isSystemDefined.isActive) {\r\n filteredData = filteredData.filter(role => role.isSystemDefined == filterSettings.isSystemDefined.value);\r\n }\r\n return filteredData;\r\n case \"audits\":\r\n if (filterSettings.partners.isActive) {\r\n filteredData = filteredData.filter(audit => filterSettings.partners.value.some(partner => partner.value === audit.partnerName));\r\n }\r\n if (filterSettings.actions.isActive) {\r\n filteredData = filteredData.filter(audit => filterSettings.actions.value.some(action => action.value === audit.action));\r\n }\r\n if (filterSettings.types.isActive) {\r\n filteredData = filteredData.filter(audit => filterSettings.types.value.some(type => type.value === audit.actedUpon));\r\n }\r\n if (filterSettings.users.isActive) {\r\n filteredData = filteredData.filter(audit => filterSettings.users.value.some(user => user.value === audit.userEmail));\r\n }\r\n if (filterSettings.names.isActive) {\r\n filteredData = filteredData.filter(audit => filterSettings.names.value.some(name => name.value === audit.name));\r\n }\r\n if (filterSettings.date.isActive) {\r\n filteredData = filteredData.filter(audit => filterSettings.date.value.from < (new Date(audit.createdDate)).setHours(24, 0, 0) && (new Date(audit.createdDate)).setHours(0, 0, 0) < filterSettings.date.value.to);\r\n }\r\n return filteredData;\r\n case \"userStatuses\":\r\n return filteredData;\r\n }\r\n };\r\n\r\n const getSearchedData = () => {\r\n let searchedData;\r\n switch (RecordType) {\r\n case \"partners\":\r\n searchedData = data.filter(partner => (partner.name.toLowerCase().search(searchTerm) > -1\r\n || partner.partnerADIdentifier.toLowerCase().search(searchTerm) > -1\r\n || partner.parentPartnerName.toLowerCase().search(searchTerm) > -1\r\n || (searchTerm && partner.tams.some(tam => tam.firstName.toLowerCase().search(searchTerm) > -1 || tam.lastName.toLowerCase().search(searchTerm) > -1))\r\n || (searchTerm && partner.sams.some(sam => sam.firstName.toLowerCase().search(searchTerm) > -1 || sam.lastName.toLowerCase().search(searchTerm) > -1)))\r\n && partner.name.toLowerCase().search(textFilters.name.toLowerCase()) > -1\r\n && partner.partnerADIdentifier.toLowerCase().search(textFilters.partnerADIdentifier.toLowerCase()) > -1\r\n && partner.parentPartnerName.toLowerCase().search(textFilters.parentPartnerName.toLowerCase()) > -1\r\n && (textFilters.tams ?\r\n partner.tams.some(tam => tam.firstName.toLowerCase().search(textFilters.tams.toLowerCase()) > -1\r\n || tam.lastName.toLowerCase().search(textFilters.tams.toLowerCase()) > -1)\r\n : true\r\n )\r\n && (textFilters.sams ?\r\n partner.sams.some(sam => sam.firstName.toLowerCase().search(textFilters.sams.toLowerCase()) > -1\r\n || sam.lastName.toLowerCase().search(textFilters.sams.toLowerCase()) > -1)\r\n : true\r\n )\r\n );\r\n return searchedData;\r\n case \"users\":\r\n searchedData = data.filter(user => ((user.firstName && user.firstName.toLowerCase().search(searchTerm) > -1)\r\n || (user.lastName && user.lastName.toLowerCase().search(searchTerm) > -1)\r\n || (user.email && user.email.toLowerCase().search(searchTerm) > -1)\r\n || (user.partnerName && user.partnerName.toLowerCase().search(searchTerm) > -1))\r\n && (user.firstName && user.firstName.toLowerCase().search(textFilters.firstName.toLowerCase()) > -1)\r\n && (user.lastName && user.lastName.toLowerCase().search(textFilters.lastName.toLowerCase()) > -1)\r\n && (user.email && user.email.toLowerCase().search(textFilters.email.toLowerCase()) > -1)\r\n && (user.partnerName && user.partnerName.toLowerCase().search(textFilters.partnerName.toLowerCase()) > -1));\r\n return searchedData;\r\n case \"virtualMachines\":\r\n searchedData = data.filter(machine => ((machine.name && machine.name.toLowerCase().search(searchTerm) > -1)\r\n || (machine.statusString && machine.statusString.toLowerCase().search(searchTerm) > -1)\r\n || (machine.partnerName && machine.partnerName.toLowerCase().search(searchTerm) > -1))\r\n && (machine.name && machine.name.toLowerCase().search(textFilters.name.toLowerCase()) > -1)\r\n && (machine.statusString && machine.statusString.toLowerCase().search(textFilters.statusString.toLowerCase()) > -1)\r\n && (machine.partnerName && machine.partnerName.toLowerCase().search(textFilters.partnerName.toLowerCase()) > -1));\r\n return searchedData;\r\n case \"roles\":\r\n searchedData = data.filter(role => (role && ((role.name && role.name.toLowerCase().search(searchTerm) > -1)\r\n || (role.partnerName && role.partnerName.toLowerCase().search(searchTerm) > -1)))\r\n && (role.name && role.name.toLowerCase().search(textFilters.name.toLowerCase()) > -1)\r\n && (role.partnerName && role.partnerName.toLowerCase().search(textFilters.partnerName.toLowerCase()) > -1));\r\n return searchedData;\r\n case \"audits\":\r\n searchedData = data.filter(audit => ((audit.userEmail.toLowerCase().search(searchTerm) > -1)\r\n || (audit.partnerName.toLowerCase().search(searchTerm) > -1)\r\n || (audit.action.toLowerCase().search(searchTerm) > -1)\r\n || (audit.actedUpon.toLowerCase().search(searchTerm) > -1)\r\n || (audit.name !== undefined && audit.name && audit.name.toLowerCase().search(searchTerm) > -1))\r\n && (audit.userEmail.toLowerCase().search(textFilters.userEmail.toLowerCase()) > -1)\r\n && (audit.partnerName.toLowerCase().search(textFilters.partnerName.toLowerCase()) > -1)\r\n && (audit.action.toLowerCase().search(textFilters.action.toLowerCase()) > -1)\r\n && (audit.actedUpon.toLowerCase().search(textFilters.actedUpon.toLowerCase()) > -1)\r\n && (audit.name !== undefined && audit.name.toLowerCase().search(textFilters.name.toLowerCase()) > -1));\r\n\r\n return searchedData;\r\n case \"userStatuses\":\r\n searchedData = data.filter(userStatus => ((userStatus.firstName.toLowerCase().search(searchTerm) > -1)\r\n || (userStatus.lastName.toLowerCase().search(searchTerm) > -1)\r\n || (userStatus.partner.toLowerCase().search(searchTerm) > -1)\r\n || (userStatus.emailAddress.toLowerCase().search(searchTerm) > -1))\r\n && (userStatus.firstName.toLowerCase().search(textFilters.firstName.toLowerCase()) > -1)\r\n && (userStatus.lastName.toLowerCase().search(textFilters.lastName.toLowerCase()) > -1)\r\n && (userStatus.partner.toLowerCase().search(textFilters.partner.toLowerCase()) > -1)\r\n && (userStatus.emailAddress.toLowerCase().search(textFilters.emailAddress.toLowerCase()) > -1));\r\n return searchedData;\r\n }\r\n };\r\n\r\n const getCsvData = () => {\r\n if (getFilteredData().length > 0) {\r\n const csvData = JSON.parse(JSON.stringify(getFilteredData()));\r\n switch (RecordType) {\r\n case \"partners\":\r\n csvData.forEach(data => {\r\n delete data['partnerId'];\r\n delete data['parentPartnerId'];\r\n delete data['createdById'];\r\n delete data['lastModifiedById'];\r\n delete data['hubSpotCompany'];\r\n delete data['jiraOrganization'];\r\n delete data['concurrencyStamp'];\r\n delete data['availableUserServices'];\r\n delete data['defaultSubscriptions'];\r\n delete data['availableGlobalLinks'];\r\n data['mediaShuttlePortals'] = data['mediaShuttlePortals'].map(portal => portal.name).join(';');\r\n data['createdDate'] = dateUtils.getLocalDateTime(data['createdDate']);\r\n data['lastModifiedDate'] = dateUtils.getLocalDateTime(data['lastModifiedDate']);\r\n data['twoFactorMethods'] = data['twoFactorMethods'].map(method => method.name).join(';');\r\n data['integrationServices'] = data['integrationServices'].map(service => service.name).join(';');\r\n data['availableServices'] = data['availableServices'].map(service => service.name).join(';');\r\n data['externalLinks'] = data['externalLinks'].map(link =>\r\n '{ Label: ' + link.label + ' | ' + 'Url: ' + link.url + ' }').join(';');\r\n data['jiraGroups'] = data['jiraGroups'].map(group => group.name).join(';');\r\n data['tams'] = data['tams'].map(tam => tam.firstName + \" \" + tam.lastName).join(';');\r\n data['sams'] = data['sams'].map(sam => sam.firstName + \" \" + sam.lastName).join(';');\r\n });\r\n return csvData;\r\n case \"users\":\r\n csvData.forEach(data => {\r\n delete data['userId'];\r\n delete data['partnerId'];\r\n delete data['createdById'];\r\n delete data['lastModifiedById'];\r\n delete data['twoFactorMethodId'];\r\n delete data['availableServices'];\r\n delete data['concurrencyStamp'];\r\n data['lastLoginDate'] = dateUtils.getLocalDateTime(data['lastLoginDate']);\r\n data['createdDate'] = dateUtils.getLocalDateTime(data['createdDate']);\r\n data['lastModifiedDate'] = dateUtils.getLocalDateTime(data['lastModifiedDate']);\r\n data['roles'] = data['roles'].map(role => role.name).join(';');\r\n data['integrationServices'] = data['integrationServices'].map(service => service.name).join(';');\r\n data['pocs'] = data['pocs'].map(poc => poc.name).join(';');\r\n data['subscriptions'] = data['subscriptions'].map(subscription => subscription.name).join(';');\r\n data['twoFactorMethodClaims'] = data['twoFactorMethodClaims'].map(claim =>\r\n '{ ClaimType: ' + claim.claimType + ' | ' + 'ClaimLabel: ' + claim.claimLabel + ' }').join(';');\r\n data['jiraGroups'] = data['jiraGroups'].map(group => group.name).join(';');\r\n });\r\n return csvData;\r\n case \"virtualMachines\":\r\n csvData.forEach(data => {\r\n delete data['statusString'];\r\n delete data['id'];\r\n delete data['virtualMachineId'];\r\n delete data['virtualMachineRoleId'];\r\n delete data['partnerId'];\r\n data['status'] = data['statusString'];\r\n data['virtualMachineRole'] = data['virtualMachineRole'].name;\r\n });\r\n return csvData;\r\n case \"roles\":\r\n return csvData;\r\n case \"audits\":\r\n csvData.forEach(data => {\r\n data['createdDate'] = dateUtils.getLocalDateTime(data['createdDate']);\r\n });\r\n return csvData;\r\n case \"userStatuses\":\r\n csvData.forEach(data => {\r\n data['login'] = dateUtils.getLocalDateTime(data['login']);\r\n data['lastAction'] = dateUtils.getLocalDateTime(data['lastAction']);\r\n });\r\n return csvData;\r\n }\r\n } else {\r\n return [];\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n ReactTooltip.rebuild();\r\n }, [getCsvData])\r\n\r\n useEffect(() => {\r\n if (selectedUsers) {\r\n setSelectedEntitiesCount(selectedUsers.length);\r\n }\r\n }, [selectedUsers])\r\n\r\n useEffect(() => {\r\n if (RecordType === \"users\") {\r\n var filtered = getFilteredData();\r\n for (var i = 0; i < filtered.length; i++) {\r\n if (!selectedUsers.some(s => s.userId === filtered[i].userId)) {\r\n setAllUsersChecked(false);\r\n return;\r\n }\r\n }\r\n\r\n if (filtered.length !== 0) {\r\n setAllUsersChecked(true);\r\n }\r\n }\r\n\r\n }, [getFilteredData])\r\n\r\n const totalPages = () => { return Math.ceil(getFilteredData().length / dataLimit) < 1 ? 1 : Math.ceil(getFilteredData().length / dataLimit); }\r\n\r\n useEffect(() => {\r\n if (pageNumber > totalPages() || pageNumber < 1) {\r\n dispatch(pageActions.updatePageNumber(RecordType, 1));\r\n }\r\n }, [totalPages()]);\r\n\r\n const updateSorting = (dataField) => {\r\n if (sortBy.value === dataField) {\r\n handleSortByChange({ value: dataField, ascending: !sortBy.ascending })\r\n } else {\r\n handleSortByChange({ value: dataField, ascending: true })\r\n }\r\n }\r\n\r\n const sortData = (dataA, dataB) => {\r\n switch (sortBy.value) {\r\n case \"permissions\":\r\n var x = dataA[sortBy.value].length;\r\n var y = dataB[sortBy.value].length;\r\n break;\r\n case \"lastLoginDate\":\r\n var x = new Date(dataA[sortBy.value]);\r\n var y = new Date(dataB[sortBy.value]);\r\n break;\r\n case \"createdDate\":\r\n var x = new Date(dataA[sortBy.value]);\r\n var y = new Date(dataB[sortBy.value]);\r\n break;\r\n case \"tams\":\r\n case \"sams\":\r\n var x = dataA[sortBy.value].map(data => data.firstName + \" \" + data.lastName).join(';');\r\n var y = dataB[sortBy.value].map(data => data.firstName + \" \" + data.lastName).join(';');\r\n (x == \"\" && sortBy.ascending) ? x = \"ZZZZZZZZZ\" : x = x;\r\n (y == \"\" && sortBy.ascending) ? y = \"ZZZZZZZZZ\" : y = y;\r\n break;\r\n default:\r\n var x = dataA[sortBy.value];\r\n var y = dataB[sortBy.value];\r\n\r\n }\r\n if (typeof x == \"string\") {\r\n x = x.toLowerCase();\r\n }\r\n if (typeof y == \"string\") {\r\n y = y.toLowerCase();\r\n }\r\n switch (sortBy.value) {\r\n case \"lastLoginDate\":\r\n if (sortBy.ascending) {\r\n return x - y;\r\n } else {\r\n return y - x;\r\n }\r\n default:\r\n if (sortBy.ascending) {\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n } else {\r\n return x < y ? 1 : x > y ? -1 : 0;\r\n }\r\n }\r\n }\r\n\r\n const toggleSelectAll = (event) => {\r\n switch (RecordType) {\r\n case \"users\":\r\n if (event.target.checked) {\r\n let filteredSelectAllData = getFilteredData();\r\n dispatch(pageActions.updateSelectedUsers(filteredSelectAllData));\r\n dispatch(pageActions.allUsersSelected(RecordType, true));\r\n } else {\r\n dispatch(pageActions.clearSelectedUsers());\r\n dispatch(pageActions.allUsersSelected(RecordType, false));\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const handleColumnSearch = (event) => {\r\n dispatch(pageActions.updateTextFilter(RecordType, event.target.id.split('_')[0], event.target.value));\r\n }\r\n\r\n return (\r\n data.length > 0 || !isLoading ?\r\n <>\r\n
    \r\n \r\n \r\n \r\n { dataHeaders.map(header => {\r\n if (header.text) {\r\n return (\r\n \r\n updateSorting(header.dataField) }\r\n >\r\n { header.text }\r\n \r\n {\r\n textFilters[header.dataField] != \"\" ?\r\n \r\n \r\n \r\n : \"\"\r\n }\r\n \r\n {\r\n header.dataField === sortBy.value ?\r\n (sortBy.ascending ?\r\n \r\n : )\r\n : ''\r\n }\r\n \r\n \r\n
    \r\n {\r\n showColumnFilters && header.filterable ?\r\n \r\n : showColumnFilters && !header.filterable ?\r\n
    \r\n : ''\r\n }\r\n \r\n )\r\n } else if (header.datafield === \"all\" && auth.permissions.some(permission => permission.name === \"EditUsers\")) {\r\n return \r\n \r\n \r\n } else {\r\n return \r\n }\r\n }) }\r\n \r\n \r\n \r\n {\r\n getPaginatedData().map(entity => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n Displaying { getTotalRecords() > 0 ? getStartingIndex() + 1 : getTotalRecords() } - { getEndingIndex() < getTotalRecords() ? getEndingIndex() : getTotalRecords() } of { getTotalRecords() }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Page { pageNumber } of { totalPages() }\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n { auth.user && RecordType != \"roles\" ?\r\n \r\n \r\n \r\n : \"\"\r\n }\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n :
    \r\n )\r\n}\r\n\r\nexport default PaginatedList;","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as settingsActions from '../../../redux/actions/settingsActions';\r\nimport { CTableDataCell } from '@coreui/bootstrap-react';\r\n\r\nfunction TriToggleFilter({ RecordType, Filter, theme }) {\r\n\r\n const [togglePosition, setTogglePosition] = useState();\r\n const [firstPoint, setFirstPoint] = useState();\r\n const [secondPoint, setSecondPoint] = useState();\r\n const [thirdPoint, setThirdPoint] = useState();\r\n\r\n const filters = useSelector(state => state.settings[RecordType].filters);\r\n const filterValue = useSelector(state => state.settings[RecordType].filters[Filter.filterIdentifier].value);\r\n const filterIsActive = useSelector(state => state.settings[RecordType].filters[Filter.filterIdentifier].isActive);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (filters[Filter.filterIdentifier].isActive === false) {\r\n setTogglePosition(0);\r\n setFirstPoint(\"\");\r\n setSecondPoint(\"hide\");\r\n setThirdPoint(\"\");\r\n } else if (filters[Filter.filterIdentifier].value === true) {\r\n setTogglePosition(-1);\r\n setFirstPoint(\"hide\");\r\n setSecondPoint(\"\");\r\n setThirdPoint(\"\");\r\n } else {\r\n setTogglePosition(1);\r\n setFirstPoint(\"\");\r\n setSecondPoint(\"\");\r\n setThirdPoint(\"hide\");\r\n }\r\n }, [filterValue, filterIsActive])\r\n\r\n const leftToggleLabelClass = \"clickable p-0 text-end align-middle \";\r\n const rightToggleLabelClass = \"clickable p-0 text-start align-middle \";\r\n\r\n const handleLeftLabelClick = () => {\r\n if (filterValue == true && filterIsActive == true) {\r\n filters[Filter.filterIdentifier].isActive = false;\r\n filters[Filter.filterIdentifier].value = true;\r\n } else {\r\n filters[Filter.filterIdentifier].isActive = true;\r\n filters[Filter.filterIdentifier].value = true;\r\n }\r\n dispatch(settingsActions.updateFilterSetting(filters, RecordType));\r\n }\r\n\r\n const handleRightLabelClick = () => {\r\n if (filterValue == false && filterIsActive == true) {\r\n filters[Filter.filterIdentifier].isActive = false;\r\n filters[Filter.filterIdentifier].value = false;\r\n } else {\r\n filters[Filter.filterIdentifier].isActive = true;\r\n filters[Filter.filterIdentifier].value = false;\r\n }\r\n dispatch(settingsActions.updateFilterSetting(filters, RecordType));\r\n }\r\n\r\n const handleToggle = (event) => {\r\n if (event.target.value === \"-1\") {\r\n filters[Filter.filterIdentifier].isActive = true;\r\n filters[Filter.filterIdentifier].value = true;\r\n } else if (event.target.value === \"0\") {\r\n filters[Filter.filterIdentifier].isActive = false;\r\n } else if (event.target.value === \"1\") {\r\n filters[Filter.filterIdentifier].isActive = true;\r\n filters[Filter.filterIdentifier].value = false;\r\n }\r\n dispatch(settingsActions.updateFilterSetting(filters, RecordType));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n { Filter.leftLabel }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { Filter.rightLabel }\r\n \r\n \r\n )\r\n}\r\n\r\nexport default TriToggleFilter;","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { CTableDataCell, CFormSwitch } from '@coreui/bootstrap-react';\r\nimport { DateRangePicker } from 'rsuite';\r\nimport * as settingsActions from '../../../redux/actions/settingsActions';\r\nimport * as styles from '../DropdownStyles';\r\n\r\nfunction RangeFilter({ RecordType, Filter }) {\r\n\r\n const filters = useSelector(state => state.settings[RecordType].filters);\r\n const filterSettings = useSelector(state => state.settings[RecordType].filters[Filter.filterIdentifier]);\r\n const dispatch = useDispatch();\r\n\r\n const handleDateChange = (event) => {\r\n if (event) {\r\n filterSettings.value.from = event[0];\r\n filterSettings.value.to = event[1];\r\n } else {\r\n filterSettings.value.from = \"\";\r\n filterSettings.value.to = \"\";\r\n\r\n }\r\n if (filterSettings.value.from != \"\") {\r\n filterSettings.isActive = true;\r\n } else {\r\n filterSettings.isActive = false;\r\n }\r\n dispatch(settingsActions.updateFilterSetting(RecordType, filters));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default RangeFilter;","import React from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as settingsActions from '../../../redux/actions/settingsActions';\r\nimport * as styles from '../DropdownStyles';\r\nimport Select from 'react-select';\r\nimport { CTableDataCell } from '@coreui/bootstrap-react';\r\n\r\nfunction MultiselectFilter({ RecordType, Filter, theme }) {\r\n\r\n const filters = useSelector(state => state.settings[RecordType].filters);\r\n const filterSettings = useSelector(state => state.settings[RecordType].filters[Filter.filterIdentifier]);\r\n const users = useSelector(state => state.audits).map(audit => (audit.userEmail));\r\n const actions = useSelector(state => state.audits).map(audit => (audit.action));\r\n const types = useSelector(state => state.audits).map(audit => (audit.actedUpon));\r\n const names = useSelector(state => state.audits).map(audit => (audit.name));\r\n const partners = useSelector(state => state.audits).map(audit => (audit.partnerName));\r\n const tams = useSelector(state => state.partners).map(partner => (partner.tams.map(tam => tam.firstName + \" \" + tam.lastName)));\r\n const sams = useSelector(state => state.partners).map(partner => (partner.sams.map(sam => sam.firstName + \" \" + sam.lastName)));\r\n const availableActions = [...new Set(actions)];\r\n const availableTypes = [...new Set(types)];\r\n const availableNames = [...new Set(names)];\r\n const availableUsers = [...new Set(users)];\r\n const availablePartners = [...new Set(partners)];\r\n const availableTams = [...new Set(tams.flat())];\r\n const availableSams = [...new Set(sams.flat())];\r\n const dispatch = useDispatch();\r\n\r\n const available = () => {\r\n switch (Filter.filterIdentifier) {\r\n case \"actions\":\r\n return availableActions;\r\n case \"types\":\r\n return availableTypes;\r\n case \"partners\":\r\n return availablePartners;\r\n case \"names\":\r\n return availableNames;\r\n case \"users\":\r\n return availableUsers;\r\n case \"tams\":\r\n return availableTams;\r\n case \"sams\":\r\n return availableSams;\r\n }\r\n }\r\n\r\n const handleMultiSelectChange = (event) => {\r\n filterSettings.value = event.map(e => ({\r\n value: e.value,\r\n label: e.label\r\n }))\r\n if (filterSettings.value.length > 0) {\r\n filterSettings.isActive = true;\r\n } else {\r\n filterSettings.isActive = false;\r\n }\r\n dispatch(settingsActions.updateFilterSetting(RecordType, filters));\r\n }\r\n\r\n const handleValue = () => {\r\n filterSettings.value.sort((a, b) => (a.label.toLowerCase() > b.label.toLowerCase()) ? 1 : -1);\r\n return filterSettings.value.map(x => ({\r\n value: x.value,\r\n label: x.label\r\n }));\r\n }\r\n\r\n const handleOptions = () => {\r\n let sortedOptions = available().sort((a, b) => (a.toLowerCase() > b.toLowerCase()) ? 1: -1);\r\n return sortedOptions.map(x => ({\r\n value: x,\r\n label: x\r\n }));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default MultiselectFilter;","import React, { useState } from 'react';\r\nimport { CCollapse, CCardBody, CTable, CTableBody, CTableRow, CTableDataCell } from '@coreui/bootstrap-react';\r\nimport TriToggleFilter from './FilterTypes/TriToggleFilter';\r\nimport RangeFilter from './FilterTypes/RangeFilter';\r\nimport MultiselectFilter from './FilterTypes/MultiselectFilter';\r\nimport { useSelector } from 'react-redux';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction FilterSlideout({ RecordType, theme }) {\r\n\r\n const [isPaneOpen, setIsPaneOpen] = useState(false);\r\n\r\n const filterSettings = useSelector(state => state.settings[RecordType].filters, (left, right) => {\r\n var hasChanged = false;\r\n Object.keys(left).forEach(key => hasChanged = (right[key].value != left[key].value || right[key].isActive != left[key].isActive));\r\n return hasChanged;\r\n });\r\n const filters = useSelector(state => state.page[RecordType].filters);\r\n\r\n const hasFilters = filters.some(filter => filterSettings[filter.filterIdentifier].isActive);\r\n\r\n const hasFiltersClass = hasFilters ? \"slideoutIconContainerActive\" : \"slideoutIconContainer\";\r\n\r\n const filterGroups = () => {\r\n const groups = filters.map(filter => filter.group);\r\n return [...new Set(groups)];\r\n }\r\n\r\n const handleTogglePane = () => {\r\n const newPaneStatus = !isPaneOpen;\r\n setIsPaneOpen(newPaneStatus);\r\n }\r\n\r\n const filterSwitch = (filter) => {\r\n switch (filter.filterType) {\r\n case 'triStateToggle':\r\n return ;\r\n case 'range':\r\n return ;\r\n case 'multiSelect':\r\n return ;\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n { filters.length > 0 ?\r\n filterGroups().map(group =>\r\n <>\r\n \r\n
    { group }
    \r\n \r\n \r\n
    \r\n { filters.map(filter => filter.group === group ?\r\n \r\n { filterSwitch(filter) }\r\n \r\n : \"\"\r\n ) }\r\n \r\n )\r\n :
    \r\n No Filters for this Page\r\n
    \r\n }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default FilterSlideout;","import React, { useEffect, useState } from 'react';\r\nimport * as partnersActions from '../../redux/actions/partnersActions';\r\nimport * as usersActions from '../../redux/actions/usersActions';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as servicesActions from '../../redux/actions/servicesActions';\r\nimport * as linksActions from '../../redux/actions/linksActions';\r\nimport * as groupsActions from '../../redux/actions/groupsActions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport PartnerEdit from './PartnerEdit';\r\nimport PartnerDetails from './PartnerDetails';\r\nimport { toast } from 'react-toastify';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport PaginatedList from '../common/PaginatedList';\r\nimport FilterSlideout from '../common/FilterSlideout';\r\nimport * as bootstrap from 'bootstrap';\r\nimport * as ModalBackgroundRemover from '../common/ModalBackgroundRemover';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction PartnersPage({ theme }) {\r\n\r\n const [columnFiltersPopulated, setColumnFiltersPopulated] = useState(false);\r\n\r\n const searchTerm = useSelector(state => state.page.partners.searchTerm);\r\n const allPartners = useSelector(state => state.partners);\r\n const selectedPartner = useSelector(state => state.page.partners.selectedPartner);\r\n const partnerServices = useSelector(state => state.services.partner);\r\n const globalLinks = useSelector(state => state.links.global);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const filterByColumn = useSelector(state => state.page.partners.filterByColumn);\r\n const textFilters = useSelector(state => state.page.partners.textFilters);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewPartners\")) {\r\n dispatch(partnersActions.loadPartners()).catch(error => {\r\n toast.error(\"Loading Partners Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n if (userPermissions.some(p => p.name === \"ViewUsers\")) {\r\n dispatch(usersActions.loadUsers()).catch(error => {\r\n toast.error(\"Loading Users Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n dispatch(linksActions.loadGlobalLinks()).catch(error => {\r\n toast.error(\"Loading Global Links Failed:\" + error, { autoClose: false });\r\n });\r\n dispatch(servicesActions.loadPartnerServices()).catch(error => {\r\n toast.error(\"Loading Partner Services Failed:\" + error, { autoClose: false });\r\n });\r\n ModalBackgroundRemover.removeModalBackground();\r\n dispatch(groupsActions.loadAvailableSubscriptions()).catch(error => {\r\n toast.error(\"Loading Available Subscriptions Failed: \" + error, { autoClose: false })\r\n });\r\n dispatch(groupsActions.loadAvailablePocs()).catch(error => {\r\n toast.error(\"Loading Available Pocs Failed: \" + error, { autoClose: false })\r\n });\r\n }, [])\r\n\r\n useEffect(() => {\r\n let noFilters = true;\r\n for (const text in textFilters) {\r\n if (textFilters[text] != \"\") {\r\n noFilters = false;\r\n setColumnFiltersPopulated(true);\r\n }\r\n }\r\n if (noFilters) {\r\n setColumnFiltersPopulated(false);\r\n }\r\n }, [textFilters])\r\n\r\n const handleNewPartner = () => {\r\n let oasisPartner = allPartners.find(p => p.name === \"Oasis\");\r\n let parentPartnerId = 0;\r\n let parentPartnerName = \"Select the Parent Partner...\";\r\n if (oasisPartner) {\r\n parentPartnerId = oasisPartner.partnerId;\r\n parentPartnerName = oasisPartner.name;\r\n }\r\n let integrationServices = partnerServices.filter(ps => ps.name === \"Login\" || ps.name === \"Communications\" || ps.name === \"File Transfer\" || ps.name === \"Support\");\r\n integrationServices.forEach(is => is.isDeleted = false);\r\n let availableServices = partnerServices.filter(ps => integrationServices.indexOf(ps) === -1);\r\n let availableGlobalLinks = [...globalLinks]\r\n dispatch(pageActions.updateSelectedPartner({\r\n integrationServices: integrationServices,\r\n availableServices: availableServices,\r\n defaultSubscriptions: [],\r\n parentPartnerId,\r\n parentPartnerName,\r\n twoFactorMethods: [],\r\n hubSpotCompany: { id: \"0\", name: \"Please Select a HubSpot Company...\" },\r\n availableJiraOrganizations: [{ id: \"-1\", name: \"--Managed by Jira Admins--\" }],\r\n availableGlobalLinks,\r\n externalLinks: [],\r\n mediaShuttlePortals: [],\r\n jiraGroups: [],\r\n defaultJiraOrganizations: [{ id: \"-1\", name: \"--Managed by Jira Admins--\" }],\r\n tams: [],\r\n sams: []\r\n }));\r\n new bootstrap.Modal(document.getElementById('edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDisablePartnerConfirmed = (event) => {\r\n event.preventDefault();\r\n dispatch(partnersActions.disablePartner(selectedPartner))\r\n .then(empty => {\r\n toast.success(selectedPartner.name + \" has been disabled\");\r\n bootstrap.Modal.getInstance(document.getElementById('disable-modal')).hide();\r\n dispatch(partnersActions.loadPartner(selectedPartner));\r\n })\r\n .catch(error => {\r\n toast.error(\"Disable Partner Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const handleEnablePartnerConfirmed = (event) => {\r\n event.preventDefault();\r\n dispatch(partnersActions.enablePartner(selectedPartner))\r\n .then(empty => {\r\n toast.success(selectedPartner.name + \" has been enabled\");\r\n bootstrap.Modal.getInstance(document.getElementById('enable-modal')).hide();\r\n dispatch(partnersActions.loadPartner(selectedPartner));\r\n })\r\n .catch(error => {\r\n toast.error(\"Enable Partner Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"partners\", event.target.value));\r\n }\r\n\r\n const handleToggleFilterByColumn = () => {\r\n dispatch(pageActions.toggleFilterByColumn(\"partners\", !filterByColumn));\r\n }\r\n\r\n const handleClearFilterByColumn = () => {\r\n dispatch(pageActions.clearTextFilters(\"partners\"));\r\n setColumnFiltersPopulated(false);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Partners

    \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n filterByColumn ?\r\n \r\n : \r\n }\r\n \r\n \r\n {\r\n columnFiltersPopulated ?\r\n \r\n : \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n { userPermissions.some(up => up.name == \"AddPartners\") ?\r\n New Partner\r\n : \"\"\r\n }\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \" + selectedPartner.name + \" has enabled users and these users will also be disabled.\" : \"\") }\r\n onSubmit={ handleDisablePartnerConfirmed }\r\n theme={ theme }\r\n />\r\n \r\n \r\n )\r\n}\r\n\r\nexport default PartnersPage;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getPermissions() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/permission');\r\n return response.data;\r\n}\r\n\r\n// Permissions for currently logged in user\r\nexport async function getUserPermissions() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/permission/user/permissions');\r\n return response.data;\r\n}\r\n\r\nexport async function getCanAssignRoles() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/permission/user/canassignroles');\r\n return response.data;\r\n}\r\n\r\nexport async function getUserRoles() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/permission/user/roles').catch(error => {\r\n if (error.response.data.reason === \"Maintenance Mode Active\") {\r\n return { data: [] };\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n","import * as types from \"./types\";\r\nimport * as permissionsService from \"../../services/permissionsService\";\r\n\r\nexport function loadPermissionsSuccess(permissions) {\r\n return { type: types.LOAD_PERMISSIONS_SUCCESS, permissions }\r\n}\r\n\r\nexport function loadUserPermissionsSuccess(userPermissions) {\r\n return { type: types.LOAD_USER_PERMISSIONS_SUCCESS, userPermissions }\r\n}\r\n\r\nexport function loadCanAssignRolesSuccess(canAssignRoles) {\r\n return { type: types.LOAD_CAN_ASSIGN_ROLES_SUCCESS, canAssignRoles }\r\n}\r\n\r\nexport function loadUserRolesSuccess(userRoles) {\r\n return { type: types.LOAD_USER_ROLES_SUCCESS, userRoles }\r\n}\r\n\r\nexport function loadPermissions() {\r\n return function (dispatch) {\r\n return permissionsService.getPermissions()\r\n .then(permissions => {\r\n dispatch(loadPermissionsSuccess(permissions));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadUserPermissions() {\r\n return function (dispatch) {\r\n return permissionsService.getUserPermissions()\r\n .then(userPermissions => {\r\n dispatch(loadUserPermissionsSuccess(userPermissions));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadCanAssignRoles() {\r\n return function (dispatch) {\r\n return permissionsService.getCanAssignRoles()\r\n .then(canAssignRoles => {\r\n dispatch(loadCanAssignRolesSuccess(canAssignRoles));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadUserRoles() {\r\n return function (dispatch) {\r\n return permissionsService.getUserRoles()\r\n .then(userRoles => {\r\n dispatch(loadUserRolesSuccess(userRoles));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react'\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as usersActions from '../../redux/actions/usersActions';\r\nimport * as usersService from '../../services/usersService';\r\nimport * as dateUtils from '../../utils/dateUtils';\r\nimport { CNav, CNavItem, CNavLink, CTabContent, CTabPane } from '@coreui/bootstrap-react'\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction UserDetails({ theme }) {\r\n\r\n const [activeTab, setActiveTab] = useState(\"Info\");\r\n const [detailsModal, setDetailsModal] = useState();\r\n const [user, setUser] = useState(useSelector(state => state.page.users.selectedUser));\r\n\r\n const selectedUser = useSelector(state => state.page.users.selectedUser);\r\n const authServices = useSelector(state => state.services.auth);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(pageActions.clearSelectedUser());\r\n };\r\n }, [])\r\n\r\n useEffect(() => {\r\n setUser(selectedUser);\r\n var detailsModal = document.getElementById('details-modal');\r\n detailsModal.addEventListener('hidden.bs.modal', () => {\r\n if (usersService.getUserAbortController[selectedUser.userId]) {\r\n usersService.getUserAbortController[selectedUser.userId].abort();\r\n }\r\n dispatch(pageActions.clearSelectedUser());\r\n setActiveTab(\"Info\");\r\n });\r\n setDetailsModal(bootstrap.Modal.getInstance(document.getElementById('details-modal')));\r\n }, [selectedUser])\r\n\r\n const refreshUser = (userId) => {\r\n if (detailsModal && detailsModal._isShown) {\r\n usersService.getUser(userId)\r\n .then(returnedUser => {\r\n dispatch(usersActions.loadUserSuccess(returnedUser));\r\n setUser(returnedUser);\r\n dispatch(pageActions.updateSelectedUser(returnedUser));\r\n })\r\n .catch(error => {\r\n if (error.message != \"canceled\") {\r\n toast.error(\"Loading Selected User Failed:\" + error, { autoClose: false });\r\n }\r\n });\r\n }\r\n }\r\n\r\n const checkUpdateRequired = useCallback(async (user) => {\r\n if (detailsModal && detailsModal._isShown) {\r\n if (await usersService.updateRequired(user)) {\r\n refreshUser(user.userId);\r\n }\r\n }\r\n }, [detailsModal]);\r\n\r\n useEffect(() => {\r\n const updateRequiredIntervalId = setInterval(() => checkUpdateRequired(user), 1000);\r\n return () => {\r\n clearInterval(updateRequiredIntervalId);\r\n };\r\n }, [checkUpdateRequired, user])\r\n\r\n useEffect(() => {\r\n if (selectedUser.userId) {\r\n refreshUser(selectedUser.userId);\r\n }\r\n }, [selectedUser.userId, detailsModal])\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    { user.email }

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n { user.userId ?\r\n
    \r\n
    \r\n \r\n \r\n setActiveTab(\"Info\") }\r\n >\r\n Info\r\n \r\n \r\n { user.integrationServices.map(service => {\r\n return (\r\n \r\n setActiveTab(service.name) }\r\n >\r\n { service.name }\r\n \r\n \r\n )\r\n }) }\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n First Name :\r\n
    \r\n
    \r\n { user.firstName }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Last Name :\r\n
    \r\n
    \r\n { user.lastName }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Email :\r\n
    \r\n
    \r\n { user.email }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Partner :\r\n
    \r\n
    \r\n { user.partnerName }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Created By :\r\n
    \r\n
    \r\n { user.createdBy }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Created Date :\r\n
    \r\n
    \r\n { dateUtils.getLocalDate(user.createdDate) } { dateUtils.getLocalTime(user.createdDate, { hour: '2-digit', minute: '2-digit' }) }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Last Modified By :\r\n
    \r\n
    \r\n { user.lastModifiedBy }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Last Modified Date :\r\n
    \r\n
    \r\n { dateUtils.getLocalDate(user.lastModifiedDate) } { dateUtils.getLocalTime(user.lastModifiedDate, { hour: '2-digit', minute: '2-digit' }) }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Last Login Date :\r\n
    \r\n
    \r\n { dateUtils.getLocalDate(user.lastLoginDate) } { dateUtils.getLocalTime(user.lastLoginDate, { hour: '2-digit', minute: '2-digit' }) }\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n Point of Contact :\r\n
    \r\n
    \r\n { user.pocs.length > 0 ? user.pocs.map(poc => {\r\n return poc.name\r\n }).join(', ') : \"Not a Point of Contact\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Subscriptions :\r\n
    \r\n
    \r\n { user.subscriptions.length > 0 ? user.subscriptions.map(subscription => {\r\n return subscription.name\r\n }).join(', ') : \"No Subscriptions\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n Roles :\r\n
    \r\n
    \r\n { user.roles.map(role => role.name).join(', ') }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Two Factor Auth :\r\n
    \r\n
    \r\n { user.twoFactorMethodName }\r\n
    \r\n
    \r\n { user.twoFactorMethodId && authServices.length > 0 ? authServices.find(s => s.twoFactorMethodId === user.twoFactorMethodId).claims.map(claim => {\r\n return (\r\n
    \r\n
    \r\n { claim.claimLabel } :\r\n
    \r\n
    \r\n { user.twoFactorMethodClaims.find(c => c.claimType === claim.claimType) ? user.twoFactorMethodClaims.find(c => c.claimType === claim.claimType).claimLabel : \"\" }\r\n
    \r\n
    \r\n )\r\n }) : \"\" }\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n Jira Groups :\r\n
    \r\n
    \r\n { user.jiraGroups.length > 0 ? user.jiraGroups.map(jiraGroup => {\r\n return jiraGroup.name\r\n }).join(', ') : \"No managed Jira Groups Associated to User\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default UserDetails;","import React, { useEffect, useState, useCallback } from 'react'\r\nimport TextInput from '../common/TextInput'\r\nimport * as usersActions from '../../redux/actions/usersActions';\r\nimport * as jiraActions from '../../redux/actions/jiraActions';\r\nimport * as permissionsActions from '../../redux/actions/permissionsActions';\r\nimport * as usersService from '../../services/usersService';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as idpUserService from '../../services/idpUserService';\r\nimport { CNav, CNavItem, CNavLink, CTabContent, CTabPane } from '@coreui/bootstrap-react'\r\nimport Select from 'react-select';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport * as styles from '../common/DropdownStyles';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction UserEdit({ theme }) {\r\n\r\n const [isLoading, setIsLoading] = useState();\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [activeTab, setActiveTab] = useState(\"Info\");\r\n const [refreshUserToastId, setRefreshUserToastId] = useState(\"\");\r\n const [errors, setErrors] = useState({});\r\n const [editModal, setEditModal] = useState();\r\n const [unconfirmedUser, setUnconfirmedUser] = useState({});\r\n const [user, setUser] = useState(useSelector(state => state.page.users.selectedUser));\r\n\r\n const selectedUser = useSelector(state => state.page.users.selectedUser);\r\n const users = useSelector(state => state.users);\r\n const partners = useSelector(state => state.partners);\r\n const availablePocs = useSelector(state => state.groups.availablePocs);\r\n const availableSubscriptions = useSelector(state => state.groups.availableSubscriptions);\r\n const authServices = useSelector(state => state.services.auth);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const roles = useSelector(state => user.partnerName != \"Oasis\" ?\r\n state.auth.canAssignRoles.filter(p => { return p.name != \"System Admin\"; }) : state.auth.canAssignRoles);\r\n const jiraGroups = useSelector(state => state.jira.availableGroups);\r\n\r\n // userPartnerAuthServices only available if user has ViewPartners Permission to get partner info from state.\r\n const userPartnerAuthServices = useSelector(state => user.partnerId && state.partners.length > 0 ?\r\n state.partners.find(p => p.partnerId === user.partnerId).twoFactorMethods : []);\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewJiraGroups\")) {\r\n dispatch(jiraActions.loadAvailableJiraGroups()).catch(error => {\r\n toast.error(\"Loading Available Jira Groups Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n return () => {\r\n dispatch(pageActions.clearSelectedUser());\r\n };\r\n }, [])\r\n\r\n const refreshMessage = (user) => (\r\n
    \r\n
    \r\n { user.email }
    has been modified:\r\n
    \r\n
    \r\n To refresh click this message.\r\n
    \r\n
    \r\n Please note that refreshing will overwrite any current changes and saving new changes will not be permitted without a refresh.\r\n
    \r\n
    \r\n );\r\n\r\n const refreshUser = (userId, dismissToast = false) => {\r\n if (editModal && editModal._isShown) {\r\n setIsLoading(true);\r\n usersService.getUser(userId)\r\n .then(returnedUser => {\r\n dispatch(usersActions.loadUserSuccess(returnedUser));\r\n if (dismissToast) {\r\n toast.dismiss(refreshUserToastId);\r\n setRefreshUserToastId(\"\");\r\n }\r\n setUser(returnedUser);\r\n dispatch(pageActions.updateSelectedUser(returnedUser));\r\n })\r\n .catch(error => {\r\n if (error.message != \"canceled\") {\r\n toast.error(\"Loading Selected User Failed:\" + error, { autoClose: false });\r\n }\r\n }).finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n }\r\n\r\n const checkUpdateRequired = useCallback(async (user) => {\r\n if (editModal && editModal._isShown) {\r\n if (user.userId && !isSaving && !isLoading) {\r\n if (await usersService.updateRequired(user) && refreshUserToastId == '') {\r\n let newToastId = toast.warning(refreshMessage(user), {\r\n autoClose: false,\r\n position: \"top-center\",\r\n hideProgressBar: true,\r\n closeOnClick: false,\r\n closeButton: false,\r\n draggable: false,\r\n onClick: () => refreshUser(user.userId, true)\r\n })\r\n setRefreshUserToastId(newToastId);\r\n }\r\n }\r\n }\r\n }, [refreshUserToastId, isSaving, isLoading, editModal]);\r\n\r\n useEffect(() => {\r\n setUser(selectedUser);\r\n var editModal = document.getElementById('edit-modal');\r\n editModal.addEventListener('hidden.bs.modal', () => {\r\n if (usersService.getUserAbortController[selectedUser.userId]) {\r\n usersService.getUserAbortController[selectedUser.userId].abort();\r\n }\r\n dispatch(pageActions.clearSelectedUser());\r\n setErrors({});\r\n setActiveTab(\"Info\");\r\n });\r\n setEditModal(bootstrap.Modal.getInstance(document.getElementById('edit-modal')));\r\n }, [selectedUser])\r\n\r\n useEffect(() => {\r\n if (selectedUser.userId) {\r\n refreshUser(selectedUser.userId);\r\n }\r\n }, [selectedUser.userId, editModal])\r\n\r\n useEffect(() => {\r\n const updateRequiredIntervalId = setInterval(() => checkUpdateRequired(user), 1000);\r\n return () => {\r\n clearInterval(updateRequiredIntervalId);\r\n };\r\n }, [checkUpdateRequired, user])\r\n\r\n useEffect(() => {\r\n if (!user.integrationServices.some(s => s.name === activeTab)) {\r\n setActiveTab(\"Info\");\r\n }\r\n }, [user.integrationServices])\r\n\r\n const handleUserSave = (event) => {\r\n setIsSaving(true);\r\n event.preventDefault();\r\n let updateUser = { ...user };\r\n\r\n let isCreate = updateUser.userId === undefined;\r\n if (!userIsValid(updateUser)) {\r\n setIsSaving(false);\r\n return;\r\n }\r\n dispatch(usersActions.saveUser(updateUser))\r\n .then(empty => {\r\n if (isCreate) {\r\n usersService.getUsers().then(users => {\r\n updateUser.userId = users.find(user => user.email === updateUser.email).userId;\r\n if (updateUser.shouldSendInviteEmail && userPermissions.some(p => p.name == \"InviteUsers\")) {\r\n idpUserService.sendEmail(updateUser.userId, 'Invite').then(empty => {\r\n toast.success(updateUser.email + \" has been invited\");\r\n }).catch(error => {\r\n toast.error(\"User Invite Failed: \" + error, { autoClose: false });\r\n })\r\n }\r\n }).catch(error => {\r\n toast.error(\"User Invite Failed: \" + error, { autoClose: false });\r\n });\r\n } else {\r\n if (updateUser.shouldSendInviteEmail && userPermissions.some(p => p.name == \"InviteUsers\")) {\r\n if (!updateUser.isPasswordSet) {\r\n idpUserService.sendEmail(updateUser.userId, 'Invite').then(empty => {\r\n toast.success(updateUser.email + \" has been invited\");\r\n }).catch(error => {\r\n toast.error(\"User Invite Failed: \" + error, { autoClose: false });\r\n });\r\n } else {\r\n idpUserService.sendEmail(updateUser.userId, 'Reinvite').then(empty => {\r\n toast.success(updateUser.email + \" has been re-invited\");\r\n }).catch(error => {\r\n toast.error(\"User Invite Failed: \" + error, { autoClose: false });\r\n });\r\n }\r\n }\r\n }\r\n //load userpermissions\r\n dispatch(permissionsActions.loadUserPermissions()) \r\n .catch(error => {\r\n toast.error(\"Loading User Permissions Failed:\" + error, { autoClose: false });\r\n });\r\n\r\n bootstrap.Modal.getInstance(document.getElementById('edit-modal')).hide();\r\n if (isCreate) {\r\n toast.success(updateUser.email + \" has been created\");\r\n } else {\r\n toast.success(updateUser.email + \" has been saved\");\r\n }\r\n dispatch(pageActions.clearSelectedUser());\r\n setIsSaving(false);\r\n }).catch(error => {\r\n setIsSaving(false);\r\n toast.error(\"Save User Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const userIsValid = (user) => {\r\n const { email, firstName, lastName, partnerId, integrationServices, userId, twoFactorMethodClaims: userTwoFactorMethodClaims, jiraGroups } = user;\r\n const errors = {};\r\n const mailformat = /^\\w+([\\+\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,16})+$/;\r\n const partnerTwoFactorMethods = partnerId && partners.length > 0 ? partners.find(p => p.partnerId === partnerId).twoFactorMethods : [];\r\n\r\n if (!email) {\r\n errors.email = \"(Required)\";\r\n } else if ((!userId && users.find(u => u.email.toLowerCase() === email.toLowerCase())) ||\r\n (userId && (users.find(u => u.userId === userId).email.toLowerCase() != email.toLowerCase()) && users.find(u => u.email.toLowerCase() === email.toLowerCase()))) {\r\n errors.email = \"(Duplicate Email)\";\r\n } else if (!(email.match(mailformat))) {\r\n errors.email = \"(Invalid Email)\";\r\n }\r\n\r\n if (!firstName) {\r\n errors.firstName = \"(Required)\";\r\n }\r\n\r\n if (!lastName) {\r\n errors.lastName = \"(Required)\";\r\n }\r\n\r\n if (partnerId === 0) {\r\n errors.partnerId = \"(Required)\";\r\n }\r\n \r\n if (jiraGroups.length === 0) {\r\n errors.jiraGroups = \"(Required)\";\r\n } \r\n\r\n let authClaimErrors = false;\r\n\r\n if (integrationServices.find(s => s.name === \"Login\")) { \r\n if (user.twoFactorMethodId && hasViewPartnersPermission) {\r\n let partnerTwoFactorClaims = partnerTwoFactorMethods.find(s => s.twoFactorMethodId === user.twoFactorMethodId).claims;\r\n partnerTwoFactorClaims.forEach(ptfc => {\r\n let claim = userTwoFactorMethodClaims.find(utfc => utfc.claimType === ptfc.claimType);\r\n if (!claim || claim.claimLabel === \"\") {\r\n errors[ptfc.claimType] = \"(Required)\";\r\n authClaimErrors = true;\r\n }\r\n })\r\n } \r\n }\r\n\r\n if (errors.email || errors.firstName || errors.lastName || errors.partnerId) {\r\n setActiveTab(\"Info\");\r\n } else if (errors.twoFactorMethodId || errors.roles || authClaimErrors) {\r\n setActiveTab(\"Login\");\r\n } else if (errors.jiraGroups) {\r\n setActiveTab(\"Support\");\r\n }\r\n\r\n setErrors(errors);\r\n\r\n return Object.keys(errors).length === 0\r\n }\r\n\r\n const handleUserChange = (event) => {\r\n const { name, value } = event.target;\r\n setUser({\r\n ...user,\r\n [name]: name === \"partnerId\" ? parseInt(value, 10) : value\r\n });\r\n }\r\n\r\n const handleServiceClaimChange = (event) => {\r\n const { name, value } = event.target;\r\n let updatedUser = { ...user }\r\n if (updatedUser.twoFactorMethodClaims.find(c => c.claimType === name)) {\r\n updatedUser.twoFactorMethodClaims.find(c => c.claimType === name).claimLabel = value;\r\n } else {\r\n updatedUser.twoFactorMethodClaims.push({ claimType: name, claimLabel: value });\r\n }\r\n setUser(updatedUser)\r\n }\r\n\r\n const handleUserPartnerChange = (event) => {\r\n let updatedUser = { ...user };\r\n let userPartner = partners.find(partner => partner.partnerId === event.value);\r\n let availableServices = [...userPartner.availableUserServices];\r\n let integrationServices = [...updatedUser.integrationServices];\r\n let partnerIntegrationServices = [...userPartner.integrationServices];\r\n let subscriptions = [...userPartner.defaultSubscriptions].map(ds => ({\r\n groupId: ds.subscriptionId,\r\n name: availableSubscriptions.find(as => as.groupId == ds.subscriptionId).name\r\n }));\r\n updatedUser.integrationServices.forEach(service => {\r\n if (availableServices.find(a => a.serviceId === service.serviceId) != undefined) {\r\n let availableService = availableServices.find(a => a.serviceId === service.serviceId)\r\n let index = availableServices.indexOf(availableService);\r\n availableServices.splice(index, 1);\r\n } else {\r\n let index = integrationServices.indexOf(service);\r\n integrationServices.splice(index, 1);\r\n }\r\n })\r\n if (availableServices.some(as => as.name === \"Login\") && !updatedUser.userId) {\r\n let loginService = availableServices.find(as => as.name === \"Login\");\r\n updatedUser.shouldSendInviteEmail = true;\r\n let index = availableServices.indexOf(loginService);\r\n integrationServices.push(loginService);\r\n availableServices.splice(index, 1);\r\n }\r\n if (partnerIntegrationServices.some(as => as.name === \"Support\") && !updatedUser.userId) {\r\n let supportService = partnerIntegrationServices.find(as => as.name === \"Support\");\r\n let index = availableServices.findIndex(as => as.serviceId == supportService.serviceId);\r\n\r\n //add support service if user doesnt have it\r\n if (index != -1) {\r\n integrationServices.push(supportService);\r\n availableServices.splice(index, 1);\r\n }\r\n }\r\n\r\n updatedUser.jiraGroups = userPartner.jiraGroups;//set default jiraGroups on partner edit\r\n updatedUser.jiraOrganizations = userPartner.defaultJiraOrganizations//set default jiraOrganization on partner edit\r\n updatedUser.availableJiraOrganizations = userPartner.availableJiraOrganizations;\r\n\r\n if (updatedUser.integrationServices.length > integrationServices.length) {\r\n setUnconfirmedUser({\r\n ...user,\r\n partnerId: event.value,\r\n partnerName: event.label,\r\n integrationServices,\r\n availableServices,\r\n roles: [],\r\n companyPocs: [],\r\n subscriptions,\r\n jiraGroups: updatedUser.jiraGroups,\r\n jiraOrganizations: updatedUser.jiraOrganizations,\r\n availableJiraOrganizations: updatedUser.availableJiraOrganizations,\r\n twoFactorMethodId: null,\r\n twoFactorMethodName: \"\",\r\n shouldSendInviteEmail: updatedUser.shouldSendInviteEmail\r\n });\r\n new bootstrap.Modal(document.getElementById('services-modal'), { backdrop: 'static', keyboard: false }).show();\r\n } else {\r\n setUser({\r\n ...user,\r\n partnerId: event.value,\r\n partnerName: event.label,\r\n integrationServices,\r\n availableServices,\r\n roles: [],\r\n companyPocs: [],\r\n subscriptions,\r\n jiraGroups: updatedUser.jiraGroups,\r\n jiraOrganizations: updatedUser.jiraOrganizations,\r\n availableJiraOrganizations: updatedUser.availableJiraOrganizations,\r\n twoFactorMethodId: null,\r\n twoFactorMethodName: \"\",\r\n shouldSendInviteEmail: updatedUser.shouldSendInviteEmail\r\n });\r\n }\r\n }\r\n\r\n const handleUserPartnerChangeConfirmed = (event) => {\r\n event.preventDefault();\r\n setUser(unconfirmedUser);\r\n bootstrap.Modal.getInstance(document.getElementById('services-modal')).hide();\r\n }\r\n\r\n const handleRolesChange = (event) => {\r\n let selectedRoles = event.map(e => ({ roleId: e.value, name: e.label }));\r\n setUser({\r\n ...user,\r\n roles: selectedRoles\r\n });\r\n }\r\n\r\n const handleUserAuthChange = (event) => {\r\n \r\n if(event){\r\n setUser({\r\n ...user,\r\n twoFactorMethodId: event.value,\r\n twoFactorMethodName: event.label,\r\n serviceClaims: []\r\n });\r\n }\r\n else{\r\n setUser({\r\n ...user,\r\n twoFactorMethodId: null,\r\n twoFactorMethodName: \"\",\r\n serviceClaims: []\r\n });\r\n }\r\n }\r\n\r\n const handlePocChange = (event) => {\r\n let selectedPocs = event.map(e => ({\r\n groupId: e.value,\r\n name: e.label,\r\n type: 'poc'\r\n }))\r\n setUser({\r\n ...user,\r\n pocs: selectedPocs\r\n });\r\n }\r\n\r\n const handleSubscriptionsChange = (event) => {\r\n let selectedSubscriptions = event.map(e => ({\r\n groupId: e.value,\r\n name: e.label,\r\n type: 'subscription'\r\n }));\r\n setUser({\r\n ...user,\r\n subscriptions: selectedSubscriptions\r\n });\r\n }\r\n\r\n const handleNewServiceAdd = (service) => {\r\n let shouldSendInviteEmail = user.shouldSendInviteEmail;\r\n let userPartner = partners.find(partner => partner.partnerId === user.partnerId);\r\n let integrationServices = [...user.integrationServices];\r\n integrationServices.push(service);\r\n let availableServices = [...user.availableServices];\r\n let index = availableServices.indexOf(service);\r\n availableServices.splice(index, 1);\r\n let newServiceName = service.name;\r\n\r\n if (service.name === 'Login') {\r\n shouldSendInviteEmail = true;\r\n setUnconfirmedUser({\r\n ...user,\r\n integrationServices,\r\n shouldSendInviteEmail,\r\n availableServices,\r\n newServiceName\r\n });\r\n new bootstrap.Modal(document.getElementById('login-service-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n else if (service.name === 'Support') {\r\n user.jiraGroups = userPartner.jiraGroups;//set default jiraGroups on service add\r\n setUser({\r\n ...user,\r\n integrationServices,\r\n shouldSendInviteEmail,\r\n availableServices\r\n });\r\n setActiveTab(service.name);\r\n }\r\n else {\r\n setUser({\r\n ...user,\r\n integrationServices,\r\n shouldSendInviteEmail,\r\n availableServices\r\n });\r\n setActiveTab(service.name);\r\n }\r\n }\r\n\r\n const handleUserLoginServiceAddConfirmed = (event) => {\r\n event.preventDefault();\r\n setUser(unconfirmedUser);\r\n setActiveTab(unconfirmedUser.newServiceName);\r\n bootstrap.Modal.getInstance(document.getElementById('login-service-modal')).hide();\r\n }\r\n\r\n const handleRemoveService = (service) => {\r\n let shouldSendInviteEmail = user.shouldSendInviteEmail;\r\n let integrationServices = [...user.integrationServices];\r\n let index = integrationServices.indexOf(service);\r\n integrationServices.splice(index, 1);\r\n let availableServices = [...user.availableServices];\r\n availableServices.push(service);\r\n if (service.name === 'Login') {\r\n shouldSendInviteEmail = false;\r\n }\r\n setUser({\r\n ...user,\r\n integrationServices,\r\n shouldSendInviteEmail,\r\n availableServices\r\n });\r\n }\r\n\r\n const handleJiraGroupsChange = (event) => {\r\n if (!hasEditJiraUserGroupPermission) {\r\n return;\r\n }\r\n\r\n let selectedGroups = event.map(e => jiraGroups.find(g => g.groupId === e.value));\r\n setUser({\r\n ...user,\r\n jiraGroups: selectedGroups\r\n });\r\n }\r\n\r\n const handleJiraOrganizationChange = (event) => { \r\n let selectedOrganizations = event.map(e => ({ id: e.value, name: e.label}));\r\n if (event.length > 0) { \r\n if(selectedOrganizations[selectedOrganizations.length - 1].id == \"0\"){//check last selected element\r\n selectedOrganizations = [{ id: \"0\", name: \"No Organization\" }];\r\n }else if(selectedOrganizations[selectedOrganizations.length - 1].id == \"-1\"){\r\n selectedOrganizations = [{ id: \"-1\", name: \"--Managed by Jira Admins--\" }];\r\n }\r\n else { \r\n selectedOrganizations = selectedOrganizations.filter(org => org.id != \"0\" && org.id != \"-1\");\r\n }\r\n } else {\r\n\r\n if(!selectedUser.availableJiraOrganizations.some(org => org.id === \"0\")){\r\n toast.error(\"Users parter doesn't have 'No Organization' option as an available organization\", { autoClose: false });\r\n return;\r\n }\r\n selectedOrganizations = [{ id: \"0\", name: \"No Organization\" }];\r\n }\r\n\r\n setUser({\r\n ...user,\r\n jiraOrganizations: selectedOrganizations\r\n }); \r\n }\r\n\r\n const enabledPartners = partners.filter(p => p.disabled === false);\r\n\r\n const availableServices = user.availableServices ? user.availableServices.filter(service => !service.serviceCategories.some(cat => cat.name === 'Navigation')\r\n && !service.serviceCategories.some(cat => cat.name === 'PartnerOnly') && service.name != \"Support\") : [];\r\n\r\n const hasEditPointOfContactsPermission = userPermissions.some(up => up.name === \"EditPointOfContacts\");\r\n const hasViewPartnersPermission = userPermissions.some(up => up.name === \"ViewPartners\");\r\n const hasEditJiraUserGroupPermission = userPermissions.some(up => up.name === \"EditJiraUserGroup\");\r\n const hasEditJiraUserOrganizationPermission = userPermissions.some(up => up.name === \"EditJiraUserOrganization\");\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    { user.userId ? \"Update User\" : \"New User\" }

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n { (isSaving || isLoading) ?\r\n
    \r\n : \"\"\r\n }\r\n
    \r\n
    \r\n \r\n \r\n setActiveTab(\"Info\") }\r\n >\r\n Info\r\n \r\n \r\n \r\n setActiveTab(\"Support\") }\r\n >\r\n Support\r\n \r\n \r\n { user.integrationServices.filter(service => service.name != \"Support\" ).map(service => {\r\n return (\r\n \r\n setActiveTab(service.name) }\r\n >\r\n { service.name } handleRemoveService(service) }>\r\n \r\n \r\n )\r\n }) }\r\n { availableServices.length > 0 ?\r\n
  • \r\n
    \r\n \r\n
    \r\n { availableServices.map(service => {\r\n return (\r\n handleNewServiceAdd(service) }\r\n >\r\n { service.name }\r\n \r\n )\r\n }) }\r\n
    \r\n
    \r\n
  • \r\n : \"\"\r\n }\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: partner.partnerId,\r\n label: partner.name\r\n })) }\r\n styles={ theme == 'light' ? styles.DropdownSelectStyleLight : styles.DropdownSelectStyleDark }\r\n isDisabled={ !hasViewPartnersPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: poc.groupId,\r\n label: poc.name\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ availablePocs.map(poc => ({\r\n value: poc.groupId,\r\n label: poc.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditPointOfContactsPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: subscription.groupId,\r\n label: subscription.name\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ availableSubscriptions.map(subscription => ({\r\n value: subscription.groupId,\r\n label: subscription.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: org.id,\r\n label: org.name\r\n })) }\r\n onChange={ handleJiraOrganizationChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ user.availableJiraOrganizations?.map(org => ({\r\n value: org.id,\r\n label: org.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditJiraUserOrganizationPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n onChange={ handleJiraGroupsChange }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ jiraGroups.map(group => ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n isDisabled={ !hasEditJiraUserGroupPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: role.roleId,\r\n label: role.name\r\n })) }\r\n options={ roles.map(role => ({\r\n value: role.roleId,\r\n label: role.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: service.twoFactorMethodId,\r\n label: service.name\r\n })) }\r\n styles={ theme == 'light' ? styles.DropdownSelectStyleLight : styles.DropdownSelectStyleDark }\r\n isDisabled={ !hasViewPartnersPermission }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n { user.twoFactorMethodId && authServices.length > 0 ? authServices.find(s => s.twoFactorMethodId === user.twoFactorMethodId).claims.map(claim => {\r\n return (\r\n c.claimType === claim.claimType) ? user.twoFactorMethodClaims.find(c => c.claimType === claim.claimType).claimLabel : \"\" }\r\n onChange={ handleServiceClaimChange }\r\n error={ Object.keys(errors).find(key => key === claim.claimType) ? errors[claim.claimType] : \"\" }\r\n wrapperClass=\"mb-3\"\r\n isRequired={ true }\r\n />\r\n )\r\n }) : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n * Required\r\n

    \r\n
    \r\n
    \r\n
    \r\n { isSaving ?\r\n
    Saving...
    \r\n : isLoading ?
    Loading...
    \r\n : \r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Old Partner: \" + user.partnerName + \"
    New Partner: \" + unconfirmedUser.partnerName + \"

    Making this change will result in one or more services being removed from the user?\" }\r\n onSubmit={ handleUserPartnerChangeConfirmed }\r\n theme={ theme }\r\n />\r\n
    Note: Saving this form with the Login tab will create the Oasis Portal user.\" }\r\n onSubmit={ handleUserLoginServiceAddConfirmed }\r\n theme={ theme }\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default UserEdit;","import React, { useState } from 'react'\r\nimport Select from 'react-select';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as usersService from '../../services/usersService';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport * as bootstrap from 'bootstrap';\r\nimport * as styles from '../common/DropdownStyles';\r\nimport { CFormCheck } from '@coreui/bootstrap-react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction MassUserEdit({ theme }) {\r\n\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [selectedSubscriptions, setSelectedSubscriptions] = useState([]);\r\n const [massAction, setMassAction] = useState('add');\r\n\r\n const availableSubscriptions = useSelector(state => state.groups.availableSubscriptions);\r\n const selectedUsers = useSelector(state => state.page.users.selectedUsers);\r\n const dispatch = useDispatch();\r\n\r\n const handleMassSave = (event) => {\r\n setIsSaving(true);\r\n event.preventDefault();\r\n\r\n var shouldAdd = massAction === \"add\" ? true : false;\r\n var subs = selectedSubscriptions;\r\n var users = selectedUsers;\r\n var massEditSubscriptionInfo = { UserInfoMins: users, Subscriptions: subs, ShouldAdd: shouldAdd };\r\n\r\n usersService.massEditSubscriptions(massEditSubscriptionInfo)\r\n .then(empty => {\r\n bootstrap.Modal.getInstance(document.getElementById('mass-user-edit-modal')).hide();\r\n toast.success(\"Mass Operation Complete\");\r\n })\r\n .catch(error => {\r\n bootstrap.Modal.getInstance(document.getElementById('mass-user-edit-modal')).hide();\r\n toast.error(\"Mass Update Users Failed: \" + error.message ?? error, { autoClose: false });\r\n })\r\n .finally(() => {\r\n setIsSaving(false);\r\n dispatch(pageActions.clearSelectedUsers());\r\n setSelectedSubscriptions([]);\r\n setMassAction('add');\r\n document.getElementById(\"flexRadioDefault1\").checked = true;\r\n });\r\n }\r\n\r\n const handleSubscriptionsChange = (event) => {\r\n let currentSubs = event.map(e => ({\r\n groupId: e.value,\r\n name: e.label\r\n }));\r\n setSelectedSubscriptions(currentSubs);\r\n }\r\n\r\n const onCloseClick = () => {\r\n setSelectedSubscriptions([]);\r\n setMassAction('add');\r\n document.getElementById(\"flexRadioDefault1\").checked = true;\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Mass Edit Subscriptions

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n { (isSaving) ?\r\n
    \r\n : \"\"\r\n }\r\n
    \r\n ({\r\n value: subscription.groupId,\r\n label: subscription.name\r\n })) }\r\n menuPosition=\"fixed\"\r\n menuPlacement=\"bottom\"\r\n options={ availableSubscriptions.map(subscription => ({\r\n value: subscription.groupId,\r\n label: subscription.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    setMassAction('add') }>\r\n \r\n
    \r\n
    setMassAction('remove') }>\r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n { isSaving ?\r\n
    Saving...
    \r\n : \r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default MassUserEdit;","import React, { useEffect, useState } from 'react';\r\nimport * as usersActions from '../../redux/actions/usersActions';\r\nimport * as partnersActions from '../../redux/actions/partnersActions';\r\nimport * as groupsActions from '../../redux/actions/groupsActions';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport * as idpUserService from '../../services/idpUserService';\r\nimport * as permissionsActions from '../../redux/actions/permissionsActions';\r\nimport * as servicesActions from '../../redux/actions/servicesActions';\r\nimport UserDetails from './UserDetails';\r\nimport UserEdit from './UserEdit';\r\nimport MassUserEdit from './MassUserEdit';\r\nimport { toast } from 'react-toastify';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport PaginatedList from '../common/PaginatedList';\r\nimport FilterSlideout from '../common/FilterSlideout';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as ModalBackgroundRemover from '../common/ModalBackgroundRemover';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction UsersPage({ theme }) {\r\n\r\n const [columnFiltersPopulated, setColumnFiltersPopulated] = useState(false);\r\n\r\n const selectedUser = useSelector(state => state.page.users.selectedUser);\r\n const searchTerm = useSelector(state => state.page.users.searchTerm);\r\n const allPartners = useSelector(state => state.partners);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const filterByColumn = useSelector(state => state.page.users.filterByColumn);\r\n const textFilters = useSelector(state => state.page.users.textFilters);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewPartners\")) {\r\n dispatch(partnersActions.loadPartners()).catch(error => {\r\n toast.error(\"Loading Partners Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n if (userPermissions.some(p => p.name === \"ViewUsers\")) {\r\n dispatch(usersActions.loadUsers()).catch(error => {\r\n toast.error(\"Loading Users Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n dispatch(permissionsActions.loadCanAssignRoles()).catch(error => {\r\n toast.error(\"Loading User Assign Roles Failed: \" + error, { autoClose: false })\r\n });\r\n dispatch(groupsActions.loadAvailablePocs()).catch(error => {\r\n toast.error(\"Loading Available Company Pocs Failed: \" + error, { autoClose: false })\r\n });\r\n dispatch(groupsActions.loadAvailableSubscriptions()).catch(error => {\r\n toast.error(\"Loading Available Subscriptions Failed: \" + error, { autoClose: false })\r\n });\r\n dispatch(servicesActions.loadAuthServices()).catch(error => {\r\n toast.error(\"Loading Auth Services Failed: \" + error, { autoClose: false })\r\n });\r\n ModalBackgroundRemover.removeModalBackground();\r\n }, [])\r\n\r\n useEffect(() => {\r\n let noFilters = true;\r\n for (const text in textFilters) {\r\n if (textFilters[text] != \"\") {\r\n noFilters = false;\r\n setColumnFiltersPopulated(true);\r\n }\r\n }\r\n if (noFilters) {\r\n setColumnFiltersPopulated(false);\r\n }\r\n }, [textFilters])\r\n\r\n const handleNewUser = () => {\r\n let partner = { partnerId: 0, name: \"Select a Partner...\", availableUserServices: [] };\r\n let newUser = {\r\n integrationServices: [],\r\n availableServices: partner.availableUserServices,\r\n pocs: [],\r\n subscriptions: [],\r\n partnerId: partner.partnerId,\r\n partnerName: partner.name,\r\n twoFactorMethodId: null,\r\n twoFactorMethodName: \"\",\r\n jiraOrganizations: [],\r\n jiraGroups: [],\r\n roles: []\r\n };\r\n\r\n if (allPartners.length === 1) {\r\n partner = allPartners[0];\r\n\r\n //make sure you handle all additional properties that youd want new single partner users to be prepopulated below\r\n newUser = { ...newUser,\r\n availableServices: partner.availableUserServices,\r\n partnerId: partner.partnerId,\r\n partnerName: partner.name,\r\n jiraOrganizations: partner.defaultJiraOrganizations,\r\n jiraGroups: partner.jiraGroups\r\n };\r\n }\r\n \r\n if (newUser.availableServices.some(as => as.name === \"Login\")) {\r\n let loginService = newUser.availableServices.find(as => as.name === \"Login\");\r\n let shouldSendInviteEmail = newUser.shouldSendInviteEmail;\r\n let userIntegrationServices = [...newUser.integrationServices];\r\n let userAvailableServices = [...newUser.availableServices];\r\n let index = userAvailableServices.indexOf(loginService);\r\n userIntegrationServices.push(loginService);\r\n userAvailableServices.splice(index, 1);\r\n shouldSendInviteEmail = true;\r\n newUser = {\r\n ...newUser,\r\n integrationServices: userIntegrationServices,\r\n shouldSendInviteEmail,\r\n availableServices: userAvailableServices\r\n };\r\n }\r\n dispatch(pageActions.updateSelectedUser(newUser));\r\n new bootstrap.Modal(document.getElementById('edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDisableUserConfirmed = (event) => {\r\n event.preventDefault();\r\n dispatch(usersActions.disableUser(selectedUser))\r\n .then(empty => {\r\n toast.success(selectedUser.email + \" has been disabled\");\r\n bootstrap.Modal.getInstance(document.getElementById('disable-modal')).hide();\r\n })\r\n .catch(error => {\r\n toast.error(\"Disable User Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const handleEnableUserConfirmed = (event) => {\r\n event.preventDefault();\r\n dispatch(usersActions.enableUser(selectedUser))\r\n .then(empty => {\r\n toast.success(selectedUser.email + \" has been enabled\");\r\n bootstrap.Modal.getInstance(document.getElementById('enable-modal')).hide();\r\n })\r\n .catch(error => {\r\n toast.error(\"Enable User Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const handleReset2faUserConfirmed = event => {\r\n event.preventDefault();\r\n dispatch(usersActions.resetUser2fa(selectedUser))\r\n .then(empty => {\r\n toast.success(\"Two factor authentication for \" + selectedUser.email + \" has been reset\");\r\n bootstrap.Modal.getInstance(document.getElementById('reset-2fa-modal')).hide();\r\n idpUserService.sendEmail(selectedUser.userId, 'reset2fa').then(empty => {\r\n toast.success(selectedUser.email + \" has been sent the email to set up 2FA\");\r\n }).catch(error => {\r\n toast.error(\"User New Password Email Failed: \" + error, { autoClose: false })\r\n });\r\n })\r\n .catch(error => {\r\n toast.error(\"Reset User 2FA Failed: \" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n const handleResetPasswordUserConfirmed = event => {\r\n event.preventDefault();\r\n dispatch(usersActions.resetUserPassword(selectedUser))\r\n .then(empty => {\r\n toast.success(\"Password for \" + selectedUser.email + \" has been reset\");\r\n bootstrap.Modal.getInstance(document.getElementById('reset-password-modal')).hide();\r\n idpUserService.sendEmail(selectedUser.userId, 'UserNewPassword').then(empty => {\r\n toast.success(selectedUser.email + \" has been sent the email to set up a new password\");\r\n }).catch(error => {\r\n toast.error(\"User New Password Email Failed: \" + error, { autoClose: false })\r\n });\r\n }).catch(error => {\r\n toast.error(\"Reset User Password Failed: \" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"users\", event.target.value));\r\n }\r\n\r\n const handleToggleFilterByColumn = () => {\r\n dispatch(pageActions.toggleFilterByColumn(\"users\", !filterByColumn));\r\n }\r\n\r\n const handleClearFilterByColumn = () => {\r\n dispatch(pageActions.clearTextFilters(\"users\"));\r\n setColumnFiltersPopulated(false);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Users

    \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n filterByColumn ?\r\n \r\n : \r\n }\r\n \r\n \r\n {\r\n columnFiltersPopulated ?\r\n \r\n : \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n { userPermissions.some(up => up.name == \"AddUsers\") ?\r\n New User\r\n : \"\"\r\n }\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n This user will be sent an email to set up a new password.\" }\r\n onSubmit={ handleResetPasswordUserConfirmed }\r\n theme={ theme }\r\n />\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default UsersPage;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getVirtualMachines() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/virtualmachine').catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function startVirtualMachine(virtualMachineId) {\r\n await axios.post(config.OASIS_PORTAL_URL + 'api/virtualmachine/start/' + virtualMachineId).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n}\r\n\r\nexport async function restartVirtualMachine(restartInfo) {\r\n await axios.post(config.OASIS_PORTAL_URL + 'api/virtualmachine/restart/', restartInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n}\r\n\r\nexport async function stopVirtualMachine(stopInfo) {\r\n await axios.post(config.OASIS_PORTAL_URL + 'api/virtualmachine/stop/', stopInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n}","import * as pageActions from '../actions/pageActions';\r\nimport * as virtualMachinesService from '../../services/virtualMachinesService';\r\nimport * as types from \"./types\";\r\n\r\nexport function loadVirtualMachinesSuccess(virtualMachines) {\r\n return { type: types.LOAD_VIRTUAL_MACHINES_SUCCESS, virtualMachines };\r\n}\r\n\r\nexport function updateVirtualMachineStatusSuccess(virtualMachineId, statusString, status) {\r\n return { type: types.UPDATE_VIRTUAL_MACHINE_STATUS_SUCCESS, virtualMachineId, statusString, status };\r\n}\r\n\r\nexport function loadVirtualMachines() {\r\n return function (dispatch) {\r\n return virtualMachinesService.getVirtualMachines()\r\n .then(virtualMachines => {\r\n dispatch(loadVirtualMachinesSuccess(virtualMachines));\r\n dispatch(pageActions.loadedPage(\"virtualMachines\"));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function startVirtualMachine(virtualMachineId) {\r\n return function (dispatch) {\r\n dispatch(updateVirtualMachineStatusSuccess(virtualMachineId, \"Starting\", \"Starting\"));\r\n return virtualMachinesService.startVirtualMachine(virtualMachineId)\r\n .then(() => {\r\n dispatch(updateVirtualMachineStatusSuccess(virtualMachineId, \"Running\", \"Running\"));\r\n })\r\n .catch(error => {\r\n dispatch(updateVirtualMachineStatusSuccess(virtualMachineId, \"Error\", \"Error\"));\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function restartVirtualMachine(restartInfo) {\r\n return function (dispatch) {\r\n dispatch(updateVirtualMachineStatusSuccess(restartInfo.virtualMachineId, \"Restarting\", \"Restarting\"));\r\n return virtualMachinesService.restartVirtualMachine(restartInfo)\r\n .then(() => {\r\n dispatch(updateVirtualMachineStatusSuccess(restartInfo.virtualMachineId, \"Running\", \"Running\"));\r\n })\r\n .catch(error => {\r\n dispatch(updateVirtualMachineStatusSuccess(restartInfo.virtualMachineId, \"Error\", \"Error\"));\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function stopVirtualMachine(stopInfo) {\r\n return function (dispatch) {\r\n dispatch(updateVirtualMachineStatusSuccess(stopInfo.virtualMachineId, \"Stopping\", \"Stopping\"));\r\n return virtualMachinesService.stopVirtualMachine(stopInfo)\r\n .then(() => {\r\n dispatch(updateVirtualMachineStatusSuccess(stopInfo.virtualMachineId, \"Stopped\", \"PowerOff\"));\r\n })\r\n .catch(error => {\r\n dispatch(updateVirtualMachineStatusSuccess(stopInfo.virtualMachineId, \"Error\", \"Error\"));\r\n throw error;\r\n });\r\n }\r\n}","import React, { useEffect, useState } from 'react';\r\nimport * as virtualMachinesActions from '../../redux/actions/virtualMachinesActions';\r\nimport * as pageActions from '../../redux/actions/pageActions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport * as bootstrap from 'bootstrap';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport PaginatedList from '../common/PaginatedList';\r\nimport FilterSlideout from '../common/FilterSlideout';\r\nimport * as ModalBackgroundRemover from '../common/ModalBackgroundRemover';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction VirtualMachinesPage({ theme }) {\r\n\r\n const [columnFiltersPopulated, setColumnFiltersPopulated] = useState(false);\r\n\r\n const searchTerm = useSelector(state => state.page.virtualMachines.searchTerm);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const selectedMachine = useSelector(state => state.page.virtualMachines.selectedMachine);\r\n const filterByColumn = useSelector(state => state.page.virtualMachines.filterByColumn);\r\n const textFilters = useSelector(state => state.page.virtualMachines.textFilters);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewVirtualMachines\")) {\r\n dispatch(virtualMachinesActions.loadVirtualMachines()).catch(error => {\r\n toast.error(\"Loading Virtual Machines Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n ModalBackgroundRemover.removeModalBackground();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let noFilters = true;\r\n for (const text in textFilters) {\r\n if (textFilters[text] != \"\") {\r\n noFilters = false;\r\n setColumnFiltersPopulated(true);\r\n }\r\n }\r\n if (noFilters) {\r\n setColumnFiltersPopulated(false);\r\n }\r\n }, [textFilters])\r\n\r\n const handleStartVMConfirmed = (event, machine) => {\r\n event.preventDefault();\r\n dispatch(virtualMachinesActions.startVirtualMachine(machine.virtualMachineId)).then(() => {\r\n toast.success(machine.name + \" has been started\");\r\n dispatch(virtualMachinesActions.loadVirtualMachines()).catch(error => {\r\n toast.error(\"Loading Virtual Machines Failed:\" + error, { autoClose: false });\r\n });\r\n }).catch(error => {\r\n toast.error(\"Starting \" + machine.name + \" Failed: \" + error, { autoClose: false })\r\n });\r\n bootstrap.Modal.getInstance(document.getElementById('start-modal')).hide();\r\n }\r\n\r\n const handleRestartVMConfirmed = (event, machine) => {\r\n event.preventDefault();\r\n let description = event.target[0].value;\r\n let restartInfo = { virtualMachineId: machine.virtualMachineId, description: description };\r\n dispatch(virtualMachinesActions.restartVirtualMachine(restartInfo)).then(() => {\r\n toast.success(machine.name + \" has been restarted\");\r\n dispatch(virtualMachinesActions.loadVirtualMachines()).catch(error => {\r\n toast.error(\"Loading Virtual Machines Failed:\" + error, { autoClose: false });\r\n });\r\n }).catch(error => {\r\n toast.error(\"Restarting \" + machine.name + \" Failed: \" + error, { autoClose: false })\r\n });\r\n bootstrap.Modal.getInstance(document.getElementById('restart-modal')).hide();\r\n }\r\n\r\n const handleStopVMConfirmed = (event, machine) => {\r\n event.preventDefault();\r\n let description = event.target[0].value;\r\n let stopInfo = { virtualMachineId: machine.virtualMachineId, description: description };\r\n dispatch(virtualMachinesActions.stopVirtualMachine(stopInfo)).then(() => {\r\n toast.success(machine.name + \" has been shut down\");\r\n dispatch(virtualMachinesActions.loadVirtualMachines()).catch(error => {\r\n toast.error(\"Loading Virtual Machines Failed:\" + error, { autoClose: false });\r\n });\r\n }).catch(error => {\r\n toast.error(\"Shutdown \" + machine.name + \" Failed: \" + error, { autoClose: false })\r\n });\r\n bootstrap.Modal.getInstance(document.getElementById('stop-modal')).hide();\r\n }\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"virtualMachines\", event.target.value));\r\n }\r\n\r\n const handleToggleFilterByColumn = () => {\r\n dispatch(pageActions.toggleFilterByColumn(\"virtualMachines\", !filterByColumn));\r\n }\r\n\r\n const handleClearFilterByColumn = () => {\r\n dispatch(pageActions.clearTextFilters(\"virtualMachines\"));\r\n setColumnFiltersPopulated(false);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Virtual Machines

    \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n filterByColumn ?\r\n \r\n : \r\n }\r\n \r\n \r\n {\r\n columnFiltersPopulated ?\r\n \r\n : \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    Proceed?\" }\r\n onSubmit={ (event) => handleStartVMConfirmed(event, { name: selectedMachine.name, virtualMachineId: selectedMachine.virtualMachineId }) }\r\n theme={ theme }\r\n />\r\n

    Proceed?\" }\r\n onSubmit={ (event) => handleRestartVMConfirmed(event, { name: selectedMachine.name, virtualMachineId: selectedMachine.virtualMachineId }) }\r\n theme={ theme }\r\n />\r\n

    Proceed?\" }\r\n onSubmit={ (event) => handleStopVMConfirmed(event, { name: selectedMachine.name, virtualMachineId: selectedMachine.virtualMachineId }) }\r\n theme={ theme }\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default VirtualMachinesPage;","import React, { useState } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { useSelector } from 'react-redux';\r\nimport { CContainer, CNavbar, CNavbarToggler, CCollapse, CNavbarNav, CNavItem } from '@coreui/bootstrap-react';\r\nimport { NavLink as RRNavLink } from 'react-router-dom';\r\nimport * as auditsService from '../../services/auditsService';\r\n\r\nfunction AdministrationNavMenu() {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const auth = useSelector(state => state.auth);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n\r\n const handleNavClickLogging = (pageName) => {\r\n auditsService.logPageView(pageName);\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n

    \r\n Administration\r\n

    \r\n setVisible(!visible) } className=\"me-2\" />\r\n \r\n \r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewUserStatus\") ?\r\n \r\n handleNavClickLogging(\"UserStatus\")} tag={RRNavLink} to=\"/Administration/UserStatus\">USER STATUS\r\n \r\n : \"\"\r\n }\r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewAudits\") ?\r\n \r\n handleNavClickLogging(\"Audits\") } tag={ RRNavLink } to=\"/Administration/Audits\">AUDITS\r\n \r\n : \"\"\r\n }\r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewRoles\") ?\r\n \r\n handleNavClickLogging(\"Roles\") } tag={ RRNavLink } to=\"/Administration/Roles\">ROLES\r\n \r\n : \"\"\r\n }\r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewAdminSettings\") ?\r\n \r\n handleNavClickLogging(\"Maintenance\") } tag={ RRNavLink } to=\"/Administration/Settings\">SETTINGS\r\n \r\n : \"\"\r\n }\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n}\r\n\r\nexport default AdministrationNavMenu;","import React, { Component } from 'react';\r\nimport AdministrationNavMenu from './AdministrationNavMenu';\r\n\r\nexport class AdministrationLayout extends Component {\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n { this.props.children }\r\n
    \r\n
    \r\n );\r\n }\r\n}","import * as pageActions from \"../actions/pageActions\";\r\nimport * as types from \"./types\";\r\nimport * as usersService from \"../../services/usersService\";\r\n\r\nexport function loadUserStatusesSuccess(userStatuses) {\r\n return { type: types.LOAD_USER_STATUSES_SUCCESS, userStatuses }\r\n}\r\n\r\nexport function loadUserStatuses() {\r\n return function (dispatch) {\r\n return usersService.getAllLoggedInUserStatuses()\r\n .then(userStatuses => {\r\n dispatch(loadUserStatusesSuccess(userStatuses));\r\n dispatch(pageActions.loadedPage(\"userStatuses\"));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport * as userStatusesActions from '../../../redux/actions/userStatusesActions';\r\nimport * as ModalBackgroundRemover from '../../common/ModalBackgroundRemover';\r\nimport PaginatedList from '../../common/PaginatedList';\r\nimport FilterSlideout from '../../common/FilterSlideout';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction UserStatusPage({ theme }) {\r\n\r\n const [columnFiltersPopulated, setColumnFiltersPopulated] = useState(false);\r\n\r\n const searchTerm = useSelector(state => state.page.userStatuses.searchTerm);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const filterByColumn = useSelector(state => state.page.userStatuses.filterByColumn);\r\n const textFilters = useSelector(state => state.page.userStatuses.textFilters);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewUserStatus\")) {\r\n dispatch(userStatusesActions.loadUserStatuses()).catch(error => {\r\n toast.error(\"Loading User Status Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n ModalBackgroundRemover.removeModalBackground();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let noFilters = true;\r\n for (const text in textFilters) {\r\n if (textFilters[text] != \"\") {\r\n noFilters = false;\r\n setColumnFiltersPopulated(true);\r\n }\r\n }\r\n if (noFilters) {\r\n setColumnFiltersPopulated(false);\r\n }\r\n }, [textFilters])\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"userStatuses\", event.target.value));\r\n }\r\n\r\n const handleToggleFilterByColumn = () => {\r\n dispatch(pageActions.toggleFilterByColumn(\"userStatuses\", !filterByColumn));\r\n }\r\n\r\n const handleClearFilterByColumn = () => {\r\n dispatch(pageActions.clearTextFilters(\"userStatuses\"));\r\n setColumnFiltersPopulated(false);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n filterByColumn ?\r\n \r\n : \r\n }\r\n \r\n \r\n {\r\n columnFiltersPopulated ?\r\n \r\n : \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default UserStatusPage;","import React, { useEffect, useState } from 'react'\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport * as dateUtils from '../../../utils/dateUtils';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction AuditDetails({ theme }) {\r\n\r\n const [activeTab, setActiveTab] = useState(\"Info\");\r\n\r\n const selectedAuditDetails = useSelector(state => state.page.audits.selectedAuditDetails);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n var detailsModal = document.getElementById('details-modal');\r\n detailsModal.addEventListener('hidden.bs.modal', () => {\r\n dispatch(pageActions.clearSelectedAuditDetails());\r\n });\r\n }, [])\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Audit Details

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n Timestamp :\r\n
    \r\n
    \r\n { dateUtils.getLocalTime(selectedAuditDetails.userActionAuditLogEntry.createdDate) } { dateUtils.getLocalDate(selectedAuditDetails.userActionAuditLogEntry.createdDate) }\r\n
    \r\n
    \r\n
    \r\n
    \r\n User :\r\n
    \r\n
    \r\n { selectedAuditDetails.userActionAuditLogEntry ? selectedAuditDetails.userActionAuditLogEntry.userEmail : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Partner :\r\n
    \r\n
    \r\n { selectedAuditDetails.userActionAuditLogEntry ? selectedAuditDetails.userActionAuditLogEntry.partnerName : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Action :\r\n
    \r\n
    \r\n { selectedAuditDetails.userActionAuditLogEntry ? selectedAuditDetails.userActionAuditLogEntry.action : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Type :\r\n
    \r\n
    \r\n { selectedAuditDetails.userActionAuditLogEntry ? selectedAuditDetails.userActionAuditLogEntry.actedUpon : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Name :\r\n
    \r\n
    \r\n { selectedAuditDetails.userActionAuditLogEntry ? selectedAuditDetails.userActionAuditLogEntry.name : \"\" }\r\n
    \r\n
    \r\n
    \r\n
    \r\n Details :\r\n
    \r\n
    \r\n { selectedAuditDetails.detail }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default AuditDetails;","import React, { useEffect, useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport * as auditsActions from '../../../redux/actions/auditActions';\r\nimport * as usersActions from '../../../redux/actions/usersActions';\r\nimport * as partnersActions from '../../../redux/actions/partnersActions';\r\nimport * as ModalBackgroundRemover from '../../common/ModalBackgroundRemover';\r\nimport PaginatedList from '../../common/PaginatedList';\r\nimport FilterSlideout from '../../common/FilterSlideout';\r\nimport AuditDetails from './AuditDetails';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction AuditsPage({ theme }) {\r\n\r\n const [columnFiltersPopulated, setColumnFiltersPopulated] = useState(false);\r\n\r\n const searchTerm = useSelector(state => state.page.audits.searchTerm);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const filterByColumn = useSelector(state => state.page.audits.filterByColumn);\r\n const textFilters = useSelector(state => state.page.audits.textFilters);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (userPermissions.some(p => p.name === \"ViewAudits\")) {\r\n dispatch(auditsActions.loadAudits()).catch(error => {\r\n toast.error(\"Loading Audits Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n if (userPermissions.some(p => p.name === \"ViewUsers\")) {\r\n dispatch(usersActions.loadUsers()).catch(error => {\r\n toast.error(\"Loading Users Failed\" + error, { autoClose: false });\r\n });\r\n }\r\n if (userPermissions.some(p => p.name === \"ViewPartners\")) {\r\n dispatch(partnersActions.loadPartners()).catch(error => {\r\n toast.error(\"Loading Partners Failed\" + error, { autoClose: false });\r\n });\r\n }\r\n ModalBackgroundRemover.removeModalBackground();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let noFilters = true;\r\n for (const text in textFilters) {\r\n if (textFilters[text] != \"\") {\r\n noFilters = false;\r\n setColumnFiltersPopulated(true);\r\n }\r\n }\r\n if (noFilters) {\r\n setColumnFiltersPopulated(false);\r\n }\r\n }, [textFilters])\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"audits\", event.target.value));\r\n }\r\n\r\n const handleToggleFilterByColumn = () => {\r\n dispatch(pageActions.toggleFilterByColumn(\"audits\", !filterByColumn));\r\n }\r\n\r\n const handleClearFilterByColumn = () => {\r\n dispatch(pageActions.clearTextFilters(\"audits\"));\r\n setColumnFiltersPopulated(false);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n filterByColumn ?\r\n \r\n : \r\n }\r\n \r\n \r\n {\r\n columnFiltersPopulated ?\r\n \r\n : \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n )\r\n}\r\n\r\nexport default AuditsPage;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function updateRequired(roleInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/role/update-required', roleInfo);\r\n return response.data;\r\n}\r\n\r\nexport async function getRole(roleId) {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/role/' + roleId).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function getRoles() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/role');\r\n return response.data;\r\n}\r\n\r\nexport async function deleteRole(roleId) {\r\n const response = await axios.delete(config.OASIS_PORTAL_URL + 'api/role/' + roleId).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function saveRole(roleInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/role', roleInfo).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data\r\n}","import * as pageActions from \"../actions/pageActions\";\r\nimport * as types from \"./types\";\r\nimport * as rolesService from \"../../services/rolesService\";\r\n\r\nexport function loadRoleSuccess(role) {\r\n return { type: types.LOAD_ROLE_SUCCESS, role }\r\n}\r\n\r\nexport function loadRolesSuccess(roles) {\r\n return { type: types.LOAD_ROLES_SUCCESS, roles }\r\n}\r\n\r\nexport function deleteRoleSuccess(roleId) {\r\n return { type: types.DELETE_ROLE_SUCCESS, roleId }\r\n}\r\n\r\nexport function saveRoleSuccess(role) {\r\n return { type: types.SAVE_ROLE_SUCCESS, role }\r\n}\r\n\r\nexport function createRoleSuccess(role) {\r\n return { type: types.CREATE_ROLE_SUCCESS, role }\r\n}\r\n\r\nexport function loadRole(role) {\r\n return function (dispatch) {\r\n return rolesService.getRole(role.roleId)\r\n .then(role => {\r\n dispatch(loadRoleSuccess(role));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function loadRoles() {\r\n return function (dispatch) {\r\n return rolesService.getRoles()\r\n .then(roles => {\r\n dispatch(loadRolesSuccess(roles));\r\n dispatch(pageActions.loadedPage(\"roles\"));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function deleteRole(role) {\r\n return function (dispatch) {\r\n return rolesService.deleteRole(role.roleId)\r\n .then(empty => {\r\n dispatch(deleteRoleSuccess(role.roleId));\r\n }).catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function saveRole(role) {\r\n return function (dispatch) {\r\n return rolesService.saveRole(role)\r\n .then(savedRole => {\r\n role.roleId\r\n ? dispatch(saveRoleSuccess(savedRole))\r\n : dispatch(createRoleSuccess(savedRole));\r\n }).catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import React, { useState, useEffect, useCallback } from 'react';\r\nimport TextInput from '../../common/TextInput';\r\nimport Select from 'react-select';\r\nimport * as rolesActions from '../../../redux/actions/rolesActions';\r\nimport * as partnersActions from '../../../redux/actions/partnersActions';\r\nimport * as rolesService from '../../../services/rolesService';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport * as styles from '../../common/DropdownStyles';\r\nimport * as bootstrap from 'bootstrap';\r\nimport { toast } from 'react-toastify';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction RoleEdit({ theme }) {\r\n\r\n const [isLoading, setIsLoading] = useState();\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [editModal, setEditModal] = useState();\r\n const [refreshRoleToastId, setRefreshRoleToastId] = useState(\"\");\r\n const [errors, setErrors] = useState({});\r\n const [role, setRole] = useState(useSelector(state => state.page.roles.selectedRole));\r\n\r\n const sortPermissions = (permissionA, permissionB) => {\r\n var x = permissionA.friendlyName.toLowerCase();\r\n var y = permissionB.friendlyName.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n }\r\n\r\n const selectedRole = useSelector(state => state.page.roles.selectedRole);\r\n const allRoles = useSelector(state => state.roles.filter(p => { return p && p.name != \"System Admin\"; }));\r\n const userPermissions = useSelector(state => state.auth.permissions).sort(sortPermissions);\r\n const partners = useSelector(state => state.partners);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n return () => {\r\n dispatch(pageActions.clearSelectedRole());\r\n };\r\n }, [])\r\n\r\n const refreshMessage = (role) => (\r\n
    \r\n
    \r\n { role.name }
    has been modified:\r\n
    \r\n
    \r\n To refresh click this message.\r\n
    \r\n
    \r\n Please note that refreshing will overwrite any current changes and saving new changes will not be permitted without a refresh.\r\n
    \r\n
    \r\n );\r\n\r\n const refreshRole = (roleId, dismissToast = false) => {\r\n if (editModal && editModal._isShown) {\r\n setIsLoading(true);\r\n rolesService.getRole(roleId)\r\n .then(returnedRole => {\r\n dispatch(rolesActions.loadRoleSuccess(returnedRole));\r\n if (dismissToast) {\r\n toast.dismiss(refreshRoleToastId);\r\n setRefreshRoleToastId(\"\");\r\n }\r\n setRole(returnedRole);\r\n dispatch(pageActions.updateSelectedRole(returnedRole));\r\n }).catch(error => {\r\n toast.error(\"Loading Selected Role Failed:\" + error, { autoClose: false });\r\n\r\n }).finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n }\r\n\r\n const checkUpdateRequired = useCallback(async (role) => {\r\n if (editModal && editModal._isShown) {\r\n if (role.roleId && !isSaving && !isLoading) {\r\n if (await rolesService.updateRequired(role) && refreshRoleToastId == '') {\r\n let newToastId = toast.warning(refreshMessage(role), {\r\n autoClose: false,\r\n position: \"top-center\",\r\n hideProgressBar: true,\r\n closeOnClick: false,\r\n closeButton: false,\r\n draggable: false,\r\n onClick: () => refreshRole(role.roleId, true)\r\n })\r\n setRefreshRoleToastId(newToastId);\r\n }\r\n }\r\n }\r\n }, [refreshRoleToastId, isSaving, isLoading, editModal]);\r\n\r\n useEffect(() => {\r\n setRole(selectedRole);\r\n if (userPermissions.some(p => p.name === \"ViewPartners\")) {\r\n dispatch(partnersActions.loadPartners()).catch(error => {\r\n console.log(\"Loading Partners Failed:\" + error);\r\n });\r\n }\r\n var editModal = document.getElementById('edit-modal');\r\n editModal.addEventListener('hidden.bs.modal', () => {\r\n dispatch(pageActions.clearSelectedRole());\r\n setErrors({});\r\n });\r\n setEditModal(bootstrap.Modal.getInstance(document.getElementById('edit-modal')));\r\n }, [selectedRole])\r\n\r\n useEffect(() => {\r\n if (selectedRole.roleId) {\r\n refreshRole(selectedRole.roleId);\r\n }\r\n }, [selectedRole.roleId, editModal])\r\n\r\n useEffect(() => {\r\n const updateRequiredIntervalId = setInterval(() => checkUpdateRequired(role), 1000);\r\n return () => {\r\n clearInterval(updateRequiredIntervalId);\r\n };\r\n }, [checkUpdateRequired, role])\r\n\r\n const handleRoleSave = (event) => {\r\n setIsSaving(true);\r\n event.preventDefault();\r\n let updateRole = { ...role };\r\n let isCreate = updateRole.roleId === undefined;\r\n if (!roleIsValid(updateRole)) {\r\n setIsSaving(false);\r\n return;\r\n }\r\n\r\n dispatch(rolesActions.saveRole(updateRole)).then(empty => {\r\n if (isCreate) {\r\n toast.success(updateRole.name + \" has been created\");\r\n } else {\r\n toast.success(updateRole.name + \" has been saved\");\r\n }\r\n bootstrap.Modal.getInstance(document.getElementById('edit-modal')).hide()\r\n dispatch(pageActions.clearSelectedRole());\r\n setIsSaving(false);\r\n }).catch(error => {\r\n setIsSaving(false);\r\n toast.error(\"Save Role Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const roleIsValid = (updateRole) => {\r\n const { name, permissions, partnerId } = updateRole;\r\n const errors = {};\r\n\r\n if (!name) {\r\n errors.name = \"(Required)\";\r\n }\r\n\r\n if (partnerId == 0) {\r\n errors.partnerId = \"(Required)\";\r\n }\r\n\r\n if (!permissions.length > 0) {\r\n errors.permissions = \"A Role must have at least one permission\";\r\n }\r\n\r\n setErrors(errors);\r\n\r\n return Object.keys(errors).length === 0;\r\n }\r\n\r\n const handleRoleChange = (event) => {\r\n const { name, value } = event.target;\r\n setRole({ ...role, [name]: value });\r\n }\r\n\r\n const handleRolesChange = (event) => {\r\n let selectedRoles = event.map(e => ({ roleId: e.value, name: e.label }));\r\n setRole({ ...role, canAssignRoles: selectedRoles });\r\n }\r\n\r\n const handlePartnerChange = (event) => {\r\n let partnerId = event.value;\r\n let partnerName = event.label;\r\n setRole({ ...role, partnerId, partnerName })\r\n }\r\n\r\n const handlePermissionsChange = (event) => {\r\n let selectedPermissions = event.map(e => ({ permissionId: e.value, friendlyName: e.label }));\r\n setRole({ ...role, permissions: selectedPermissions });\r\n }\r\n\r\n const enabledPartners = partners.filter(p => p.disabled === false);\r\n const partnerName = role.partnerId == 0 ? \"Select a Partner...\" : role.partnerName;\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    { role.roleId ? \"Update Role (\" + selectedRole.name + \")\" : \"New Role\" }

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n { (isSaving || isLoading) ?\r\n
    \r\n : \"\"\r\n }\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: partner.partnerId,\r\n label: partner.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: permission.permissionId,\r\n label: permission.friendlyName\r\n })) }\r\n options={ userPermissions.map(permission => ({\r\n value: permission.permissionId,\r\n label: permission.friendlyName\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ({\r\n value: role.roleId,\r\n label: role.name\r\n })) }\r\n options={ allRoles.map(role => ({\r\n value: role.roleId,\r\n label: role.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n * Required\r\n

    \r\n
    \r\n
    \r\n
    \r\n { isSaving ?\r\n
    Saving...
    \r\n : isLoading ?
    Loading...
    \r\n : \r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default RoleEdit;","import React, { useEffect, useState } from 'react';\r\nimport * as rolesActions from '../../../redux/actions/rolesActions';\r\nimport * as permissionsActions from '../../../redux/actions/permissionsActions';\r\nimport * as pageActions from '../../../redux/actions/pageActions';\r\nimport * as partnersActions from '../../../redux/actions/partnersActions';\r\nimport RoleEdit from '../roles/RoleEdit';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport PaginatedList from '../../common/PaginatedList';\r\nimport FilterSlideout from '../../common/FilterSlideout';\r\nimport * as bootstrap from 'bootstrap';\r\nimport ConfirmationModal from '../../common/ConfirmationModal';\r\nimport * as ModalBackgroundRemover from '../../common/ModalBackgroundRemover';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction RolesPage({ theme }) {\r\n\r\n const [columnFiltersPopulated, setColumnFiltersPopulated] = useState(false);\r\n\r\n const searchTerm = useSelector(state => state.page.roles.searchTerm);\r\n const selectedRole = useSelector(state => state.page.roles.selectedRole);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const filterByColumn = useSelector(state => state.page.roles.filterByColumn);\r\n const textFilters = useSelector(state => state.page.roles.textFilters);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(permissionsActions.loadUserPermissions()).then(() => {\r\n if (userPermissions.some(p => p.name === \"ViewRoles\")) {\r\n dispatch(rolesActions.loadRoles()).catch(error => {\r\n toast.error(\"Loading Roles Failed:\" + error, { autoClose: false });\r\n });\r\n }\r\n if (userPermissions.some(p => p.name === \"ViewPartners\")) {\r\n dispatch(partnersActions.loadPartners()).catch(error => {\r\n console.log(\"Loading Partners Failed:\" + error);\r\n });\r\n }\r\n }).catch(error => {\r\n toast.error(\"Loading User Permissions Failed:\" + error, { autoClose: false });\r\n });\r\n dispatch(permissionsActions.loadPermissions()).catch(error => {\r\n toast.error(\"Loading Permissions Failed:\" + error, { autoClose: false });\r\n });\r\n ModalBackgroundRemover.removeModalBackground();\r\n }, []);\r\n\r\n useEffect(() => {\r\n let noFilters = true;\r\n for (const text in textFilters) {\r\n if (textFilters[text] != \"\") {\r\n noFilters = false;\r\n setColumnFiltersPopulated(true);\r\n }\r\n }\r\n if (noFilters) {\r\n setColumnFiltersPopulated(false);\r\n }\r\n }, [textFilters])\r\n\r\n const handleNewRole = () => {\r\n dispatch(pageActions.updateSelectedRole({\r\n partnerId: 0,\r\n permissions: [],\r\n canAssignRoles: []\r\n }));\r\n new bootstrap.Modal(document.getElementById('edit-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleDeleteRoleConfirmed = (event) => {\r\n event.preventDefault();\r\n dispatch(rolesActions.deleteRole(selectedRole))\r\n .then(() => {\r\n dispatch(rolesActions.loadRoles()).then(() => {\r\n toast.success(selectedRole.name + \" has been deleted\");\r\n bootstrap.Modal.getInstance(document.getElementById('delete-modal')).hide();\r\n });\r\n })\r\n .catch(error => {\r\n toast.error(\"Delete Role Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const handleSearchTermChange = (event) => {\r\n dispatch(pageActions.updateSearchTerm(\"roles\", event.target.value));\r\n }\r\n\r\n const handleToggleFilterByColumn = () => {\r\n dispatch(pageActions.toggleFilterByColumn(\"roles\", !filterByColumn));\r\n }\r\n\r\n const handleClearFilterByColumn = () => {\r\n dispatch(pageActions.clearTextFilters(\"roles\"));\r\n setColumnFiltersPopulated(false);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n filterByColumn ?\r\n \r\n : \r\n }\r\n \r\n \r\n {\r\n columnFiltersPopulated ?\r\n \r\n : \r\n }\r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default RolesPage;","import * as supportService from '../../services/supportService';\r\nimport * as types from \"./types\";\r\n\r\nexport function loadGroupsSuccess(groups) {\r\n return { type: types.LOAD_SUPPORT_GROUPS_SUCCESS, groups };\r\n}\r\n\r\nexport function updateGroupsSuccess(groups) {\r\n return { type: types.UPDATE_SUPPORT_GROUPS_SUCCESS, groups };\r\n}\r\n\r\nexport function loadGroups() {\r\n return function (dispatch) {\r\n return supportService.getGroups()\r\n .then(groups => {\r\n dispatch(loadGroupsSuccess(groups));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function updateGroups(updatedGroups) {\r\n return function (dispatch) {\r\n return supportService.updateGroups(updatedGroups)\r\n .then(groups => {\r\n dispatch(updateGroupsSuccess(groups));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getTemplates() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/communication/templates').catch(error => {\r\n throw error\r\n });\r\n\r\n if (response.data.error) {\r\n throw response.data.error;\r\n }\r\n\r\n return response.data;\r\n}\r\n\r\nexport async function sendCommunication(communicationInfo) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/communication/send', communicationInfo).catch(error => {\r\n throw error\r\n });\r\n\r\n if (response.data.error) {\r\n throw response.data.error;\r\n }\r\n\r\n return response.data;\r\n}","import * as types from \"./types\";\r\nimport * as communicationsService from \"../../services/communicationsService\";\r\n\r\nexport function loadAvailableTemplatesSuccess(templates) {\r\n return { type: types.LOAD_AVAILABLE_TEMPLATES_SUCCESS, templates }\r\n}\r\n\r\nexport function loadAvailableTemplates() {\r\n return function (dispatch) {\r\n return communicationsService.getTemplates()\r\n .then(templates => {\r\n dispatch(loadAvailableTemplatesSuccess(templates));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function saveNotification(notification) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/notification/create/alert', notification).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error;\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function removeNotification(notification) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/notification/remove/alert', notification).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error;\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function loadNotifications() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/notification/list').catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error;\r\n }\r\n });\r\n return response.data;\r\n}\r\n\r\nexport async function updateNotification(notification) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/notification/update/alert', notification).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error;\r\n }\r\n });\r\n return response.data;\r\n}\r\n","import * as types from \"./types\";\r\nimport * as notificationService from \"../../services/notificationsService\";\r\n\r\nexport function loadNotificationsSuccess(notifications) {\r\n return { type: types.LOAD_NOTIFICATIONS_SUCCESS, notifications };\r\n}\r\n\r\nexport function saveNotificationSuccess(notification) {\r\n return { type: types.SAVE_NOTIFICATION_SUCCESS, notification };\r\n}\r\n\r\nexport function removeNotificationSuccess(notification) {\r\n return { type: types.REMOVE_NOTIFICATION_SUCCESS, notification };\r\n}\r\n\r\nexport function updateNotificationSuccess(notification) {\r\n return { type: types.UPDATE_NOTIFICATION_SUCCESS, notification };\r\n}\r\n\r\nexport function loadNotifications() {\r\n return function (dispatch) {\r\n return notificationService.loadNotifications()\r\n .then(notifications => {\r\n dispatch(loadNotificationsSuccess(notifications));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function saveNotification(notification) {\r\n return function (dispatch) {\r\n return notificationService.saveNotification(notification)\r\n .then(notification => {\r\n dispatch(saveNotificationSuccess(notification));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n };\r\n}\r\n\r\nexport function removeNotification(notification) {\r\n return function (dispatch) {\r\n return notificationService.removeNotification(notification)\r\n .then(notification => {\r\n dispatch(removeNotificationSuccess(notification));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function updateNotification(notification) {\r\n return function (dispatch) {\r\n return notificationService.updateNotification(notification)\r\n .then(notification => {\r\n dispatch(updateNotificationSuccess(notification));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { CFormSwitch } from '@coreui/bootstrap-react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport { DatePicker } from 'rsuite';\r\nimport isBefore from 'date-fns/isBefore';\r\nimport isThisHour from 'date-fns/isThisHour';\r\nimport isToday from 'date-fns/isToday';\r\nimport ConfirmationModal from '../../common/ConfirmationModal';\r\nimport TextInput from '../../common/TextInput';\r\nimport Select from 'react-select';\r\nimport * as styles from '../../common/DropdownStyles';\r\nimport * as bootstrap from 'bootstrap';\r\nimport * as supportActions from '../../../redux/actions/supportActions';\r\nimport * as maintenanceService from '../../../services/maintenanceService';\r\nimport * as appSettingsActions from '../../../redux/actions/appSettingsActions';\r\nimport * as communicationsActions from '../../../redux/actions/communicationsActions'\r\nimport * as groupsActions from '../../../redux/actions/groupsActions';\r\nimport * as communicationsService from '../../../services/communicationsService';\r\nimport * as notificationActions from '../../../redux/actions/notificationActions';\r\nimport * as dateUtils from '../../../utils/dateUtils';\r\nimport Collapsible from 'react-collapsible';\r\n\r\nfunction SettingsPage({ theme }) {\r\n\r\n const [errors, setErrors] = useState({});\r\n const [alert, setAlert] = useState({ title: \"\", message: \"\", endTime: null, notificationId: 0, userId: null, type: \"Alert\" });\r\n const groups = useSelector(state => state.support.groups);\r\n const [selectedGroups, setSelectedGroups] = useState(groups);\r\n const [selectedSendComGroups, setSelectedSendComGroups] = useState([]);\r\n const [selectedTemplate, setSelectedTemplate] = useState({ emailTemplateId: 0, name: \"Select Email Template to Send out...\" });\r\n\r\n function sortGroups(groupA, groupB) {\r\n var x = groupA.name.toLowerCase();\r\n var y = groupB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n }\r\n\r\n const maintenanceMode = useSelector(state => state.appSettings.maintenanceMode);\r\n const userPermissions = useSelector(state => state.auth.permissions)\r\n const availableTemplates = useSelector(state => state.communications.availableTemplates);\r\n const availableSendComGroups = useSelector(state => state.groups.availableSubscriptions.concat(state.groups.availablePocs).sort(sortGroups));\r\n const notifications = useSelector(state => state.notifications);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(supportActions.loadGroups());\r\n dispatch(communicationsActions.loadAvailableTemplates());\r\n dispatch(groupsActions.loadAvailablePocs());\r\n dispatch(groupsActions.loadAvailableSubscriptions());\r\n dispatch(notificationActions.loadNotifications());\r\n\r\n const intervalNotificationCheck = setInterval(() => {\r\n dispatch(notificationActions.loadNotifications());\r\n }, 5000);\r\n\r\n return () => {\r\n clearInterval(intervalNotificationCheck);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (notifications.length > 0) {\r\n setAlert({\r\n title: notifications[0].title,\r\n message: notifications[0].message,\r\n endTime: dateUtils.getLocalDateTime(notifications[0].endTime),\r\n notificationId: notifications[0].notificationId,\r\n type: \"Alert\"\r\n });\r\n }\r\n else {\r\n setAlert({\r\n title: alert.title,\r\n message: alert.message,\r\n endTime: alert.endTime,\r\n notificationId: 0,\r\n type: \"Alert\"\r\n });\r\n }\r\n }, [notifications.length]);\r\n\r\n useEffect(() => {\r\n setSelectedGroups(groups);\r\n }, [groups]);\r\n\r\n const maintenanceModeLabel = maintenanceMode === \"enabled\" ? \"Maintenance Mode On\" : \"Maintenance Mode Off\";\r\n\r\n const handleMaintenanceModeChange = (event) => {\r\n event.preventDefault();\r\n if (maintenanceMode === \"disabled\") {\r\n new bootstrap.Modal(document.getElementById('enable-maintenance-mode-modal'), { backdrop: 'static', keyboard: false }).show();\r\n } else {\r\n new bootstrap.Modal(document.getElementById('disable-maintenance-mode-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n }\r\n\r\n const handleEnableMaintenanceModeConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('enable-maintenance-mode-modal')).hide();\r\n maintenanceService.enableMaintenanceMode().then(() => {\r\n dispatch(appSettingsActions.loadMaintenanceMode()).then(() => {\r\n });\r\n });\r\n }\r\n\r\n const handleDisableMaintenanceModeConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('disable-maintenance-mode-modal')).hide();\r\n maintenanceService.disableMaintenanceMode().then(() => {\r\n dispatch(appSettingsActions.loadMaintenanceMode()).then(() => {\r\n });;\r\n });\r\n }\r\n\r\n const handleCreateClick = (event) => {\r\n event.preventDefault();\r\n new bootstrap.Modal(document.getElementById('create-alert-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleRemoveAlertClick = (event) => {\r\n event.preventDefault();\r\n new bootstrap.Modal(document.getElementById('remove-alert-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleEditAlertClick = (event) => {\r\n event.preventDefault();\r\n new bootstrap.Modal(document.getElementById('edit-alert-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleCreateConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('create-alert-modal')).hide();\r\n if (alertIsValid(alert)) {\r\n\r\n dispatch(notificationActions.saveNotification(alert)).then(() => {\r\n dispatch(notificationActions.loadNotifications());\r\n toast.success(\"Alert Created Successfully\")\r\n }).catch(error => {\r\n toast.error(\"Creation of the Alert Failed: \" + error, { autoClose: false })\r\n })\r\n }\r\n }\r\n\r\n const handleRemoveConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('remove-alert-modal')).hide();\r\n\r\n dispatch(notificationActions.removeNotification(notifications[0])).then(() => {\r\n setAlert({ title: \"\", message: \"\", endTime: null, notificationId: 0, userId: null, type: \"Alert\" });\r\n dispatch(notificationActions.loadNotifications());\r\n toast.success(\"Alert Removed Successfully\")\r\n }).catch(error => {\r\n toast.error(\"Removal of the Alert Failed: \" + error, { autoClose: false })\r\n })\r\n }\r\n\r\n const handleEditConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('edit-alert-modal')).hide();\r\n\r\n var editedAlert = alert;\r\n editedAlert.endTime = new Date(editedAlert.endTime);\r\n\r\n if (alertIsValid(editedAlert)) {\r\n dispatch(notificationActions.updateNotification(editedAlert)).then(() => {\r\n toast.success(\"Alert Updated Successfully\")\r\n dispatch(notificationActions.loadNotifications());\r\n }).catch(error => {\r\n toast.error(\"Update of the Alert Failed: \" + error, { autoClose: false })\r\n })\r\n }\r\n }\r\n\r\n const handleAlertChange = (event) => {\r\n const { name, value } = event.target;\r\n setAlert({\r\n ...alert,\r\n [name]: value\r\n });\r\n }\r\n\r\n const handleEndTimeChange = (date) => {\r\n setAlert({\r\n ...alert,\r\n endTime: date\r\n });\r\n }\r\n\r\n const alertIsValid = (alert) => {\r\n const { title, message, endTime } = alert;\r\n const errors = {};\r\n\r\n if (!title) {\r\n errors.title = \"(Required)\";\r\n }\r\n\r\n if (!message) {\r\n errors.message = \"(Required)\";\r\n }\r\n\r\n if (message && message.length > 1000) {\r\n errors.message = \"Message is limited to 1000 characters.\";\r\n }\r\n\r\n if (endTime === null) {\r\n errors.endTime = \"(Required)\";\r\n }\r\n\r\n setErrors(errors);\r\n\r\n return Object.keys(errors).length === 0;\r\n }\r\n\r\n const handleSaveClick = (event) => {\r\n event.preventDefault();\r\n new bootstrap.Modal(document.getElementById('update-available-support-groups-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n\r\n const handleUpdateConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('update-available-support-groups-modal')).hide();\r\n dispatch(supportActions.updateGroups(selectedGroups)).then(() => {\r\n toast.success(\"Available Support Groups Saved Successfully\")\r\n }).catch(error => {\r\n toast.error(\"Save Available Support Groups Failed: \" + error, { autoClose: false })\r\n })\r\n }\r\n\r\n const handleSupportGroupsChange = (event) => {\r\n let groups = event.map(e => ({ groupId: e.value, name: e.label }));\r\n let newSelectedGroups = [...selectedGroups];\r\n newSelectedGroups.forEach(group => group.isAvailableForSelection = groups.some(selectedGroup => selectedGroup.groupId === group.groupId));\r\n setSelectedGroups(newSelectedGroups);\r\n }\r\n\r\n const handleSendComGroupsChange = (event) => {\r\n let groups = event.map(e => ({ groupId: e.value, name: e.label }));\r\n setSelectedSendComGroups(groups);\r\n }\r\n\r\n const handleEmailTemplateChange = (event) => {\r\n let template = { emailTemplateId: event.value, name: event.label };\r\n setSelectedTemplate(template);\r\n }\r\n\r\n const handleSendCommunicationClick = (event) => {\r\n event.preventDefault();\r\n let communicationInfo = { template: selectedTemplate, groups: selectedSendComGroups };\r\n if (sendComIsValid(communicationInfo)) {\r\n new bootstrap.Modal(document.getElementById('send-communication-modal'), { backdrop: 'static', keyboard: false }).show();\r\n }\r\n }\r\n\r\n const sendComIsValid = (communicationInfo) => {\r\n const { template, groups } = communicationInfo;\r\n const errors = {};\r\n\r\n if (template.emailTemplateId === 0) {\r\n errors.template = \"(Required)\";\r\n }\r\n\r\n if (!groups.length > 0) {\r\n errors.sendComGroups = \"(Required)\";\r\n }\r\n\r\n setErrors(errors);\r\n\r\n return Object.keys(errors).length === 0;\r\n }\r\n\r\n const handleSendOutCommunicationConfirmed = (event) => {\r\n event.preventDefault();\r\n bootstrap.Modal.getInstance(document.getElementById('send-communication-modal')).hide();\r\n let communicationInfo = { template: selectedTemplate, groups: selectedSendComGroups };\r\n communicationsService.sendCommunication(communicationInfo).then(() => {\r\n toast.success(\"Communication Sent Successfully\")\r\n }).catch(error => {\r\n toast.error(\"Sending the communication Failed: \" + error, { autoClose: false })\r\n });\r\n }\r\n\r\n const alertInfoIsDirty = () => {\r\n if (alert.endTime != notifications[0].endTime ||\r\n alert.title != notifications[0].title ||\r\n alert.message != notifications[0].message) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n const shouldHideHour = (hour, date) => {\r\n if (isToday(date)) {\r\n var currentHour = new Date().getHours();\r\n\r\n if (hour < currentHour) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n const shouldHideMinute = (minute, date) => {\r\n if (isToday(date) && isThisHour(date)) {\r\n var currentMinute = new Date().getMinutes();\r\n\r\n if (minute < currentMinute) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n { userPermissions.some(p => p.name === \"ConfigureAlerts\") ?\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n handleEndTimeChange(date) }\r\n value={ alert.endTime && Date.parse(alert.endTime) }\r\n disabledDate={ date => isBefore(date, new Date(new Date().setHours(-1))) }\r\n hideHours={ (hour, date) => shouldHideHour(hour, date) }\r\n hideMinutes={ (minute, date) => shouldHideMinute(minute, date) }\r\n />\r\n
    \r\n
    \r\n { notifications.length < 1 ?\r\n\r\n
    \r\n
    \r\n
    \r\n Create Alert\r\n
    \r\n
    \r\n
    :\r\n
    \r\n
    \r\n
    \r\n Remove Alert\r\n
    \r\n
    \r\n
    \r\n
    \r\n Update Alert\r\n
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n \r\n : \"\"\r\n }\r\n { userPermissions.some(p => p.name === \"SendCommunications\") ?\r\n \r\n
    \r\n
    \r\n \r\n ({\r\n value: template.emailTemplateId,\r\n label: template.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n \r\n ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n options={ availableSendComGroups.map(group => ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n : \"\"\r\n }\r\n { userPermissions.some(p => p.name === \"ViewMaintenance\") ?\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n : \"\"\r\n }\r\n { userPermissions.some(p => p.name === \"ConfigureSupportGroups\") ?\r\n \r\n
    \r\n
    \r\n \r\n supportGroup.isAvailableForSelection).map(group => ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n options={ groups.map(group => ({\r\n value: group.groupId,\r\n label: group.name\r\n })) }\r\n styles={ theme == 'light' ? styles.MultiSelectStyleLight : styles.MultiSelectStyleDark }\r\n />\r\n
    \r\n
    \r\n
    Save
    \r\n
    \r\n
    \r\n \r\n : \"\"\r\n }\r\n
    \r\n
    \r\n \r\n \r\n \" + selectedTemplate.name + \"
    email to all users in these groups:
    \" + selectedSendComGroups.map(group => \"\" + group.name + \"
    \").toString().replace(',', '') + \"
    Do you wish to proceed?\" }\r\n onSubmit={ handleSendOutCommunicationConfirmed }\r\n theme={ theme }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default SettingsPage;","import React, { useEffect } from 'react'\r\nimport { Navigate } from 'react-router-dom'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { config } from '../config';\r\nimport { customLoginRedirect } from '../services/userService';\r\nimport * as permissionsActions from '../redux/actions/permissionsActions';\r\n\r\nfunction ProtectedRoute({ children, redirectTo, permission }) {\r\n\r\n const user = useSelector(state => state.auth.user)\r\n const userPermissions = useSelector(state => state.auth.permissions); \r\n const hasPermission = permission ? userPermissions.some(p => p.name === permission) : true;\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if(userPermissions == undefined || userPermissions.length == 0){\r\n dispatch(permissionsActions.loadUserPermissions()).catch(error => {\r\n console.log(error + ' - Error protected route user permissions');\r\n });\r\n }\r\n }, [])\r\n\r\n if ((window.location.origin + '/') === config.OASIS_PORTAL_URL) {\r\n return user && hasPermission ? children : \r\n } else {\r\n return customLoginRedirect(window.location.origin);\r\n }\r\n}\r\n\r\nexport default ProtectedRoute","import React from 'react';\r\nimport { Routes, Route } from 'react-router-dom';\r\nimport { AdministrationLayout } from './AdministrationLayout';\r\nimport UserStatusPage from './userStatus/UserStatusPage';\r\nimport AuditsPage from './audits/AuditsPage';\r\nimport RolesPage from './roles/RolesPage';\r\nimport SettingsPage from './settings/SettingsPage';\r\nimport PrivateRoute from '../../utils/protectedRoute'\r\n\r\nfunction AdministrationPage({ theme }) {\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n\r\nexport default AdministrationPage;","import React from 'react'\r\nimport { signinRedirect } from '../../services/userService'\r\nimport { Navigate } from 'react-router-dom'\r\nimport { useSelector } from 'react-redux'\r\n\r\nfunction Login() {\r\n const user = useSelector(state => state.auth.user)\r\n\r\n return (\r\n (user) ?\r\n ()\r\n :\r\n (\r\n signinRedirect()\r\n )\r\n )\r\n}\r\n\r\nexport default Login\r\n","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function partnersReducer(state = initialState.partners, action) {\r\n switch (action.type) {\r\n case types.LOAD_PARTNER_SUCCESS:\r\n return state.map(partner => {\r\n if (partner.partnerId === action.partner.partnerId) {\r\n return action.partner\r\n } else {\r\n return partner\r\n }\r\n })\r\n case types.LOAD_PARTNERS_SUCCESS:\r\n return action.partners;\r\n case types.DISABLE_PARTNER_SUCCESS:\r\n return state.map(partner => {\r\n if (partner.partnerId === action.partner.partnerId) {\r\n return action.partner\r\n } else {\r\n return partner\r\n }\r\n })\r\n case types.ENABLE_PARTNER_SUCCESS:\r\n return state.map(partner => {\r\n if (partner.partnerId === action.partner.partnerId) {\r\n return action.partner\r\n } else {\r\n return partner\r\n }\r\n })\r\n case types.SAVE_PARTNER_SUCCESS:\r\n return state.map(partner => {\r\n if (partner.partnerId === action.partner.partnerId) {\r\n return action.partner\r\n } else {\r\n return partner\r\n }\r\n }).sort(sortPartners)\r\n case types.CREATE_PARTNER_SUCCESS:\r\n return [...state, { ...action.partner }].sort(sortPartners)\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortPartners(partnerA, partnerB) {\r\n var x = partnerA.name.toLowerCase();\r\n var y = partnerB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function usersReducer(state = initialState.users, action) {\r\n switch (action.type) {\r\n case types.LOAD_USER_SUCCESS:\r\n return state.map(user => {\r\n if (user.userId === action.user.userId) {\r\n return action.user\r\n } else {\r\n return user\r\n }\r\n })\r\n case types.LOAD_USERS_SUCCESS:\r\n return action.users;\r\n case types.DISABLE_USER_SUCCESS:\r\n return state.map(user => {\r\n if (user.userId === action.user.userId) {\r\n return action.user\r\n } else {\r\n return user\r\n }\r\n })\r\n case types.ENABLE_USER_SUCCESS:\r\n return state.map(user => {\r\n if (user.userId === action.user.userId) {\r\n return action.user\r\n } else {\r\n return user\r\n }\r\n })\r\n case types.RESET_2FA_SUCCESS:\r\n return state.map(user => {\r\n if (user.userId === action.user.userId) {\r\n return action.user;\r\n } else {\r\n return user\r\n }\r\n })\r\n case types.RESET_PASSWORD_SUCCESS:\r\n return state.map(user => {\r\n if (user.userId === action.user.userId) {\r\n return action.user;\r\n } else {\r\n return user\r\n }\r\n })\r\n case types.SAVE_USER_SUCCESS:\r\n return state.map(user => {\r\n if (user.userId === action.user.userId) {\r\n return action.user\r\n } else {\r\n return user\r\n }\r\n }).sort(sortUsers)\r\n case types.CREATE_USER_SUCCESS:\r\n return [...state, { ...action.user }].sort(sortUsers) \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortUsers(userA, userB) {\r\n var x = userA.email.toLowerCase();\r\n var y = userB.email.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function jiraReducer(state = initialState.jira, action) {\r\n switch (action.type) {\r\n case types.LOAD_AVAILABLE_JIRA_ORGANIZATIONS_SUCCESS:\r\n return { ...state, availableOrganizations: action.organizations.sort(sortOrganizations) };\r\n case types.LOAD_AVAILABLE_JIRA_GROUPS_SUCCESS:\r\n return { ...state, availableGroups: action.groups.sort(sortGroups) };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortOrganizations(organizationA, organizationB) {\r\n var x = organizationA.name.toLowerCase();\r\n var y = organizationB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}\r\n\r\nfunction sortGroups(groupA, groupB) {\r\n var x = groupA.name.toLowerCase();\r\n var y = groupB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function rolesReducer(state = initialState.roles, action) {\r\n switch (action.type) {\r\n case types.LOAD_ROLE_SUCCESS:\r\n return state.map(role => {\r\n if (role.roleId === action.role.roleId) {\r\n return action.role\r\n } else {\r\n return role\r\n }\r\n })\r\n case types.LOAD_ROLES_SUCCESS:\r\n return action.roles;\r\n case types.DELETE_ROLE_SUCCESS:\r\n return state.map(role => {\r\n if (role.roleId !== action.roleId) {\r\n return role\r\n }\r\n })\r\n case types.SAVE_ROLE_SUCCESS:\r\n return state.map(role => {\r\n if (role.roleId === action.role.roleId) {\r\n return action.role\r\n } else {\r\n return role\r\n }\r\n }).sort(sortRoles)\r\n case types.CREATE_ROLE_SUCCESS:\r\n return [...state, { ...action.role }].sort(sortRoles)\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortRoles(roleA, roleB) {\r\n var x = roleA.name.toLowerCase();\r\n var y = roleB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function fileTransferReducer(state = initialState.fileTransfer, action) {\r\n switch (action.type) {\r\n case types.LOAD_AVAILABLE_PORTALS_SUCCESS:\r\n return { ...state, availablePortals: action.portals.sort(sortPortals) };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortPortals(portalA, portalB) {\r\n var x = portalA.name.toLowerCase();\r\n var y = portalB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function groupsReducer(state = initialState.groups, action) {\r\n switch (action.type) {\r\n case types.LOAD_AVAILABLE_SUBSCRIPTIONS_SUCCESS:\r\n return { ...state, availableSubscriptions: action.subscriptions.sort(sortGroups) };\r\n case types.LOAD_AVAILABLE_POCS_SUCCESS:\r\n return { ...state, availablePocs: action.pocs.sort(sortGroups) };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortGroups(groupA, groupB) {\r\n var x = groupA.name.toLowerCase();\r\n var y = groupB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function communicationsReducer(state = initialState.communications, action) {\r\n switch (action.type) {\r\n case types.LOAD_AVAILABLE_TEMPLATES_SUCCESS:\r\n return { ...state, availableTemplates: action.templates.sort(sortTemplates) };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction sortTemplates(templateA, templateB) {\r\n var x = templateA.name.toLowerCase();\r\n var y = templateB.name.toLowerCase();\r\n return x < y ? -1 : x > y ? 1 : 0;\r\n}","import { combineReducers } from 'redux';\r\nimport auth from './authReducer';\r\nimport kb from './kbReducer';\r\nimport resources from './resourcesReducer';\r\nimport previewResources from './previewResourcesReducer';\r\nimport selectedResource from './selectedResourceReducer';\r\nimport relativityStats from './relativityStatsReducer';\r\nimport brainspaceStats from './brainspaceStatsReducer';\r\nimport storageStats from './storageStatsReducer';\r\nimport blackoutStats from './blackoutStatsReducer';\r\nimport readySuiteStats from './readySuiteStatsReducer';\r\nimport lsiTranslationStats from './lsiTranslationStatsReducer';\r\nimport webProcessingStats from './webProcessingStatsReducer';\r\nimport fileTransferStats from './fileTransferStatsReducer';\r\nimport supportStats from './supportStatsReducer';\r\nimport partners from './partnersReducer';\r\nimport users from './usersReducer';\r\nimport services from './servicesReducer';\r\nimport settings from './settingsReducer';\r\nimport links from './linksReducer';\r\nimport jira from './jiraReducer';\r\nimport page from './pageReducer';\r\nimport virtualMachines from './virtualMachinesReducer';\r\nimport roles from './rolesReducer';\r\nimport permissions from './permissionsReducer';\r\nimport fileTransfer from './fileTransferReducer';\r\nimport statCard from './statCardReducer';\r\nimport audits from './auditsReducer';\r\nimport appSettings from './appSettingsReducer';\r\nimport userStatuses from '../reducers/userStatusesReducer';\r\nimport support from '../reducers/supportReducer';\r\nimport userPreferences from '../reducers/userPreferencesReducer';\r\nimport groups from '../reducers/groupsReducer';\r\nimport communications from '../reducers/communicationsReducer';\r\nimport notifications from './notificationReducer';\r\n\r\nconst rootReducer = combineReducers({\r\n auth,\r\n userPreferences,\r\n kb,\r\n resources,\r\n previewResources,\r\n selectedResource,\r\n relativityStats,\r\n brainspaceStats,\r\n storageStats,\r\n blackoutStats,\r\n readySuiteStats,\r\n webProcessingStats,\r\n lsiTranslationStats,\r\n fileTransferStats,\r\n supportStats,\r\n support,\r\n partners,\r\n users,\r\n services,\r\n jira,\r\n settings,\r\n links,\r\n page,\r\n virtualMachines,\r\n roles,\r\n permissions,\r\n fileTransfer,\r\n statCard,\r\n audits,\r\n appSettings,\r\n userStatuses,\r\n groups,\r\n communications,\r\n notifications\r\n});\r\n\r\nexport default rootReducer;","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function (state = initialState.auth, action) {\r\n switch (action.type) {\r\n case types.STORE_USER:\r\n return {\r\n ...state,\r\n isLoadingUser: false,\r\n user: action.payload\r\n }\r\n case types.LOADING_USER:\r\n return {\r\n ...state,\r\n isLoadingUser: true\r\n }\r\n case types.USER_EXPIRED:\r\n case types.STORE_USER_ERROR:\r\n case types.USER_SIGNED_OUT:\r\n return {\r\n ...state,\r\n user: null,\r\n isLoadingUser: false\r\n }\r\n case types.LOAD_USER_AUTH_SUCCESS:\r\n return {\r\n ...state,\r\n user: action.user\r\n }\r\n case types.UPDATE_USER_ACTIVITY:\r\n return {\r\n ...state,\r\n lastActive: Date.parse(action.lastActive)\r\n }\r\n case types.LOAD_USER_PERMISSIONS_SUCCESS:\r\n return { ...state, permissions: action.userPermissions }\r\n case types.LOAD_CAN_ASSIGN_ROLES_SUCCESS:\r\n return { ...state, canAssignRoles: action.canAssignRoles }\r\n case types.LOAD_USER_ROLES_SUCCESS:\r\n return { ...state, userRoles: action.userRoles }\r\n default:\r\n return state\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function userPreferencesReducer(state = initialState.userPreferences, action) {\r\n switch (action.type) {\r\n case types.LOAD_USER_PREFERENCES_SUCCESS:\r\n return action.userPreferences;\r\n case types.SAVE_USER_PREFERENCE_SUCCESS:\r\n return state.map(userPreference => {\r\n if (userPreference.userPreferenceId === action.userPreference.userPreferenceId) {\r\n return action.userPreference;\r\n } else {\r\n return userPreference;\r\n }\r\n })\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function kbReducer(state = initialState.kb, action) {\r\n switch (action.type) {\r\n case types.LOAD_KNOWLEDGEBASE_BOOKS_SUCCESS:\r\n return { ...state, books: action.books };\r\n case types.LOAD_KNOWLEDGEBASE_PAGE_SUCCESS:\r\n return {\r\n ...state, books: state.books.map(book => {\r\n book.contents.map(content => {\r\n if (content.contentId === action.page.pageId) {\r\n return action.page\r\n } else {\r\n return content\r\n }\r\n })\r\n })\r\n };\r\n case types.SEARCH_KB_SUCCESS:\r\n return { ...state, searchResults: action.searchResults };\r\n case types.CLEAR_KB_SEARCH_RESULTS:\r\n return { ...state, searchResults: initialState.kb.searchResults };\r\n case types.LOAD_KB_PDF_SUCCESS:\r\n return { ...state, pdf: action.pdf};\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function resourcesReducer(state = initialState.resources, action) {\r\n switch (action.type) {\r\n case types.UPDATE_RESOURCES:\r\n return action.resources;\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function previewResourcesReducer(state = initialState.previewResources, action) {\r\n switch (action.type) {\r\n case types.UPDATE_PREVIEW_RESOURCES:\r\n return action.resources;\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function selectedResourceReducer(state = initialState.selectedResource, action) {\r\n switch (action.type) {\r\n case types.UPDATE_SELECTED_RESOURCE:\r\n return action.selectedResource;\r\n case types.CLEAR_SELECTED_RESOURCE:\r\n return initialState.selectedResource;\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function relativityStatsReducer(state = initialState.relativityStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_RELATIVITY_STATS_SUCCESS:\r\n return { ...state, stats: action.relativityStats.stats, title: action.relativityStats.title, error: action.relativityStats.error };\r\n case types.CLEAR_RELATIVITY_STATS:\r\n return { ...state, stats: initialState.relativityStats.stats, title: initialState.relativityStats.title, error: initialState.relativityStats.error };\r\n case types.LOAD_RELATIVITY_INSTANCES_SUCCESS:\r\n return { ...state, instances: action.relativityInstances };\r\n case types.SAVE_USER_RELATIVITY_INSTANCES_SUCCESS:\r\n return { ...state, selectedRelativityInstances: action.relativityInstances };\r\n case types.LOAD_USER_RELATIVITY_INSTANCES_SUCCESS:\r\n return { ...state, selectedRelativityInstances: action.relativityInstances };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function brainspaceStatsReducer(state = initialState.brainspaceStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_BRAINSPACE_STATS_SUCCESS:\r\n return { ...state, stats: action.brainspaceStats.stats, title: action.brainspaceStats.title, error: action.brainspaceStats.error };\r\n case types.CLEAR_BRAINSPACE_STATS:\r\n return { ...state, stats: initialState.brainspaceStats.stats, title: initialState.brainspaceStats.title, error: initialState.brainspaceStats.error };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function storageStatsReducer(state = initialState.storageStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_STORAGE_STATS_SUCCESS:\r\n return { ...state, stats: action.storageStats.stats, title: action.storageStats.title, error: action.storageStats.error };\r\n case types.CLEAR_STORAGE_STATS:\r\n return { ...state, stats: initialState.storageStats.stats, title: initialState.storageStats.title, error: initialState.storageStats.error };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function blackoutStatsReducer(state = initialState.blackoutStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_BLACKOUT_STATS_SUCCESS:\r\n return { ...state, stats: action.blackoutStats.stats, title: action.blackoutStats.title, error: action.blackoutStats.error };\r\n case types.CLEAR_BLACKOUT_STATS:\r\n return { ...state, stats: initialState.blackoutStats.stats, title: initialState.blackoutStats.title, error: initialState.blackoutStats.error };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function readySuiteStatsReducer(state = initialState.readySuiteStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_READYSUITE_STATS_SUCCESS:\r\n return { ...state, stats: action.readySuiteStats.stats, title: action.readySuiteStats.title, error: action.readySuiteStats.error };\r\n case types.CLEAR_READYSUITE_STATS:\r\n return { ...state, stats: initialState.readySuiteStats.stats, title: initialState.readySuiteStats.title, error: initialState.readySuiteStats.error };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function webprocessingStatsReducer(state = initialState.webProcessingStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_WEBPROCESSING_STATS_SUCCESS:\r\n return { ...state, stats: action.webProcessingStats.stats, title: action.webProcessingStats.title, error: action.webProcessingStats.error };\r\n case types.CLEAR_WEBPROCESSING_STATS:\r\n return { ...state, stats: initialState.webProcessingStats.stats, title: initialState.webProcessingStats.title, error: initialState.webProcessingStats.error };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function lsiTranslationStatsReducer(state = initialState.lsiTranslationStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_LSI_TRANSLATION_STATS_SUCCESS:\r\n return { ...state, stats: action.lsiTranslationStats.stats, title: action.lsiTranslationStats.title, error: action.lsiTranslationStats.error };\r\n case types.CLEAR_LSI_TRANSLATION_STATS:\r\n return { ...state, stats: initialState.lsiTranslationStats.stats, title: initialState.lsiTranslationStats.title, error: initialState.lsiTranslationStats.error };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function fileTransferStatsReducer(state = initialState.fileTransferStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_FILE_TRANSFER_STATS_SUCCESS:\r\n return { ...state, statCards: action.fileTransferStats };\r\n case types.CLEAR_FILE_TRANSFER_STATS:\r\n return { ...state, statCards: initialState.fileTransferStats.statCards };\r\n case types.LOAD_PARTNER_PORTALS_SUCCESS:\r\n return { ...state, portals: action.portals };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function supportStatsReducer(state = initialState.supportStats, action) {\r\n switch (action.type) {\r\n case types.LOAD_SUPPORT_STATS_SUCCESS:\r\n return { ...state, stats: action.supportStats.stats, title: action.supportStats.title, error: action.supportStats.error };\r\n case types.CLEAR_SUPPORT_STATS:\r\n return { ...state, stats: initialState.supportStats.stats, title: initialState.supportStats.title, error: initialState.supportStats.error };\r\n case types.LOAD_SUPPORT_URL_SUCCESS:\r\n return { ...state, url: action.supportUrl };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function supportReducer(state = initialState.support, action) {\r\n switch (action.type) {\r\n case types.LOAD_SUPPORT_GROUPS_SUCCESS:\r\n return { ...state, groups: action.groups };\r\n case types.UPDATE_SUPPORT_GROUPS_SUCCESS:\r\n return { ...state, groups: action.groups };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function servicesReducer(state = initialState.services, action) {\r\n switch (action.type) {\r\n case types.LOAD_AUTH_SERVICES_SUCCESS:\r\n return { ...state, auth: action.services };\r\n case types.LOAD_PARTNER_SERVICES_SUCCESS:\r\n return { ...state, partner: action.services };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function settingsReducer(state = initialState.settings, action) {\r\n switch (action.type) {\r\n case types.UPDATE_DATALIMIT_SETTING:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], dataLimit: action.setting } };\r\n case types.UPDATE_SORTBY_SETTING:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], sortBy: action.setting } };\r\n case types.UPDATE_FILTER_SETTING:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], filters: action.setting } };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function linksReducer(state = initialState.links, action) {\r\n switch (action.type) {\r\n case types.LOAD_GLOBAL_LINKS_SUCCESS:\r\n return { ...state, global: action.globalLinks };\r\n case types.LOAD_AVAILABLE_LINKS_SUCCESS:\r\n return { ...state, available: action.available };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function pageReducer(state = initialState.page, action) {\r\n switch (action.type) {\r\n case types.UPDATE_SELECTED_KB_CONTENT:\r\n return { ...state, kb: { ...state.kb, selectedContent: action.selectedContent } };\r\n case types.UPDATE_SELECTED_PARTNER:\r\n return { ...state, partners: { ...state.partners, selectedPartner: action.selectedPartner } };\r\n case types.UPDATE_SELECTED_USER:\r\n return { ...state, users: { ...state.users, selectedUser: action.selectedUser } };\r\n case types.UPDATE_SELECTED_USERS:\r\n return { ...state, users: { ...state.users, selectedUsers: action.selectedUsers } };\r\n case types.UPDATE_SELECTED_ROLE:\r\n return { ...state, roles: { ...state.roles, selectedRole: action.selectedRole } };\r\n case types.UPDATE_SELECTED_MACHINE:\r\n return { ...state, virtualMachines: { ...state.virtualMachines, selectedMachine: action.selectedMachine } };\r\n case types.UPDATE_SELECTED_AUDIT_DETAILS:\r\n return { ...state, audits: { ...state.audits, selectedAuditDetails: action.auditDetails } };\r\n case types.UPDATE_SEARCH_TERM:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], searchTerm: action.searchTerm } };\r\n case types.UPDATE_TEXT_FILTER:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], textFilters: { ...state[action.recordType].textFilters, [action.textFilter]: action.searchTerm } } };\r\n case types.CLEAR_TEXT_FILTERS:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], textFilters: initialState.page[action.recordType].textFilters } };\r\n case types.TOGGLE_FILTER_BY_COLUMN:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], filterByColumn: action.filterByColumn } };\r\n case types.UPDATE_PAGE_NUMBER:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], pageNumber: action.pageNumber } };\r\n case types.CLEAR_SELECTED_KB_CONTENT:\r\n return { ...state, kb: { ...state.kb, selectedContent: initialState.page.kb.selectedContent } };\r\n case types.CLEAR_SELECTED_PARTNER:\r\n return { ...state, partners: { ...state.partners, selectedPartner: initialState.page.partners.selectedPartner } };\r\n case types.CLEAR_SELECTED_USER:\r\n return { ...state, users: { ...state.users, selectedUser: initialState.page.users.selectedUser } };\r\n case types.CLEAR_SELECTED_USERS:\r\n return { ...state, users: { ...state.users, selectedUsers: initialState.page.users.selectedUsers } };\r\n case types.CLEAR_SELECTED_ROLE:\r\n return { ...state, roles: { ...state.roles, selectedRole: initialState.page.roles.selectedRole } };\r\n case types.CLEAR_SELECTED_AUDIT_DETAILS:\r\n return { ...state, audits: { ...state.audits, selectedAuditDetails: initialState.page.audits.selectedAuditDetails } };\r\n case types.LOADED_PAGE:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], isLoading: false } };\r\n case types.ALL_USERS_SELECTED:\r\n return { ...state, [action.recordType]: { ...state[action.recordType], allUsersSelected: action.allUsersSelected } };\r\n case types.UPDATE_DASHBOARD_LAYOUT:\r\n return { ...state, home: { ...state.home, dashboardLayout: action.dashboardLayout } };\r\n case types.LOAD_DASHBOARD_LAYOUT_SUCCESS:\r\n return { ...state, home: { ...state.home, dashboardLayout: action.dashboardLayout } }\r\n case types.LOAD_AVAILABLE_WIDGETS_SUCCESS:\r\n return { ...state, home: { ...state.home, availableWidgets: action.widgets } };\r\n case types.UPDATE_DASHBOARD_EDIT_MODE:\r\n return { ...state, home: { ...state.home, isDashboardInEditMode: action.isEnabled } }\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function virtualMachinesReducer(state = initialState.virtualMachines, action) {\r\n switch (action.type) {\r\n case types.LOAD_VIRTUAL_MACHINES_SUCCESS:\r\n return action.virtualMachines;\r\n case types.UPDATE_VIRTUAL_MACHINE_STATUS_SUCCESS:\r\n return state.map(virtualMachine => {\r\n if (virtualMachine.virtualMachineId === action.virtualMachineId) {\r\n return { ...virtualMachine, statusString: action.statusString, status: action.status }\r\n } else {\r\n return virtualMachine\r\n }\r\n });\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function permissionsReducer(state = initialState.permissions, action) {\r\n switch (action.type) {\r\n case types.LOAD_PERMISSIONS_SUCCESS:\r\n return action.permissions;\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function statCardReducer(state = initialState.statCard, action) {\r\n switch (action.type) {\r\n case types.UPDATE_STAT_CARD_NUMBER:\r\n return { ...state, cardNumber: action.cardNumber };\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function auditsReducer(state = initialState.audits, action) {\r\n switch (action.type) {\r\n case types.LOAD_AUDITS_SUCCESS:\r\n return action.audits;\r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function appSettingsReducer(state = initialState.appSettings, action) {\r\n switch (action.type) {\r\n case types.LOAD_MAINTENANCE_MODE_SUCCESS:\r\n return { ...state, maintenanceMode: action.maintenanceMode }; \r\n case types.LOAD_RESOURCE_CYCLE_INTERVAL_SUCCESS:\r\n return { ...state, resourceCycleIntervalInSeconds: action.resourceCycleIntervalInSeconds }; \r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function userStatusesReducer(state = initialState.userStatuses, action) {\r\n switch (action.type) { \r\n case types.LOAD_USER_STATUSES_SUCCESS:\r\n return action.userStatuses; \r\n default:\r\n return state;\r\n }\r\n}","import * as types from '../actions/types';\r\nimport initialState from './InitialState';\r\n\r\nexport default function notificationReducer(state = initialState.notifications, action) {\r\n switch (action.type) {\r\n case types.SAVE_NOTIFICATION_SUCCESS:\r\n return state.map(notification => {\r\n if (notification.notificationId === action.notification.notificationId) {\r\n return action.notification;\r\n } else {\r\n return notification;\r\n }\r\n });\r\n case types.REMOVE_NOTIFICATION_SUCCESS:\r\n return state.map(notification => {\r\n if (notification.notificationId !== action.notification.notificationId) {\r\n return notification;\r\n }\r\n });\r\n case types.LOAD_NOTIFICATIONS_SUCCESS:\r\n return action.notifications;\r\n\r\n case types.UPDATE_NOTIFICATION_SUCCESS:\r\n return state.map(notification => {\r\n if (notification.notificationId === action.notification.notificationId) {\r\n return action.notification;\r\n } else {\r\n return notification;\r\n }\r\n });\r\n default:\r\n return state;\r\n }\r\n}","import { createStore, applyMiddleware, compose } from 'redux';\r\nimport rootReducer from './reducers'\r\nimport thunk from 'redux-thunk'\r\n\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\nconst initialState = {}\r\n\r\nconst store = createStore(\r\n rootReducer,\r\n initialState,\r\n composeEnhancers(applyMiddleware(thunk))\r\n)\r\n\r\nexport default store;","import React, { useEffect, useRef } from 'react';\r\nimport * as usersService from '../services/usersService';\r\nimport { storeUser } from '../redux/actions/authActions';\r\nimport { setAuthHeader } from './axiosHeaders';\r\n\r\nexport default function AuthProvider({ userManager: manager, store, children }) {\r\n\r\n let userManager = useRef();\r\n\r\n useEffect(() => {\r\n userManager.current = manager\r\n\r\n const handleStayLoggedIn = () => {\r\n userManager.current.signinSilent().then(user => {\r\n console.log(`User Refreshed: ${user.profile.name} expires in ${user.expires_in} second(s)`)\r\n store.dispatch(storeUser(user))\r\n }).catch(error => {\r\n console.log(error)\r\n });\r\n }\r\n\r\n const onUserLoaded = (user) => {\r\n console.log(`${Date.now()} - user loaded: ${user.profile.name} expires in ${user.expires_in} second(s)`)\r\n setAuthHeader(user.access_token);\r\n usersService.getUserPartnerName().then(partnerName => {\r\n user.profile.partnerName = partnerName;\r\n }).catch(error => console.log(error)).finally(() => store.dispatch(storeUser(user)));\r\n }\r\n\r\n const onUserUnloaded = () => {\r\n setAuthHeader(null)\r\n console.log(`user unloaded`)\r\n }\r\n\r\n const onAccessTokenExpiring = () => {\r\n handleStayLoggedIn();\r\n console.log(`user token expiring`)\r\n }\r\n\r\n const onAccessTokenExpired = () => {\r\n console.log(`${Date.now()} - user token expired`)\r\n userManager.current.signoutRedirect();\r\n }\r\n\r\n const onUserSignedOut = () => {\r\n console.log(`user signed out`)\r\n }\r\n\r\n // events for user\r\n userManager.current.events.addUserLoaded(onUserLoaded)\r\n userManager.current.events.addUserUnloaded(onUserUnloaded)\r\n userManager.current.events.addAccessTokenExpiring(onAccessTokenExpiring)\r\n userManager.current.events.addAccessTokenExpired(onAccessTokenExpired)\r\n userManager.current.events.addUserSignedOut(onUserSignedOut)\r\n\r\n // Specify how to clean up after this effect:\r\n return function cleanup() {\r\n userManager.current.events.removeUserLoaded(onUserLoaded);\r\n userManager.current.events.removeUserUnloaded(onUserUnloaded);\r\n userManager.current.events.removeAccessTokenExpiring(onAccessTokenExpiring)\r\n userManager.current.events.removeAccessTokenExpired(onAccessTokenExpired)\r\n userManager.current.events.removeUserSignedOut(onUserSignedOut)\r\n };\r\n }, [manager, store]);\r\n\r\n return (\r\n React.Children.only(children)\r\n )\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { config } from '../config';\r\nimport { NavbarBrand, NavLink, UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\r\nimport { NavLink as RRNavLink, Link, useNavigate, useLocation } from 'react-router-dom';\r\nimport { signoutRedirect } from '../services/userService';\r\nimport * as linksActions from '../redux/actions/linksActions';\r\nimport * as permissionsActions from '../redux/actions/permissionsActions';\r\nimport * as pageActions from '../redux/actions/pageActions'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { setAuthHeader } from '../utils/axiosHeaders';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport * as auditsService from '../services/auditsService';\r\nimport * as notificationActions from '../redux/actions/notificationActions';\r\nimport { CContainer, CNavbar, CNavbarToggler, CCollapse, CNavbarNav, CNavItem } from '@coreui/bootstrap-react';\r\nimport * as appSettingsActions from '../redux/actions/appSettingsActions';\r\nimport { toast } from 'react-toastify';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\n\r\nfunction NavMenu({sideNavState, theme}) {\r\n const [visible, setVisible] = useState(false);\r\n const [links, setLinks] = useState([]);\r\n\r\n const auth = useSelector(state => state.auth);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const partnerLinks = useSelector(state => state.links.available);\r\n const maintenanceMode = useSelector(state => state.appSettings.maintenanceMode);\r\n const notifications = useSelector(state => state.notifications);\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n useEffect(() => {\r\n ReactTooltip.rebuild();\r\n })\r\n\r\n useEffect(() => { \r\n dispatch(notificationActions.loadNotifications());\r\n\r\n const intervalMaintenanceCheck = setInterval(() => {\r\n dispatch(appSettingsActions.loadMaintenanceMode());\r\n }, 10000);\r\n\r\n const intervalNotificationCheck = setInterval(() => {\r\n dispatch(notificationActions.loadNotifications());\r\n }, 10000);\r\n\r\n return () => {\r\n clearInterval(intervalMaintenanceCheck);\r\n clearInterval(intervalNotificationCheck);\r\n }\r\n\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (notifications.filter(x => x.type === \"Alert\").length > 0) {\r\n const ToastMessage = ({ closeToast, toastProps }) => (\r\n <>\r\n { notifications.filter(x => x.type === \"Alert\")[0].title\r\n }: { notifications.filter(x => x.type === \"Alert\")[0].message }\r\n \r\n )\r\n toast(, { autoClose: false });\r\n }\r\n }, [notifications.length])\r\n\r\n useEffect(() => {\r\n if (auth.user && auth.user.access_token && !auth.isLoadingUser) {\r\n setAuthHeader(auth.user.access_token);\r\n dispatch(linksActions.loadAvailableLinks()).catch(error => {\r\n console.log(error + ' ' + auth.user.access_token);\r\n });\r\n dispatch(permissionsActions.loadUserRoles()).catch(error => {\r\n console.log(error + ' ' + auth.user.access_token);\r\n });\r\n dispatch(appSettingsActions.loadMaintenanceMode()).catch(error => {\r\n console.log(error + ' ' + auth.user.access_token);\r\n });\r\n }\r\n }, [auth.user])\r\n\r\n useEffect(() => {\r\n if (links !== partnerLinks) {\r\n setLinks(partnerLinks)\r\n }\r\n }, [partnerLinks])\r\n\r\n const handleNavClickLogging = (pageName) => {\r\n auditsService.logPageView(pageName);\r\n }\r\n\r\n const enableDashboardEditMode = () => {\r\n if(location.pathname !== \"/\"){\r\n navigate('/');\r\n }\r\n\r\n dispatch(pageActions.updateDashboardEditMode(true));\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n { auth.user ? auth.user.profile.partnerName : \"\" }\r\n
    \r\n
    \r\n { notifications.length > 0 ?\r\n \r\n \r\n \r\n \r\n { notifications.length > 0 ?\r\n { notifications.length }\r\n : \"\"\r\n }\r\n \r\n \r\n \r\n { notifications.filter(x => x.type === \"Alert\").length > 0 ? notifications.filter(x => x.type === \"Alert\").map((alert) => {\r\n return (\r\n
    \r\n { alert.title }
    { alert.message }\r\n
    \r\n )\r\n }) : \"\" }\r\n
    \r\n
    \r\n : \r\n
    \r\n \r\n
    \r\n
    }\r\n \r\n { maintenanceMode === \"enabled\" && userPermissions.some(p => p.name === \"ViewMaintenance\") ?\r\n \r\n handleNavClickLogging(\"Settings\") }\r\n nav\r\n inNavbar\r\n data-tip=\"Maintenance Mode is Active\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n tag={ RRNavLink }\r\n to=\"/Administration/Settings\"\r\n >\r\n \r\n \r\n \r\n : \"\"\r\n }\r\n \r\n { links.length > 0 ?\r\n \r\n \r\n \r\n \r\n \r\n { links.map(link => {\r\n return (\r\n \r\n { link.label } { \">\" }\r\n \r\n )\r\n }) }\r\n \r\n \r\n : \"\"\r\n }\r\n \r\n { auth.user ? { auth.user.profile.family_name }, { auth.user.profile.given_name } : }\r\n \r\n Edit Dashboard\r\n Logout\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n}\r\n\r\nexport default NavMenu;","import axios from 'axios'\r\nimport { config } from '../config';\r\n\r\nexport async function getUserPreferences() {\r\n const response = await axios.get(config.OASIS_PORTAL_URL + 'api/userpreferences');\r\n return response.data;\r\n}\r\n\r\nexport async function saveUserPreference(userPreference) {\r\n const response = await axios.post(config.OASIS_PORTAL_URL + 'api/userpreferences/save', userPreference).catch(error => {\r\n if (error.response.data.error) {\r\n throw error.response.data.error.message;\r\n } else {\r\n throw error\r\n }\r\n });\r\n return response.data\r\n}","import * as types from \"./types\";\r\nimport * as userPreferencesService from \"../../services/userPreferencesService\";\r\n\r\nexport function loadUserPreferencesSuccess(userPreferences) {\r\n return { type: types.LOAD_USER_PREFERENCES_SUCCESS, userPreferences }\r\n}\r\n\r\nexport function saveUserPreferenceSuccess(userPreference) {\r\n return { type: types.SAVE_USER_PREFERENCE_SUCCESS, userPreference }\r\n}\r\n\r\nexport function loadUserPreferences() {\r\n return function (dispatch) {\r\n return userPreferencesService.getUserPreferences()\r\n .then(userPreferences => {\r\n dispatch(loadUserPreferencesSuccess(userPreferences));\r\n })\r\n .catch(error => {\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport function saveUserPreference(userPreference) {\r\n return function (dispatch) {\r\n return userPreferencesService.saveUserPreference(userPreference)\r\n .then(savedUserPreference => {\r\n dispatch(saveUserPreferenceSuccess(savedUserPreference));\r\n }).catch(error => {\r\n throw error;\r\n })\r\n }\r\n}","import React, { useState, useRef } from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport { NavLink } from 'reactstrap';\r\nimport { NavLink as RRNavLink } from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { CContainer, CNavbar, CCollapse, CNavbarNav, CNavItem } from '@coreui/bootstrap-react';\r\nimport { toast } from 'react-toastify';\r\nimport { useEffect } from 'react';\r\nimport { usePopper } from 'react-popper';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { config } from '../config';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport * as pageActions from '../redux/actions/pageActions';\r\nimport * as userPreferencesActions from '../redux/actions/userPreferencesActions';\r\nimport * as auditsService from '../services/auditsService';\r\nimport * as relativityStatsActions from '../redux/actions/relativityStatsActions';\r\nimport * as fileTransferStatsActions from '../redux/actions/fileTransferStatsActions';\r\nimport * as supportStatsActions from '../redux/actions/supportStatsActions';\r\n\r\nfunction SideNavMenu({ sideNavState, theme }) {\r\n\r\n const [isActive, setIsActive] = useState(\"\");\r\n const [width, setWidth] = useState(0);\r\n const [userPreferredSideNav, setUserPreferredSideNav] = useState(\"Open\");\r\n const showRelativityPopup = useRef(false);\r\n const showFileTransferPopup = useRef(false);\r\n\r\n const auth = useSelector(state => state.auth);\r\n const userPermissions = useSelector(state => state.auth.permissions);\r\n const relativityStats = useSelector(state => state.relativityStats);\r\n const fileTransferStats = useSelector(state => state.fileTransferStats);\r\n const supportStats = useSelector(state => state.supportStats);\r\n const userPreferences = useSelector(state => state.userPreferences);\r\n const minWidth = 1360;\r\n\r\n const [relativityReferenceElement, setRelativityReferenceElement] = useState(null);\r\n const [relativityPopperElement, setRelativityPopperElement] = useState(null);\r\n const { styles: relativityPopperStyles, attributes: relativityPopperAttributes } = usePopper(relativityReferenceElement, relativityPopperElement, { placement: \"right\" });\r\n const relativitySideNavChildRef = useRef();\r\n\r\n const [fileTransferReferenceElement, setFileTransferReferenceElement] = useState(null);\r\n const [fileTransferPopperElement, setFileTransferPopperElement] = useState(null);\r\n const { styles: fileTransferPopperStyles, attributes: fileTransferPopperAttributes } = usePopper(fileTransferReferenceElement, fileTransferPopperElement, { placement: \"right\" });\r\n const fileTransferSideNavChildRef = useRef();\r\n\r\n const adminHomeLink = auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewUserStatus\") ?\r\n \"/Administration/UserStatus\" :\r\n auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewAudits\") ?\r\n \"/Administration/Audits\" :\r\n auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewRoles\") ?\r\n \"/Administration/Roles\" :\r\n \"/Administration/Maintenance\";\r\n const adminHomePageName = auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewUserStatus\") ?\r\n \"UserStatus\" :\r\n auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewAudits\") ?\r\n \"Audits\" :\r\n auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewRoles\") ?\r\n \"Roles\" :\r\n \"Maintenance\";\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n ReactTooltip.rebuild();\r\n })\r\n\r\n useEffect(() => {\r\n setUserPreferredSideNav(sideNavState)\r\n window.addEventListener(\"resize\", handleWindowResize);\r\n window.addEventListener(\"mousedown\", handleClickOutsideSideNavPopups);\r\n\r\n //cleanup listeners to prevent memory leak\r\n return () => {\r\n window.removeEventListener(\"resize\", handleWindowResize);\r\n window.removeEventListener(\"mousedown\", handleClickOutsideSideNavPopups);\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (width === 0) { return; }\r\n if (!auth.user) { return; }\r\n\r\n if (width < minWidth && sideNavState === \"open\") {\r\n updateSideNavMenuState(\"Closed\")\r\n } else if (width >= minWidth && userPreferredSideNav.toLowerCase() === \"open\") {\r\n updateSideNavMenuState(\"Open\")\r\n }\r\n }, [width])\r\n\r\n useEffect(() => {\r\n if (auth.user) {\r\n dispatch(relativityStatsActions.loadRelativityInstances()).catch(error => {\r\n toast.error(\"Loading Relativity Instances Failed:\" + error, { autoClose: false })\r\n })\r\n dispatch(fileTransferStatsActions.loadPartnerPortals()).catch(error => {\r\n toast.error(\"Loading Partner Portals Failed:\" + error, { autoClose: false })\r\n });\r\n dispatch(supportStatsActions.loadSupportUrl()).catch(error => {\r\n toast.error(\"Loading Support Url Failed:\" + error, { autoClose: false })\r\n });\r\n }\r\n }, [auth.user])\r\n\r\n useEffect(() => {\r\n if (theme == 'light') {\r\n document.body.style.backgroundColor = '#F4F7FC';\r\n document.body.style.color = '#131523';\r\n } else if (theme == 'dark') {\r\n document.body.style.backgroundColor = '#161616';\r\n document.body.style.color = '#F4F7FC';\r\n }\r\n }, [theme])\r\n\r\n useEffect(() => {\r\n if (window.location.pathname.includes(\"/Administration\")) {\r\n setIsActive(\" active\");\r\n } else {\r\n setIsActive(\"\");\r\n }\r\n }, [window.location.pathname]);\r\n\r\n const handleWindowResize = () => {\r\n setWidth(window.innerWidth)\r\n }\r\n\r\n const handleClickOutsideSideNavPopups = (event) => {\r\n if (relativitySideNavChildRef.current && !relativitySideNavChildRef.current.contains(event.target)) {\r\n if (!event.target.classList.contains('relativity-side-nav')) {\r\n showRelativityPopup.current = false;\r\n }\r\n }\r\n\r\n if (fileTransferSideNavChildRef.current && !fileTransferSideNavChildRef.current.contains(event.target)) {\r\n if (!event.target.classList.contains('filetransfer-side-nav')) {\r\n showFileTransferPopup.current = false;\r\n }\r\n }\r\n }\r\n\r\n const handleNavClickLogging = (pageName) => {\r\n auditsService.logPageView(pageName);\r\n if (pageName === \"Knowledge Base\") {\r\n dispatch(pageActions.clearSelectedKBContent());\r\n }\r\n }\r\n\r\n const handleLogLoginSupport = () => {\r\n auditsService.logLoginSupport();\r\n }\r\n\r\n const handleFileTransferNavLogging = (portalName) => {\r\n auditsService.logContentViewWithInfo(\"File Transfer\", \"Navigated to - \" + portalName);\r\n }\r\n\r\n const handleThemeChange = () => {\r\n let updatedThemePreference = [...userPreferences].find(x => x.preferenceName === 'Theme');\r\n\r\n if (updatedThemePreference.preferenceValue === \"Light\") {\r\n updatedThemePreference.preferenceValue = \"Dark\";\r\n } else if (updatedThemePreference.preferenceValue === \"Dark\") {\r\n updatedThemePreference.preferenceValue = \"Light\";\r\n }\r\n dispatch(userPreferencesActions.saveUserPreference(updatedThemePreference))\r\n .then(empty => {\r\n userPreferencesActions.loadUserPreferences();\r\n }).catch(error => {\r\n toast.error(\"Theme Change Failed: \" + error, { autoClose: false });\r\n });\r\n }\r\n\r\n const handleToggleSideNav = () => {\r\n var toggledSideNavState = sideNavState === \"open\" ? \"Closed\" : \"Open\";\r\n updateSideNavMenuState(toggledSideNavState);\r\n setUserPreferredSideNav(toggledSideNavState);\r\n }\r\n\r\n var updateSideNavMenuState = (state) => {\r\n if (sideNavState != state) {\r\n let updatedSideNavStatePreference = [...userPreferences].find(x => x.preferenceName === 'SideNavState');\r\n\r\n updatedSideNavStatePreference.preferenceValue = state;\r\n\r\n dispatch(userPreferencesActions.saveUserPreference(updatedSideNavStatePreference))\r\n .then(empty => {\r\n userPreferencesActions.loadUserPreferences();\r\n }).catch(error => {\r\n toast.error(\"Side Navigation Collapse Change Failed: \" + error, { autoClose: false });\r\n });\r\n }\r\n }\r\n\r\n const handleRelativitySideNavClick = () => {\r\n showRelativityPopup.current = !(showRelativityPopup.current);\r\n }\r\n\r\n const handleFileTransferSideNavClick = () => {\r\n showFileTransferPopup.current = !(showFileTransferPopup.current);\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n handleNavClickLogging(\"Home\") }\r\n tag={ RRNavLink }\r\n to=\"/\"\r\n end\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Home\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n { sideNavState === \"open\" ? Home : \"\" }\r\n \r\n \r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewPartners\") ?\r\n \r\n handleNavClickLogging(\"Partners\") }\r\n tag={ RRNavLink }\r\n to=\"/Partners\"\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Partners\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n { sideNavState === \"open\" ? Partners : \"\" }\r\n \r\n \r\n : \"\"\r\n }\r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewUsers\") ?\r\n \r\n handleNavClickLogging(\"Users\") }\r\n tag={ RRNavLink }\r\n to=\"/Users\"\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Users\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n { sideNavState === \"open\" ? Users : \"\" }\r\n \r\n \r\n : \"\"\r\n }\r\n { auth.user && userPermissions.length > 0 && userPermissions.some(p => p.name === \"ViewVirtualMachines\") ?\r\n \r\n handleNavClickLogging(\"Virtual Machines\") }\r\n tag={ RRNavLink }\r\n to=\"/VirtualMachines\"\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Virtual Machines\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n { sideNavState === \"open\" ? Virtual Machines : \"\" }\r\n \r\n \r\n : \"\"\r\n }\r\n { auth.user ?\r\n \r\n handleNavClickLogging(\"Knowledge Base\") }\r\n tag={ RRNavLink }\r\n to=\"/KnowledgeBase\"\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Knowledge Base\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n { sideNavState === \"open\" ? Knowledge Base : \"\" }\r\n \r\n \r\n : \"\"\r\n }\r\n \r\n handleLogLoginSupport() }\r\n href={ supportStats.url ? supportStats.url : \"\" }\r\n target='_blank'\r\n rel='noopener noreferrer'\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Support\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n { sideNavState === \"open\" ? Support : \"\" }\r\n \r\n \r\n \r\n \r\n { relativityStats.instances.length < 1 ?\r\n \r\n \r\n \r\n \r\n \r\n { sideNavState === \"open\" ? Relativity : \"\" }\r\n \r\n : relativityStats.instances.length == 1 ?\r\n \r\n \r\n \r\n \r\n \r\n { sideNavState === \"open\" ? Relativity : \"\" }\r\n \r\n : <>\r\n
    handleRelativitySideNavClick() } className='relativity-side-nav side-nav-external-link dropend side-nav-dropdown'>\r\n \r\n \r\n \r\n \r\n { sideNavState === \"open\" ?\r\n <>\r\n Relativity\r\n \r\n \r\n \r\n \r\n : \"\"\r\n }\r\n
    \r\n \r\n }\r\n \r\n
    \r\n \r\n \r\n { fileTransferStats.portals.length > 1 ?\r\n <>\r\n
    handleFileTransferSideNavClick() } className='filetransfer-side-nav side-nav-external-link dropend side-nav-dropdown'>\r\n \r\n \r\n \r\n { sideNavState === \"open\" ?\r\n <>\r\n File Transfer\r\n \r\n \r\n \r\n \r\n : \"\"\r\n }\r\n
    \r\n :\r\n fileTransferStats.portals.length > 0 ?\r\n <>\r\n handleFileTransferNavLogging(fileTransferStats.portals[0].name) }\r\n href={ 'https://' + fileTransferStats.portals[0].url }\r\n target='_blank'\r\n >\r\n \r\n { sideNavState === \"open\" ? File Transfer : \"\" }\r\n \r\n :\r\n \r\n \r\n { sideNavState === \"open\" ? File Transfer : \"\" }\r\n \r\n }\r\n \r\n
    \r\n { auth.user && userPermissions.length > 0 &&\r\n userPermissions.some(p => p.name === \"ViewUserStatus\") ||\r\n userPermissions.some(p => p.name === \"ViewAudits\") ||\r\n userPermissions.some(p => p.name === \"ViewRoles\") ||\r\n userPermissions.some(p => p.name === \"ViewMaintenance\") ?\r\n \r\n handleNavClickLogging(adminHomePageName) }\r\n tag={ RRNavLink }\r\n to={ adminHomeLink }\r\n data-tip={ sideNavState === \"open\" ? \"\" : \"Administration\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n \r\n \r\n \r\n { sideNavState === \"open\" ? Administration : \"\" }\r\n \r\n \r\n : \"\"\r\n }\r\n \r\n \r\n { sideNavState === \"open\" ? Dark Mode : \"\" }\r\n
    \r\n
    handleToggleSideNav() } className={ \"btn btn-side-nav-show \" + theme + \" \" + sideNavState }\r\n data-tip={ sideNavState === \"open\" ? \"Click to collapse Navigation Bar\" : \"Click to expand Navigation Bar\" }\r\n data-delay-show=\"1000\"\r\n data-type={ theme }\r\n data-arrow-color={ theme == \"light\" ? \"#92929D\" : \"#161616\" }\r\n data-background-color={ theme == \"light\" ? \"#F4F7FC\" : \"#161616\" }\r\n data-border={ true }\r\n >\r\n { sideNavState === \"open\" ? : }\r\n
    \r\n \r\n \r\n \r\n \r\n { ReactDOM.createPortal(\r\n <>\r\n { showRelativityPopup.current ?\r\n \r\n
    \r\n { relativityStats.instances.map(relativityInstance => (\r\n showRelativityPopup.current = false }\r\n className={ 'dropdown-item ' + theme }\r\n href={ config.IDENTITY_URL + 'api/Relativity/SignIn?serviceProviderId=' + relativityInstance.baseUrl + '/Relativity/' }\r\n target='_blank'\r\n rel='noopener noreferrer'\r\n >\r\n { relativityInstance.friendlyName }\r\n \r\n )) }\r\n
    \r\n\r\n
    \r\n : \"\" }\r\n\r\n { showFileTransferPopup.current ?\r\n \r\n
    \r\n { fileTransferStats && fileTransferStats.portals.map(portal => (\r\n {\r\n handleFileTransferNavLogging(portal.name);\r\n showFileTransferPopup.current = false;\r\n }}\r\n href={ 'https://' + portal.url }\r\n target='_blank'\r\n rel='noopener noreferrer'\r\n >\r\n { portal.name }\r\n \r\n )) }\r\n
    \r\n\r\n
    \r\n : \"\" }\r\n ,\r\n document.body\r\n ) }\r\n\r\n \r\n );\r\n}\r\n\r\nexport default SideNavMenu;","import React from 'react';\r\nimport { Container } from '../../node_modules/reactstrap';\r\nimport NavMenu from './NavMenu';\r\nimport SideNavMenu from './SideNavMenu';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport default function Layout({ children, theme, sideNavState }) {\r\n\r\n const userPreferences = useSelector(state => state.userPreferences);\r\n const auth = useSelector(state => state.auth);\r\n\r\n return (\r\n <>\r\n { auth.user && userPreferences[0].userPreferenceId ?\r\n
    \r\n \r\n
    \r\n \r\n \r\n { children }\r\n \r\n
    \r\n
    \r\n :\r\n
    \r\n
    \r\n \r\n { children }\r\n \r\n
    \r\n
    \r\n }\r\n \r\n );\r\n}","import React from 'react';\r\n\r\nconst PageNotFound = () =>
    Page Not Found!
    \r\n\r\nexport default PageNotFound;","import React, { useEffect, useRef, useCallback } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport { updateUserActivity, storeUser } from '../redux/actions/authActions';\r\nimport * as permissionActions from '../redux/actions/permissionsActions';\r\nimport * as appSettingsActions from '../redux/actions/appSettingsActions';\r\nimport * as permissionService from '../services/permissionsService';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport default function ({ userManager: manager, store, children }) {\r\n\r\n const userActivityUpdate = () => {\r\n let state = store.getState();\r\n if (state.auth.user) { \r\n store.dispatch(updateUserActivity());\r\n }\r\n }\r\n\r\n const isMaintenanceModeEnabled = useSelector(state => state.appSettings.maintenanceMode === \"enabled\");\r\n const isSysAdmin = useSelector(state => state.auth.userRoles.some(userRole => userRole.role.name === \"System Admin\"));\r\n\r\n const ONE_HOUR = 1000 * 60 * 60;\r\n const ONE_MINUTE = 1000 * 60;\r\n let userManager = useRef();\r\n const stayLoggedInToastId = useRef(null);\r\n const signedOut = useRef(false);\r\n const intervalId = useRef(null);\r\n const stillActive = useRef(false);\r\n\r\n const logoutNonSysAdminUsersDuringMaintenance = useCallback(async () => {\r\n if (!signedOut.current && isMaintenanceModeEnabled && !isSysAdmin) {\r\n signedOut.current = true;\r\n userManager.current.signoutRedirect();\r\n }\r\n }, [isMaintenanceModeEnabled, isSysAdmin, userManager]);\r\n\r\n useEffect(() => {\r\n const reloadUserAndAppInfo = () => {\r\n permissionService.getUserRoles().then((userRoles) => {\r\n store.dispatch(permissionActions.loadUserRolesSuccess(userRoles));\r\n store.dispatch(appSettingsActions.loadMaintenanceMode());\r\n })\r\n };\r\n\r\n let loadingIntervalId = setInterval(() => reloadUserAndAppInfo(), 10000);\r\n\r\n let logoutCheckIntervalId = setInterval(() => logoutNonSysAdminUsersDuringMaintenance(), 10000);\r\n\r\n return function cleanup() {\r\n if (loadingIntervalId) {\r\n clearInterval(loadingIntervalId);\r\n }\r\n if (logoutCheckIntervalId) {\r\n clearInterval(logoutCheckIntervalId);\r\n }\r\n };\r\n }, [logoutNonSysAdminUsersDuringMaintenance])\r\n\r\n useEffect(() => {\r\n userManager.current = manager;\r\n\r\n userActivityUpdate();\r\n\r\n const expiringMessage = () => (\r\n
    \r\n
    \r\n You are about to be logged out due to inactivity:\r\n
    \r\n
    \r\n To stay logged in, click this message or continue working in the Oasis Portal\r\n
    \r\n
    \r\n );\r\n\r\n const checkUserActivity = () => {\r\n let state = store.getState();\r\n let msFromLastActive = Date.now() - state.auth.lastActive;\r\n\r\n if (!signedOut.current && msFromLastActive >= (ONE_HOUR)) {\r\n signedOut.current = true;\r\n userManager.current.signoutRedirect();\r\n } else if (!stayLoggedInToastId.current && msFromLastActive > (ONE_HOUR - ONE_MINUTE) && msFromLastActive < (ONE_HOUR)) {//show toast a minute before expire\r\n stillActive.current = false;\r\n stayLoggedInToastId.current = toast.warning(expiringMessage, {\r\n autoClose: ONE_MINUTE,\r\n position: \"top-center\",\r\n hideProgressBar: false,\r\n closeOnClick: false,\r\n closeButton: false,\r\n draggable: false,\r\n pauseOnFocusLoss: false,\r\n pauseOnHover: false,\r\n onClick: handleStayLoggedIn,\r\n onClose: handleStayLoggedInClose\r\n })\r\n } else if (stayLoggedInToastId.current && (Date.now() - state.auth.lastActive) < (5000)) {\r\n stillActive.current = true;\r\n toast.dismiss(stayLoggedInToastId.current);\r\n }\r\n\r\n }\r\n\r\n intervalId.current = setInterval(() => checkUserActivity(), 100);\r\n\r\n const handleStayLoggedIn = () => {\r\n userManager.current.signinSilent().then(user => {\r\n console.log(`User Refreshed: ${user.profile.name} expires in ${user.expires_in} second(s)`)\r\n store.dispatch(storeUser(user))\r\n }).catch(error => {\r\n console.log(error)\r\n });\r\n if (stayLoggedInToastId.current) {\r\n stillActive.current = true;\r\n toast.dismiss(stayLoggedInToastId.current);\r\n }\r\n }\r\n\r\n const handleStayLoggedInClose = () => {\r\n if (!stillActive.current && !signedOut) {\r\n signedOut.current = true;\r\n userManager.current.signoutRedirect();\r\n if (intervalId.current) {\r\n clearInterval(intervalId.current);\r\n intervalId.current = null;\r\n }\r\n }\r\n stayLoggedInToastId.current = null;\r\n }\r\n\r\n return function cleanup() {\r\n if (intervalId.current) {\r\n clearInterval(intervalId.current);\r\n }\r\n };\r\n }, [manager, store])\r\n\r\n return (\r\n
    \r\n { React.Children.only(children) }\r\n
    \r\n )\r\n}","import React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as userPreferencesActions from '../redux/actions/userPreferencesActions';\r\nimport * as permissionsActions from '../redux/actions/permissionsActions';\r\nimport * as kbActions from '../redux/actions/kbActions';\r\nimport { setAuthHeader } from '../utils/axiosHeaders';\r\n\r\nexport default function PreDataLoader({ children }) {\r\n\r\n const auth = useSelector(state => state.auth);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => { \r\n if (auth.user && auth.user.access_token && !auth.isLoadingUser) {\r\n setAuthHeader(auth.user.access_token);\r\n dispatch(permissionsActions.loadUserPermissions()).catch(error => {\r\n console.log(error + ' - Error loading pre data user permissions');\r\n });\r\n dispatch(userPreferencesActions.loadUserPreferences()).catch(error => {\r\n console.log(error + ' ' + auth.user.access_token);\r\n });\r\n dispatch(kbActions.loadKnowledgeBaseBooks()).catch(error => {\r\n console.log(error + ' - Error loading pre data kb books');\r\n });\r\n }\r\n }, [auth.user])\r\n\r\n return (\r\n React.Children.toArray(children)\r\n )\r\n}","import React, { useEffect } from 'react';\r\nimport { Routes, Route, useLocation } from 'react-router-dom';\r\nimport SigninOidc from './common/Signin-Oidc';\r\nimport SignoutOidc from './common/Signout-Oidc';\r\nimport HomePage from './home/HomePage';\r\nimport KnowledgeBasePage from './knowledgebase/KnowledgeBasePage';\r\nimport PartnersPage from './partners/PartnersPage';\r\nimport UsersPage from './users/UsersPage';\r\nimport VirtualMachinesPage from './virtualMachines/VirtualMachinesPage';\r\nimport AdministrationPage from './administration/AdministrationPage';\r\nimport Login from './common/Login';\r\nimport store from '../redux/store';\r\nimport userManager, { loadUserFromStorage } from '../services/userService';\r\nimport AuthProvider from '../utils/authProvider';\r\nimport PrivateRoute from '../utils/protectedRoute';\r\nimport Layout from './Layout';\r\nimport PageNotFound from './PageNotFound';\r\nimport { ToastContainer } from \"react-toastify\";\r\nimport ReactTooltip from \"react-tooltip\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport ActivityTracker from '../utils/ActivityTracker';\r\nimport { TabLocalStorage } from '../utils/localStorageUtils';\r\nimport 'rsuite/dist/rsuite.min.css';\r\nimport PreDataLoader from '../components/PreDataLoader';\r\nimport { CustomProvider } from 'rsuite';\r\nimport { useSelector } from 'react-redux';\r\nimport { library } from '@fortawesome/fontawesome-svg-core'\r\nimport { fas } from '@fortawesome/pro-solid-svg-icons'\r\nimport { far } from '@fortawesome/pro-regular-svg-icons'\r\nimport { fad } from '@fortawesome/pro-duotone-svg-icons'\r\n\r\nfunction App() {\r\n\r\n library.add(fas, far, fad);\r\n\r\n const location = useLocation();\r\n const userPreferences = useSelector(state => state.userPreferences);\r\n const theme = userPreferences.find(x => x.preferenceName === 'Theme').preferenceValue.toLowerCase();\r\n const sideNavState = userPreferences.find(x => x.preferenceName === 'SideNavState').preferenceValue.toLowerCase();\r\n\r\n useEffect(() => {\r\n // fetch current user from cookies\r\n loadUserFromStorage(store)\r\n }, [])\r\n\r\n useEffect(() => {\r\n //dont save authentication specific paths to localstorage\r\n if (location.pathname != \"/signout-oidc\" && location.pathname != \"/signin-oidc\" && location.pathname != \"/login\") {\r\n new TabLocalStorage().set(location.pathname);\r\n }\r\n }, [location])\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n { } }\r\n element={ }\r\n />\r\n { return { selectedPageId: 0 } } }\r\n element={ }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\nimport './style.css'\r\nimport App from './components/App';\r\nimport store from './redux/store';\r\nimport { Provider as ReduxProvider } from 'react-redux';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport 'react-grid-layout/css/styles.css' \r\nimport 'react-resizable/css/styles.css'\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);"],"sourceRoot":""}