{"version":3,"sources":["utils/route-guard/GuestGuard.js","layout/NavMotion.js","ui-component/Loadable.js","routes/LoginRoutes.js","utils/route-guard/AuthGuard.js","layout/MainLayout/LogoSection/index.js","layout/MainLayout/Header/ModeSection/index.js","layout/MainLayout/Header/ProfileSection/index.js","layout/MainLayout/Header/HelpSection/index.js","utils/appInsights.js","layout/MainLayout/Header/LegacyLinkSection/index.js","layout/MainLayout/Header/NotificationSection/NotificationType.js","layout/MainLayout/Header/NotificationSection/NotificationList.js","layout/MainLayout/Header/NotificationSection/index.js","layout/MainLayout/Header/index.js","layout/MainLayout/MenuList/NavItem/index.js","layout/MainLayout/MenuList/NavCollapse/index.js","layout/MainLayout/MenuList/NavGroup/index.js","menu-items/widget.js","views/QueueDashboard/CreateQueueDashboardDialog/CreateQueueDashboardDialog.js","views/QueueDashboard/CreateQueueDashboardDialog/CreateNewQueueDashboardButton.js","menu-items/dashboard.js","menu-items/reporting.js","menu-items/administration.js","hooks/useMenuItems.js","layout/MainLayout/MenuList/index.js","layout/MainLayout/Sidebar/MiniDrawerStyled.js","layout/MainLayout/Sidebar/index.js","views/dashboard/AddSection/AddWidget.js","views/dashboard/AddSection/index.js","ui-component/extended/useCustomBreadcrumb.js","ui-component/extended/Breadcrumbs.js","routes/useRouteAccess.js","layout/MainLayout/index.js","utils/CustomDashboardLayout.js","utils/IdleSessionTimer.js","views/QueueDashboard/context/DashboardStateContext.js","assets/images/icons/queue-single-metric.svg","assets/images/icons/queue-donut-widget.svg","assets/images/icons/queue-timeseries-widget.svg","assets/images/icons/queue-table-widget.svg","views/QueueDashboard/CreateWidgetDialog/CreateWidgetDialog.js","views/QueueDashboard/QueueFilterSelectionDialog/QueueFilterSelectionDialog.js","views/QueueDashboard/DateTimeFilter/DateTimeFilter.js","views/QueueDashboard/DateRangePickerDialog/DateRangePickerDialog.js","views/QueueDashboard/Utils/queueDashboardUtils.js","views/QueueDashboard/TitleBar/TitleBar.js","views/QueueDashboard/QueueListSelector/QueueListSelector.js","views/QueueDashboard/MetricsSubsetGrid/MetricsSubsetGrid.js","views/QueueDashboard/AgentMetricsTable/EditAgentMetricsTableDialog.js","views/QueueDashboard/AgentMetricsTable/constants.js","views/QueueDashboard/EditWidgetMenu/EditWidgetMenu.js","views/QueueDashboard/MetricDetailsDialog/MetricDetailsDialog.js","views/QueueDashboard/AgentMetricsTable/AgentMetricsTable.js","views/QueueDashboard/DonutChartWidget/EditDonutChartWidgetDialog.js","views/QueueDashboard/DonutChartWidget/DonutChartWidget.js","views/QueueDashboard/TimeSeriesWidget/EditTimeSeriesWidgetDialog.js","views/QueueDashboard/TimeSeriesWidget/TimeSeriesWidget.js","views/QueueDashboard/QueueMetricsGroup/QueueMetricItem.js","views/QueueDashboard/QueueMetricsGroup/EditQueueMetricsGroupDialog.js","views/QueueDashboard/QueueMetricsGroup/QueueMetricsGroup.js","views/QueueDashboard/MainWidgetGrid/MainWidgetGrid.js","views/QueueDashboard/index.js","layout/MainLayout/ReportLayout.js","routes/MainRoutes.js","views/pages/RcRegistration/RegisterRC.js","views/pages/RcRegistration/RegisterRcSuccess.js","views/pages/RcRegistration/RegisterRcFailure.js","routes/RcRegistrationRoutes.js","routes/index.js","ui-component/Locales.js","layout/NavigationScroll.js","ui-component/RTLLayout.js","themes/palette.js","themes/typography.js","themes/shadows.js","themes/index.js","themes/compStyleOverride.js","app.js","serviceWorker.js","reportWebVitals.js","utils/axiosMock.js","utils/mockAdapter.js","_mockApis/scheduleReports.js","index.js","constant/index.js","store/slices/menu.js","views/QueueDashboard/Utils/queueDashboardApiCallsUtil.js","hooks/useConfig.js","hooks/useAuth.js","ui-component/cards/MainCard.js","config.js","store/slices/queueDashboard.js","views/Reports/Constants.js","utils/QueueConfigurationFormatAndValidation.js","utils/graphUtils.js","ui-component/extended/Transitions.js","utils/format.js","assets/images/maintenance/403.svg","views/pages/NoAccess.js","store/slices/notifications.js","utils/generic.js","utils/filterUtils.js","utils/axios.js","views/dashboard/CustomLegend.js","store/slices/lookup.js","store/constant.js","store/slices/dashboard.js","ui-component/extended/AnimateButton.js","views/pages/AuthWrapper1.js","views/pages/AuthCardWrapper.js","store/slices/widgets.js","ui-component/cards/AuthFooter.js","layout/MinimalLayout/index.js","views/Reports/utils.js","views/QueueDashboard/constants.js","store/slices/queueConfig.js","utils/pendo.js","store/slices/reportParameters.js","store/slices/report.js","store/slices/breadcrumb.js","store/slices/preferences.js","store/reducer.js","store/index.js","views/dashboard/CustomTooltip.js","ui-component/Loader.js","contexts/ConfigContext.js","store/accountReducer.js","contexts/JWTContext.js","ui-component/ConfirmationDialog.js","assets/scss/_themes-vars.module.scss","store/slices/templates.js","ui-component/extended/DxDataGrid.js","ui-component/extended/TimeZone.js","views/Administration/Connectors/Constants/columnMapping.js","store/slices/directoryImports.js","store/slices/scheduledReports.js","store/slices/connector.js","assets/images/ISI-logo-dark.svg","assets/images/ISI-logo.svg","ui-component/Logo.js","store/slices/remoteCollections.js","store/slices/dirImportSchedule.js","hooks/useNavigationBlocker.js","assets/images/maintenance/img-error-bg.svg","assets/images/maintenance/img-error-bg-dark.svg","assets/images/maintenance/img-error-blue.svg","assets/images/maintenance/img-error-text.svg","assets/images/maintenance/img-error-purple.svg","views/pages/NotFound.js","store/slices/history.js","store/slices/directoryImportParameters.js","store/slices/callQueues.js","ui-component/extended/DraggableDialog.js","hooks/useLocalStorage.js","views/dashboard/BasicPieChart.js","views/dashboard/BasicAreaChart.js","views/dashboard/BasicLineChart.js","views/dashboard/HorizontalStackedBarChart.js","views/dashboard/SimpleBarChart.js","assets/images/icons/noun-area-chart.svg","assets/images/icons/noun-area-chart-dark.svg","assets/images/icons/noun-line-graph.svg","assets/images/icons/noun-line-graph-dark.svg","assets/images/icons/noun-stacked-bar-chart.svg","assets/images/icons/noun-stacked-bar-chart-dark.svg","assets/images/icons/noun-stacked-bar-chart-horizontal.svg","assets/images/icons/noun-stacked-bar-chart-horizontal-dark.svg","assets/scss/_theme1.module.scss","assets/scss/_theme2.module.scss","assets/scss/_theme3.module.scss","assets/scss/_theme4.module.scss","assets/scss/_theme5.module.scss","assets/scss/_theme6.module.scss","store/actions.js"],"names":["GuestGuard","children","useAuth","isLoggedIn","subscriptionDetails","user","navigate","useNavigate","defaultDashboard","useLocation","useSelector","state","dashboard","useEffect","ccRegistration","sessionStorage","getItem","ownerId","Date","toISOString","slice","replace","subscriptionExpireDate","DASHBOARD_PATH","propTypes","PropTypes","node","NavMotion","motion","div","initial","animate","exit","variants","opacity","scale","in","out","transition","type","ease","duration","Loadable","Component","props","fallback","Loader","AuthUserName","lazy","AuthSSO","AuthChangePwd","MfaRegister","RecoveryCodes","MfaVerify","SubscriptionExpire","LoginRoutes","path","element","MinimalLayout","AuthGuard","logout","listener","event","key","newValue","window","addEventListener","removeEventListener","LogoSection","Link","component","RouterLink","to","Logo","ModeSection","theme","useTheme","useConfig","navType","onChangeMenuType","Tooltip","title","placement","Avatar","variant","sx","mr","typography","commonAvatar","mediumAvatar","background","palette","mode","dark","main","secondary","light","color","onClick","e","stroke","size","ProfileSection","borderRadius","useState","open","setOpen","anchorRef","useRef","handleLogout","console","error","handleClose","current","contains","target","prevOpen","focus","ref","undefined","Popper","anchorEl","role","disablePortal","popperOptions","modifiers","name","options","offset","TransitionProps","ClickAwayListener","onClickAway","Transitions","Paper","MainCard","border","elevation","content","boxShadow","shadow","shadows","Box","p","pt","List","width","maxWidth","minWidth","backgroundColor","paper","breakpoints","down","mt","Stack","direction","spacing","alignItems","pb","Typography","userName","pl","clientId","Divider","ListItemButton","ListItemIcon","ListItemText","primary","HelpSection","HELP_URL","appInsightsConfig","appInsights","ApplicationInsights","config","connectionString","process","loadAppInsights","trackPageView","LegacyLinkSection","authInfo","loginType","loginToken","JSON","parse","localStorage","redirectURL","formRef","React","transferTokenRef","loginTypeRef","logLinkClick","preventDefault","axios","post","catch","Error","response","data","value","encodeURIComponent","transfer","trackEvent","username","client","submit","Grid","container","pr","action","method","style","display","item","Button","fontWeight","textDecoration","padding","cursor","NotificationType","ReportExport","ReportSharing","ReportAvailable","ReportError","ReportScheduled","ListItemWrapper","styled","NotificationItem","notification","location","handleRedirection","metaDataText","Subject","notificationType","pathname","concat","search","messageTime","createdAt","dispatch","fetchNotification","notificationId","ListItem","deliveryStatus","xs","fontSize","grey","notificationText","moment","format","NotificationList","notifications","length","height","dataLength","next","fetchNotifications","hasMore","hasMoreData","loader","endMessage","textAlign","map","NotificationSection","useDispatch","matchesXs","useSnackbar","enqueueSnackbar","useMediaQuery","isNewNotification","loading","interval","setInterval","clearInterval","handleToggle","clearAllNotification","clearAllNotifications","Badge","warning","position","justifyContent","px","LinearProgress","maxHeight","overflowX","Header","drawerOpen","menu","md","flexGrow","overflow","openDrawer","flexDirection","ml","flex","NavItem","level","parentId","isParents","matchesSM","matchDownMd","layout","selectedItem","isSelected","findIndex","id","Icon","icon","itemIcon","text","LAYOUT_CONST","HORIZONTAL_LAYOUT","itemTarget","itemHandler","activeItem","activeID","stopPropagation","document","toString","split","url","textColor","iconSelectedColor","VERTICAL_LAYOUT","disabled","disableRipple","zIndex","mb","py","bgcolor","selected","ButtonBase","iconRight","caption","subMenuCaption","gutterBottom","chip","Chip","label","avatar","isBeta","purple","my","PopperStyledMini","transform","borderLeft","A800","borderBottom","PopperStyled","top","left","borderWidth","borderStyle","borderColor","right","bottom","NavCollapse","setSelected","setAnchorEl","handleHover","currentTarget","handleClosePopper","openMini","Boolean","forEach","child","includes","menus","align","menuIcon","strokeWidth","collapseIcon","marginTop","marginBottom","popperId","onMouseEnter","onMouseLeave","backgroundImage","Collapse","timeout","unmountOnExit","disablePadding","NavGroup","lastItem","remItems","lastItemId","selectedID","currentItem","setCurrentItem","localItem","elements","ele","flat","checkOpenForParent","checkSelectedOnload","itemCheck","handleClick","items","moreItems","itemRem","i","subheader","menuCaption","overflowY","divider","icons","widget","IconChartArcs","statistics","IconClipboardList","chart","IconChartInfographic","useMenuList","menuItem","subList","subChildrenLis","list","withoutMenu","filter","ChildrenList","CreateQueueDashboardDialog","isDialogOpen","toggleDialogOpen","queueDashboard","queueDashboards","queueDashboardTemplates","isLoading","setIsLoading","hasValErrors","setHasValErrors","onCreateDashboardCallback","formik","useFormik","initialValues","dashboardName","copyFrom","validate","values","errors","trim","some","onSubmit","payload","getAccessibleLicensedCallQueues","QueueDataSource","MicrosoftTeams","accessibleQueues","queueIdsFilter","q","queueId","dataSource","widgets","dateTimeFilter","DateTimeFilterType","QueuePeriod","date","time","countryCode","utcOffsetInMinutes","useDST","createBlankQueueDashboard","baseTemplateId","baseDashboardId","createQueueDashboardByCopying","Dialog","className","DialogTitle","IconButton","handleSubmit","TextField","onChange","handleChange","helperText","FormControl","fullWidth","InputLabel","Select","labelId","MenuItem","option","LoadingButton","CreateNewQueueDashboardButton","setIsDialogOpen","hasLicensedQueuesAccess","marginLeft","IconDashboard","IconDeviceAnalytics","IconTemplate","IconCalendarStats","IconHistory","reporting","IconCloudDataConnection","administration","useMenuItems","appFeatures","userHasRole","hasQueueRoles","reevaluateQueueAccess","isQueueDashboardListLoaded","queues","setHasLicensedQueuesAccess","setReEvaluateQueueAccess","evaluateHasLicensedQueues","userCanViewQueues","APP_FEATURES","Queues","UserRoles","QueueAdmin","SystemAdmin","QueueManager","QueueAgent","setHasQueueRoles","queueDashboardExists","queueDashboardMenuItems","IconHeadset","push","defaultQueueDashboard","find","isDefault","toggleIsCreateQueueDshDlgOpn","filteredDashboardChildren","ReportAdmin","ReportUser","ConnectorAdmin","ConnectorViewer","MenuList","dashboards","dashboardMenuItems","setDashboardMenuItems","setQueueDashboardMenuItems","getMenu","isDashboard","breadcrumbs","fill","paddingLeft","isFound","splice","handlerMenuItem","HORIZONTAL_MAX_ITEM","lastItemIndex","navItems","memo","openedMixin","drawerWidth","borderRight","default","customShadows","z1","transitions","create","easing","sharp","enteringScreen","closedMixin","leavingScreen","MiniDrawerStyled","Drawer","shouldForwardProp","prop","flexShrink","whiteSpace","boxSizing","Sidebar","matchUpMd","up","drawerType","logo","useMemo","mx","drawerContent","drawerSX","paddingRight","drawer","MINI_DRAWER","anchor","onClose","ModalProps","keepMounted","AddWidget","closePopper","isLoaded","setLoaded","selectedWidgets","setSelectedWidgets","availableWidgets","orgLevelDescriptions","lookup","checked","FormGroup","FormControlLabel","body1","control","Checkbox","defaultName","paddingBottom","addWidget","parseInt","addWidgets","AddSection","getAvailableWidgets","getParentMenuItem","templateType","reportingMenu","getCustomizeTitle","administrationMenusRegex","connectorRegex","callQueuePathRegex","remoteCollectionsRegex","dirImportsRegex","dirImportsPreviewRegex","reportingMenusRegex","getCustomizeReportTitle","getCustomizePreviewTitle","customizationPreviewRegex","copyPreviewRegex","editPreviewRegex","customizationEditRegex","customizationCopyRegex","customizationRegex","customizationRunNowwRegex","runNowwRegex","runNowfromHistoryRegex","copyRunNowwRegex","editRunNowwRegex","getReportCustomizationPreviewConfig","templateCategory","params","showCustomBreadcrumb","getReportCustomizationConfig","getReportCustomizationReportConfig","getMenuAndItem","parentTitles","test","getConnectorName","connectorName","connectorId","getCallQueueItemAndMenu","getRemoteCollectionName","getDirectoryImportName","getDirectoryImportPreviewName","getReportConfig","getHistoryReportConfig","useCustomBreadcrumb","useParams","useSearchParams","searchParams","get","breadcrumbData","breadcrumb","linkSX","alignContent","Breadcrumbs","card","maxItems","navigation","rightAlign","separator","titleBottom","others","customBreadcrumb","iconStyle","marginRight","_main","setMain","_item","setItem","getCollapse","collapse","BASE_PATH","mainContent","itemContent","CollapseIcon","ItemIcon","SeparatorIcon","separatorIcon","breadcrumbContent","itemTitle","Array","isArray","AccountTreeTwoToneIcon","cardMb","gridSpacing","Card","roles","getDashPermission","RoutesAccessConfig","allowedRoles","useRouteAccess","currentPathConfig","newPath","Object","keys","Main","borderBottomLeftRadius","borderBottomRightRadius","shorter","easeOut","MainLayout","isCreateQueueDshDlgOpen","hasAccessToCurrentRoute","condition","newDashboardId","getDashboardList","loadQueueDashboardList","loadQueueDashboardTemplateList","loadAllowedWidgetsConfig","getOrgLevelDescriptions","initializePendo","header","Toolbar","AppBar","enableColorOnDark","Container","IconChevronRight","NoAccess","CustomDashboardLayout","isDashListLoaded","defDashboardId","displayOrder","createDashboard","defDashboard","setDefaultDashboard","IdleSessionTimer","tenant","showWarning","setShowWarning","inactivityTime","inactiveSessionTimeout","tenantData","inactivityTimeoutInMinutes","onIdle","activate","useIdleTimer","onPrompt","promptBeforeIdle","throttle","crossTab","DraggableDialog","dialogTitle","dialogContentText","buttonLabel","handleButtonClick","DEFAULT_DASHBOARD_STATE","dashboardId","isInEditMode","hasUnsavedChanges","queueMetrics","agentMetrics","discardFallbackQueueIdsFilter","filteredQueuesMetricsSummary","selectedQueueId","discardFallbackWidgets","breakpoint","savingDashboard","loadingQueueAndAgentMetrics","refreshingQueueAndAgentMetrics","DashboardStateContext","createContext","DashboardStateDispatchContext","DashboardStateActions","LoadDashboard","SetEditMode","SetQueueIdsFilter","SetDateTimeFilter","SetSelectedQueueId","SetFilteredQueuesMetricsSummary","SetQueueMetrics","SetAgentMetricsList","SetWidgetsList","AddWidgetToWigetsList","SetCurrentBreakpoint","SetDiscardFallbackData","ResetDiscardFallbackData","SaveEditModeChanges","DiscardEditModeChanges","UpdateWidgetMetrics","UpdateWidgetConfig","DeleteWidget","SetSavingDashboard","SetDashboardAsDefault","SetLoadingQueueAgentMetrics","SetRefreshingQueueAgentMetrics","UpdateWidget","SetHasUnsavedChanges","SetDashboardDateTimeRange","DashboardStateReducer","stringify","widgetToUpdateIndex","widgetId","updatedWidgets","metrics","rest","widgetToDeleteIndex","toSpliced","dateTimeRange","CreateWidgetDialog","isWidgetCreationDialogOpen","setIsWidgetCreationDialogOpen","useContext","dispatchDashboardStateAction","toggleWidgetCreationDialog","addNewWidget","dimensions","WidgetTypes","AgentTable","h","w","metric","calculationType","displayAs","sortOrder","columnName","ascending","QueueMetrics","maxMetricsPerRow","DonutOrPieChart","graphType","DonutWidgetChartTypes","Donut","groupDataBy","DefaultDataGroupingOption","TimeSeries","TimeSeriesWidgetChartTypes","Line","groupTimeBy","TimeSeriesGroupTimeByOptions","Hours","metricCategory","TimeSeriesMetricsCategory","QueueCallCounts","yAxisCaption","coordinates","itemToBeAddedWidth","x","y","ySortedLayout","toSorted","a","b","lastYItem","firstEmptyX","Math","max","getXandYForNewWidget","sm","lg","xxs","src","QueueMetricWidgetThumbnail","alt","paddingTop","QueueDonutWidgetThumbnail","QueueTimeseriesWidgetThumbnail","QueueTableWidgetThumbnail","ColumnsArray","dataField","QueueFilterSelectionDialog","onDialogClose","setLoading","setAccessibleQueues","selectedQueueIds","setSelectedQueueIds","loadLicensedQueues","DialogContent","CircularProgress","DxDataGrid","dataSet","columns","selection","isFilterRow","scrolling","keyField","selectedFilterValues","allowSelectAll","setSelectedFilterValues","DialogActions","DateRangeType","Specific","Relative","CurrentQueuePeriod","TimeRangeType","Continuous","Interval","RelativeDateUnitOptions","LastNHours","LastNDays","RelativeDateUnitOptionsLabels","showDateError","dateError","DateTimeFilter","setDateTimeFilterValues","setHasDateTimeErrors","selectedQueue","endTimeError","setEndTimeError","startTimeError","setStartTimeError","timeError","setTimeError","endDateError","setEndDateError","startDateError","setStartDateError","setDateError","timeZoneError","setTimeZoneError","startDate","specific","subtract","endDate","relativeDateType","relative","relativeDateCount","includeToday","weekDays","timeType","startTime","endTime","formatGMTOffsetToHoursAndMinutes","useDst","startEndDateDifference","currentUTCDate","utc","endDateTimeInUTC","startDateTimeInUTC","userSelectedTZOffset","getUtcOffsetInMinutes","utcOffset","relativeDateRangeFormat","currentDateInQueueTZ","startTimeParts","activeStartTime","endTimeParts","activeEndTime","startDateTimeInQueueTZ","set","hour","minute","second","endDateTimeInQueueTZ","add","startDateTime","endDateTime","defaultDateRangeFormat","queueRangeStartDate","queueRangeEndDate","showDateRange","RadioGroup","row","Radio","LocalizationProvider","dateAdapter","AdapterMoment","gap","DatePicker","slotProps","textField","setFieldValue","disableFuture","onError","newError","InputProps","inputProps","min","margin","weekdays","wd","index","newWeekDaysSelection","substring","TimePicker","viewRenderers","hours","renderTimeViewClock","minutes","seconds","htmlFor","TimeZone","country","setCountry","setUseDst","isChecked","gmtOffset","setGmt","DateRangePickerDialog","isEditDateRangeDialogOpen","toggleEditDateRangeDialogOpen","filterValues","setFilterValues","hasDateTimeErrors","saveDateTimeFilter","saveUpdatedDateTimeFilter","updatedDateTimeFilter","lengthOfTimeLabel","getQueueDashboardRefreshDataEventObj","CustomEvent","QueueDashboardEvents","RefreshWidgetData","bubbles","detail","getRefreshingWidgetDataAnimateIcon","AnimateButton","WidgetTitleColor","getExitPreviewButton","exitPreview","getPreviousLevelButton","drillLevelUp","DonutChartTooltip","active","payloadDetails","Count","percent","getDateTimeWithDstAdjustment","dateTimeFilterCopy","ReloadCooldownMaxTicks","TitleBar","isQueueFilterSelectionDialogOpen","setIsQueueFilterSelectionDialogOpen","setIsEditDateRangeDialogOpen","deleteValidationMsg","setDeleteValidationMsg","showDeleteConfirmationDlg","setShowDeleteConfirmationDlg","setError","reloadCooldownTicks","setReloadCooldownTicks","queueDashboardName","setQueueDashboardName","useNavigationBlocker","showDiscardChangesDialog","confirmNavigation","cancelNavigation","handleReload","useCallback","body","dispatchEvent","timeoutId","setTimeout","clearTimeout","switchToEditMode","setAsDefault","setDashboardAsDefault","setDefaultQueueDashboardSuccess","saveEditModeChanges","saveUpdatedDashboard","f","savedDashboard","oldDashboard","sort","metric1","metric2","newDashboard","isEqual","updateDashboardName","onDashboardDeleteClick","handleDashboardDelete","deleteDashboard","deleteQueueDashboard","nextDashboard","deleteDashboardSuccess","discardEditModeChanges","toggleQueueFilterSelectionDialog","onUserNavigationCancel","onUserNavigationConfirm","start","end","Menu","MenuListProps","anchorOrigin","vertical","horizontal","transformOrigin","ConfirmationDialog","handleYes","handleNo","DiscardChangesConfirmationDlgMsg","QueueListSelector","setDrawerOpen","loadingFilteredQueueSummary","setLoadingFilteredQueueSummary","refreshing","setRefreshing","needsRefresh","setNeedsRefresh","savingSelectedQueueId","setSavingSelectedQueueId","selectedBorderColor","setSelectedQueueId","updateSelectedQueueId","log","intervalId","RefreshIntervalMs","handler","loadQueuesSummary","inputDataSource","inputQueueIdsFilter","inputDateTimeFilter","isRefresh","getFilteredQueuesMetricsSummary","summary","sortedSummary","sortBy","queue","displayName","toLowerCase","loadMetricsData","getAllMetricsForQueue","agents","status","Promise","all","refreshData","onLoad","StatusColor","Normal","serviceLevelPercent","totalCalls","HtmlTooltip","classes","popper","tooltipClasses","tooltip","pxToRem","MetricsSubsetGrid","fieldsConfig","setFieldsConfig","allowedMetricsConfig","maxFieldCount","isReorderable","setHasError","isResizable","setLayout","metricsErrorCollection","setMetricsErrorCollection","hasDuplicateDisplayAs","newDisplayAs","columId","column","invalidFieldIndexes","allowedCalculationMethods","reduce","acc","cur","updatefieldsConfig","field","newFieldsConfig","selectedMetric","defaultCalculation","calculation","shortName","MetricCardConfig","c","uuidV4","rowHeight","cols","containerPadding","onLayoutChange","layoutArray","field1","field2","field1IndexInLayout","layoutObj","field2IndexInLayout","draggableHandle","entries","metricIndex","metricKey","metricValue","allCalculationsSelected","every","deleteColumn","errorItem","errorIndex","EditAgentMetricsTableDialog","isEditTableDialogOpen","toggleEditTableDialog","allowedAgentTableWidgetConfig","columnConfig","setColumnConfig","hasError","sortByColumn","setSortByColumn","isSortOrderAscending","setIsSortOrderAscending","sortOptions","hasSortingError","FormHelperText","v","allowedMetrics","AgentTableNameColumnHeader","EditWidgetMenu","onEditClick","Transition","forwardRef","Slide","MetricDetailsDialog","apiUrl","metricFilter","agentId","dataSize","noDataText","handleErrors","success","CustomStore","load","loadOptions","count","skip","take","axiosMSTeamsCQService","headers","Accept","then","totalCount","fullScreen","TransitionComponent","showBorders","allowColumnReordering","rowAlternationEnabled","filtering","repaintChangesOnly","wordWrapEnabled","columnAutoWidth","allowColumnResizing","remoteOperations","errorRowEnabled","autoExpandAll","defaultPageSize","visible","allowedPageSizes","displayMode","showPageSizeSelector","AgentMetricsTable","setIsEditTableDialogOpen","detailsOpen","setDetailsOpen","setSelectedMetric","selectedAgent","setSelectedAgent","agentNameClick","setAgentNameClick","sortDetail","setSortOrder","defaultCellBgColor","defaultCellFontColor","updatedSortDetail","getSortOrder","sortedAgentMetricsArray","sortByColumnName","sortedAgentMetrics","itemA","itemB","reverse","sortByColumnMetric","sortByColumnCalculationType","metricValueA","metricValueB","convertToSeconds","parseFloat","handleAgentCellClick","isAgentName","agent","handleLiveSort","isAsc","TableContainer","Table","stickyHeader","borderCollapse","TableHead","TableRow","TableCell","sortDirection","TableSortLabel","visuallyHidden","col","TableBody","isDrilldownAllowed","Status","presentedCalls","EditDonutChartWidgetDialog","isEditDonutChartDialogOpen","toggleEditDonutChartDialog","onWidgetConfigUpdate","allowedDonutOrPieChartWidgetConfig","validationSchemaForFields","Yup","shape","widgetName","required","selectedChartTypeBorderColor","validationSchema","onBlur","handleBlur","allowedDataGroupingOptions","allowedGraphTypes","Pie","isValid","DonutChartWidget","setIsEditDonutChartDialogOpen","donutChartData","setDonutChartData","errorMessage","setErrorMessage","getWidgetConfigObject","drillDownMode","additionalFilters","renderDonut","previewWidgetConfig","setPreviewWidgetConfig","previousConfigsRef","sectorColors","graphColors","loadCallbreakDownChartData","getCallBreakdown","callBreakdownData","mappedColors","getMappedColorsForQueueDashboardWidgets","chartData","g","hasData","widgetBodyContent","widgetConfig","getNextDrilldownLevelConfig","configObj","previousLevel","GroupDonutChartDataHierarchy","handleDrillDown","GroupWidgetDataBy","QueueSourceType","QueueHandlingType","QueueDisposition","updatedConfigObj","showPointerCursor","BasicPieChart","dataKey","nameKey","showCountInLegend","generateTooltip","contentStyle","itemStyle","legendFormatter","entry","toFixed","previousConfig","pop","ViewTabs","Metrics","DateTime","getIconForChartType","Area","AreaChartDarkLogo","AreaChartLogo","HorizontalBar","StackedBarChartHorizontalDarkLogo","StackedBarChartHorizontalLogo","VerticalBar","StackedBarChartDarkLogo","StackedBarChartLogo","LineChartDarkLogo","LineChartLogo","EditTimeSeriesWidgetDialog","isEditTimeSeriesDialogOpen","toggleEditTimeSeriesDialogOpen","allowedTimeseriesWidgetConfig","activeTab","setActiveTab","metricSubsetError","setMetricSubsetError","saveDisabled","setSaveDisabled","overrideDashboardDateTime","setYAxisCaption","setShouldOverrideDashboardDateTime","selectedAvatarStyle","common","black","Tabs","_","tab","centered","Tab","allowedTimeGroupingOptions","CallsAnsweredByAgent","allowedMetricCategories","getDefaultFieldsConfigForMetricCategory","getQueueMetricDataKey","calc","getAgentMetricDataKey","getYValueFromString","getHHmmssStringFromSeconds","secs","TimeSeriesWidget","setIsEditTimeSeriesDialogOpen","dashboardDateTimeFilter","setChartData","chartDataComponents","setChartDataComponents","additionalDateTimeFilters","loadTimeSeriesChartData","inputMetrics","getGroupedByTimeMetrics","queueCallCounts","xVals","fieldMap","queueCallValues","indexOf","componentList","k","formattedData","xVal","l","prev","curr","order","calculations","m","lst","uniqueAgentIds","Set","has","metricsObject","metricName","comp","AgentCallTimes","Weeks","Days","generateToolTipProp","args","colors","CustomTooltip","valueFormatter","setActiveHoverPoint","genericGraphColors","generateGradients","areas","gradientArr","x1","y1","x2","y2","stopColor","stopOpacity","generateChartGraphics","selectedData","drillDownHandler","widgetInfo","Bar","stackId","hide","fillOpacity","getUpdatedWidgetConfig","commonKeys","tick","labelValue","yAxisWidth","yAxisTickFormatter","labelPosition","SimpleBarChart","generateGraphics","HorizontalStackedBarChart","BasicAreaChart","BasicLineChart","chartComponent","CardContent","QueueMetricItem","iconColor","suffix","EditQueueMetricsGroupDialog","isEditQueueMetricsDialogOpen","toggleEditQueueMetricsDialog","allowedQueueMetricsWidgetConfig","metricsConfig","setMetricsConfig","setMaxMetricsPerRow","metricsPerRowError","setMetricPerRowError","Number","validateMetricPerRow","isItemInTheLastRow","itemIndex","rowWidth","totalItems","gridItemsIndexMatrix","result","chunk","QueueMetricsGrid","setIsEditQueueMetricsDialogOpen","setMetric","widgetWidth","widgetControlComponent","mdiAlert","gridTemplateColumns","handleQueueCellClick","QueueMetricsGroup","withSize","refreshRate","currentLayout","layoutObject","isDraggable","generateLayoutObject","useLayoutEffect","bp","layouts","updatedLayoutObject","compactType","widgetToCreate","QueueDashboard","selectedDashboardId","innerHeight","windowHeight","setWindowHeight","useReducer","dashboardState","handleResize","getDashboardData","getSelectedDashboardDetails","dashboardData","debug","Provider","reportContent","ReportLayout","Dashboard","Reports","ReportHistory","ScheduledReport","ReportsCustomizationRoot","ReportsCustomization","ReportPreview","ReportRunNow","Logout","Connectors","ConnectorTemplate","RemoteCollectionTemplate","QueueConfigurationBase","DirectoryImportTemplate","DirectoryImportPreview","MainRoutes","isEditMode","isCopy","RegisterRC","remoteCollections","setRemoteCollections","remoteInfo","setRemoteInfo","rcValidateError","setRcValidateError","selectedRC","setSelectedRC","verificationToken","handleRcRegister","collection","isValidate","message","rcName","remoteName","Tenant","tenantId","Target","Request","Remote","rcid","Client","Data","AuthServiceUrl","AuthServiceSub","VerificationToken","token","authUserName","AuthPassword","authUserPassword","SignalRhostUrl","remoteHostURL","SignalRhostSub","remoteHostSUB","axiosRemoteApiService","registerResponse","fetchRemoteInfo","RemoteId","remoteHostName","HostName","fetchRcData","AuthWrapper1","minHeight","AuthCardWrapper","AuthFooter","hideDashboard","RegisterRcSuccess","RegisterRcFailure","RcRegistrationRoutes","ThemeRoutes","useRoutes","NotFound","Locales","locale","messages","setMessages","loadLocaleData","d","defaultLocale","NavigationScroll","scrollTo","behavior","RTLLayout","rtlLayout","getElementById","nonce","dir","cacheRtl","createCache","prepend","stylisPlugins","rtlPlugin","CssBaseline","Palette","presetColor","theme1","theme2","theme3","theme4","theme5","theme6","defaultColor","createTheme","darkPaper","darkPrimaryLight","primaryLight","darkPrimaryMain","primaryMain","darkPrimaryDark","primaryDark","darkPrimary200","primary200","darkPrimary800","primary800","darkSecondaryLight","secondaryLight","darkSecondaryMain","secondaryMain","darkSecondaryDark","secondaryDark","darkSecondary200","secondary200","darkSecondary800","secondary800","errorLight","errorMain","errorDark","orange","orangeLight","orangeMain","orangeDark","warningLight","warningMain","warningDark","successLight","success200","successMain","successDark","grey50","grey100","darkTextSecondary","grey500","darkTextTitle","grey600","darkTextPrimary","grey700","grey900","darkLevel1","darkLevel2","darkBackground","purpleLight","purpleDark","purpleMain","hint","grey200","fontFamily","h6","h5","h4","h3","h2","h1","subtitle1","subtitle2","lineHeight","body2","letterSpacing","button","textTransform","customInput","smallAvatar","largeAvatar","createCustomShadow","transparent","alpha","z8","z12","z16","z20","z24","ThemeCustomization","outlinedFilled","themeTypography","themeCustomShadows","themeOptions","mixins","toolbar","overrides","MuiButtonBase","root","animationDuration","MuiTouchRipple","rippleVisible","themes","components","bgColor","menuSelectedBack","menuSelected","MuiButton","styleOverrides","MuiPaper","defaultProps","rounded","MuiCardHeader","MuiCardContent","MuiCardActions","MuiAlert","outlined","MuiListItemButton","MuiListItemIcon","MuiListItemText","MuiInputBase","input","MuiOutlinedInput","inputAdornedStart","notchedOutline","MuiSlider","mark","valueLabel","MuiAutocomplete","MuiDivider","MuiSelect","select","MuiCheckbox","MuiAvatar","MuiChip","MuiTimelineContent","MuiTreeItem","MuiTimelineDot","MuiInternalDateTimePickerTabs","tabs","MuiTabs","flexContainer","MuiDialog","MuiTableCell","MuiTooltip","MuiDialogTitle","componentStyleOverrides","StyledEngineProvider","injectFirst","ThemeProvider","App","hostname","match","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","axiosServices","interceptors","use","reject","AxiosMockAdapter","delayResponse","onGet","reply","description","scheduedOn","scheduedFor","LicenseInfo","setLicenseKey","MUI_LICENSE_KEY","ReactDOM","render","store","persistor","basename","navigator","serviceWorker","ready","registration","unregister","DEFAULT_DRAWER","createSlice","initialState","reducers","actions","getAccessibleCallQueues","onlyLicensed","subquery","queueIds","groupBy","axiosUserDataService","patch","updatedDashboard","put","delete","ConfigContext","context","AuthContext","headerSX","contentClass","contentSX","darkTitle","VERSION","queueDashboardError","getQueueDashboardListSuccess","getQueueDashboardTemplateListSuccess","getQueueDashboardFailure","createQueueDashboardSuccess","setAllowedQueueMetricsWidgetConfig","setAllowedAgentTableWidgetConfig","setAllowedDonutOrPieChartWidgetConfig","setAllowedTimeseriesWidgetConfig","callback","agentTable","donutOrPieChart","timeSeries","Category","QueueDataReport","CallDataReport","AgentDataReport","QueueSummaryByHandlingTypeReport","QueueSummaryByFinalActionReport","QueueDailySummaryByHandlingTypeReport","AgentSummaryByDispositionReport","TemplateCategory","SummaryTemplate","DetailTemplate","SummaryTemplateCategory","Queue","Agent","SummaryTemplateMap","Fields","QueueFinalAction","AgentFinalAction","AgentDisposition","CallFinalAction","CallDirection","GroupBy","QueueAndDateGroups","QueueOnly","AgentOnly","AgentThenQueue","QueueThenAgent","SummeryType","Breakout","Time","Percent","DateGroup","Quarter","Month","Week","Hour","Months","SummaryFieldNames","ServiceLevel","FormulaType","Percentage","WeightedAverage","CommonTimeFormat","gmt","convertToHHmm","parsedTime","timeString","validateAnswerTimeThreshold","timeParts","getMappedColors","category","callTypeDescriptions","Outbound","Inbound","Internal","callTypeColorsLight","Map","callTypeColorsDark","currItm","effCallTypeDesc","effCallTypeCode","getColorsByCallTypeDesc","getInitialBarProps","graphData","barCategories","itm","getColumnTypeFromName","getDrillDownFields","xAxisField","fields","filteredFields","fieldItm","function","groupDataByOther","idx","top7","otherCount","getLowerLevelGroupingParams","dataVal","groupingLevel","isoStartDate","isoEndDate","updatedFields","getStartEndDateForMonth","getStartEndDateForWeek","startsWith","xAxisValue","currOrgLevel","getOrgGroupLevel","getOrgDrillDownFields","updatedFilters","filterValue","nonOrgFilters","filters","filterItm","fieldName","xAxisNumber","existingOrgFilter","lowerLevelFilters","newOrgFilters","operator","getOrgDrillDownFilters","groupByField","dateType","getYAxisCaption","positionSX","appear","enter","formatDate","dateVal","formatHour","hourStr","formattedHourStr","numHour","formatTime","timeInput","timeStr","formatDateISO","formatMonthYear","monthYearStr","year","month","getWeekRange","formatNumbers","num","isNumeric","getTimeRange","diff","monthYear","monthYearArr","relativeDateStart","relativeDate","lastX","isAfter","day","retStartDate","monthStartDate","isSame","endOf","weekRange","dateRangeArr","formatFieldPropValue","retVal","getConfiguredCategories","catField","excludeValues","catFldMatchFilter","currItem","retCategories","cat","getOperatorDisplayName","convertUtcToLocal","utcTime","dstTest","utcDate","offsetHours","localOffset","isDstSet","getTime","localTime","januaryOffset","getFullYear","getTimezoneOffset","juneOffset","isDST","isDSTApplied","totalMinutes","getCurrentGmtAppliedDate","setDate","getDate","targetTime","fillDataForEveryHour","xAxisDataObject","callTypeDesc","dateValue","startTimeStr","endTimeStr","startIndex","endIndex","currentMoment","inputMoment","currentTime","calculateStartEndHoursForGivenDate","hourKeys","from","hourKey","formatWeekNumber","weekNum","weekNumber","janFirstDay","getDay","firstDayOfWeek","sixDaysLater","lastDayOfWeek","isSameOrBefore","momentStart","momentEnd","weekEnd","isSameOrAfter","lastXDate","getWeekNumber","firstDayOfYear","daysSinceFirstDayOfYear","ceil","getListOfWeeksToDisplay","weekNumbers","getWeeksBetween","passedDate","today","getWeeksForSelectedDays","lastXMonths","includeThisMonth","getMonth","getWeeksForSelectedMonths","getWeeksForCurrentMonth","getListOfMonthsToDisplay","startDateStr","endDateStr","startMonth","endMonth","startYear","endYear","monthYearList","getMonthsBetween","months","currMonth","currYear","dateToAdd","getMonthsForSelectedDays","now","currentMonth","currentYear","shift","getMonthsForSelectedMonths","getCurrentMonth","getListOfDatesToDisplay","currentDate","getDatesBetween","prevHour","setHours","getHours","formattedDate","getDatesFromHours","dates","getDatesForSelectedDays","daysOfWeek","prevMonth","j","prevDate","dayOfWeek","getUTCDay","getDatesForSelectedMonths","getDatesForCurrentMonth","fillDataForSelectedDateRange","dataObj","allDates","dataDates","dateKey","fillDataForSelectedMonths","allMonths","dataMonths","monthKey","fillDataForSelectedWeeks","allWeeks","dataWeeks","weekKey","formatDataByDateHour","dateGroupObj","allDisplayDates","retObj","hourObj","reduceByDate","inputArray","dateFormat","CardMediaWrapper","ErrorWrapper","ErrorCard","CardMedia","image","image403","temp","fetchNotificationsRequest","fetchNotificationsFailure","fetchNotificationsSuccess","fromLazyLoading","fetchNotificationsReadSuccess","clearAllNotificationsRequest","clearAllNotificationSuccess","clearAllNotificationFailure","axiosNotificationService","setNotification","successMessage","ErrorMessage","GUID_REGEX","GUID_PLACEHOLDER","debounce","fn","delay","timer","sortDateHour","aDate","aHour","bDate","bHour","aDateObj","bDateObj","sortMonthDate","aYear","bYear","aMonth","bMonth","sortYearWeek","aWeekNum","bWeekNum","validate63Days","isDateValid","inputDate","FilterType","dropDown_SingleSelect","dropDown_MultiSelect","lookUp_SingleSelect","lookUp_MultiSelect","lookUp_MultiSelect_Input","orgTree","OperatorType","numeric","alphaNumeric","boolean","money","CallOwnership","Placed","Received","Both","availableFiltersList","filterName","filterType","lookUpColumns","operators","getStaticFilterValues","getFilterLookUpData","siteId","locationName","dataSourceName","getGroupByOptions","getGroupByDefault","mapRelativeDate","relDate","baseUrl","baseURL","cancelToken","CancelToken","source","getCancelTokenSource","axiosCustom","axiosReportService","href","uuidv4","crypto","getRandomValues","Uint8Array","request","CustomLegend","onLegendClick","onKeyUp","tabIndex","dataSourceList","extensionLocationList","orgList","countries","countryBasedTimezone","selectedDataSource","columnLookUpData","columnLookUpLoading","appConfigValues","jurisdiction","agentFinalAction","agentDisposition","usersWithLogin","availableDateRange","displayMessage","directoryCustomAttribute","queueFilterConfig","getDataSourceSuccess","getOrganizationSuccess","getCountriesSuccess","getTimezoneSuccess","getExtensionLocationSuccess","getOrgLevelDescriptionSuccess","getCallTypeDescSuccess","setDefaultDataSource","getColumnLookupRequest","columnLookUpError","getColumnLookupSuccess","getColumnLookupError","getAppConfigSuccess","getJurisdictionSuccess","getQueuesSuccess","getAgentFinalActionSuccess","getAgentDispositionActionSuccess","getAgentsSuccess","setUsersWithLogin","getAvailableDateRange","resetAvailableDateRange","setDirectoryCustomeAttribute","getFilterConfigSuccess","getDataSources","formattedList","locationResponse","formattedExtLocList","locationId","getOrganizations","getCountries","getTimezone","getJurisdiction","getQueues","getAgentDetailConfig","allowedValues","getQueueFilterConfig","getAgents","usedOrgLevels","getCallTypeDescriptions","getColumnLookUp","query","cb","getAppConfig","setUsersWithLoginData","userOwnerId","authorizedUserRoles","ownerID","res","utcRangeStart","utcRangeEnd","errorObj","getDirectoryCustomAttribute","SIZE","ConnectorTypes","Cucm","MSTeams","Webex","QueuesDisabledMessage","dashboardError","firstDashCreated","getDashboardListSuccess","getDashboardSuccess","getDashboardFailure","setDefaultDashboardSuccess","createDashboardSuccess","updateDashboardSuccess","setFirstDashboard","clearDashboard","getDashboard","isFirst","updateDashboard","isFirstDash","offset1","offset2","useCycle","cycleX","cycleY","rotate","repeat","Infinity","repeatType","repeatDelay","onHoverEnd","onHoverStart","hover","tap","whileHover","whileTap","other","flexBasis","xl","addWidgetSuccess","deleteWidgetSuccess","getWidgetsSuccess","getAvailableWidgetSuccess","updateWidgetById","widgetTemplateId","dashId","orgLevelDesc","orgBasedXAxisField","orgBasedFields","highestLevel","widgetParams","showDataGrid","showGraph","categoryField","rankingField","rankLimit","rankDirection","widgetType","getWidgets","widgetsObj","saveWidget","deleteWidget","underline","filterSearch","newString","templates","properties","string","property","filterAllTags","tags","tagName","tagId","checkBoxClick","templateId","selectedIndex","newSelected","isValidEmail","email","getGmtOffSetInMinutes","isIncludeInvalidChar","inputtxt","getDuplicateFileNameTemplates","fileName","updateOrgLevelAlias","templateFields","orgLevelDescription","fieldsWithOrgLevelAlias","myLevel","orgDescription","orgDes","fieldAttributes","attribute","newAttribute","fieldDisplayName","getFilters","selectedFilters","directoryFieldId","fieldId","clonedObject","newValues","durationInFormat","durationArr","durationInSeconds","getCurrentDateBasedOnLocale","selectedGmt","setMinutes","getMinutes","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","toSeconds","isValidFormat","dataType","getDateUsingOffSet","gmtOffsetInMinutes","offsetTime","hasDuplicates","arr","valuesArray","obj","n","isNaN","isFinite","hasWrongFormat","betweenRangeError","valuesArr","str","startOfDay","endOfDay","startOfWeek","startDayOfWeek","startOfWeekDate","calculateDateRange","lastDuration","relativeValue","startOfPreviousNthWeek","endOfWeekDate","endOfPreviousWeek","getUtcDateTime","parseTime","parseDate","getStartDateRange","getEndDateRange","onRowPrepared","totalGroups","rowType","getBackgroundColor","groupIndex","rowElement","onQueueRowPrepared","getLocaleGMTOffSetInMinutes","round","glowAnimation","textShadow","Warning","Critical","CiscoWebex","QueueCallTimes","mdiPhoneIncomingOutline","answeredCalls","mdiPhoneCheckOutline","unansweredCalls","abandonedCalls","mdiPhoneRemoveOutline","missedCalls","mdiPhoneForwardOutline","queuedCalls","mdiPhoneLogOutline","queueTime","answerTime","mdiPhoneRingOutline","talkTime","mdiPhoneInTalkOutline","abandonTime","serviceLevel","mdiPhoneOutline","mdiPhoneAlertOutline","Direct","User","Answered","Missed","Abandoned","Unanswered","Overflown","Other","queueConfig","queueDisplayName","queueStartTime","queueEndTime","queueCountry","queueUtcOffset","queueDst","queuePercentage","queueSeconds","queueUsers","thresholds","isPerformingAction","setDataLoading","resetDataLoading","setQueueDetails","serviceLevelAnswerTimeThreshold","setThresholdDetails","setQueueUsers","setAllowedMetricsConfig","onGrantUsersAccessSuccess","onRevokeUserAccessSuccess","infortelOwnerId","setIsPerformingAction","getAllowedMetricsConfigurationFromAPI","visitor","pendo","initialize","account","toUpperCase","identifyPendo","identify","originalTemplateData","templateData","templateDataError","dataLoaded","availableColumns","availableFilters","availableGroupings","selectedColumns","selectedGroupings","categoryMap","configDetails","isTemplateDataLoadingStart","hasUnsavedTemplateChanges","selectedFeatureType","templateSummaryDetails","summarySortByOptions","lowestDateGroup","createTemplateDataSuccess","templateConfigDetails","summaryDetails","summaryDisplayOptions","defaultSortBy","createTemplateDataError","fetchTemplateDataStart","resetTemplateLoading","setReportParameter","setReportParameterAndFilters","setSelectedColumns","setSelectedGrouping","setDateTimeFilter","setAvailableColumns","isColumn","setAvailableGroups","setTemplateFilters","setAvailableFilters","resetTemplateData","updateIncludeSeconds","includeSeconds","updateHourFormat","isTwelveHourFormat","updateCallOwnerShip","internalCallOwnership","updateDurationFormat","durationFormat","updateDateFormat","dateFormats","setHasUnsavedTemplateChanges","setSelectedFeatureType","setSummaryFields","summaryFields","setSummaryDetailsCountFlags","includeCount","countFlag","includeCountPercent","countPercentFlag","setSummaryDetailsIncludeTimeFor","includeTimesFor","selectedValue","setSummaryGroupGroupBy","summaryGroupOptions","setSummaryGroupDateOrientation","showDateGroupsAs","setSummaryGroupShowDateGroup","showDateGroups","setSummaryGroupIncludeDateGroups","dateGroupsToInclude","selectedValues","setSummaryDisplaySortType","sortType","setSortBy","setSummaryDisplayBreakout","hideEmptyBreakouts","setSummaryDisplayShowQueue","showQueueAs","setSummaryDisplayShowQueueAndAgent","showQueueAndAgentAs","setSummaryDisplaySummary","showSummaryAs","setSummaryDisplaySummaryOrder","summaryOrder","setSummarySortByOptions","setLowestDateGroup","ex","extractColumns","fieldCategories","templateFilters","dirctoryCatId","categoryName","categoryId","filedsBasedOnDirectory","customAttr","attr","code","enabled","updateTemplateFieldsBasedOnDirectory","isFilterable","isSelectedField","isSelectedGroup","isGroupable","requiredFilterIds","isFilterRequired","selectedFiltersIDs","sf","rf","requiredFilters","fieldIds","filterPayload","logicalOperator","generateFiltersSkeleton","selectedColumn","durationFieldIds","directoryFilter","clonedData","clonedValues","newFilter","durationFieldId","floor","fetchTemplateData","templateName","setTitle","setTemplateName","setSelectedColumnsData","setSelectedGroupingData","setAvailableColumnsData","setAvailableGroupsData","availableGroups","setUnsavedTemplateChanges","hasChanges","featureType","setUpdateSummaryFields","setSummaryDetailCountFlag","setShowSummaryDateGroup","dateGroup","setSummaryDisplayOptions","fetchSummarySortByOptions","requestPayload","previewData","previewDataLoading","previewDataError","reportId","runNowDataLoaded","runNowDataError","exportStart","isExportSuccess","selectedColumnsFromTemplate","selectedGroupingsFromTemplates","reportLoadingStart","reportDetails","queueRecordDetails","queueRecordLoading","summaryFieldsConfig","summaryReportData","reportSummaryDetails","summaryPreviewtData","summaryPreviewDetails","reportDataLoadingStart","createExportRequest","createExportSuccess","createExportError","createPreviewDataRequest","createPreviewDataSuccess","createPreviewDataError","createRunNowSuccess","createRunNowRequest","createRunNowError","resetReportId","cleanUpExport","resetTemplateName","resetPreviewDetails","resetPreviewError","setReportDetails","reportStartDate","reportStartTime","reportEndDate","reportEndTime","reportConfigDetails","reportSummaryFieldsConfiguration","setSummaryPreviewDetails","reportData","reportConfig","setQueueRecordDetails","createQueueRecordDetails","createQueueRecordError","clearQueueRecordDetails","createSummaryDataRequest","setSummaryReportData","timeFormat","fetchPreviewData","reportParams","fetchReportDetails","extractColumnsForReports","fieldsAndGroups","groupOrder","fetchReportDetailsFromTemplates","templateResponse","fetchReportDetailsFromHistory","reportFieldDetails","fetchSummaryReportData","filtersGroups","groups","reportDataString","parsedData","parseError","exportReportFile","getQueueRecordDetails","setQueueRecordLoading","setChildTitle","childIndex","preferences","fetchPreferencesRequest","fetchPreferencesFailure","fetchPreferencesSuccess","pref","preferenceKey","menuPersistConfig","version","storage","whitelist","reducer","combineReducers","persistReducer","menuReducer","dashboardReducer","queueDashboardReducer","widgetsReducer","lookupReducer","templateReducer","reportParameters","reportParametersReducer","report","reportReducer","breadcrumbReducer","scheduledReports","scheduledReportsReducer","preferencesReducer","notificationsReducer","history","historyReducer","connector","connectorReducer","remoteCollection","remoteCollectionsReducer","callQueues","callQueuesReducer","directoryImport","directoryImportsReducer","directoryImportParameters","directoryImportSchedule","queueConfigReducer","configureStore","RESET_STORE","middleware","getDefaultMiddleware","serializableCheck","immutableCheck","thunk","persistStore","useAppDispatch","useAppSelector","genericColors","group","LoaderWrapper","defaultConfig","onChangeLayout","onChangeDrawer","onChangePresetColor","onChangeLocale","onChangeRTL","onChangeContainer","onChangeFontFamily","onChangeBorderRadius","onChangeOutlinedField","onReset","ConfigProvider","useLocalStorage","setConfig","isInitialized","fusionAuth","fusionAuthConfig","recoveryCodes","mfaVerificationInfo","evaluateFeatures","currentAppFeatures","queueLicensesCount","accountReducer","REGISTER","LOGIN","LOGOUT","SET_TENANT_INFO","SET_TENANT_CONFIG","SET_FUSIONAUTH_CONFIG","SET_RECOVERY_CODES","SET_MFA_VERIFICATION_INFO","SET_AUTH_INFO","EVALUATE_FEATURES","SET_SUBSCRIPTION_DETAILS","verifyToken","expires","setStorage","initialLogin","strLoginToken","isReportAdmin","strSelectedUser","defaults","Authorization","removeItem","JWTContext","JWTProvider","storeDispatch","getSubscriptionDetails","tenantName","subscriptionResponse","retrieveTenantConfigForClient","uri","errorCallback","init","endpoint","orgId","loggedInUser","login","password","auth","ssoLogoutUrl","retrieveTenantConfig","isSso","faSSORedirectUrl","authUrl","setTenantConfigInfo","logoutUrl","loginSSO","redirectUri","loginFaIdp","fusionAuthTenantId","twoFactorId","methodId","methods","phoneNumber","mobilePhone","authenticator","mfaOptions","isUserToBeRegistered","mfaRegisterPwd","loginFaMfa","changeFaPassword","currentPassword","newPassword","changePasswordId","verifyMfaCode","contact","secretBase32Encoded","okButton","isOkCancel","handleOk","autoFocus","module","exports","savedTemplates","sharedTemplates","standardTemplates","saveTemplateLoaded","saveTemplateLoadingStart","standardDataLoaded","savedDataLoaded","isDeleteInProgress","isDeleteCompleted","dataMap","updatedDataMap","shareTemplateLoadingStart","shareTemplateLoaded","shareTemplateUsers","shareListLoaded","isRoleUpdated","ownerNotValid","isUpdateStart","changeOwnerStart","templatesForScheduling","templatesForSchedulingLoading","templatesForSchedulingError","hasMoreSavedTemplateData","hasMoreSharedTemplateData","isDeleteConfirmationrequire","deleteTemplateError","isReassignComplete","deleteAccessDone","ownerList","templateLowestDateGroup","isOwnerFatched","markAsFavorite","isFavorite","getStandardListSuccess","getStandardListFailure","getSavedListSuccess","getSavedListFailure","getSharedListSuccess","getSharedListFailure","removeTagFromTemplateSuccess","templateTag","tagIds","createSaveTemplateSuccess","notCloseModal","isRename","templateDescription","templateTags","createShareTemplateSuccess","isOwnerChange","newList","isShared","createDeleteAccessSuccess","createSaveTemplateStart","createUpdateOwnerSuccess","ownerUpdated","createResetTemplateLoaded","createResetShareTemplateData","resetOwnerValidation","updateDeleteTemplateStart","updateDeleteTemplateComplete","updateReassignComplete","createDeleteTemplate","isFromShared","templateIds","rm","getTagsListSuccess","tag","validEmailAddress","notValidEmailAddress","createShareTemplateStart","setShareTemplateUsers","updateShareTemplateUsers","shareeLoginName","setShareTemplateFailure","updateExistingUserRole","shareeRole","selectedOption","removeExistingUser","loginName","fetchTemplatesForSchedulingRequest","fetchTemplatesForSchedulingSuccess","fetchTemplatesForSchedulingError","fetchSavedTemplateRequest","fetchSharedTemplateRequest","setOwnerList","setTemplatesSelectedDateGroup","updateDeleteConfirmationrequire","isDeleteConfirmationRequire","isRequire","setDeleteConfirmationRequire","removeTagFromTemplate","getStandardTemplateList","getTags","changeTemplateOwner","verifyEmail","isReassign","users","userRole","getSavedTemplateList","searchQuery","filterTagIds","isFromSearch","ownerIdFilter","DefaultTemplates","limit","saveAndUpddateTemplate","isUpdate","deleteTemplateStandard","isUserConfirmed","resetTemplateLoaded","resetShareTemplateData","resetDeleteTemplate","shareAndUpddateTemplate","isRemove","owner","removeTemplateAccess","payloadArr","removeUserFromList","getShareTemplateUsers","setOriginalDataMapCB","getSharedTemplateList","getOwnerList","getDateRangeValidationInfo","isFromSavedShared","commaSeperatedTemplatesId","lowestSelection","lowestSelectedDateGroup","showRowLines","searchPanel","handleEdit","handleDelete","dataGrid","keyExpr","onSelectionChanged","selectedRowKeys","currentDeselectedRowKeys","selectedRowsData","showCheckBoxesMode","highlightSearchText","colItem","alignment","cellRender","cellData","getComponent","rowIndex","disableEdit","disableDelete","encodeHtml","setPaddingTop","countriesOptionList","countryName","timezoneOptionsList","timezone","timezoneList","setTimezoneList","selectedCountry","disableClearable","newVal","renderInput","validGmt","getGmtValue","handleDstChange","columnMapping","FirstName","LastName","Extension","CiscoLoginName","Device","WebexUserId","LocationInfo","directoryImports","currentDirImport","isDirImportsLoading","dirImportProps","directoryImportFields","isDirImportFieldsLoading","rcData","rcDataLoading","rcDataError","runNowRequested","runNowSuccessMsg","runNowError","dirImportSchedules","isDirImportSchedulesLoading","currentDirImportScheduleId","fetchDataRequested","fetchDataError","isFetchingData","fetchDataLoadStatus","fetchDataLastModifiedDate","refetchRequired","lastFetchFailed","createDirImportSuccess","getDirectoryImportsSuccess","getDirectoryImportsFailure","setCurrentDirectoryImport","resetIsDirImportsLoading","setDirImportProps","saveDirectoryImportSuccess","deleteDirImportSuccess","dirImp","tenantDirImportId","deleteDirImportSchSuccess","sch","eventId","setSourceConnectorId","sourceConnectorId","resetDeleteSuccess","getDirImportFieldsSuccess","setTenantDirImportColumns","tenantDirImportColumns","resetPreviewData","createRcDataRequest","createRcDataSuccess","createRcDataError","resetRcError","resetRcData","resetRunNowError","resetFetchDataError","resetRunNowSuccessMsg","createFetchDataRequest","createFetchDataError","createFetchDataSuccess","createDataStatusSuccess","dataStatus","fileDate","FileDate","formattedLastFetchDate","LastFetchDate","lastFetchDate","State","LastFetchStatus","updateFetchStatusSuccess","getDirImportSchedulesSuccess","getDirImportSchedulesFailure","saveDirImportScheduleSuccess","schId","schConfig","edit","updatedDirImportSchedules","filteredSchedules","setCurrentDirImportScheduleId","resetCurrentDirImportScheduleId","resetFetchStatusSuccess","resetDirectoryImportFields","setRefetchRequired","getDirectoryImports","updatedDataSet","destinationSourceName","site","destinationSourceId","lastRunDate","sortedList","importName","saveDirectoryImport","isEdit","scheduleSaveConfig","eventName","schResponse","recordId","fetchResponse","loadCurrentDirectoryImport","dirImpInfo","savedConnectors","tenantConnector","propsResponse","displayIndex","dirImportTemplate","sourceConnectorName","tenantConnectorId","expireOption","deliveryOption","emailMessageContent","emailAddresses","scheduleType","scheduleActive","tenantDirImportProperties","tenantDirImportFilters","tenantDirImportDefaults","importConnectorId","resetDirImportFields","deleteDirectoryImport","queuePayload","waitingQueueResponse","queueData","WaitingImports","queueImportInfo","deleteQueuePayload","deleteQueueResponse","mapFieldDisplayName","configInfoForTheField","desc","charAt","appConfigItem","defname","getDirImportFields","transformedFields","dispName","dirImportGroupId","ciscoFieldName","groupName","dirImportGroup","groupDisplayIndex","isRequired","responseData","previewDataItems","userCount","errorMsg","ERROR","fetchCollectionData","doDirImportRunNow","Success","Message","getDirectoryImportSchedules","schedulerConfigs","schData","requestJson","saveDirectoryImportSchedule","resetRcDataError","resetFetchStatus","isRefetchRequired","scheduledReportsLoading","scheduledReportsError","scheduleReportLoadingStart","scheduleTemplateComplete","scheduleSuccess","runScheduleStart","fetchScheduledReportsRequest","fetchScheduledReportsSuccess","fetchScheduledReportsError","createScheduleReportStart","createScheduleReportSuccess","createScheduleReportError","deleteScheduledReportRequest","deleteScheduledReportSuccess","deleteScheduledReportError","deleteScheduledReportClear","resetScheduleReportData","resetScheduleTemplateData","createRunScheduleReportStart","createRunScheduleReportSuccess","createRunScheduleReportError","fetchScheduledReports","searchText","deleteScheduledReport","getState","scheduleId","saveAndUpddateSchedule","errorObject","runSchedule","connectorTypesInfo","manufacturer","currentTenantConnector","isCurrentTenantConnectorLoading","isSavedConnectorsLoading","isSavingConnector","connectorSaveDisplayMsg","loadingLicensedQueueCount","totalLicensedQueueCount","getConnectorListSuccess","getConnectorTypesInfoSuccess","setConnectorIdSuccess","setManufacturer","setCurrentTenantConnector","resetCurrentTenantConnector","resetIsSavedConnectorsLoading","saveConnectorSuccess","op","deleteConnectorSuccess","onLoadingLicensedQueueCount","onLoadingLicensedQueueCountSuccess","onLoadingLicensedQueueCountFailure","onQueueLicensingSuccess","licensed","setSavingConnector","resetConnectorSaveDisplayMsg","resetConnectTypeInfoSuccess","getSavedConnectors","getConnectorTypesInfo","manufacturerId","setConnectorId","manufacturerInfo","loadCurrentTenantConnector","saveConnector","configObject","noValidate","reqUrl","deleteConnector","loadTotalLicensedCountForTeamsConnectors","allConnectors","azureADTenantIds","connectorType","queueLicenseIdentifyingInfo","azureADTenantId","compressedAndEncodedAadTenantIds","gzipSync","getTotalLicensedQueueCount","teamsLicensedQueueCount","loadTotalLicensedQueueCount","getAzureADTenantIdsForAccessibleQueues","resetConnectorTypeInfo","logoDark","newRemoteCollectionId","currentRemoteCollection","isRemoteCollectionsLoading","deleteSuccess","RCFailure","createRCSuccess","contactInfo","getRemoteCollectionsSuccess","setCurrentRemoteCollection","resetIsRemoteCollectionsLoading","resetCurrentRemoteCollection","saveRemoteCollectionSuccess","deleteRCSuccess","RC","getRemoteCollections","saveRemoteCollection","comments","loadCurrentRemoteCollection","deleteRemoteCollection","RCId","selectedMonthlyOption","specificMonthlyDay","relativeMonthlyWeek","relativeMonthlyDay","weeklyDay","hourlyInterval","timeZoneGmtOffset","setDirImportSchedule","updateScheduleType","updateMonthlyOption","updateSpecificMonthlyDay","updateRelativeMonthlyWeek","updateRelativeMonthlyDay","updateWeeklyDay","updateDaysOfWeek","updateHourlyInterval","updateStartTime","updateScheduleActive","updateCountryCode","updateUseDst","updateTimeZoneGmtOffset","monthlyOption","monthlyDay","monthlyWeek","cc","resetDirImportSchedule","when","unsafeNavigationContext","showPrompt","setShowPrompt","nextLocation","setNextLocation","confirmedNavigation","setConfirmedNavigation","handleBlockedNavigation","newLocation","retry","unblock","block","tx","autoUnblockingTx","CardMediaBlock","CardMediaBlue","CardMediaPurple","alignSelf","imageDarkBackground","imageBackground","imageText","imageBlue","imagePurple","LoginRounded","historyData","historyLoading","isReportFetchInprogress","isReportDeleteInprogress","fetchHistoryRequest","fetchHistoryFailure","fetchHistorySuccess","setDownloadStart","downloadStart","setDownloadPercentage","downloadPercentage","percentage","resetHistoryData","deleteReportRequest","deleteReportFailure","deleteReportSuccess","deleteReportClear","fetchReportRequest","fetchReportFailure","fetchReportSuccess","fetchHistory","fetchReportById","deleteReportByIds","setFileDownloadStart","setFileDownloadPercentage","selectedDirImportProperties","selectedDirImportColumns","selectedDirImportFilters","selectedDirImportDefaults","isParamsSet","refreshRcData","setImportParameters","importConfig","importProps","uiControlType","defaultValue","dirImportPropertyId","propertyValue","resetImportParameters","updateDestinationSourceId","updateExpireOption","updateDeliveryOption","updateEmailMessageContent","updateEmailAddresses","updateImportName","updateSelectedDirImportProperties","updateSelectedDirImportColumns","updateSelectedDirImportFilters","updateSelectedDirImportDefaults","setRefreshRcData","setImportParametersData","importData","updateDestinationSourceIdData","updateExpireOptionData","updateDeliveryOptionData","updateEmailMessageContentData","updateEmailAddressesData","updateImportNameData","updateDirImportPropertiesData","updateDirImportColumnsData","updateDirImportFiltersData","updateDirImportDefaultsData","resetDirImportParameters","refresh","CallQueueStatus","Licensed","Unlicensed","Removed","CQSN","Unknown","connectorLicensedQueueCount","setConnectionInfo","loadCallQueuesSuccess","licensedQueueCount","upn","upns","join","lastActive","localeCompare","sensitivity","statusNum","PaperComponent","handle","cancel","dialogAdditionalContent","onCancel","storedValue","setValue","storageArea","currentValue","othersLabel","onGoBack","isExpanded","showCount","sortedData","themeColors","getDisplayData","groupData","dataItem","groupedData","setGroupedData","setHistory","colorMap","dataItm","handleLegendClick","handleExpand","newData","lastIndex","remainingData","expandedData","expandOther","cx","cy","outerRadius","innerRadius","isAnimationActive","handleSectorClick","iconType","iconSize","verticalAlign","prevData","activeHoverPoint","debounceSetActiveHoverPoint","areaProps","setAreaProps","drillDownXAxis","tickFormatter","xAxisTickFormatter","axisLine","angle","selectedProp","lineProps","setLineProps","barProps","setBarProps","themeick"],"mappings":"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","file":"static/js/main.4d187b62.chunk.js","sourcesContent":["import PropTypes from 'prop-types';\r\nimport { useEffect } from 'react';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\n\r\n// project imports\r\nimport useAuth from 'hooks/useAuth';\r\nimport { DASHBOARD_PATH } from 'config';\r\nimport { useSelector } from 'store';\r\n\r\n// ==============================|| GUEST GUARD ||============================== //\r\n\r\n/**\r\n * Guest guard for routes having no auth required\r\n * @param {PropTypes.node} children children element/node\r\n */\r\n\r\nconst GuestGuard = ({ children }) => {\r\n const { isLoggedIn, subscriptionDetails, user } = useAuth();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const { defaultDashboard } = useSelector((state) => state.dashboard);\r\n\r\n const isSubscriptionExpired = () => {\r\n if (!subscriptionDetails || user.ownerId === 1 || subscriptionDetails === 'no-subscription') {\r\n return false;\r\n }\r\n\r\n const currentDate = new Date();\r\n const currentDateString = currentDate.toISOString().slice(0, 10).replace(/-/g, '');\r\n\r\n const subscriptionExpireDate = subscriptionDetails.subscriptionExpireDate;\r\n\r\n return currentDateString > subscriptionExpireDate;\r\n };\r\n\r\n useEffect(() => {\r\n const ccRegistration = sessionStorage.getItem('ccregistration');\r\n // check for subscription key expiration\r\n if (subscriptionDetails && isLoggedIn && isSubscriptionExpired()) {\r\n navigate('/subscription-expired', { replace: true });\r\n return;\r\n }\r\n if (isLoggedIn && !ccRegistration && subscriptionDetails) {\r\n navigate(DASHBOARD_PATH, { replace: true });\r\n }\r\n if (isLoggedIn && ccRegistration) {\r\n // navigate to CC register screen\r\n navigate(`/register/cloud-connect`, { replace: true });\r\n }\r\n }, [isLoggedIn, navigate, defaultDashboard, subscriptionDetails]);\r\n\r\n return children;\r\n};\r\n\r\nGuestGuard.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default GuestGuard;\r\n","import PropTypes from 'prop-types';\r\n\r\n// third-party\r\nimport { motion } from 'framer-motion';\r\n\r\n// ==============================|| ANIMATION FOR CONTENT ||============================== //\r\n\r\nconst NavMotion = ({ children }) => {\r\n const motionVariants = {\r\n initial: {\r\n opacity: 0,\r\n scale: 0.99\r\n },\r\n in: {\r\n opacity: 1,\r\n scale: 1\r\n },\r\n out: {\r\n opacity: 0,\r\n scale: 1.01\r\n }\r\n };\r\n\r\n const motionTransition = {\r\n type: 'tween',\r\n ease: 'anticipate',\r\n duration: 0.4\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nNavMotion.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default NavMotion;\r\n","import { Suspense } from 'react';\r\n\r\n// project imports\r\nimport Loader from './Loader';\r\n\r\n// ==============================|| LOADABLE - LAZY LOADING ||============================== //\r\n\r\nconst Loadable = (Component) => (props) =>\r\n (\r\n }>\r\n \r\n \r\n );\r\n\r\nexport default Loadable;\r\n","import { lazy } from 'react';\r\n\r\nimport { Outlet } from 'react-router-dom';\r\n\r\n// project imports\r\nimport GuestGuard from 'utils/route-guard/GuestGuard';\r\nimport MinimalLayout from 'layout/MinimalLayout';\r\nimport NavMotion from 'layout/NavMotion';\r\nimport Loadable from 'ui-component/Loadable';\r\n\r\n// login routing\r\nconst AuthUserName = Loadable(lazy(() => import('views/pages/authentication/Login')));\r\nconst AuthSSO = Loadable(lazy(() => import('views/pages/authentication/AuthSSO')));\r\nconst AuthChangePwd = Loadable(lazy(() => import('views/pages/authentication/ChangePassword')));\r\nconst MfaRegister = Loadable(lazy(() => import('views/pages/authentication/MfaRegister')));\r\nconst RecoveryCodes = Loadable(lazy(() => import('views/pages/authentication/RecoveryCodes')));\r\nconst MfaVerify = Loadable(lazy(() => import('views/pages/authentication/MfaVerify')));\r\nconst SubscriptionExpire = Loadable(lazy(() => import('views/pages/SubscriptionExpire')));\r\n\r\n// ==============================|| AUTH ROUTING ||============================== //\r\n\r\nconst LoginRoutes = {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/',\r\n element: \r\n },\r\n {\r\n path: '/login',\r\n element: \r\n },\r\n {\r\n path: '/login/sso',\r\n element: \r\n },\r\n {\r\n path: '/login/change-password',\r\n element: \r\n },\r\n {\r\n path: '/login/mfa/register',\r\n element: \r\n },\r\n {\r\n path: '/login/recoveryCodes',\r\n element: \r\n },\r\n {\r\n path: '/login/mfa-verify/:method',\r\n element: \r\n },\r\n {\r\n path: '/subscription-expired',\r\n element: \r\n }\r\n ]\r\n }\r\n ]\r\n};\r\n\r\nexport default LoginRoutes;\r\n","import PropTypes from 'prop-types';\r\nimport { useEffect } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\n// project imports\r\nimport useAuth from 'hooks/useAuth';\r\n\r\n// ==============================|| AUTH GUARD ||============================== //\r\n\r\n/**\r\n * Authentication guard for routes\r\n * @param {PropTypes.node} children children element/node\r\n */\r\nconst AuthGuard = ({ children }) => {\r\n const { isLoggedIn, logout, subscriptionDetails } = useAuth();\r\n const navigate = useNavigate();\r\n\r\n useEffect(() => {\r\n if (!isLoggedIn && !subscriptionDetails) {\r\n navigate('login', { replace: true });\r\n }\r\n }, [isLoggedIn, navigate]);\r\n\r\n useEffect(() => {\r\n // if the user logs out in another window, log them out in this window\r\n const listener = async (event) => {\r\n if (event.key === 'forceLogout' && event.newValue) {\r\n await logout();\r\n }\r\n };\r\n window.addEventListener('storage', listener);\r\n return () => {\r\n window.removeEventListener('storage', listener);\r\n };\r\n }, []);\r\n\r\n return children;\r\n};\r\n\r\nAuthGuard.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default AuthGuard;\r\n","import { Link as RouterLink } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { Link } from '@mui/material';\r\n\r\n// project imports\r\nimport Logo from 'ui-component/Logo';\r\nimport { useSelector } from 'store';\r\n\r\n// ==============================|| MAIN LOGO ||============================== //\r\n\r\nconst LogoSection = () => {\r\n const { defaultDashboard } = useSelector((state) => state.dashboard);\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LogoSection;\r\n","import { useState, useEffect } from 'react';\r\n\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Avatar, Tooltip } from '@mui/material';\r\n\r\nimport { IconMoon, IconSun } from '@tabler/icons';\r\nimport useConfig from 'hooks/useConfig';\r\n\r\nconst ModeSection = () => {\r\n const theme = useTheme();\r\n const { navType, onChangeMenuType } = useConfig();\r\n\r\n const handleToggle = (e) => {\r\n if (navType === 'light') {\r\n onChangeMenuType('dark');\r\n } else {\r\n onChangeMenuType('light');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {navType === 'light' ? : }\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ModeSection;\r\n","import { useEffect, useRef, useState } from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport {\r\n Avatar,\r\n Box,\r\n ClickAwayListener,\r\n Divider,\r\n List,\r\n ListItemButton,\r\n ListItemIcon,\r\n ListItemText,\r\n Paper,\r\n Popper,\r\n Stack,\r\n Typography\r\n} from '@mui/material';\r\n\r\n// project imports\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport Transitions from 'ui-component/extended/Transitions';\r\nimport useAuth from 'hooks/useAuth';\r\n\r\n// assets\r\nimport { IconLogout, IconUser } from '@tabler/icons';\r\nimport useConfig from 'hooks/useConfig';\r\n\r\n// ==============================|| PROFILE MENU ||============================== //\r\n\r\nconst ProfileSection = () => {\r\n const theme = useTheme();\r\n const { borderRadius } = useConfig();\r\n\r\n const { logout, user } = useAuth();\r\n const [open, setOpen] = useState(false);\r\n /**\r\n * anchorRef is used on different components and specifying one type leads to other components throwing an error\r\n * */\r\n const anchorRef = useRef(null);\r\n const handleLogout = async () => {\r\n try {\r\n await logout();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorRef.current && anchorRef.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n const handleToggle = () => {\r\n setOpen((prevOpen) => !prevOpen);\r\n };\r\n\r\n const prevOpen = useRef(open);\r\n useEffect(() => {\r\n if (prevOpen.current === true && open === false) {\r\n anchorRef.current.focus();\r\n }\r\n\r\n prevOpen.current = open;\r\n }, [open]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n \r\n {open && (\r\n \r\n \r\n \r\n \r\n \r\n {user?.userName}\r\n \r\n \r\n {user?.clientId}\r\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 Logout} />\r\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 ProfileSection;\r\n","import { useTheme } from '@mui/material/styles';\r\nimport { Avatar, Tooltip } from '@mui/material';\r\n\r\nimport { IconQuestionMark } from '@tabler/icons';\r\nimport { HELP_URL } from 'config';\r\n\r\nconst HelpSection = () => {\r\n const theme = useTheme();\r\n\r\n const goToHelpLink = () => {\r\n // redirect to help in a new tab\r\n window.open(HELP_URL, '_blank');\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\nexport default HelpSection;\r\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\n\r\nconst appInsightsConfig = {\r\n appInsights: null\r\n};\r\n\r\nif (process.env.REACT_APP_AZURE_APP_INSIGHTS_CONNECTION_STRING) {\r\n appInsightsConfig.appInsights = new ApplicationInsights({\r\n config: {\r\n connectionString: process.env.REACT_APP_AZURE_APP_INSIGHTS_CONNECTION_STRING\r\n // enableAutoRouteTracking: true // option to log all route changes automatically\r\n }\r\n });\r\n\r\n appInsightsConfig.appInsights.loadAppInsights();\r\n appInsightsConfig.appInsights.trackPageView(); // Manually call trackPageView to establish the current user/session/pageview\r\n}\r\n\r\nexport default appInsightsConfig;\r\n","import React from 'react';\r\n\r\n// material UI\r\nimport { Button, Grid } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport useAuth from 'hooks/useAuth';\r\n\r\n// project imports\r\nimport appInsightsConfig from 'utils/appInsights';\r\nimport axios from 'utils/axios';\r\n\r\nconst LegacyLinkSection = () => {\r\n const theme = useTheme();\r\n const { user, authInfo, loginType } = useAuth();\r\n let loginToken = JSON.parse(window.localStorage.getItem('loginToken'));\r\n const redirectURL = loginType === 'sql' ? process.env.REACT_APP_LEGACY_URL : process.env.REACT_APP_LEGACY_SSO_URL;\r\n // const url = loginToken ? `${redirectURL}?TransferToken=${encodeURIComponent(loginToken.transfer)}` : `${redirectURL}?TransferToken=\"\"`;\r\n\r\n // // Construct the URL with transferToken and loginType\r\n // const urlWithParams = (loginToken) =>\r\n // `${redirectURLBase}?TransferToken=${encodeURIComponent(loginToken?.transfer || '')}&loginType=${encodeURIComponent(loginType)}`;\r\n\r\n const formRef = React.useRef(null);\r\n const transferTokenRef = React.useRef(null);\r\n const loginTypeRef = React.useRef(null);\r\n\r\n const logLinkClick = async (event) => {\r\n event.preventDefault();\r\n if (loginType !== 'sql') {\r\n const response = await axios.post(`/users/auth/transfer`, authInfo).catch(() => {\r\n throw new Error(`Failed to retrieve the token`);\r\n });\r\n loginToken = response?.data;\r\n transferTokenRef.current.value = encodeURIComponent(loginToken?.transfer);\r\n }\r\n // add the event of Legacy link click to Azure App Insights\r\n if (appInsightsConfig?.appInsights) {\r\n appInsightsConfig.appInsights.trackEvent(\r\n {\r\n name: 'Legacy link clicked'\r\n },\r\n {\r\n username: user.userName,\r\n client: user.clientId\r\n }\r\n );\r\n }\r\n\r\n formRef.current.target = '_blank';\r\n formRef.current.submit();\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Go to Infortel Classic\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default LegacyLinkSection;\r\n","const NotificationType = {\r\n ReportExport: 'ReportExport',\r\n ReportSharing: 'ReportSharing',\r\n ReportAvailable: 'ReportAvailable',\r\n ReportError: 'ReportError',\r\n ReportScheduled: 'ReportScheduled'\r\n};\r\n\r\nexport default NotificationType;\r\n","import { Divider, Grid, ListItem, ListItemText, Typography } from '@mui/material';\r\n// material-ui\r\nimport { styled, useTheme } from '@mui/material/styles';\r\nimport moment from 'moment';\r\nimport React from 'react';\r\nimport InfiniteScroll from 'react-infinite-scroll-component';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { dispatch, useSelector } from 'store';\r\nimport { fetchNotification, fetchNotifications } from 'store/slices/notifications';\r\nimport NotificationType from './NotificationType';\r\n\r\n// styles\r\nconst ListItemWrapper = styled('div')(({ theme }) => ({\r\n cursor: 'pointer',\r\n padding: 16,\r\n '&:hover': {\r\n background: theme.palette.mode === 'dark' ? theme.palette.dark.main : theme.palette.primary.light\r\n },\r\n '& .MuiListItem-root': {\r\n padding: 0\r\n }\r\n}));\r\n\r\n// ==============================|| NOTIFICATION LIST ITEM ||============================== //\r\n\r\nconst NotificationItem = ({ handleClose, notification }) => {\r\n const navigate = useNavigate();\r\n const theme = useTheme();\r\n const location = useLocation();\r\n const message = (() => {\r\n if (notification?.metaDataText) {\r\n try {\r\n return JSON.parse(notification.metaDataText)?.Subject;\r\n } catch (error) {\r\n return notification.metaDataText || '';\r\n }\r\n }\r\n return '';\r\n })();\r\n const notificationMetaData = (() => {\r\n if (notification?.metaDataText) {\r\n try {\r\n return JSON.parse(notification.metaDataText);\r\n } catch (error) {\r\n return notification.metaDataText || '';\r\n }\r\n }\r\n return '';\r\n })();\r\n\r\n const handleRedirection = () => {\r\n // redirect to another screen\r\n if (\r\n notification.notificationType === NotificationType.ReportExport ||\r\n notification.notificationType === NotificationType.ReportAvailable ||\r\n notification.notificationType === NotificationType.ReportScheduled\r\n ) {\r\n if (location.pathname === '/reporting/report-history') {\r\n navigate(0);\r\n } else {\r\n navigate(`/reporting/report-history`, { replace: true });\r\n }\r\n } else if (notification.notificationType === NotificationType.ReportSharing) {\r\n if (location.pathname?.concat(location.search) === '/reporting/reports?templateType=shared') {\r\n navigate(0);\r\n } else {\r\n navigate(`/reporting/reports?templateType=shared`, { replace: true });\r\n }\r\n }\r\n handleClose();\r\n };\r\n\r\n const messageTime = new Date(notification.createdAt * 1000);\r\n const handleNotificationClick = (event) => {\r\n // mark notification read\r\n dispatch(fetchNotification(notification.notificationId, handleRedirection));\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {notification.deliveryStatus === 'Unread' && (\r\n \r\n \r\n {notification?.notificationText}\r\n \r\n \r\n )}\r\n {notification.deliveryStatus === 'Read' && (\r\n \r\n \r\n {notification?.notificationText}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n {moment(messageTime).format('LL')} at {moment(messageTime).format('hh:mm a')}\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst NotificationList = ({ handleClose }) => {\r\n const notifications = useSelector((state) => state.notifications);\r\n\r\n const fetchMoreData = () => {\r\n dispatch(fetchNotifications(notifications?.notifications?.length, true));\r\n };\r\n\r\n return (\r\n <>\r\n {notifications?.notifications?.length ? (\r\n Loading...}\r\n endMessage={\r\n

\r\n Yay! You have seen it all\r\n

\r\n }\r\n >\r\n {notifications?.notifications?.map((notification) => {\r\n return ;\r\n })}\r\n \r\n ) : (\r\n <>\r\n \r\n No notifications found.\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default NotificationList;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useSnackbar } from 'notistack';\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport {\r\n Avatar,\r\n Badge,\r\n Box,\r\n ClickAwayListener,\r\n Divider,\r\n Grid,\r\n Paper,\r\n Popper,\r\n Stack,\r\n Typography,\r\n useMediaQuery,\r\n Link,\r\n LinearProgress\r\n} from '@mui/material';\r\n\r\n// third-party\r\nimport PerfectScrollbar from 'react-perfect-scrollbar';\r\n\r\n// project imports\r\nimport { fetchNotifications, setNotification, clearAllNotifications } from 'store/slices/notifications';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport Transitions from 'ui-component/extended/Transitions';\r\nimport NotificationList from './NotificationList';\r\n\r\n// assets\r\nimport { IconBell, IconBellPlus } from '@tabler/icons';\r\nimport { useSelector } from 'store';\r\n\r\n// ==============================|| NOTIFICATION ||============================== //\r\n\r\nconst NotificationSection = () => {\r\n const dispatch = useDispatch();\r\n const theme = useTheme();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const matchesXs = useMediaQuery(theme.breakpoints.down('md'));\r\n const { isNewNotification, loading } = useSelector((state) => state.notifications);\r\n\r\n const [open, setOpen] = useState(false);\r\n /**\r\n * anchorRef is used on different componets and specifying one type leads to other components throwing an error\r\n * */\r\n const anchorRef = useRef(null);\r\n\r\n useEffect(() => {\r\n dispatch(fetchNotifications(0, false));\r\n const interval = setInterval(() => {\r\n dispatch(fetchNotifications(0, false));\r\n }, 10000);\r\n\r\n // Clearing the interval\r\n return () => clearInterval(interval);\r\n }, [dispatch]);\r\n\r\n const handleToggle = () => {\r\n setOpen((prevOpen) => !prevOpen);\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorRef && anchorRef.current && anchorRef.current.contains(event?.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n const prevOpen = useRef(open);\r\n useEffect(() => {\r\n if (prevOpen.current === true && open === false) {\r\n anchorRef.current.focus();\r\n }\r\n prevOpen.current = open;\r\n }, [open]);\r\n\r\n const save = () => {\r\n dispatch(\r\n setNotification(enqueueSnackbar, {\r\n notificationType: 'ReportExport',\r\n referenceId: 1,\r\n recipients: [\r\n {\r\n ownerId: 27339,\r\n orgId: 5,\r\n deliveryMedium: ['InApp']\r\n }\r\n ],\r\n metadata: { message: 'Activity Report is available, Please check the report' }\r\n })\r\n );\r\n };\r\n\r\n const clearAllNotification = () => {\r\n dispatch(clearAllNotifications());\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {isNewNotification && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {!isNewNotification && (\r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n \r\n {open && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n All Notification\r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n Clear All\r\n \r\n \r\n \r\n \r\n \r\n {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\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default NotificationSection;\r\n","// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Avatar, Box } from '@mui/material';\r\n\r\n// project imports\r\nimport LogoSection from '../LogoSection';\r\nimport ModeSection from './ModeSection';\r\nimport ProfileSection from './ProfileSection';\r\nimport HelpSection from './HelpSection';\r\nimport LegacyLinkSection from './LegacyLinkSection';\r\nimport { useDispatch, useSelector } from 'store';\r\nimport { openDrawer } from 'store/slices/menu';\r\n\r\n// assets\r\nimport { IconMenu2 } from '@tabler/icons';\r\nimport NotificationSection from './NotificationSection';\r\n\r\n// ==============================|| MAIN NAVBAR / HEADER ||============================== //\r\n\r\nconst Header = () => {\r\n const theme = useTheme();\r\n\r\n const dispatch = useDispatch();\r\n const { drawerOpen } = useSelector((state) => state.menu);\r\n\r\n return (\r\n <>\r\n {/* logo & toggler button */}\r\n \r\n \r\n \r\n \r\n dispatch(openDrawer(!drawerOpen))}\r\n color=\"inherit\"\r\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 Header;\r\n","import PropTypes from 'prop-types';\r\nimport { useEffect } from 'react';\r\nimport { Link, useLocation } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Avatar, ButtonBase, ListItemButton, ListItemIcon, ListItemText, Typography, useMediaQuery, Chip } from '@mui/material';\r\n\r\n// project imports\r\nimport LAYOUT_CONST from 'constant';\r\nimport useConfig from 'hooks/useConfig';\r\nimport { useDispatch, useSelector } from 'store';\r\nimport { activeID, activeItem, openDrawer } from 'store/slices/menu';\r\n\r\n// assets\r\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\r\n\r\n// ==============================|| SIDEBAR MENU LIST ITEMS ||============================== //\r\n\r\nconst NavItem = ({ item, level, parentId, isParents = false }) => {\r\n const theme = useTheme();\r\n const matchesSM = useMediaQuery(theme.breakpoints.down('lg'));\r\n const matchDownMd = useMediaQuery(theme.breakpoints.down('md'));\r\n\r\n const dispatch = useDispatch();\r\n const { pathname } = useLocation();\r\n const { layout, borderRadius } = useConfig();\r\n\r\n const { selectedItem, drawerOpen } = useSelector((state) => state.menu);\r\n const isSelected = selectedItem.findIndex((id) => id === item.id) > -1;\r\n\r\n const Icon = item?.icon;\r\n const itemIcon = item?.icon ? (\r\n \r\n ) : (\r\n id === item?.id) > -1 ? 8 : 6,\r\n height: selectedItem.findIndex((id) => id === item?.id) > -1 ? 8 : 6\r\n }}\r\n fontSize={level > 0 ? 'inherit' : 'medium'}\r\n />\r\n );\r\n\r\n let itemTarget = '_self';\r\n if (item.target) {\r\n itemTarget = '_blank';\r\n }\r\n\r\n const itemHandler = (event, id) => {\r\n dispatch(activeItem([id]));\r\n if (matchesSM) dispatch(openDrawer(false));\r\n dispatch(activeID(parentId));\r\n event.stopPropagation();\r\n };\r\n\r\n // active menu item on page load\r\n useEffect(() => {\r\n const currentIndex = document.location.pathname\r\n .toString()\r\n .split('/')\r\n .findIndex((id) => id === item.id);\r\n // Added item.url === pathname to match is dashoard URL matches with the id in the url\r\n if (currentIndex > -1 || item.url === pathname) {\r\n dispatch(activeItem([item.id]));\r\n }\r\n // eslint-disable-next-line\r\n }, [pathname, item]);\r\n\r\n const textColor = theme.palette.mode === 'dark' ? 'grey.400' : 'text.primary';\r\n const iconSelectedColor = theme.palette.mode === 'dark' && drawerOpen ? 'text.primary' : 'secondary.main';\r\n\r\n return (\r\n <>\r\n {layout === LAYOUT_CONST.VERTICAL_LAYOUT || (layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && matchDownMd) ? (\r\n itemHandler(event, item.id)}\r\n >\r\n \r\n \r\n {itemIcon}\r\n \r\n \r\n\r\n {(drawerOpen || (!drawerOpen && level !== 1)) && (\r\n \r\n \r\n {item.title}\r\n \r\n {item?.iconRight && item.iconRight}\r\n \r\n }\r\n secondary={\r\n item.caption && (\r\n \r\n {item.caption}\r\n \r\n )\r\n }\r\n />\r\n )}\r\n\r\n {drawerOpen && item.chip && (\r\n {item.chip.avatar}}\r\n />\r\n )}\r\n {drawerOpen && item.isBeta && (\r\n \r\n )}\r\n \r\n ) : (\r\n {\r\n dispatch(activeID(item.id));\r\n }\r\n })}\r\n sx={{\r\n borderRadius: isParents ? `${borderRadius}px` : 0,\r\n mb: isParents ? 0 : 0.5,\r\n alignItems: 'flex-start',\r\n backgroundColor: level > 1 ? 'transparent !important' : 'inherit',\r\n py: 1,\r\n pl: 2,\r\n mr: isParents ? 1 : 0\r\n }}\r\n selected={isSelected}\r\n onClick={() => itemHandler(item.id)}\r\n >\r\n \r\n {itemIcon}\r\n \r\n\r\n \r\n {item.title}\r\n \r\n }\r\n secondary={\r\n item.caption && (\r\n \r\n {item.caption}\r\n \r\n )\r\n }\r\n />\r\n\r\n {item.chip && (\r\n {item.chip.avatar}}\r\n />\r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nNavItem.propTypes = {\r\n item: PropTypes.object,\r\n level: PropTypes.number,\r\n parentId: PropTypes.string,\r\n isParents: PropTypes.bool\r\n};\r\n\r\nexport default NavItem;\r\n","import PropTypes from 'prop-types';\r\nimport { useEffect, useState } from 'react';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { styled, useTheme } from '@mui/material/styles';\r\nimport {\r\n Box,\r\n ClickAwayListener,\r\n Collapse,\r\n List,\r\n ListItemButton,\r\n ListItemIcon,\r\n ListItemText,\r\n Paper,\r\n Popper,\r\n Typography,\r\n useMediaQuery,\r\n Chip\r\n} from '@mui/material';\r\n\r\n// project imports\r\nimport NavItem from '../NavItem';\r\nimport Transitions from 'ui-component/extended/Transitions';\r\nimport { useSelector } from 'store';\r\nimport LAYOUT_CONST from 'constant';\r\nimport useConfig from 'hooks/useConfig';\r\n\r\n// assets\r\nimport { IconChevronDown, IconChevronRight, IconChevronUp } from '@tabler/icons';\r\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\r\n// mini-menu - wrapper\r\nconst PopperStyledMini = styled(Popper)(({ theme }) => ({\r\n overflow: 'visible',\r\n zIndex: 1202,\r\n minWidth: 180,\r\n '&:before': {\r\n content: '\"\"',\r\n backgroundColor: theme.palette.background.paper,\r\n transform: 'translateY(-50%) rotate(45deg)',\r\n zIndex: 120,\r\n borderLeft: `1px solid ${theme.palette.grey.A800}`,\r\n borderBottom: `1px solid ${theme.palette.grey.A800}`\r\n }\r\n}));\r\n\r\n// horizontal-menu - wrapper\r\nconst PopperStyled = styled(Popper)(({ theme }) => ({\r\n overflow: 'visible',\r\n zIndex: 1202,\r\n minWidth: 180,\r\n '&:before': {\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n top: 34,\r\n left: -5,\r\n width: 12,\r\n height: 12,\r\n transform: 'translateY(-50%) rotate(45deg)',\r\n zIndex: 120,\r\n borderWidth: '6px',\r\n borderStyle: 'solid',\r\n borderColor: `transparent transparent ${theme.palette.background.paper} ${theme.palette.background.paper}`\r\n },\r\n '&[data-popper-placement=\"left-start\"]:before': {\r\n left: 'auto',\r\n right: -5,\r\n borderColor: `${theme.palette.background.paper} ${theme.palette.background.paper} transparent transparent`\r\n },\r\n '&[data-popper-placement=\"left-end\"]:before': {\r\n top: 'auto',\r\n bottom: 15,\r\n left: 'auto',\r\n right: -5,\r\n borderColor: `${theme.palette.background.paper} ${theme.palette.background.paper} transparent transparent`\r\n },\r\n '&[data-popper-placement=\"right-end\"]:before': {\r\n top: 'auto',\r\n bottom: 15\r\n }\r\n}));\r\n\r\n// ==============================|| SIDEBAR MENU LIST COLLAPSE ITEMS ||============================== //\r\n\r\nconst NavCollapse = ({ menu, level, parentId, iconRight }) => {\r\n const theme = useTheme();\r\n const matchDownMd = useMediaQuery(theme.breakpoints.down('md'));\r\n\r\n const { layout, borderRadius } = useConfig();\r\n const { drawerOpen } = useSelector((state) => state.menu);\r\n\r\n const [open, setOpen] = useState(false);\r\n const [selected, setSelected] = useState(null);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n\r\n const handleClickMini = (event) => {\r\n setAnchorEl(null);\r\n if (drawerOpen) {\r\n setOpen(!open);\r\n setSelected(!selected ? menu.id : null);\r\n } else {\r\n setAnchorEl(event?.currentTarget);\r\n }\r\n\r\n if (!drawerOpen && menu.onClick) {\r\n menu.onClick();\r\n }\r\n };\r\n\r\n const handleHover = (event) => {\r\n setAnchorEl(event?.currentTarget);\r\n };\r\n\r\n const handleClosePopper = () => {\r\n setOpen(false);\r\n setSelected(null);\r\n setAnchorEl(null);\r\n };\r\n\r\n const openMini = Boolean(anchorEl);\r\n const { pathname } = useLocation();\r\n\r\n const checkOpenForParent = (child, id) => {\r\n child.forEach((item) => {\r\n if (item.url === pathname) {\r\n setOpen(true);\r\n setSelected(id);\r\n }\r\n });\r\n };\r\n\r\n // menu collapse for sub-levels\r\n useEffect(() => {\r\n setOpen(false);\r\n setSelected(null);\r\n if (openMini) setAnchorEl(null);\r\n if (menu.children) {\r\n menu.children.forEach((item) => {\r\n if (item.children?.length) {\r\n checkOpenForParent(item.children, menu.id);\r\n }\r\n if (pathname && pathname.includes('product-details')) {\r\n if (item.url && item.url.includes('product-details')) {\r\n setSelected(menu.id);\r\n setOpen(true);\r\n }\r\n }\r\n if (item.url === pathname) {\r\n setSelected(menu.id);\r\n setOpen(true);\r\n }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pathname, menu.children]);\r\n\r\n // menu collapse & item\r\n const menus = menu.children?.map((item) => {\r\n switch (item.type) {\r\n case 'collapse':\r\n return ;\r\n case 'item':\r\n return ;\r\n default:\r\n return (\r\n \r\n Menu Items Error\r\n \r\n );\r\n }\r\n });\r\n\r\n const isSelected = selected === menu.id;\r\n\r\n const Icon = menu.icon;\r\n const menuIcon = menu.icon ? (\r\n \r\n ) : (\r\n 0 ? 'inherit' : 'medium'}\r\n />\r\n );\r\n\r\n const collapseIcon = drawerOpen ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const textColor = theme.palette.mode === 'dark' ? 'grey.400' : 'text.primary';\r\n const iconSelectedColor = theme.palette.mode === 'dark' && drawerOpen ? 'text.primary' : 'secondary.main';\r\n\r\n const popperId = openMini ? `collapse-pop-${menu.id}` : undefined;\r\n\r\n return (\r\n <>\r\n {layout === LAYOUT_CONST.VERTICAL_LAYOUT || (layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && matchDownMd) ? (\r\n <>\r\n
\r\n \r\n {menuIcon && (\r\n \r\n {menuIcon}\r\n \r\n )}\r\n {(drawerOpen || (!drawerOpen && level !== 1)) && (\r\n \r\n {menu.title}\r\n \r\n }\r\n secondary={\r\n menu.caption && (\r\n \r\n {menu.caption}\r\n \r\n )\r\n }\r\n />\r\n )}\r\n\r\n {openMini || open ? (\r\n collapseIcon\r\n ) : (\r\n \r\n )}\r\n\r\n {drawerOpen && menu.isBeta && (\r\n \r\n )}\r\n\r\n {!drawerOpen && (\r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n \r\n {menus}\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n {drawerOpen && iconRight}\r\n
\r\n\r\n {drawerOpen && (\r\n \r\n {open && (\r\n \r\n {menus}\r\n \r\n )}\r\n \r\n )}\r\n \r\n ) : null}\r\n\r\n {layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && !matchDownMd ? (\r\n <>\r\n \r\n {menuIcon && {menuIcon}}\r\n \r\n {menu.title}\r\n \r\n }\r\n />\r\n {openMini ? : }\r\n\r\n {anchorEl && (\r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n \r\n {menus}\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nNavCollapse.propTypes = {\r\n menu: PropTypes.object,\r\n level: PropTypes.number,\r\n parentId: PropTypes.string\r\n};\r\n\r\nexport default NavCollapse;\r\n","import PropTypes from 'prop-types';\r\nimport { Fragment, useEffect, useState } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { styled, useTheme } from '@mui/material/styles';\r\nimport {\r\n Box,\r\n ClickAwayListener,\r\n Divider,\r\n List,\r\n ListItemButton,\r\n ListItemIcon,\r\n ListItemText,\r\n Paper,\r\n Popper,\r\n Typography,\r\n useMediaQuery\r\n} from '@mui/material';\r\n\r\n// third-party\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\n// project imports\r\nimport NavCollapse from '../NavCollapse';\r\nimport NavItem from '../NavItem';\r\nimport useConfig from 'hooks/useConfig';\r\nimport Transitions from 'ui-component/extended/Transitions';\r\nimport { dispatch, useSelector } from 'store';\r\nimport { activeID } from 'store/slices/menu';\r\n\r\n// assets\r\nimport { IconChevronDown, IconChevronRight, IconMinusVertical } from '@tabler/icons';\r\nimport LAYOUT_CONST from 'constant';\r\n\r\n// mini-menu - wrapper\r\nconst PopperStyled = styled(Popper)(({ theme }) => ({\r\n overflow: 'visible',\r\n zIndex: 1202,\r\n minWidth: 180,\r\n '&:before': {\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n top: 5,\r\n left: 32,\r\n width: 12,\r\n height: 12,\r\n transform: 'translateY(-50%) rotate(45deg)',\r\n zIndex: 120,\r\n borderWidth: '6px',\r\n borderStyle: 'solid',\r\n borderColor: `${theme.palette.background.paper} transparent transparent ${theme.palette.background.paper}`\r\n }\r\n}));\r\n\r\n// ==============================|| SIDEBAR MENU LIST GROUP ||============================== //\r\n\r\nconst NavGroup = ({ item, lastItem, remItems, lastItemId }) => {\r\n const theme = useTheme();\r\n\r\n const { pathname } = useLocation();\r\n const { drawerOpen, selectedID } = useSelector((state) => state.menu);\r\n const { layout, borderRadius } = useConfig();\r\n const matchDownMd = useMediaQuery(theme.breakpoints.down('md'));\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [currentItem, setCurrentItem] = useState(item);\r\n\r\n const openMini = Boolean(anchorEl);\r\n\r\n useEffect(() => {\r\n if (lastItem) {\r\n if (item.id === lastItemId) {\r\n const localItem = { ...item };\r\n const elements = remItems.map((ele) => ele.elements);\r\n localItem.children = elements.flat(1);\r\n setCurrentItem(localItem);\r\n } else {\r\n setCurrentItem(item);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [item, lastItem, layout, matchDownMd]);\r\n\r\n const checkOpenForParent = (child, id) => {\r\n child.forEach((ele) => {\r\n if (ele.children?.length) {\r\n checkOpenForParent(ele.children, currentItem.id);\r\n }\r\n if (ele.url === pathname) {\r\n dispatch(activeID(id));\r\n }\r\n });\r\n };\r\n\r\n const checkSelectedOnload = (data) => {\r\n const childrens = data.children ? data.children : [];\r\n childrens.forEach((itemCheck) => {\r\n if (itemCheck?.children?.length) {\r\n checkOpenForParent(itemCheck.children, currentItem.id);\r\n }\r\n if (itemCheck?.url === pathname) {\r\n dispatch(activeID(currentItem.id));\r\n }\r\n });\r\n };\r\n\r\n // keep selected-menu on page load and use for horizontal menu close on change routes\r\n useEffect(() => {\r\n checkSelectedOnload(currentItem);\r\n if (openMini) setAnchorEl(null);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pathname, currentItem]);\r\n\r\n const handleClick = (event) => {\r\n if (!openMini) {\r\n setAnchorEl(event?.currentTarget);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const Icon = currentItem?.icon;\r\n const itemIcon = currentItem?.icon ? : null;\r\n\r\n // menu list collapse & items\r\n const items = currentItem.children?.map((menu) => {\r\n switch (menu?.type) {\r\n case 'collapse':\r\n return ;\r\n case 'item':\r\n return ;\r\n default:\r\n return (\r\n \r\n Menu Items Error\r\n \r\n );\r\n }\r\n });\r\n\r\n const moreItems = remItems.map((itemRem, i) => (\r\n \r\n {itemRem.url ? (\r\n \r\n ) : (\r\n itemRem.title && (\r\n \r\n {itemRem.title} {itemRem.url}\r\n \r\n )\r\n )}\r\n {itemRem?.elements?.map((menu) => {\r\n switch (menu?.type) {\r\n case 'collapse':\r\n return ;\r\n case 'item':\r\n return ;\r\n default:\r\n return (\r\n \r\n Menu Items Error\r\n \r\n );\r\n }\r\n })}\r\n \r\n ));\r\n\r\n const popperId = openMini ? `group-pop-${item.id}` : undefined;\r\n\r\n return (\r\n <>\r\n {layout === LAYOUT_CONST.VERTICAL_LAYOUT || (layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && matchDownMd) ? (\r\n <>\r\n \r\n {currentItem.title}\r\n {currentItem.caption && (\r\n \r\n {currentItem.caption}\r\n \r\n )}\r\n \r\n )\r\n }\r\n >\r\n {items}\r\n \r\n\r\n {/* group divider */}\r\n {drawerOpen && }\r\n \r\n ) : (\r\n \r\n \r\n {itemIcon && (\r\n \r\n {currentItem.id === lastItemId ? : itemIcon}\r\n \r\n )}\r\n \r\n {currentItem.id === lastItemId ? : currentItem.title}\r\n \r\n }\r\n />\r\n {openMini ? : }\r\n\r\n {anchorEl && (\r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n \r\n \r\n {currentItem.id !== lastItemId ? items : moreItems}\r\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\nNavGroup.propTypes = {\r\n item: PropTypes.object,\r\n lastItem: PropTypes.number,\r\n remItems: PropTypes.array,\r\n lastItemId: PropTypes.string,\r\n parentId: PropTypes.string\r\n};\r\n\r\nexport default NavGroup;\r\n","/// third-party\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\n// project import\r\nimport { useSelector } from 'store';\r\n\r\n// assets\r\nimport { IconChartArcs, IconClipboardList, IconChartInfographic } from '@tabler/icons';\r\n\r\nconst icons = {\r\n widget: IconChartArcs,\r\n statistics: IconChartArcs,\r\n data: IconClipboardList,\r\n chart: IconChartInfographic\r\n};\r\n\r\n// ==============================|| MENU ITEMS - API ||============================== //\r\n\r\nexport const useMenuList = () => {\r\n const { menu } = useSelector((state) => state.menu);\r\n\r\n const SubChildrenLis = (subChildrenLis) =>\r\n subChildrenLis?.map((subList) => ({\r\n ...subList,\r\n title: ,\r\n icon: icons[subList.icon]\r\n }));\r\n\r\n const menuItem = (subList) => {\r\n const list = {\r\n ...subList,\r\n title: ,\r\n icon: icons[subList.icon]\r\n };\r\n\r\n if (subList.type === 'collapse') {\r\n list.children = SubChildrenLis(subList.children);\r\n }\r\n return list;\r\n };\r\n\r\n const withoutMenu = menu?.children?.filter((item) => item.id !== 'no-menu');\r\n\r\n const ChildrenList = withoutMenu?.map((subList) => menuItem(subList));\r\n\r\n const menuList = {\r\n ...menu,\r\n title: ,\r\n icon: icons?.[menu?.icon],\r\n children: ChildrenList\r\n };\r\n\r\n return menuList;\r\n};\r\n\r\nexport default useMenuList;\r\n","import { useSelector, useDispatch } from 'store';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport TextField from '@mui/material/TextField';\r\nimport Select from '@mui/material/Select';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport { useFormik } from 'formik';\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { LoadingButton } from '@mui/lab';\r\n\r\nimport { createBlankQueueDashboard, createQueueDashboardByCopying } from 'store/slices/queueDashboard';\r\nimport { DateTimeFilterType, QueueDataSource } from '../constants';\r\nimport { useState } from 'react';\r\nimport { useSnackbar } from 'notistack';\r\nimport { getAccessibleLicensedCallQueues } from '../Utils/queueDashboardApiCallsUtil';\r\n\r\nexport default function CreateQueueDashboardDialog({ isDialogOpen, toggleDialogOpen }) {\r\n const { queueDashboards, queueDashboardTemplates } = useSelector((state) => state.queueDashboard);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [hasValErrors, setHasValErrors] = useState(true);\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const onCreateDashboardCallback = (id) => {\r\n setIsLoading(false);\r\n if (id) {\r\n navigate(`/dashboard/queue-dashboard/${id}`);\r\n }\r\n };\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n dashboardName: '',\r\n copyFrom: 'default'\r\n },\r\n\r\n validate: (values) => {\r\n const errors = {};\r\n if (!values.dashboardName?.trim()) {\r\n errors.dashboardName = 'Dashboard name is required';\r\n setHasValErrors(true);\r\n } else if (values.dashboardName.length > 50) {\r\n errors.dashboardName = 'Dashboard name should not exceed 50 characters';\r\n setHasValErrors(true);\r\n } else if (queueDashboards.some((dashboard) => dashboard.name === values.dashboardName)) {\r\n errors.dashboardName = 'Dashboard name already exists';\r\n setHasValErrors(true);\r\n } else {\r\n setHasValErrors(false);\r\n }\r\n return errors;\r\n },\r\n\r\n onSubmit: async (values) => {\r\n setIsLoading(true);\r\n\r\n const payload = { name: values.dashboardName };\r\n\r\n if (values.copyFrom === 'blank') {\r\n const accessibleQueues = await getAccessibleLicensedCallQueues(enqueueSnackbar, QueueDataSource.MicrosoftTeams);\r\n\r\n if (!accessibleQueues || !accessibleQueues.length) {\r\n enqueueSnackbar('Failed to get licensed queues', { variant: 'error' });\r\n return;\r\n }\r\n\r\n payload.queueIdsFilter = accessibleQueues.map((q) => q.queueId);\r\n\r\n payload.dataSource = QueueDataSource.MicrosoftTeams;\r\n\r\n payload.widgets = [];\r\n payload.dateTimeFilter = {\r\n type: DateTimeFilterType.QueuePeriod,\r\n date: null,\r\n time: null,\r\n countryCode: 'US',\r\n utcOffsetInMinutes: -360,\r\n useDST: true\r\n };\r\n\r\n dispatch(createBlankQueueDashboard(enqueueSnackbar, payload, onCreateDashboardCallback));\r\n\r\n toggleDialogOpen();\r\n return;\r\n }\r\n\r\n if (values.copyFrom === 'default') {\r\n const accessibleQueues = await getAccessibleLicensedCallQueues(enqueueSnackbar, QueueDataSource.MicrosoftTeams);\r\n if (!accessibleQueues || !accessibleQueues.length) {\r\n enqueueSnackbar('Failed to get licensed queues. Try again', { variant: 'error' });\r\n return;\r\n }\r\n\r\n // NOTE: Only one dashboard template is supported right now\r\n payload.baseTemplateId = queueDashboardTemplates[0].id;\r\n payload.queueIdsFilter = accessibleQueues.map((q) => q.queueId);\r\n } else {\r\n payload.baseDashboardId = values.copyFrom;\r\n }\r\n\r\n dispatch(createQueueDashboardByCopying(enqueueSnackbar, payload, onCreateDashboardCallback));\r\n toggleDialogOpen();\r\n }\r\n });\r\n\r\n return (\r\n \r\n
\r\n
\r\n New Queue Dashboard\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Copy From\r\n \r\n \r\n Default Template\r\n \r\n \r\n Blank Dashboard\r\n \r\n {queueDashboards.map((option) => (\r\n \r\n {option.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Save\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport CreateQueueDashboardDialog from './CreateQueueDashboardDialog';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { IconPlus } from '@tabler/icons';\r\nimport { useSelector, dispatch } from 'store/index';\r\n\r\nexport default function CreateNewQueueDashboardButton() {\r\n const [isDialogOpen, setIsDialogOpen] = useState(false);\r\n\r\n const { hasLicensedQueuesAccess } = useSelector((state) => state.menu);\r\n\r\n const toggleDialogOpen = () => {\r\n setIsDialogOpen((open) => !open);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {isDialogOpen && }\r\n \r\n );\r\n}\r\n","// third-party\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\n// assets\r\nimport { IconDashboard, IconHeadset, IconPlus } from '@tabler/icons';\r\nimport CreateNewQueueDashboardButton from 'views/QueueDashboard/CreateQueueDashboardDialog/CreateNewQueueDashboardButton';\r\n\r\n// ==============================|| DASHBOARD MENU ITEMS ||============================== //\r\n\r\nexport const getQueueDashboardMenuItems = () => {\r\n const queueDashboardMenuItems = {\r\n id: 'queue-dashboard',\r\n url: '/dashboard',\r\n title: ,\r\n icon: IconHeadset,\r\n disabled: true,\r\n iconRight: ,\r\n type: 'collapse',\r\n children: []\r\n };\r\n\r\n return queueDashboardMenuItems;\r\n};\r\n\r\nconst getChildItems = () => {\r\n const childItems = [\r\n {\r\n id: 'dashboard',\r\n url: '/dashboard',\r\n title: ,\r\n icon: IconDashboard,\r\n type: 'collapse',\r\n children: [],\r\n isBeta: 'true'\r\n }\r\n ];\r\n return childItems;\r\n};\r\n\r\nconst dashboard = {\r\n id: 'dashboard',\r\n title: ,\r\n icon: IconDashboard,\r\n type: 'group',\r\n children: getChildItems()\r\n};\r\n\r\nexport default dashboard;\r\n","// third-party\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\n// ==============================|| WIDGET MENU ITEMS ||============================== //\r\n// assets\r\nimport { IconHistory, IconDeviceAnalytics, IconTemplate, IconCalendarStats } from '@tabler/icons';\r\n\r\n// constant\r\nconst icons = {\r\n IconDeviceAnalytics,\r\n IconTemplate,\r\n IconCalendarStats,\r\n IconHistory\r\n};\r\n\r\nconst reporting = {\r\n id: 'reporting',\r\n title: ,\r\n\r\n type: 'group',\r\n\r\n children: [\r\n {\r\n id: 'reports',\r\n title: ,\r\n type: 'item',\r\n url: '/reporting/reports',\r\n icon: icons.IconTemplate\r\n },\r\n\r\n {\r\n id: 'scheduled-report',\r\n title: ,\r\n type: 'item',\r\n url: '/reporting/scheduled-report',\r\n icon: icons.IconCalendarStats\r\n },\r\n {\r\n id: 'report-history',\r\n title: ,\r\n type: 'item',\r\n url: '/reporting/report-history',\r\n icon: icons.IconHistory\r\n }\r\n ]\r\n};\r\n\r\nexport default reporting;\r\n","// third-party\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\n// assets\r\nimport { IconCloudDataConnection } from '@tabler/icons';\r\n\r\n// constant\r\nconst icons = {\r\n IconCloudDataConnection\r\n};\r\n\r\nconst administration = {\r\n id: 'administration',\r\n title: ,\r\n type: 'group',\r\n children: [\r\n {\r\n id: 'connectors',\r\n title: ,\r\n type: 'item',\r\n url: '/administration/connectors',\r\n icon: icons.IconCloudDataConnection\r\n }\r\n ]\r\n};\r\n\r\nexport default administration;\r\n","import dashboard, { getQueueDashboardMenuItems } from 'menu-items/dashboard';\r\nimport reporting from 'menu-items/reporting';\r\nimport administration from 'menu-items/administration';\r\nimport { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'store/index';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport useAuth from './useAuth';\r\nimport { setHasQueueRoles, setHasLicensedQueuesAccess } from 'store/slices/menu';\r\nimport { UserRoles, APP_FEATURES } from 'store/constant';\r\nimport { QueueDataSource } from 'views/QueueDashboard/constants';\r\nimport { setReEvaluateQueueAccess, toggleIsCreateQueueDshDlgOpn } from 'store/slices/queueDashboard';\r\nimport { getAccessibleLicensedCallQueues } from 'views/QueueDashboard/Utils/queueDashboardApiCallsUtil';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nconst useMenuItems = () => {\r\n const { appFeatures, userHasRole } = useAuth();\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { hasQueueRoles, hasLicensedQueuesAccess } = useSelector((state) => state.menu);\r\n const { reevaluateQueueAccess } = useSelector((state) => state.queueDashboard);\r\n const { queueDashboards, isQueueDashboardListLoaded } = useSelector((state) => state.queueDashboard);\r\n const values = [dashboard];\r\n\r\n const onQueueDashboardClick = () => {\r\n if (queueDashboards.length > 0) {\r\n const defaultQueueDashboard = queueDashboards.find((dashboard) => dashboard.isDefault === true);\r\n navigate(`/dashboard/queue-dashboard/${defaultQueueDashboard?.id || queueDashboards[0].id}`);\r\n } else {\r\n dispatch(toggleIsCreateQueueDshDlgOpn());\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n async function evaluateHasLicensedQueues() {\r\n const queues = await getAccessibleLicensedCallQueues(enqueueSnackbar, QueueDataSource.MicrosoftTeams);\r\n if (queues && queues.length > 0) {\r\n dispatch(setHasLicensedQueuesAccess(true));\r\n } else {\r\n dispatch(setHasLicensedQueuesAccess(false));\r\n }\r\n dispatch(setReEvaluateQueueAccess(false));\r\n }\r\n\r\n if (reevaluateQueueAccess && hasQueueRoles) {\r\n evaluateHasLicensedQueues();\r\n }\r\n }, [hasQueueRoles, reevaluateQueueAccess]);\r\n\r\n const userCanViewQueues =\r\n process.env.REACT_APP_HIDE_BETA_ITEMS === 'false' &&\r\n ((appFeatures && appFeatures[APP_FEATURES.Queues]) ?? false) &&\r\n (userHasRole(UserRoles.QueueAdmin) ||\r\n userHasRole(UserRoles.SystemAdmin) ||\r\n userHasRole(UserRoles.QueueManager) ||\r\n userHasRole(UserRoles.QueueAgent));\r\n\r\n if (userCanViewQueues) {\r\n dispatch(setHasQueueRoles(true));\r\n } else {\r\n dispatch(setHasQueueRoles(false));\r\n }\r\n\r\n const queueDashboardExists = values[0].children.some((item) => item?.id === 'queue-dashboard');\r\n if (userCanViewQueues) {\r\n if (!queueDashboardExists) {\r\n const queueDashboardMenuItems = getQueueDashboardMenuItems();\r\n dashboard.children.push(queueDashboardMenuItems);\r\n }\r\n\r\n // only enable this once the queue dashboards list has been loaded\r\n if (hasLicensedQueuesAccess && isQueueDashboardListLoaded) {\r\n dashboard.children[1].disabled = false;\r\n dashboard.children[1].onClick = onQueueDashboardClick;\r\n } else {\r\n dashboard.children[1].disabled = true;\r\n }\r\n } else if (queueDashboardExists) {\r\n const filteredDashboardChildren = dashboard.children.filter((child) => child.id !== 'queue-dashboard');\r\n values[0].children = [...filteredDashboardChildren];\r\n }\r\n\r\n if (\r\n userHasRole(UserRoles.ReportAdmin) ||\r\n userHasRole(UserRoles.ReportUser) ||\r\n userHasRole(UserRoles.SystemAdmin) ||\r\n userHasRole(UserRoles.QueueAdmin) ||\r\n userHasRole(UserRoles.QueueManager)\r\n ) {\r\n values.push(reporting);\r\n }\r\n\r\n if (\r\n userHasRole(UserRoles.ConnectorAdmin) ||\r\n userHasRole(UserRoles.ConnectorViewer) ||\r\n userHasRole(UserRoles.SystemAdmin) ||\r\n userHasRole(UserRoles.QueueAdmin) ||\r\n userHasRole(UserRoles.QueueManager)\r\n ) {\r\n values.push(administration);\r\n }\r\n\r\n return {\r\n items: values\r\n };\r\n};\r\n\r\nexport default useMenuItems;\r\n","import { memo, useEffect, useState } from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Box, Divider, List, Typography, useMediaQuery } from '@mui/material';\r\n\r\n// project imports\r\nimport NavItem from './NavItem';\r\nimport NavGroup from './NavGroup';\r\n\r\nimport useConfig from 'hooks/useConfig';\r\nimport { useMenuList } from 'menu-items/widget';\r\n\r\nimport LAYOUT_CONST from 'constant';\r\nimport { HORIZONTAL_MAX_ITEM } from 'config';\r\nimport { useSelector } from 'store';\r\nimport { IconDashboard, IconHeadset, IconStar } from '@tabler/icons';\r\nimport useMenuItems from 'hooks/useMenuItems';\r\n\r\n// ==============================|| SIDEBAR MENU LIST ||============================== //\r\n\r\nconst MenuList = ({ menuItem }) => {\r\n const { dashboards } = useSelector((state) => state.dashboard);\r\n const { queueDashboards } = useSelector((state) => state.queueDashboard);\r\n\r\n const [dashboardMenuItems, setDashboardMenuItems] = useState([]);\r\n const { hasQueueRoles, hasLicensedQueuesAccess } = useSelector((state) => state.menu);\r\n\r\n /**\r\n * Queue Dashboards menu items\r\n */\r\n const [queueDashboardMenuItems, setQueueDashboardMenuItems] = useState([]);\r\n\r\n const theme = useTheme();\r\n const { layout } = useConfig();\r\n const { drawerOpen } = useSelector((state) => state.menu);\r\n const matchDownMd = useMediaQuery(theme.breakpoints.down('md'));\r\n const getMenu = useMenuList();\r\n\r\n useEffect(() => {\r\n setDashboardMenuItems(\r\n dashboards.map((dashboard) => ({\r\n id: dashboard.id,\r\n title: dashboard.name,\r\n type: 'item',\r\n url: `/dashboard/my-dashboard/${dashboard.id}`,\r\n icon: IconDashboard,\r\n isDashboard: true,\r\n breadcrumbs: true\r\n }))\r\n );\r\n // const defDashboard = dashboards.filter((dashboard) => dashboard.displayOrder === 0);\r\n // if (defDashboard.length > 0) {\r\n // dispatch(setDefaultDashboard(defDashboard[0].id));\r\n // }\r\n }, [dashboards]);\r\n\r\n /**\r\n * Queue Dashboards menu items\r\n */\r\n useEffect(() => {\r\n if (hasQueueRoles && hasLicensedQueuesAccess) {\r\n setQueueDashboardMenuItems(\r\n queueDashboards.map((dashboard) => ({\r\n id: dashboard.id,\r\n title: dashboard.name,\r\n type: 'item',\r\n icon: IconHeadset,\r\n url: `/dashboard/queue-dashboard/${dashboard.id}`,\r\n breadcrumbs: false,\r\n iconRight: dashboard.isDefault ? (\r\n \r\n ) : null\r\n }))\r\n );\r\n } else {\r\n setQueueDashboardMenuItems([]);\r\n }\r\n }, [queueDashboards, hasQueueRoles, hasLicensedQueuesAccess]);\r\n\r\n const handlerMenuItem = () => {\r\n const isFound = menuItem.items?.some((element) => {\r\n if (element.id === 'widget') {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (getMenu?.id !== undefined && !isFound) {\r\n menuItem.items.splice(1, 0, getMenu);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n handlerMenuItem();\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n // last menu-item to show in horizontal menu bar\r\n const lastItem = layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && !matchDownMd ? HORIZONTAL_MAX_ITEM : null;\r\n\r\n let lastItemIndex = menuItem.items?.length - 1;\r\n let remItems = [];\r\n let lastItemId;\r\n\r\n if (lastItem && lastItem < menuItem.items.length) {\r\n lastItemId = menuItem.items[lastItem - 1].id;\r\n lastItemIndex = lastItem - 1;\r\n remItems = menuItem.items.slice(lastItem - 1, menuItem.items.length).map((item) => ({\r\n title: item.title,\r\n elements: item.children,\r\n icon: item.icon,\r\n ...(item.url && {\r\n url: item.url\r\n })\r\n }));\r\n }\r\n\r\n const navItems = menuItem.items?.slice(0, lastItemIndex + 1).map((item) => {\r\n if (item.id === 'dashboard') {\r\n item.children[0].children = dashboardMenuItems;\r\n\r\n /**\r\n * Queue Dashboards menu items\r\n */\r\n if (item.children.length > 1) {\r\n item.children[1].children = queueDashboardMenuItems;\r\n }\r\n }\r\n switch (item.type) {\r\n case 'group':\r\n if (item.url && item.id !== lastItemId) {\r\n return (\r\n \r\n \r\n {layout !== LAYOUT_CONST.HORIZONTAL_LAYOUT && }\r\n \r\n );\r\n }\r\n return ;\r\n default:\r\n return (\r\n \r\n Menu Items Error\r\n \r\n );\r\n }\r\n });\r\n\r\n return layout === LAYOUT_CONST.VERTICAL_LAYOUT || (layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && matchDownMd) ? (\r\n {navItems}\r\n ) : (\r\n <>{navItems}\r\n );\r\n};\r\n\r\nexport default memo(MenuList);\r\n","// material-ui\r\nimport { styled } from '@mui/material/styles';\r\nimport Drawer from '@mui/material/Drawer';\r\n\r\n// project import\r\nimport { drawerWidth } from 'store/constant';\r\n\r\nconst openedMixin = (theme) => ({\r\n width: drawerWidth,\r\n borderRight: 'none',\r\n zIndex: 1099,\r\n background: theme.palette.background.default,\r\n overflowX: 'hidden',\r\n boxShadow: theme.palette.mode === 'dark' ? theme.customShadows.z1 : 'none',\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen + 200\r\n })\r\n});\r\n\r\nconst closedMixin = (theme) => ({\r\n borderRight: 'none',\r\n zIndex: 1099,\r\n background: theme.palette.background.default,\r\n overflowX: 'hidden',\r\n width: 72,\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen + 200\r\n })\r\n});\r\n\r\n// ==============================|| DRAWER - MINI STYLED ||============================== //\r\n\r\nconst MiniDrawerStyled = styled(Drawer, { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }) => ({\r\n width: drawerWidth,\r\n borderRight: '0px',\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap',\r\n boxSizing: 'border-box',\r\n ...(open && {\r\n ...openedMixin(theme),\r\n '& .MuiDrawer-paper': openedMixin(theme)\r\n }),\r\n ...(!open && {\r\n ...closedMixin(theme),\r\n '& .MuiDrawer-paper': closedMixin(theme)\r\n })\r\n}));\r\n\r\nexport default MiniDrawerStyled;\r\n","import { memo, useMemo } from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Box, Drawer, useMediaQuery } from '@mui/material';\r\n\r\n// third-party\r\nimport PerfectScrollbar from 'react-perfect-scrollbar';\r\n\r\n// project imports\r\nimport MenuList from '../MenuList';\r\nimport LogoSection from '../LogoSection';\r\nimport MiniDrawerStyled from './MiniDrawerStyled';\r\n\r\nimport LAYOUT_CONST from 'constant';\r\nimport useConfig from 'hooks/useConfig';\r\nimport { drawerWidth } from 'store/constant';\r\n\r\nimport { useDispatch, useSelector } from 'store';\r\nimport { openDrawer } from 'store/slices/menu';\r\n\r\n// ==============================|| SIDEBAR DRAWER ||============================== //\r\n\r\nconst Sidebar = ({ menuItem }) => {\r\n const theme = useTheme();\r\n const matchUpMd = useMediaQuery(theme.breakpoints.up('md'));\r\n const matchDownMd = useMediaQuery(theme.breakpoints.down('md'));\r\n\r\n const dispatch = useDispatch();\r\n const { drawerOpen } = useSelector((state) => state.menu);\r\n\r\n const { drawerType } = useConfig();\r\n\r\n const logo = useMemo(\r\n () => (\r\n \r\n \r\n \r\n ),\r\n []\r\n );\r\n\r\n const drawerContent = ;\r\n\r\n const drawerSX = {\r\n paddingLeft: drawerOpen ? '16px' : 0,\r\n paddingRight: drawerOpen ? '16px' : 0,\r\n marginTop: drawerOpen ? 0 : '20px'\r\n };\r\n\r\n const drawer = useMemo(\r\n () => (\r\n <>\r\n {matchDownMd ? (\r\n {drawerContent}\r\n ) : (\r\n \r\n {drawerContent}\r\n \r\n )}\r\n \r\n ),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [matchUpMd, drawerOpen, drawerType]\r\n );\r\n\r\n return (\r\n \r\n {matchDownMd || (drawerType === LAYOUT_CONST.MINI_DRAWER && drawerOpen) ? (\r\n dispatch(openDrawer(!drawerOpen))}\r\n sx={{\r\n '& .MuiDrawer-paper': {\r\n mt: matchDownMd ? 0 : 11,\r\n zIndex: 1099,\r\n width: drawerWidth,\r\n background: theme.palette.background.default,\r\n color: theme.palette.text.primary,\r\n borderRight: 'none'\r\n }\r\n }}\r\n ModalProps={{ keepMounted: true }}\r\n color=\"inherit\"\r\n >\r\n {matchDownMd && logo}\r\n {drawer}\r\n \r\n ) : (\r\n \r\n {logo}\r\n {drawer}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default memo(Sidebar);\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// project imports\r\nimport { useDispatch, useSelector } from 'store/index';\r\nimport { addWidget } from 'store/slices/widgets';\r\n\r\n// material-ui\r\nimport { useTheme, styled } from '@mui/material/styles';\r\nimport { Box, Button, Checkbox, FormGroup, FormControlLabel, Grid, Stack } from '@mui/material';\r\n\r\n// third-party\r\nimport PerfectScrollbar from 'react-perfect-scrollbar';\r\n\r\n// assets\r\n\r\n// styles\r\nconst ListItemWrapper = styled('div')(({ theme }) => ({\r\n cursor: 'pointer',\r\n padding: 16,\r\n '&:hover': {\r\n background: theme.palette.primary.light\r\n },\r\n '& .MuiListItem-root': {\r\n padding: 0\r\n }\r\n}));\r\n\r\n// ==============================|| NOTIFICATION LIST ITEM ||============================== //\r\n\r\nconst AddWidget = ({ closePopper }) => {\r\n const theme = useTheme();\r\n\r\n const [isLoaded, setLoaded] = useState(false);\r\n const [selectedWidgets, setSelectedWidgets] = useState([]);\r\n\r\n const dispatch = useDispatch();\r\n const { availableWidgets } = useSelector((state) => state.widgets);\r\n const { dashboard } = useSelector((state) => state.dashboard);\r\n const { orgLevelDescriptions } = useSelector((state) => state.lookup);\r\n\r\n useEffect(() => {\r\n setLoaded(true);\r\n }, [availableWidgets]);\r\n\r\n const handleChange = (e) => {\r\n if (e.target.checked) {\r\n setSelectedWidgets([...selectedWidgets, e.target.name]);\r\n } else {\r\n setSelectedWidgets(selectedWidgets.filter((item) => item !== e.target.name));\r\n }\r\n };\r\n\r\n const addWidgets = (e) => {\r\n e.preventDefault();\r\n closePopper();\r\n selectedWidgets.forEach((widget) => {\r\n dispatch(addWidget(parseInt(widget, 10), dashboard.id, orgLevelDescriptions));\r\n // dispatch(layoutWillChange(true));\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {isLoaded &&\r\n availableWidgets.map((i) => (\r\n }\r\n label={i.defaultName}\r\n key={i.id}\r\n />\r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n addWidgets(e);\r\n }}\r\n disabled={selectedWidgets.length === 0}\r\n >\r\n Add\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAddWidget.propTypes = {\r\n closePopper: PropTypes.func\r\n};\r\n\r\nexport default AddWidget;\r\n","import { useState, useRef, useEffect } from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Avatar, ClickAwayListener, Divider, Grid, Paper, Popper, Stack, Tooltip, Typography, useMediaQuery } from '@mui/material';\r\n\r\n// project imports\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport Transitions from 'ui-component/extended/Transitions';\r\nimport AddWidget from './AddWidget';\r\nimport { useDispatch } from 'store';\r\nimport { getAvailableWidgets } from 'store/slices/widgets';\r\n\r\n// assets\r\nimport { IconSquarePlus } from '@tabler/icons';\r\n\r\n// ==============================|| NOTIFICATION ||============================== //\r\n\r\nconst AddSection = () => {\r\n const theme = useTheme();\r\n const matchesXs = useMediaQuery(theme.breakpoints.down('md'));\r\n\r\n const [open, setOpen] = useState(false);\r\n // const [value, setValue] = useState('');\r\n /**\r\n * anchorRef is used on different componets and specifying one type leads to other components throwing an error\r\n * */\r\n const anchorRef = useRef(null);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const handleToggle = () => {\r\n setOpen((prevOpen) => !prevOpen);\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorRef.current && anchorRef.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n const prevOpen = useRef(open);\r\n useEffect(() => {\r\n if (prevOpen.current === true && open === false) {\r\n anchorRef.current.focus();\r\n }\r\n prevOpen.current = open;\r\n }, [open]);\r\n\r\n useEffect(() => {\r\n dispatch(getAvailableWidgets());\r\n }, []);\r\n\r\n // const handleChange = (event) => {\r\n // if (event?.target.value) setValue(event?.target.value);\r\n // };\r\n\r\n const closePopper = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Select Widgets\r\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 AddSection;\r\n","import React, { useMemo } from 'react';\r\nimport { useLocation, useParams, useSearchParams } from 'react-router-dom';\r\n\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { useSelector } from 'store';\r\n\r\nconst getParentMenuItem = (templateType) => {\r\n const reportingSavedMenu = {\r\n id: 'report-templates',\r\n title: 'My Saved Templates',\r\n type: 'collapse',\r\n url: `/reporting/reports?templateType=saved`\r\n };\r\n\r\n const reportingSharedMenu = {\r\n id: 'report-templates',\r\n title: 'Templates Shared With Me',\r\n type: 'collapse',\r\n url: `/reporting/reports?templateType=shared`\r\n };\r\n\r\n const reportingStandardMenu = {\r\n id: 'report-templates',\r\n title: 'Standard Templates',\r\n type: 'collapse',\r\n url: `/reporting/reports?templateType=standard`\r\n };\r\n\r\n const reportingMenu = {\r\n id: 'report-templates',\r\n title: ,\r\n type: 'collapse',\r\n url: '/reporting/reports'\r\n };\r\n\r\n switch (templateType) {\r\n case 'saved':\r\n return reportingSavedMenu;\r\n\r\n case 'shared':\r\n return reportingSharedMenu;\r\n\r\n case 'standard':\r\n return reportingStandardMenu;\r\n\r\n default:\r\n return reportingMenu;\r\n }\r\n};\r\n\r\nconst getParentConnectorMenuItem = () => {\r\n return {\r\n id: 'connectors',\r\n title: 'Connectors',\r\n type: 'collapse',\r\n url: `/administration/connectors?featureType=connectors`\r\n };\r\n};\r\n\r\nconst getParentRCMenuItem = () => {\r\n return {\r\n id: 'remoteCollections',\r\n title: 'Cloud Connect Servers',\r\n type: 'collapse',\r\n url: `/administration/connectors?featureType=cloudConnectServers`\r\n };\r\n};\r\n\r\nconst getParentDirImportMenuItem = () => {\r\n return {\r\n id: 'dirImports',\r\n title: 'Directory Imports',\r\n type: 'collapse',\r\n url: `/administration/connectors?featureType=directoryImports`\r\n };\r\n};\r\n\r\nconst getCustomizeTitle = (type, title) => {\r\n switch (type) {\r\n case 'edit':\r\n return title ? `Edit ${title}` : 'Edit Template';\r\n case 'copy':\r\n return title ? `Copy ${title}` : 'Copy Template';\r\n default:\r\n return title ? `Customize ${title}` : 'Customize Template';\r\n }\r\n};\r\n\r\n/** --------------------- Path Regular Expressions - Begin ----------------------- */\r\n\r\n/** ------------------------- Administration - Begin --------------------------- */\r\nconst administrationMenusRegex = /^\\/administration/i;\r\n\r\nconst connectorRegex = /^\\/administration\\/connectors\\/connectorTemplate(\\/[0-9]+)?$/i;\r\nconst callQueuePathRegex =\r\n /^\\/administration\\/connectors\\/connectorTemplate(\\/[0-9]+)\\/queues\\/(?:(?:[0-9a-f]){8}-(?:[0-9a-f]){4}-(?:[0-9a-f]){4}-(?:[0-9a-f]){4}-(?:[0-9a-f]){12})$/i;\r\nconst remoteCollectionsRegex = /^\\/administration\\/connectors\\/RCTemplate(\\/[0-9]+)?$/i;\r\nconst dirImportsRegex = /^\\/administration\\/connectors\\/DirectoryImport(\\/[0-9]+)?$/i;\r\nconst dirImportsPreviewRegex = /^\\/administration\\/connectors\\/DirectoryImport(\\/[0-9]+)?\\/preview$/i;\r\n\r\n/** ------------------------- Administration - End --------------------------- */\r\n\r\n/** --------------------------- Reporting - Begin ----------------------------- */\r\nconst reportingMenusRegex = /^\\/reporting/i;\r\n// const getCustomizeTitle = (title) => (title ? `Customize ${title}` : 'Customize Template');\r\nconst getCustomizeReportTitle = (title) => (title ? `${title} Report` : 'Template Report');\r\nconst getCustomizePreviewTitle = (title) => (title ? `${title} Preview` : 'Template Preview');\r\n\r\nconst customizationPreviewRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/preview$/i;\r\nconst copyPreviewRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/copy\\/preview$/i;\r\nconst editPreviewRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/edit\\/preview$/i;\r\n\r\nconst customizationEditRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/edit$/i;\r\nconst customizationCopyRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/copy$/i;\r\nconst customizationRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+$/i;\r\n\r\nconst customizationRunNowwRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/report$/i;\r\nconst runNowwRegex = /^\\/reporting\\/reports\\/[0-9]+\\/report$/i;\r\n\r\nconst runNowfromHistoryRegex = /^\\/reporting\\/reports\\/history\\/[0-9]+\\/report$/i;\r\n\r\nconst copyRunNowwRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/copy\\/report$/i;\r\nconst editRunNowwRegex = /^\\/reporting\\/reports\\/customization\\/[0-9]+\\/edit\\/report$/i;\r\n\r\n/** --------------------------- Reporting - End ----------------------------- */\r\n\r\n/** --------------------- Path Regular Expressions - End ----------------------- */\r\n\r\nconst getReportCustomizationPreviewConfig = (templateCategory, title, params, templateType, type) => {\r\n const item = {\r\n id: 'report-templates-preview-single',\r\n title: getCustomizePreviewTitle(title),\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [\r\n getParentMenuItem(templateType),\r\n {\r\n id: 'report-templates-customize',\r\n title: getCustomizeTitle(type, title),\r\n type: 'collapse',\r\n url: type\r\n ? `/reporting/reports/customization/${params.id}/${type}?templateType=${templateType}&templateCategory=${templateCategory}`\r\n : `/reporting/reports/customization/${params.id}?templateType=${templateType}&templateCategory=${templateCategory}`\r\n }\r\n ],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getReportCustomizationConfig = (title, templateType, type) => {\r\n const item = {\r\n id: 'report-templates-customize-single',\r\n title: getCustomizeTitle(type, title),\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [getParentMenuItem(templateType)],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getReportConfig = (title, params, templateType) => {\r\n const item = {\r\n id: 'report-templates-single',\r\n title: getCustomizeReportTitle(title),\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [getParentMenuItem(templateType)],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getHistoryReportConfig = (title, params, templateType) => {\r\n const item = {\r\n id: 'report-templates-single',\r\n title: getCustomizeReportTitle(title),\r\n type: 'item'\r\n };\r\n const reportHistory = {\r\n id: 'report-templates-history',\r\n title: 'Report History',\r\n type: 'collapse',\r\n url: '/reporting/report-history'\r\n };\r\n return {\r\n item,\r\n menu: [reportHistory],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getReportCustomizationReportConfig = (title, params, templateType, type) => {\r\n const item = {\r\n id: 'report-templates-runnow-single',\r\n title: getCustomizeReportTitle(title),\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [\r\n getParentMenuItem(templateType),\r\n {\r\n id: 'report-templates-customize',\r\n title: getCustomizeTitle(type, title),\r\n type: 'collapse',\r\n\r\n url: type\r\n ? `/reporting/reports/customization/${params.id}/${type}?templateType=${templateType}`\r\n : `/reporting/reports/customization/${params.id}?templateType=${templateType}`\r\n }\r\n ],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getConnectorName = (title, params) => {\r\n const item = {\r\n id: 'administration-connectors-new-connector',\r\n title,\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [getParentConnectorMenuItem(title)],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\n// Get the Call Queue Parent Connector Item\r\nconst getCallQueueParentConnectorItem = (connectorName, connectorId) => {\r\n return {\r\n id: 'administration-connectors-connector',\r\n title: connectorName,\r\n type: 'collapse',\r\n url: `/administration/connectors/connectorTemplate/${connectorId}`\r\n };\r\n};\r\n\r\n// Get the Queue Item with the Connectors and parent Connector menus\r\nconst getCallQueueItemAndMenu = (title, params, parentTitles) => {\r\n const item = {\r\n id: 'administration-connectors-queues',\r\n title,\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [\r\n getParentConnectorMenuItem(),\r\n getCallQueueParentConnectorItem((parentTitles ?? []).length > 0 ? parentTitles[0] : 'Unknown Connector', params.id)\r\n ],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getRemoteCollectionName = (title, params) => {\r\n const item = {\r\n id: 'administration-connectors-new-RC',\r\n title,\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [getParentRCMenuItem(title)],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getDirectoryImportName = (title, params) => {\r\n const item = {\r\n id: 'administration-dirImports-new-import',\r\n title,\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [getParentDirImportMenuItem(title)],\r\n showCustomBreadcrumb: true\r\n };\r\n};\r\n\r\nconst getDirectoryImportPreviewName = (title, params) => {\r\n const item = {\r\n id: 'administration-dirImports-preview',\r\n title: `${title} Preview`,\r\n type: 'item'\r\n };\r\n return {\r\n item,\r\n menu: [\r\n getParentDirImportMenuItem(),\r\n {\r\n id: 'directory-import-preview',\r\n title,\r\n type: 'collapse',\r\n url: `/administration/connectors/DirectoryImport/${params.id}`\r\n }\r\n ],\r\n showCustomBreadcrumb: false\r\n };\r\n};\r\n\r\nconst getMenuAndItem = (pathname, title, params, templateType, parentTitles, templateCategory) => {\r\n if (pathname) {\r\n /** ------------------- Administration - Begin --------------------- */\r\n if (administrationMenusRegex.test(pathname)) {\r\n // Connector Url\r\n if (connectorRegex.test(pathname)) {\r\n return getConnectorName(title, params);\r\n }\r\n\r\n // Call Queue Url\r\n if (callQueuePathRegex.test(pathname)) {\r\n return getCallQueueItemAndMenu(title, params, parentTitles);\r\n }\r\n\r\n // Remote Collection Url\r\n if (remoteCollectionsRegex.test(pathname)) {\r\n return getRemoteCollectionName(title, params);\r\n }\r\n\r\n // Directory Import Url\r\n if (dirImportsRegex.test(pathname)) {\r\n return getDirectoryImportName(title, params);\r\n }\r\n\r\n // Directory Import Preview\r\n if (dirImportsPreviewRegex.test(pathname)) {\r\n return getDirectoryImportPreviewName(title, params);\r\n }\r\n }\r\n\r\n /** ------------------- Administration - End --------------------- */\r\n\r\n /** ------------------- REPORTS - Begin ----------------------- */\r\n if (reportingMenusRegex.test(pathname)) {\r\n // Report Customization URL Test\r\n if (customizationRegex.test(pathname)) {\r\n return getReportCustomizationConfig(title, templateType);\r\n }\r\n\r\n // Report Customization Edit URL\r\n if (customizationEditRegex.test(pathname)) {\r\n return getReportCustomizationConfig(title, templateType, 'edit');\r\n }\r\n\r\n // Report Customization Copy Url\r\n if (customizationCopyRegex.test(pathname)) {\r\n return getReportCustomizationConfig(title, templateType, 'copy');\r\n }\r\n\r\n // Report Preview Customization Url\r\n if (customizationPreviewRegex.test(pathname)) {\r\n return getReportCustomizationPreviewConfig(templateCategory, title, params, templateType);\r\n }\r\n\r\n // Report Preview Customization - Copy Url\r\n if (copyPreviewRegex.test(pathname)) {\r\n return getReportCustomizationPreviewConfig(templateCategory, title, params, templateType, 'copy');\r\n }\r\n\r\n // Report Preview Customization - Edit Url\r\n if (editPreviewRegex.test(pathname)) {\r\n return getReportCustomizationPreviewConfig(templateCategory, title, params, templateType, 'edit');\r\n }\r\n\r\n // Reports Run Now Customization Url\r\n if (customizationRunNowwRegex.test(pathname)) {\r\n return getReportCustomizationReportConfig(title, params, templateType);\r\n }\r\n\r\n // Reports Run Now Customization - Copy Url\r\n if (copyRunNowwRegex.test(pathname)) {\r\n return getReportCustomizationReportConfig(title, params, templateType, 'copy');\r\n }\r\n\r\n // Reports Run Now Customization - Edit Url\r\n if (editRunNowwRegex.test(pathname)) {\r\n return getReportCustomizationReportConfig(title, params, templateType, 'edit');\r\n }\r\n\r\n // Report Run Now Url\r\n if (runNowwRegex.test(pathname)) {\r\n return getReportConfig(title, params, templateType);\r\n }\r\n\r\n // Report Run Now History Regex\r\n if (runNowfromHistoryRegex.test(pathname)) {\r\n return getHistoryReportConfig(title, params, templateType);\r\n }\r\n }\r\n /** ------------------- REPORTS - End ----------------------- */\r\n }\r\n\r\n return { showCustomBreadcrumb: false };\r\n};\r\n\r\nconst useCustomBreadcrumb = () => {\r\n const location = useLocation();\r\n const params = useParams();\r\n const [searchParams] = useSearchParams();\r\n const templateType = searchParams.get('templateType');\r\n const templateCategory = searchParams.get('templateCategory');\r\n const breadcrumbData = useSelector((state) => state.breadcrumb);\r\n const title = breadcrumbData.title;\r\n const parentTitles = breadcrumbData.parentTitles;\r\n\r\n const menuAndItem = useMemo(\r\n () => getMenuAndItem(location.pathname, title, params, templateType, parentTitles, templateCategory),\r\n [title, location.pathname, params, templateType, parentTitles]\r\n );\r\n\r\n return menuAndItem;\r\n};\r\n\r\nexport default useCustomBreadcrumb;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Box, Card, Divider, Grid, Typography } from '@mui/material';\r\nimport MuiBreadcrumbs from '@mui/material/Breadcrumbs';\r\n\r\n// project imports\r\nimport { BASE_PATH } from 'config';\r\nimport { gridSpacing } from 'store/constant';\r\nimport AddSection from 'views/dashboard/AddSection';\r\nimport useAuth from 'hooks/useAuth';\r\n\r\n// assets\r\nimport { IconTallymark1 } from '@tabler/icons';\r\nimport AccountTreeTwoToneIcon from '@mui/icons-material/AccountTreeTwoTone';\r\nimport HomeIcon from '@mui/icons-material/Home';\r\nimport HomeTwoToneIcon from '@mui/icons-material/HomeTwoTone';\r\nimport useCustomBreadcrumb from './useCustomBreadcrumb';\r\n\r\nconst linkSX = {\r\n display: 'flex',\r\n color: 'grey.900',\r\n textDecoration: 'none',\r\n alignContent: 'center',\r\n alignItems: 'center'\r\n};\r\n\r\n// ==============================|| BREADCRUMBS ||============================== //\r\n\r\nconst Breadcrumbs = ({ card, divider, icon, icons, maxItems, navigation, rightAlign, separator, title, titleBottom, ...others }) => {\r\n const theme = useTheme();\r\n const customBreadcrumb = useCustomBreadcrumb();\r\n const { user } = useAuth();\r\n\r\n const iconStyle = {\r\n marginRight: theme.spacing(0.75),\r\n marginTop: `-${theme.spacing(0.25)}`,\r\n width: '16px',\r\n height: '16px',\r\n color: theme.palette.secondary.main\r\n };\r\n\r\n const [_main, setMain] = useState();\r\n const [_item, setItem] = useState();\r\n\r\n const getDashPermission = () => user.roles?.includes('SYSADMIN') || user.roles?.includes('DSHADMIN') || user.roles?.includes('DSHUSER');\r\n\r\n // set active item state\r\n const getCollapse = (menu) => {\r\n if (menu.children) {\r\n menu.children.filter((collapse) => {\r\n if (collapse.type && collapse.type === 'collapse') {\r\n getCollapse(collapse);\r\n } else if (collapse.type && collapse.type === 'item') {\r\n if (document.location.pathname === BASE_PATH + collapse.url) {\r\n setMain(menu);\r\n setItem(collapse);\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n navigation?.items?.map((menu) => {\r\n if (menu.type && menu.type === 'group') {\r\n getCollapse(menu);\r\n }\r\n return false;\r\n });\r\n });\r\n\r\n const main = useMemo(() => {\r\n return customBreadcrumb.showCustomBreadcrumb ? customBreadcrumb?.menu : _main;\r\n }, [customBreadcrumb, _main]);\r\n\r\n const item = useMemo(() => {\r\n return customBreadcrumb.showCustomBreadcrumb ? customBreadcrumb?.item : _item;\r\n }, [customBreadcrumb, _item]);\r\n\r\n // item separator\r\n const SeparatorIcon = separator;\r\n const separatorIcon = separator ? : ;\r\n\r\n let mainContent;\r\n let itemContent;\r\n let breadcrumbContent = ;\r\n let itemTitle = '';\r\n let CollapseIcon;\r\n let ItemIcon;\r\n\r\n // to show multipe main items we need to pass main as array\r\n if (customBreadcrumb.showCustomBreadcrumb && Array.isArray(main)) {\r\n mainContent = [];\r\n main.forEach((item) => {\r\n mainContent.push(\r\n \r\n {icons && }\r\n {item.title}\r\n \r\n );\r\n });\r\n } else if (main && main.type === 'collapse') {\r\n // to show single main items it should behave with object\r\n CollapseIcon = main.icon ? main.icon : AccountTreeTwoToneIcon;\r\n mainContent = (\r\n \r\n {icons && }\r\n {main.title}\r\n \r\n );\r\n }\r\n\r\n // items\r\n if (item && item.type === 'item') {\r\n itemTitle = item.title;\r\n\r\n ItemIcon = item.icon ? item.icon : AccountTreeTwoToneIcon;\r\n itemContent = (\r\n \r\n {icons && }\r\n {itemTitle}\r\n \r\n );\r\n\r\n // main\r\n if (item.breadcrumbs !== false) {\r\n const cardMb = item.isDashboard ? 1 : theme.spacing(gridSpacing);\r\n breadcrumbContent = (\r\n \r\n \r\n \r\n {title && !titleBottom && (\r\n \r\n \r\n {item.title}\r\n \r\n \r\n )}\r\n {item.isDashboard ? (\r\n user &&\r\n getDashPermission() && (\r\n \r\n \r\n \r\n )\r\n ) : (\r\n \r\n \r\n \r\n {icons && }\r\n {icon && }\r\n {!icon && 'Dashboard'}\r\n \r\n {mainContent}\r\n {itemContent}\r\n \r\n \r\n )}\r\n {title && titleBottom && (\r\n \r\n \r\n {item.title}\r\n \r\n \r\n )}\r\n \r\n \r\n {card === false && divider !== false && }\r\n \r\n );\r\n }\r\n }\r\n\r\n return breadcrumbContent;\r\n};\r\n\r\nBreadcrumbs.propTypes = {\r\n card: PropTypes.bool,\r\n divider: PropTypes.bool,\r\n icon: PropTypes.bool,\r\n icons: PropTypes.bool,\r\n maxItems: PropTypes.number,\r\n navigation: PropTypes.object,\r\n rightAlign: PropTypes.bool,\r\n separator: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\r\n title: PropTypes.bool,\r\n titleBottom: PropTypes.bool\r\n};\r\n\r\nexport default Breadcrumbs;\r\n","import useAuth from 'hooks/useAuth';\r\nimport { useMemo } from 'react';\r\nimport { useLocation, useParams } from 'react-router-dom';\r\nimport { UserRoles } from 'store/constant';\r\n\r\nconst RoutesAccessConfig = [\r\n // {\r\n // path: '/dashboard/my-dashboard/:id',\r\n // // allowedRoles: ['DSHADMIN', 'DSHUSER']\r\n // },\r\n // {\r\n // path: '/dashboard',\r\n // // allowedRoles: ['DSHADMIN', 'DSHUSER']\r\n // },\r\n {\r\n path: '/dashboard/queue-dashboard/:id',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.QueueAdmin, UserRoles.QueueManager, UserRoles.QueueAgent]\r\n },\r\n {\r\n path: '/register/cloud-connect',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/register/cloud-connect/success',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/register/cloud-connect/failure',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/reporting/reports',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/edit',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/copy',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/preview',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/edit/preview',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/copy/preview',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/report',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/reports/:id/report',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/report-history',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/reporting/scheduled-report',\r\n allowedRoles: [UserRoles.ReportAdmin, UserRoles.ReportUser, UserRoles.SystemAdmin, UserRoles.QueueManager, UserRoles.QueueAdmin]\r\n },\r\n {\r\n path: '/administration/connectors',\r\n allowedRoles: [\r\n UserRoles.SystemAdmin,\r\n UserRoles.ConnectorAdmin,\r\n UserRoles.ConnectorViewer,\r\n UserRoles.QueueAdmin,\r\n UserRoles.QueueManager\r\n ]\r\n },\r\n {\r\n path: '/administration/connectors/connectorTemplate',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin, UserRoles.QueueAdmin, UserRoles.QueueManager]\r\n },\r\n {\r\n path: '/administration/connectors/connectorTemplate/:id',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin, UserRoles.QueueAdmin, UserRoles.QueueManager]\r\n },\r\n {\r\n path: '/administration/connectors/RCTemplate',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/administration/connectors/RCTemplate/:id',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/administration/connectors/DirectoryImport',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/administration/connectors/DirectoryImport/:id',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin]\r\n },\r\n {\r\n path: '/administration/connectors/connectorTemplate/:id/queues/:queueId',\r\n allowedRoles: [UserRoles.SystemAdmin, UserRoles.ConnectorAdmin, UserRoles.QueueAdmin, UserRoles.QueueManager]\r\n }\r\n];\r\n\r\nconst useRouteAccess = () => {\r\n const location = useLocation();\r\n const params = useParams();\r\n const { user } = useAuth();\r\n\r\n const currentPathConfig = useMemo(\r\n () =>\r\n RoutesAccessConfig.find(({ path }) => {\r\n let newPath = path;\r\n Object.keys(params).forEach((key) => {\r\n newPath = path.replace(`:${key}`, params[key]);\r\n });\r\n\r\n return newPath === location.pathname;\r\n }),\r\n [params, location.pathname]\r\n );\r\n\r\n if (currentPathConfig?.allowedRoles) {\r\n return user?.roles?.some((role) => {\r\n return currentPathConfig?.allowedRoles?.includes(role);\r\n });\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport default useRouteAccess;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\n// material-ui\r\nimport { styled, useTheme } from '@mui/material/styles';\r\nimport { AppBar, Box, Container, CssBaseline, Toolbar, useMediaQuery } from '@mui/material';\r\n\r\n// project imports\r\nimport Header from './Header';\r\nimport Sidebar from './Sidebar';\r\nimport Breadcrumbs from 'ui-component/extended/Breadcrumbs';\r\n\r\nimport LAYOUT_CONST from 'constant';\r\nimport useConfig from 'hooks/useConfig';\r\nimport { drawerWidth } from 'store/constant';\r\nimport { useSelector, dispatch } from 'store';\r\n\r\nimport useRouteAccess from 'routes/useRouteAccess';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport NoAccess from 'views/pages/NoAccess';\r\nimport { openDrawer } from 'store/slices/menu';\r\nimport { getDashboardList } from 'store/slices/dashboard';\r\n/**\r\n * Queue Dashboards menu items\r\n */\r\nimport {\r\n loadAllowedWidgetsConfig,\r\n loadQueueDashboardList,\r\n loadQueueDashboardTemplateList,\r\n toggleIsCreateQueueDshDlgOpn\r\n} from 'store/slices/queueDashboard';\r\nimport CreateQueueDashboardDialog from 'views/QueueDashboard/CreateQueueDashboardDialog/CreateQueueDashboardDialog';\r\nimport useAuth from 'hooks/useAuth';\r\nimport useMenuItems from 'hooks/useMenuItems';\r\n\r\nimport { initializePendo } from 'utils/pendo';\r\nimport { getOrgLevelDescriptions } from 'store/slices/lookup';\r\n\r\n// assets\r\nimport { IconChevronRight } from '@tabler/icons';\r\n\r\n// styles\r\nconst Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open, layout }) => ({\r\n ...theme.typography.mainContent,\r\n borderBottomLeftRadius: 0,\r\n borderBottomRightRadius: 0,\r\n ...(!open && {\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.shorter + 200\r\n }),\r\n [theme.breakpoints.up('md')]: {\r\n marginLeft: layout === LAYOUT_CONST.VERTICAL_LAYOUT ? -(drawerWidth - 72) : '20px',\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginTop: layout === LAYOUT_CONST.HORIZONTAL_LAYOUT ? 135 : 88\r\n }\r\n }),\r\n ...(open && {\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.shorter + 200\r\n }),\r\n marginLeft: layout === LAYOUT_CONST.HORIZONTAL_LAYOUT ? '20px' : 0,\r\n marginTop: layout === LAYOUT_CONST.HORIZONTAL_LAYOUT ? 135 : 88,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n [theme.breakpoints.up('md')]: {\r\n marginTop: layout === LAYOUT_CONST.HORIZONTAL_LAYOUT ? 135 : 88\r\n }\r\n }),\r\n [theme.breakpoints.down('md')]: {\r\n marginLeft: '20px',\r\n padding: '16px',\r\n marginTop: 88,\r\n ...(!open && {\r\n width: `calc(100% - ${drawerWidth}px)`\r\n })\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n padding: '16px',\r\n marginTop: 88,\r\n ...(!open && {\r\n width: `calc(100% - ${drawerWidth}px)`\r\n })\r\n }\r\n}));\r\n\r\n// ==============================|| MAIN LAYOUT ||============================== //\r\n\r\nconst MainLayout = () => {\r\n const theme = useTheme();\r\n const { hasQueueRoles, hasLicensedQueuesAccess } = useSelector((state) => state.menu);\r\n const { isCreateQueueDshDlgOpen } = useSelector((state) => state.queueDashboard);\r\n const hasAccessToCurrentRoute = useRouteAccess();\r\n // const matchDownMd = useMediaQuery(theme.breakpoints.down('lg'));\r\n const { user } = useAuth();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const matchDownMd = useMediaQuery(theme.breakpoints.down('md'));\r\n const navigation = useMenuItems();\r\n const { drawerOpen } = useSelector((state) => state.menu);\r\n const { container, layout, navType } = useConfig();\r\n\r\n const condition = layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && !matchDownMd;\r\n const { newDashboardId } = useSelector((state) => state.dashboard);\r\n\r\n const toggleCreateQueueDshDialogOpen = () => {\r\n dispatch(toggleIsCreateQueueDshDlgOpn());\r\n };\r\n\r\n // load dashboard list for the user\r\n // this is required to dynamically display the available dashboards on the sidebar menu\r\n useEffect(() => {\r\n dispatch(getDashboardList());\r\n }, [newDashboardId, dispatch]);\r\n\r\n /**\r\n * Queue Dashboards menu items\r\n */\r\n useEffect(() => {\r\n if (hasQueueRoles && hasLicensedQueuesAccess) {\r\n dispatch(loadQueueDashboardList(enqueueSnackbar));\r\n // Load the queue dashboard templates\r\n dispatch(loadQueueDashboardTemplateList(enqueueSnackbar));\r\n // Load the allowed config for the queue dashboard widgets\r\n dispatch(loadAllowedWidgetsConfig(enqueueSnackbar));\r\n }\r\n }, [dispatch, hasQueueRoles, hasLicensedQueuesAccess]);\r\n\r\n // load the org level descriptions when loading the main layout. This might be needed even before we add or load new widgets\r\n useEffect(() => {\r\n dispatch(getOrgLevelDescriptions());\r\n }, [dispatch]);\r\n\r\n // useEffect(() => {\r\n // dispatch(openDrawer(!matchDownMd));\r\n // // eslint-disable-next-line react-hooks/exhaustive-deps\r\n // }, [matchDownMd]);\r\n\r\n useEffect(() => {\r\n dispatch(openDrawer(false));\r\n // initialize pendo\r\n if (user) {\r\n initializePendo(user);\r\n } else {\r\n const anonymousUser = {\r\n clientId: '',\r\n userName: 'VISITOR-UNIQUE-ID'\r\n };\r\n initializePendo(anonymousUser);\r\n }\r\n }, [dispatch, user]);\r\n\r\n const header = useMemo(\r\n () => (\r\n \r\n
\r\n \r\n ),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [layout, matchDownMd]\r\n );\r\n\r\n return (\r\n \r\n {/* header */}\r\n \r\n {header}\r\n \r\n\r\n {/* horizontal menu-list bar */}\r\n {layout === LAYOUT_CONST.HORIZONTAL_LAYOUT && !matchDownMd && }\r\n\r\n {/* drawer */}\r\n {(layout === LAYOUT_CONST.VERTICAL_LAYOUT || matchDownMd) && }\r\n\r\n {/* main content */}\r\n
\r\n {!hasAccessToCurrentRoute ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {container && (\r\n \r\n {/* breadcrumb */}\r\n \r\n \r\n \r\n )}\r\n {!container && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n
\r\n <>\r\n {isCreateQueueDshDlgOpen && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MainLayout;\r\n","import { useEffect } from 'react';\r\n\r\n// project imports\r\nimport { useDispatch, useSelector } from 'store';\r\nimport { setDefaultDashboard, createDashboard } from 'store/slices/dashboard';\r\nimport { useLocation, useNavigate, useParams } from 'react-router-dom';\r\nimport { activeID, activeItem } from 'store/slices/menu';\r\n\r\n// project imports\r\nimport MinimalLayout from 'layout/MinimalLayout';\r\n\r\nconst CustomDashboardLayout = () => {\r\n const { dashboards, isDashListLoaded } = useSelector((state) => state.dashboard);\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n const params = useParams();\r\n const defDashboardId = dashboards?.find((dashboard) => dashboard.displayOrder === 0)?.id;\r\n\r\n useEffect(() => {\r\n if (isDashListLoaded && dashboards.length === 0) {\r\n dispatch(createDashboard({ name: 'Main', displayOrder: 0, layout: '{}' }, true));\r\n } else if (isDashListLoaded && dashboards.length > 0) {\r\n const defDashboard = dashboards.find((dashboard) => dashboard.displayOrder === 0);\r\n dispatch(setDefaultDashboard(defDashboard?.id));\r\n }\r\n }, [dashboards, isDashListLoaded, dispatch]);\r\n\r\n useEffect(() => {\r\n if (location?.pathname === '/dashboard' && isDashListLoaded && defDashboardId && params.id !== defDashboardId) {\r\n navigate(`/dashboard/my-dashboard/${defDashboardId}`, { replace: true });\r\n dispatch(activeItem([defDashboardId]));\r\n dispatch(activeID('dashboard'));\r\n }\r\n }, [location?.pathname, navigate, dispatch, defDashboardId, params.id, isDashListLoaded]);\r\n return ;\r\n};\r\n\r\nexport default CustomDashboardLayout;\r\n","import React, { useState } from 'react';\r\nimport { useIdleTimer } from 'react-idle-timer';\r\nimport DraggableDialog from '../ui-component/extended/DraggableDialog'; // replace this with your actual modal library\r\nimport useAuth from 'hooks/useAuth';\r\nimport { TroubleshootRounded } from '@mui/icons-material';\r\n\r\nconst IdleSessionTimer = () => {\r\n const { tenant, logout, user, loginType } = useAuth();\r\n const [showWarning, setShowWarning] = useState(false);\r\n const promptBeforeIdle = 60000; // 60 seconds\r\n let inactivityTime = null;\r\n if (loginType === 'sql') {\r\n inactivityTime = user?.inactiveSessionTimeout > 0 ? user.inactiveSessionTimeout / 60 : 15;\r\n } else {\r\n inactivityTime = parseInt(tenant?.tenantData?.inactivityTimeoutInMinutes, 10) || 15; // in minutes\r\n }\r\n\r\n const handleLogout = async () => {\r\n try {\r\n await logout();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n };\r\n\r\n const onIdle = async () => {\r\n // if inactivity time is 0, then don't show warning or logout\r\n if (inactivityTime > 0) {\r\n setShowWarning(true);\r\n handleLogout();\r\n }\r\n };\r\n\r\n const onWarningClose = () => {\r\n setShowWarning(false);\r\n };\r\n\r\n const onPrompt = () => {\r\n if (inactivityTime > 0) {\r\n setShowWarning(true);\r\n }\r\n };\r\n\r\n const { activate } = useIdleTimer({\r\n onIdle,\r\n onPrompt,\r\n timeout: inactivityTime > 0 ? (inactivityTime + 1) * 60 * 1000 : null,\r\n promptBeforeIdle,\r\n throttle: 500,\r\n crossTab: true\r\n });\r\n\r\n const stayActive = () => {\r\n activate();\r\n setShowWarning(false);\r\n // clearTimeout(sessionTimeoutRef.current);\r\n };\r\n\r\n // useEffect(() => {\r\n // return () => {\r\n // if (sessionTimeoutRef.current) clearTimeout(sessionTimeoutRef.current);\r\n // };\r\n // }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\nexport default IdleSessionTimer;\r\n","import { createContext } from 'react';\r\n\r\nimport { QueueDataSource } from '../constants';\r\n\r\nexport const DEFAULT_DASHBOARD_STATE = {\r\n dataSource: QueueDataSource.MicrosoftTeams, // By Default assuming MSTeams for now, this will need to be changed\r\n dashboardId: 0,\r\n dashboardName: '',\r\n isInEditMode: false,\r\n hasUnsavedChanges: false,\r\n isDefault: false,\r\n // single metrics collection\r\n queueMetrics: {},\r\n // agents list, with metrics\r\n agentMetrics: [],\r\n // List of queueIds selected for the dashboard\r\n queueIdsFilter: [],\r\n // QueueIds filter to fallback to on discard changes\r\n discardFallbackQueueIdsFilter: [],\r\n // Date time filter for the dashboard\r\n dateTimeFilter: null,\r\n // Summary of the selected queues for the currrent dashboard (For the queues with Ids in queuesFilter)\r\n filteredQueuesMetricsSummary: [],\r\n // Id of the current selected queue\r\n selectedQueueId: null,\r\n // list of widgets\r\n widgets: [],\r\n discardFallbackWidgets: [],\r\n breakpoint: 'lg',\r\n // Whether changes are being saved currently\r\n savingDashboard: false,\r\n loadingQueueAndAgentMetrics: false,\r\n refreshingQueueAndAgentMetrics: false\r\n};\r\n\r\nexport const DashboardStateContext = createContext();\r\nexport const DashboardStateDispatchContext = createContext();\r\n\r\nexport const DashboardStateActions = {\r\n LoadDashboard: 'load_dashboard',\r\n SetEditMode: 'set_edit_mode',\r\n SetQueueIdsFilter: 'set_queue_ids_filter', // This operation would always happen in edit mode\r\n SetDateTimeFilter: 'set_date_time_filter',\r\n SetSelectedQueueId: 'set_selected_queue_id',\r\n SetFilteredQueuesMetricsSummary: 'set_filtered_queues_metrics_summary',\r\n SetQueueMetrics: 'set_queue_metrics',\r\n SetAgentMetricsList: 'set_agent_metrics_list',\r\n SetWidgetsList: 'set_widgets_list',\r\n AddWidgetToWigetsList: 'add_widget_to_widgets_list',\r\n SetCurrentBreakpoint: 'set_current_breakpoint',\r\n SetDiscardFallbackData: 'set_discard_fallback_data',\r\n ResetDiscardFallbackData: 'reset_discard_fallback_data',\r\n SaveEditModeChanges: 'save_edit_mode_changes',\r\n DiscardEditModeChanges: 'discard_edit_mode_changes',\r\n UpdateWidgetMetrics: 'update_widget_metrics',\r\n UpdateWidgetConfig: 'update_widget_config',\r\n DeleteWidget: 'delete_widget',\r\n SetSavingDashboard: 'set_saving_dashboard',\r\n SetDashboardAsDefault: 'set_dashboard_as_default',\r\n SetLoadingQueueAgentMetrics: 'set_loading_queue_agent_metrics',\r\n SetRefreshingQueueAgentMetrics: 'set_refreshing_queue_agent_metrics',\r\n UpdateWidget: 'update_widget',\r\n SetHasUnsavedChanges: 'set_unsaved_changes',\r\n SetDashboardDateTimeRange: 'set_dashboard_date_time_range'\r\n};\r\n\r\nexport const DashboardStateReducer = (state, action) => {\r\n switch (action.type) {\r\n case DashboardStateActions.LoadDashboard:\r\n return {\r\n ...state,\r\n isInEditMode: false,\r\n queueMetrics: {},\r\n agentMetrics: [],\r\n breakpoint: 'lg',\r\n savingDashboard: false,\r\n loadingQueueAndAgentMetrics: false,\r\n refreshingQueueAndAgentMetrics: false,\r\n filteredQueuesMetricsSummary: [],\r\n discardFallbackQueueIdsFilter: [],\r\n discardFallbackWidgets: [],\r\n dataSource: action.payload.dataSource,\r\n dashboardId: action.payload.id,\r\n dashboardName: action.payload.name,\r\n isDefault: action.payload.isDefault,\r\n queueIdsFilter: action.payload.queueIdsFilter,\r\n selectedQueueId: action.payload.selectedQueueId,\r\n dateTimeFilter: action.payload.dateTimeFilter,\r\n widgets: action.payload.widgets\r\n };\r\n case DashboardStateActions.SetEditMode:\r\n return {\r\n ...state,\r\n isInEditMode: action.payload\r\n };\r\n case DashboardStateActions.SetQueueIdsFilter:\r\n return {\r\n ...state,\r\n queueIdsFilter: action.payload\r\n };\r\n case DashboardStateActions.SetSelectedQueueId:\r\n return {\r\n ...state,\r\n selectedQueueId: action.payload\r\n };\r\n case DashboardStateActions.SetFilteredQueuesMetricsSummary:\r\n return {\r\n ...state,\r\n filteredQueuesMetricsSummary: action.payload\r\n };\r\n case DashboardStateActions.SetQueueMetrics:\r\n return {\r\n ...state,\r\n queueMetrics: action.payload\r\n };\r\n case DashboardStateActions.SetAgentMetricsList:\r\n return {\r\n ...state,\r\n agentMetrics: action.payload\r\n };\r\n case DashboardStateActions.SetWidgetsList:\r\n return {\r\n ...state,\r\n widgets: action.payload\r\n };\r\n case DashboardStateActions.AddWidgetToWigetsList:\r\n return {\r\n ...state,\r\n widgets: [\r\n ...state.widgets,\r\n {\r\n id: `temp-id-${state.widgets.length}`,\r\n ...action.payload\r\n }\r\n ]\r\n };\r\n case DashboardStateActions.SetCurrentBreakpoint:\r\n return {\r\n ...state,\r\n breakpoint: action.payload\r\n };\r\n case DashboardStateActions.SetDiscardFallbackData:\r\n return {\r\n ...state,\r\n discardFallbackQueueIdsFilter: state.queueIdsFilter,\r\n discardFallbackWidgets: JSON.parse(JSON.stringify(state.widgets))\r\n };\r\n case DashboardStateActions.ResetDiscardFallbackData:\r\n return {\r\n ...state,\r\n discardFallbackQueueIdsFilter: [],\r\n discardFallbackWidgets: []\r\n };\r\n case DashboardStateActions.SaveEditModeChanges:\r\n return {\r\n ...state,\r\n widgets: action.payload.widgets,\r\n dashboardName: action.payload.name,\r\n // TODO: Update other props too\r\n discardFallbackQueueIdsFilter: [],\r\n discardFallbackWidgets: []\r\n };\r\n case DashboardStateActions.DiscardEditModeChanges:\r\n return {\r\n ...state,\r\n widgets: [...state.discardFallbackWidgets],\r\n queueIdsFilter: [...state.discardFallbackQueueIdsFilter],\r\n discardFallbackWidgets: [],\r\n discardFallbackQueueIdsFilter: []\r\n };\r\n case DashboardStateActions.UpdateWidgetMetrics: {\r\n const widgetToUpdateIndex = state.widgets.findIndex((item) => item.id === action.payload.widgetId);\r\n\r\n if (widgetToUpdateIndex === -1) {\r\n return state;\r\n }\r\n\r\n const updatedWidgets = [...state.widgets];\r\n updatedWidgets[widgetToUpdateIndex].metrics = action.payload.value;\r\n\r\n return {\r\n ...state,\r\n widgets: updatedWidgets\r\n };\r\n }\r\n case DashboardStateActions.UpdateWidgetConfig: {\r\n const widgetToUpdateIndex = state.widgets.findIndex((item) => item.id === action.payload.widgetId);\r\n\r\n if (widgetToUpdateIndex === -1) {\r\n return state;\r\n }\r\n\r\n const { name, ...rest } = action.payload.config;\r\n\r\n const updatedWidgets = [...state.widgets];\r\n updatedWidgets[widgetToUpdateIndex].config = rest;\r\n updatedWidgets[widgetToUpdateIndex].name = name;\r\n\r\n return {\r\n ...state,\r\n widgets: updatedWidgets\r\n };\r\n }\r\n case DashboardStateActions.UpdateWidget: {\r\n const widgetToUpdateIndex = state.widgets.findIndex((item) => item.id === action.payload.widgetId);\r\n\r\n if (widgetToUpdateIndex === -1) {\r\n return state;\r\n }\r\n\r\n const updatedWidgets = [...state.widgets];\r\n updatedWidgets[widgetToUpdateIndex].config = action.payload.config;\r\n if (action.payload.name) {\r\n updatedWidgets[widgetToUpdateIndex].name = action.payload.name;\r\n }\r\n updatedWidgets[widgetToUpdateIndex].metrics = action.payload.metrics;\r\n\r\n return {\r\n ...state,\r\n widgets: updatedWidgets\r\n };\r\n }\r\n case DashboardStateActions.DeleteWidget: {\r\n const widgetToDeleteIndex = state.widgets.findIndex((item) => item.id === action.payload.id);\r\n\r\n if (widgetToDeleteIndex === -1) {\r\n return state;\r\n }\r\n\r\n return {\r\n ...state,\r\n widgets: state.widgets.toSpliced(widgetToDeleteIndex, 1)\r\n };\r\n }\r\n case DashboardStateActions.SetDateTimeFilter:\r\n return {\r\n ...state,\r\n dateTimeFilter: action.payload.value\r\n };\r\n case DashboardStateActions.SetSavingDashboard:\r\n return {\r\n ...state,\r\n savingDashboard: action.payload\r\n };\r\n case DashboardStateActions.SetDashboardAsDefault:\r\n return {\r\n ...state,\r\n isDefault: true\r\n };\r\n case DashboardStateActions.SetLoadingQueueAgentMetrics:\r\n return {\r\n ...state,\r\n loadingQueueAndAgentMetrics: action.payload\r\n };\r\n case DashboardStateActions.SetRefreshingQueueAgentMetrics:\r\n return {\r\n ...state,\r\n refreshingQueueAndAgentMetrics: action.payload\r\n };\r\n case DashboardStateActions.SetHasUnsavedChanges:\r\n return {\r\n ...state,\r\n hasUnsavedChanges: action.payload\r\n };\r\n case DashboardStateActions.SetDashboardDateTimeRange:\r\n return {\r\n ...state,\r\n dateTimeRange: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export default __webpack_public_path__ + \"static/media/queue-single-metric.7f260a95.svg\";","export default __webpack_public_path__ + \"static/media/queue-donut-widget.0c6a53d7.svg\";","export default __webpack_public_path__ + \"static/media/queue-timeseries-widget.ec6c67b3.svg\";","export default __webpack_public_path__ + \"static/media/queue-table-widget.ee2deaad.svg\";","import React, { useContext, useState } from 'react';\r\n\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Card from '@mui/material/Card';\r\nimport { IconPlus } from '@tabler/icons';\r\n\r\nimport QueueMetricWidgetThumbnail from 'assets/images/icons/queue-single-metric.svg';\r\nimport QueueDonutWidgetThumbnail from 'assets/images/icons/queue-donut-widget.svg';\r\nimport QueueTimeseriesWidgetThumbnail from 'assets/images/icons/queue-timeseries-widget.svg';\r\nimport QueueTableWidgetThumbnail from 'assets/images/icons/queue-table-widget.svg';\r\n\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport {\r\n DefaultDataGroupingOption,\r\n DonutWidgetChartTypes,\r\n TimeSeriesGroupTimeByOptions,\r\n TimeSeriesMetricsCategory,\r\n TimeSeriesWidgetChartTypes,\r\n WidgetTypes\r\n} from '../constants';\r\n\r\nfunction getXandYForNewWidget(widgets, breakpoint, itemToBeAddedWidth) {\r\n if (!widgets.length) {\r\n return { x: 0, y: 0 };\r\n }\r\n const ySortedLayout = widgets.map((widget) => widget.layout[breakpoint]).toSorted((a, b) => a.y - b.y);\r\n const lastYItem = ySortedLayout[ySortedLayout.length - 1];\r\n const y = lastYItem.y + lastYItem.h;\r\n const firstEmptyX = Math.max(...ySortedLayout.filter((item) => item.y === lastYItem.y).map((item) => item.x + item.w));\r\n const x = itemToBeAddedWidth + firstEmptyX <= 6 ? firstEmptyX : 0;\r\n return { x, y };\r\n}\r\n\r\nexport default function CreateWidgetDialog({ disabled }) {\r\n const [isWidgetCreationDialogOpen, setIsWidgetCreationDialogOpen] = useState(false);\r\n\r\n const { widgets, breakpoint } = useContext(DashboardStateContext);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n\r\n const toggleWidgetCreationDialog = () => {\r\n setIsWidgetCreationDialogOpen((open) => !open);\r\n };\r\n\r\n const addNewWidget = (type) => {\r\n let dimensions;\r\n let config;\r\n let metrics;\r\n let name;\r\n // TODO: Get this from backend service\r\n switch (type) {\r\n case WidgetTypes.AgentTable:\r\n name = 'New Agents Table';\r\n dimensions = { h: 4, w: 4 };\r\n metrics = [\r\n {\r\n id: 'new-widget-temp',\r\n metric: 'answeredCalls',\r\n calculationType: 'count',\r\n displayAs: 'Answered Calls',\r\n displayOrder: 0\r\n }\r\n ];\r\n config = {\r\n sortOrder: [\r\n {\r\n columnName: 'Name',\r\n ascending: true\r\n }\r\n ]\r\n };\r\n break;\r\n case WidgetTypes.QueueMetrics:\r\n name = 'New Queue Metrics Widget';\r\n dimensions = { h: 2, w: 2 };\r\n config = {\r\n maxMetricsPerRow: 5\r\n };\r\n metrics = [\r\n {\r\n id: 'new-widget-temp',\r\n metric: 'answeredCalls',\r\n calculationType: 'count',\r\n displayAs: 'Answered Calls',\r\n displayOrder: 0\r\n }\r\n ];\r\n break;\r\n case WidgetTypes.DonutOrPieChart:\r\n name = 'New Donut Widget';\r\n config = {\r\n graphType: DonutWidgetChartTypes.Donut,\r\n groupDataBy: DefaultDataGroupingOption.Donut\r\n };\r\n metrics = [];\r\n dimensions = { h: 2, w: 2 };\r\n break;\r\n case WidgetTypes.TimeSeries:\r\n name = 'New TimeSeries Widget';\r\n dimensions = { h: 2, w: 2 };\r\n config = {\r\n graphType: TimeSeriesWidgetChartTypes.Line,\r\n groupTimeBy: TimeSeriesGroupTimeByOptions.Hours,\r\n metricCategory: TimeSeriesMetricsCategory.QueueCallCounts,\r\n groupDataBy: DefaultDataGroupingOption.TimeSeries,\r\n yAxisCaption: '# calls per hour'\r\n };\r\n metrics = null;\r\n break;\r\n default:\r\n // Unknown\r\n break;\r\n }\r\n\r\n const coordinates = getXandYForNewWidget(widgets, breakpoint, dimensions.w);\r\n\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.AddWidgetToWigetsList,\r\n payload: {\r\n name,\r\n type,\r\n metrics,\r\n config,\r\n layout: {\r\n sm: {\r\n ...coordinates,\r\n ...dimensions\r\n },\r\n md: {\r\n ...coordinates,\r\n ...dimensions\r\n },\r\n lg: {\r\n ...coordinates,\r\n ...dimensions\r\n },\r\n xs: {\r\n ...coordinates,\r\n ...dimensions\r\n },\r\n xxs: {\r\n ...coordinates,\r\n ...dimensions\r\n }\r\n }\r\n }\r\n });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n toggleWidgetCreationDialog();\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Add Widget\r\n \r\n \r\n \r\n
\r\n
\r\n addNewWidget(WidgetTypes.QueueMetrics)}>\r\n
\r\n \"queue\r\n
\r\n

Queue Metrics

\r\n
\r\n addNewWidget(WidgetTypes.DonutOrPieChart)}>\r\n \"donut\r\n

Donut

\r\n
\r\n addNewWidget(WidgetTypes.TimeSeries)}>\r\n \"timeseries\r\n

Timeseries

\r\n
\r\n addNewWidget(WidgetTypes.AgentTable)}>\r\n \"table\r\n

Agent

\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n","import { useContext, useState, useEffect } from 'react';\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\nimport { useSnackbar } from 'notistack';\r\nimport DxDataGrid from 'ui-component/extended/DxDataGrid';\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\n\r\nimport { getAccessibleLicensedCallQueues } from '../Utils/queueDashboardApiCallsUtil';\r\nimport { DialogActions, Divider, DialogContent } from '@mui/material';\r\n\r\nconst ColumnsArray = [\r\n { dataField: 'displayName', caption: 'Queue Name' },\r\n { dataField: 'dataSource', caption: 'Data Source' }\r\n];\r\n\r\nexport default function QueueFilterSelectionDialog({ isDialogOpen, onDialogClose }) {\r\n const [loading, setLoading] = useState(isDialogOpen);\r\n const [accessibleQueues, setAccessibleQueues] = useState([]);\r\n const { dataSource, queueIdsFilter } = useContext(DashboardStateContext);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [selectedQueueIds, setSelectedQueueIds] = useState([...queueIdsFilter]);\r\n\r\n const saveActiveQueuesSelection = () => {\r\n if (selectedQueueIds.length === 0) {\r\n enqueueSnackbar('Atleast one queue should be selected', { variant: 'error' });\r\n return;\r\n }\r\n\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.SetQueueIdsFilter,\r\n payload: selectedQueueIds\r\n });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n\r\n onDialogClose();\r\n };\r\n\r\n useEffect(() => {\r\n async function loadLicensedQueues() {\r\n setLoading(true);\r\n const queues = await getAccessibleLicensedCallQueues(enqueueSnackbar, dataSource);\r\n if (queues) {\r\n setAccessibleQueues(queues);\r\n } else {\r\n enqueueSnackbar('Failed to load accessible queues. Try again.', { variant: 'error' });\r\n }\r\n setLoading(false);\r\n }\r\n\r\n if (isDialogOpen) {\r\n loadLicensedQueues();\r\n }\r\n }, [isDialogOpen]);\r\n\r\n return (\r\n \r\n Filters\r\n \r\n\r\n \r\n {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","import Radio from '@mui/material/Radio';\r\nimport RadioGroup from '@mui/material/RadioGroup';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\r\nimport { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';\r\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\r\nimport TextField from '@mui/material/TextField';\r\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { Divider, Grid, InputLabel, Typography } from '@mui/material';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport { useFormik } from 'formik';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport moment, { weekdays } from 'moment';\r\nimport TimeZone from 'ui-component/extended/TimeZone';\r\nimport { formatGMTOffsetToHoursAndMinutes, getUtcOffsetInMinutes } from 'utils/QueueConfigurationFormatAndValidation';\r\nimport { startEndDateDifference } from 'utils/format';\r\nimport { renderTimeViewClock } from '@mui/x-date-pickers/timeViewRenderers';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { defaultDateRangeFormat, relativeDateRangeFormat } from '../constants';\r\n\r\nexport const DateRangeType = {\r\n Specific: 'specific',\r\n Relative: 'relative',\r\n CurrentQueuePeriod: 'queuePeriod'\r\n};\r\n\r\nexport const TimeRangeType = {\r\n Continuous: 'continuous',\r\n Interval: 'interval'\r\n};\r\n\r\nexport const RelativeDateUnitOptions = {\r\n LastNHours: 'lastNHours',\r\n LastNDays: 'lastNDays'\r\n};\r\n\r\nexport const RelativeDateUnitOptionsLabels = {\r\n LastNDays: 'Days',\r\n LastNHours: 'Hours'\r\n};\r\n\r\nconst showDateError = (dateError, date) => {\r\n let error = '';\r\n if (dateError === 'invalidDate' || dateError === 'minDate') {\r\n error = `${date} should be in 'MM:DD:YYYY' format`;\r\n } else if (dateError === 'disableFuture') {\r\n error = `${date} should not be a future date`;\r\n }\r\n return error;\r\n};\r\n\r\nexport default function DateTimeFilter({ initialValues, setDateTimeFilterValues, setHasDateTimeErrors, selectedQueue }) {\r\n const [endTimeError, setEndTimeError] = useState(null);\r\n const [startTimeError, setStartTimeError] = useState(null);\r\n const [timeError, setTimeError] = useState(null);\r\n const [endDateError, setEndDateError] = useState(null);\r\n const [startDateError, setStartDateError] = useState(null);\r\n const [dateError, setDateError] = useState(null);\r\n const [timeZoneError, setTimeZoneError] = useState(false);\r\n const formik = useFormik({\r\n initialValues: {\r\n type: initialValues?.type || DateRangeType.Specific,\r\n startDate: initialValues?.date?.specific?.startDate || moment().subtract(30, 'days').format('YYYY-MM-DD'),\r\n endDate: initialValues?.date?.specific?.endDate || moment().format('YYYY-MM-DD'),\r\n relativeDateType: initialValues?.date?.relative?.type || RelativeDateUnitOptions.LastNDays,\r\n relativeDateCount: initialValues?.date?.relative?.length || 31,\r\n includeToday: initialValues?.date?.relative?.includeToday ?? true,\r\n weekDays: initialValues?.date?.weekDays ?? [true, true, true, true, true, true, true],\r\n timeType: initialValues?.time?.type || 'continuous',\r\n startTime: moment(initialValues?.time?.startTime || '00:00', 'HH:mm'),\r\n endTime: moment(initialValues?.time?.endTime || '23:59', 'HH:mm'),\r\n countryCode: initialValues?.countryCode || 'US',\r\n utcOffsetInMinutes: formatGMTOffsetToHoursAndMinutes(initialValues?.utcOffsetInMinutes ?? -360),\r\n useDst: initialValues?.useDst ?? false\r\n }\r\n });\r\n\r\n const theme = useTheme();\r\n\r\n useEffect(() => {\r\n setDateTimeFilterValues?.(formik.values);\r\n }, [formik.values]);\r\n\r\n useEffect(() => {\r\n if (!formik.values.startTime || !formik.values.endTime || startTimeError || endTimeError) {\r\n setTimeError(\"Time should be in 'HH:MM' format\");\r\n } else if (\r\n ((formik.values.type === DateRangeType.Specific && formik.values.startDate === formik.values.endDate) ||\r\n formik.values.timeType === TimeRangeType.Interval) &&\r\n formik.values.startTime &&\r\n formik.values.endTime &&\r\n formik.values.startTime >= formik.values.endTime\r\n ) {\r\n setTimeError('Start time should be before end time');\r\n } else {\r\n setTimeError(null);\r\n }\r\n if (formik.values.type === DateRangeType.Specific) {\r\n if (startDateError || endDateError) {\r\n setDateError(\"Date should be in 'MM:DD:YYYY' format\");\r\n } else if (formik.values.startDate > formik.values.endDate) {\r\n setDateError('Start date should be before end date');\r\n } else if (startEndDateDifference(formik.values.startDate, formik.values.endDate) > 30) {\r\n setDateError('Maximum 31 days can be selected for a specific date range');\r\n } else {\r\n setDateError(null);\r\n }\r\n }\r\n if (formik.values.type === DateRangeType.Relative) {\r\n if (!formik.values.relativeDateCount) {\r\n setDateError('Value is required');\r\n } else if (\r\n formik.values.relativeDateType === 'lastNDays' &&\r\n (formik.values.relativeDateCount > 31 || formik.values.relativeDateCount < 1)\r\n ) {\r\n setDateError('Days can be in range 1 - 31');\r\n } else if (\r\n formik.values.relativeDateType === 'lastNHours' &&\r\n (formik.values.relativeDateCount > 24 || formik.values.relativeDateCount < 1)\r\n ) {\r\n setDateError('Hours can be in range 1 - 24');\r\n } else {\r\n setDateError(null);\r\n }\r\n }\r\n if (formik.values.type === DateRangeType.CurrentQueuePeriod) {\r\n setDateError(null);\r\n setTimeError(null);\r\n setStartTimeError(null);\r\n setEndTimeError(null);\r\n }\r\n }, [formik.values, startDateError, endDateError, startTimeError, endTimeError]);\r\n\r\n useEffect(() => {\r\n if (timeZoneError || startTimeError || endTimeError || timeError || dateError) {\r\n setHasDateTimeErrors(true);\r\n } else {\r\n setHasDateTimeErrors(false);\r\n }\r\n }, [timeZoneError, endTimeError, startTimeError, timeError, dateError, formik.values]);\r\n\r\n const [startDate, endDate] = useMemo(() => {\r\n if (formik.values.type === DateRangeType.Relative && formik.values.relativeDateType === 'lastNDays') {\r\n const currentUTCDate = moment().utc();\r\n const endDateTimeInUTC = formik.values.includeToday ? currentUTCDate : moment(currentUTCDate).subtract(1, 'days');\r\n const startDateTimeInUTC = moment(currentUTCDate).subtract(formik.values.relativeDateCount, 'days');\r\n\r\n const userSelectedTZOffset = formik.values.useDst\r\n ? getUtcOffsetInMinutes(formik.values.utcOffsetInMinutes) + 60\r\n : getUtcOffsetInMinutes(formik.values.utcOffsetInMinutes);\r\n const startDateTime = startDateTimeInUTC.utcOffset(userSelectedTZOffset).format(relativeDateRangeFormat);\r\n const endDateTime = endDateTimeInUTC.utcOffset(userSelectedTZOffset).format(relativeDateRangeFormat);\r\n\r\n return [startDateTime, endDateTime];\r\n }\r\n return [undefined, undefined];\r\n }, [formik.values]);\r\n\r\n const [queueRangeStartDate, queueRangeEndDate] = useMemo(() => {\r\n if (formik.values.type === DateRangeType.CurrentQueuePeriod) {\r\n const currentDateInQueueTZ = moment().utc().utcOffset(selectedQueue.utcOffsetInMinutes);\r\n const startTimeParts = selectedQueue.activeStartTime.split(':');\r\n const endTimeParts = selectedQueue.activeEndTime.split(':');\r\n // Initialize queue start and end time in queue timezone\r\n const startDateTimeInQueueTZ = moment(currentDateInQueueTZ).set({\r\n hour: startTimeParts[0],\r\n minute: startTimeParts[1],\r\n second: startTimeParts[2]\r\n });\r\n\r\n let endDateTimeInQueueTZ = moment(currentDateInQueueTZ).set({\r\n hour: endTimeParts[0],\r\n minute: endTimeParts[1],\r\n second: endTimeParts[2]\r\n });\r\n if (endDateTimeInQueueTZ <= startDateTimeInQueueTZ) {\r\n endDateTimeInQueueTZ = endDateTimeInQueueTZ.add(1, 'days');\r\n }\r\n // Convert to user selectedTimezone\r\n const userSelectedTZOffset = formik.values.useDst\r\n ? getUtcOffsetInMinutes(formik.values.utcOffsetInMinutes) + 60\r\n : getUtcOffsetInMinutes(formik.values.utcOffsetInMinutes);\r\n const startDateTime = moment.utc(startDateTimeInQueueTZ).utcOffset(userSelectedTZOffset);\r\n const endDateTime = moment.utc(endDateTimeInQueueTZ).utcOffset(userSelectedTZOffset);\r\n return [startDateTime.format(defaultDateRangeFormat), endDateTime.format(defaultDateRangeFormat)];\r\n }\r\n return [undefined, undefined];\r\n }, [selectedQueue, formik.values]);\r\n\r\n const showDateRange = (startDate, endDate) => (\r\n \r\n \r\n {startDate}\r\n \r\n \r\n {' '}\r\n -{' '}\r\n \r\n \r\n {endDate}\r\n \r\n \r\n );\r\n return (\r\n <>\r\n
\r\n \r\n \r\n Date Range\r\n \r\n \r\n }\r\n label=\"Specific\"\r\n />\r\n }\r\n label=\"Relative\"\r\n />\r\n }\r\n label=\"Current Queue Period\"\r\n />\r\n \r\n \r\n {formik.values.type === DateRangeType.CurrentQueuePeriod && showDateRange(queueRangeStartDate, queueRangeEndDate)}\r\n {formik.values.type === DateRangeType.Specific && (\r\n \r\n
\r\n formik.setFieldValue('startDate', moment(e).format('YYYY-MM-DD'))}\r\n label=\"Start Date\"\r\n id=\"startDate\"\r\n name=\"startDate\"\r\n disableFuture\r\n onError={(newError) => setStartDateError(newError)}\r\n />\r\n formik.setFieldValue('endDate', moment(e).format('YYYY-MM-DD'))}\r\n label=\"End Date\"\r\n id=\"endDate\"\r\n name=\"endDate\"\r\n disableFuture\r\n onError={(newError) => setEndDateError(newError)}\r\n />\r\n
\r\n
\r\n {!startDateError && !endDateError && (\r\n \r\n {dateError}\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {formik.values.type === DateRangeType.Relative && (\r\n <>\r\n
\r\n

Last

\r\n \r\n \r\n {Object.keys(RelativeDateUnitOptions).map((item) => (\r\n \r\n {RelativeDateUnitOptionsLabels[item]}\r\n \r\n ))}\r\n \r\n {formik.values.relativeDateType === RelativeDateUnitOptions.LastNDays && (\r\n formik.setFieldValue('includeToday', event.target.checked)}\r\n />\r\n }\r\n label=\"Include Today\"\r\n />\r\n )}\r\n
\r\n {dateError && (\r\n \r\n {dateError}\r\n \r\n )}\r\n {formik.values.relativeDateType === RelativeDateUnitOptions.LastNDays &&\r\n !dateError &&\r\n showDateRange(startDate, endDate)}\r\n \r\n )}\r\n {formik.values.type !== DateRangeType.CurrentQueuePeriod && (\r\n
\r\n {weekdays().map((wd, index) => (\r\n {\r\n const newWeekDaysSelection = [...formik.values.weekDays];\r\n newWeekDaysSelection[index] = event.target.checked;\r\n formik.setFieldValue('weekDays', newWeekDaysSelection);\r\n }}\r\n />\r\n }\r\n label={wd.substring(0, 3)}\r\n />\r\n ))}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n {formik.values.type !== DateRangeType.CurrentQueuePeriod &&\r\n !(\r\n formik.values.type === DateRangeType.Relative &&\r\n formik.values.relativeDateType === RelativeDateUnitOptions.LastNHours\r\n ) && (\r\n <>\r\n \r\n \r\n Time\r\n \r\n \r\n } label=\"Continuous\" />\r\n } label=\"Interval\" />\r\n \r\n \r\n \r\n
\r\n \r\n formik.setFieldValue('startTime', e)}\r\n id=\"startTime\"\r\n name=\"startTime\"\r\n slotProps={{\r\n textField: {\r\n variant: 'outlined',\r\n error: !!timeError,\r\n helperText:\r\n startTimeError || !formik.values.startTime\r\n ? \"Start time should be in 'HH:MM' format\"\r\n : ''\r\n }\r\n }}\r\n viewRenderers={{\r\n hours: renderTimeViewClock,\r\n minutes: renderTimeViewClock,\r\n seconds: renderTimeViewClock\r\n }}\r\n onError={(newError) => setStartTimeError(newError)}\r\n />\r\n \r\n \r\n formik.setFieldValue('endTime', e)}\r\n id=\"endTime\"\r\n name=\"endTime\"\r\n slotProps={{\r\n textField: {\r\n variant: 'outlined',\r\n error: !!timeError,\r\n helperText:\r\n endTimeError || !formik.values.endTime ? \"End time should be in 'HH:MM' format\" : ''\r\n }\r\n }}\r\n viewRenderers={{\r\n hours: renderTimeViewClock,\r\n minutes: renderTimeViewClock,\r\n seconds: renderTimeViewClock\r\n }}\r\n onError={(newError) => setEndTimeError(newError)}\r\n />\r\n \r\n
\r\n \r\n {!startTimeError && !endTimeError && formik.values.endTime && formik.values.startTime && (\r\n \r\n {timeError}\r\n \r\n )}\r\n
\r\n \r\n \r\n )}\r\n \r\n Timezone\r\n \r\n
\r\n formik.setFieldValue('countryCode', value)}\r\n setUseDst={(isChecked) => formik.setFieldValue('useDst', isChecked)}\r\n gmtOffset={formik.values.utcOffsetInMinutes}\r\n setGmt={(offset) => formik.setFieldValue('utcOffsetInMinutes', offset)}\r\n setTimeZoneError={setTimeZoneError}\r\n />\r\n
\r\n \r\n \r\n );\r\n}\r\n","import { useContext, useState } from 'react';\r\n\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\n\r\nimport DateTimeFilter, { DateRangeType, RelativeDateUnitOptions } from '../DateTimeFilter/DateTimeFilter';\r\n\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport moment from 'moment';\r\nimport { useSnackbar } from 'notistack';\r\nimport { getUtcOffsetInMinutes } from 'utils/QueueConfigurationFormatAndValidation';\r\nimport { CircularProgress, Divider } from '@mui/material';\r\nimport { saveUpdatedDateTimeFilter } from '../Utils/queueDashboardApiCallsUtil';\r\n\r\nexport default function DateRangePickerDialog({ isEditDateRangeDialogOpen, toggleEditDateRangeDialogOpen }) {\r\n const { dashboardId, dateTimeFilter, filteredQueuesMetricsSummary, selectedQueueId } = useContext(DashboardStateContext);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n\r\n const [filterValues, setFilterValues] = useState(dateTimeFilter);\r\n const [loading, setLoading] = useState(false);\r\n const [hasDateTimeErrors, setHasDateTimeErrors] = useState(false);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const setDateTimeFilterValues = (values) => {\r\n const updatedDateTimeFilter = {\r\n type: values.type,\r\n date: {},\r\n time: {},\r\n countryCode: values.countryCode,\r\n utcOffsetInMinutes: getUtcOffsetInMinutes(values.utcOffsetInMinutes),\r\n useDst: values.useDst\r\n };\r\n\r\n if (values.type === DateRangeType.CurrentQueuePeriod) {\r\n updatedDateTimeFilter.date = null;\r\n updatedDateTimeFilter.time = null;\r\n }\r\n\r\n if (values.type === DateRangeType.Specific) {\r\n updatedDateTimeFilter.date = {\r\n specific: {\r\n startDate: values.startDate,\r\n endDate: values.endDate\r\n },\r\n relative: null,\r\n weekDays: values.weekDays\r\n };\r\n }\r\n\r\n if (values.type === DateRangeType.Relative) {\r\n updatedDateTimeFilter.date = {\r\n relative: {\r\n type: values.relativeDateType,\r\n length: values.relativeDateCount,\r\n includeToday: values.includeToday\r\n },\r\n specific: null,\r\n weekDays: values.weekDays\r\n };\r\n\r\n if (values.relativeDateType === RelativeDateUnitOptions.LastNHours) {\r\n updatedDateTimeFilter.time = null;\r\n }\r\n }\r\n\r\n if (\r\n values.type === DateRangeType.Specific ||\r\n (values.type === DateRangeType.Relative && values.relativeDateType === RelativeDateUnitOptions.LastNDays)\r\n ) {\r\n updatedDateTimeFilter.time = {\r\n type: values.timeType,\r\n startTime: moment(values.startTime).format('HH:mm'),\r\n endTime: moment(values.endTime).format('HH:mm')\r\n };\r\n }\r\n\r\n setFilterValues(updatedDateTimeFilter);\r\n };\r\n\r\n const saveDateTimeFilter = async () => {\r\n setLoading(true);\r\n try {\r\n const success = await saveUpdatedDateTimeFilter(dashboardId, filterValues);\r\n if (success) {\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.SetDateTimeFilter,\r\n payload: {\r\n value: filterValues\r\n }\r\n });\r\n toggleEditDateRangeDialogOpen();\r\n } else {\r\n enqueueSnackbar('Failed to save the updated date time filter', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n enqueueSnackbar('Failed to save the updated date time filter', { variant: 'error' });\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n const selectedQueue = filteredQueuesMetricsSummary.find((q) => q.queueId === selectedQueueId);\r\n return (\r\n \r\n
\r\n
\r\n Date and Time\r\n \r\n \r\n \r\n
\r\n \r\n {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","import { IconButton, Tooltip, useTheme } from '@mui/material';\r\nimport { IconArrowBackUp, IconRotateClockwise2, IconX } from '@tabler/icons';\r\nimport AnimateButton from 'ui-component/extended/AnimateButton';\r\nimport { QueueDashboardEvents, WidgetTitleColor } from '../constants';\r\n\r\nexport const lengthOfTimeLabel = 'length of time';\r\n\r\nexport function getQueueDashboardRefreshDataEventObj() {\r\n return new CustomEvent(QueueDashboardEvents.RefreshWidgetData, {\r\n bubbles: false,\r\n detail: { time: new Date() }\r\n });\r\n}\r\n\r\nexport function getRefreshingWidgetDataAnimateIcon(id) {\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\nexport function getExitPreviewButton(exitPreview) {\r\n return (\r\n \r\n exitPreview()}>\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport function getPreviousLevelButton(drillLevelUp) {\r\n return (\r\n \r\n drillLevelUp()}>\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport const DonutChartTooltip = (props) => {\r\n const theme = useTheme();\r\n const { active, payload } = props;\r\n if (active && payload && payload.length) {\r\n const payloadDetails = payload[0].payload;\r\n const label =\r\n payload[0].name !== 'Others'\r\n ? `${payload[0].name}: ${payloadDetails.Count} (${\r\n payloadDetails.percent === 0 && payloadDetails.Count > 0 ? '< 1' : payloadDetails.percent\r\n }%)`\r\n : `${payload[0].name}: ${payloadDetails.Count}`;\r\n return (\r\n \r\n

{label}

\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\n// update and return date time copy based on useDST value\r\nexport const getDateTimeWithDstAdjustment = (dateTimeFilter) => {\r\n const dateTimeFilterCopy = { ...dateTimeFilter };\r\n if (dateTimeFilterCopy?.useDst) {\r\n dateTimeFilterCopy.utcOffsetInMinutes += 60;\r\n }\r\n return dateTimeFilterCopy;\r\n};\r\n","import React, { useContext, useCallback, useState, useEffect, useMemo } from 'react';\r\n\r\nimport Card from '@mui/material/Card';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport Button from '@mui/material/Button';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport TextField from '@mui/material/TextField';\r\nimport { IconCalendarTime, IconReload, IconDotsVertical, IconEdit, IconTrash, IconFilter, IconStar } from '@tabler/icons';\r\nimport CreateWidgetDialog from '../CreateWidgetDialog/CreateWidgetDialog';\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport QueueFilterSelectionDialog from '../QueueFilterSelectionDialog/QueueFilterSelectionDialog';\r\nimport { useDispatch, useSelector } from 'store';\r\nimport DateRangePickerDialog from '../DateRangePickerDialog/DateRangePickerDialog';\r\nimport { useSnackbar } from 'notistack';\r\nimport { WidgetTypes, defaultDateRangeFormat } from '../constants';\r\nimport {\r\n deleteDashboardSuccess,\r\n loadQueueDashboardList,\r\n setDefaultQueueDashboardSuccess,\r\n updateDashboardName\r\n} from 'store/slices/queueDashboard';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { LoadingButton } from '@mui/lab';\r\nimport ConfirmationDialog from 'ui-component/ConfirmationDialog';\r\nimport { Tooltip } from '@mui/material';\r\nimport { getQueueDashboardRefreshDataEventObj } from '../Utils/queueDashboardUtils';\r\nimport { deleteQueueDashboard, saveUpdatedDashboard, setDashboardAsDefault } from '../Utils/queueDashboardApiCallsUtil';\r\nimport { useTheme } from '@emotion/react';\r\nimport moment from 'moment';\r\nimport useNavigationBlocker from 'hooks/useNavigationBlocker';\r\nimport { DiscardChangesConfirmationDlgMsg } from 'store/constant';\r\nimport { isEqual } from 'lodash';\r\n\r\n// Cooldown period (seconds) for the reload operation in title bar\r\nconst ReloadCooldownMaxTicks = 30;\r\n\r\nexport default function TitleBar() {\r\n const theme = useTheme();\r\n const [isQueueFilterSelectionDialogOpen, setIsQueueFilterSelectionDialogOpen] = useState(false);\r\n const [isEditDateRangeDialogOpen, setIsEditDateRangeDialogOpen] = useState(false);\r\n const [deleteValidationMsg, setDeleteValidationMsg] = useState(null);\r\n const [showDeleteConfirmationDlg, setShowDeleteConfirmationDlg] = useState(false);\r\n const { queueDashboards } = useSelector((state) => state.queueDashboard);\r\n const [error, setError] = useState('');\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [reloadCooldownTicks, setReloadCooldownTicks] = useState(0);\r\n const open = Boolean(anchorEl);\r\n\r\n const {\r\n isInEditMode,\r\n savingDashboard,\r\n dashboardId,\r\n dashboardName,\r\n queueIdsFilter,\r\n selectedQueueId,\r\n widgets,\r\n dateTimeFilter,\r\n isDefault,\r\n hasUnsavedChanges,\r\n dateTimeRange,\r\n dataSource\r\n } = useContext(DashboardStateContext);\r\n const [queueDashboardName, setQueueDashboardName] = useState(dashboardName);\r\n\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const dispatch = useDispatch();\r\n const navigate = useNavigate();\r\n const [showDiscardChangesDialog, confirmNavigation, cancelNavigation] = useNavigationBlocker(hasUnsavedChanges);\r\n\r\n const handleReload = useCallback(\r\n (e) => {\r\n if (reloadCooldownTicks === 0) {\r\n // Dispatch the event to trigger refresh\r\n const event = getQueueDashboardRefreshDataEventObj();\r\n document.body.dispatchEvent(event);\r\n\r\n setReloadCooldownTicks(ReloadCooldownMaxTicks);\r\n }\r\n },\r\n [reloadCooldownTicks]\r\n );\r\n\r\n useEffect(() => {\r\n if (reloadCooldownTicks > 0) {\r\n // Tick down every one second\r\n const timeoutId = setTimeout(() => {\r\n setReloadCooldownTicks(reloadCooldownTicks - 1);\r\n }, 1000);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }\r\n\r\n return () => {};\r\n }, [reloadCooldownTicks]);\r\n\r\n useEffect(() => {\r\n if (!queueDashboardName.trim()) {\r\n setError('Dashboard Name is required');\r\n } else if (queueDashboardName.length > 50) {\r\n setError('Dashboard name should not exceed 50 characters');\r\n } else if (queueDashboards.some((dashboard) => dashboard.name === queueDashboardName && dashboard.id !== dashboardId)) {\r\n setError('Dashboard Name already exists');\r\n } else {\r\n setError('');\r\n }\r\n }, [queueDashboardName, queueDashboards, dashboardId]);\r\n\r\n const handleMenuBtnClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = useCallback(() => {\r\n setAnchorEl(null);\r\n }, []);\r\n\r\n const switchToEditMode = useCallback(() => {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetDiscardFallbackData });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetEditMode, payload: true });\r\n handleClose();\r\n }, [dispatchDashboardStateAction, handleClose]);\r\n\r\n const setAsDefault = useCallback(async () => {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetSavingDashboard, payload: true });\r\n try {\r\n const response = await setDashboardAsDefault(enqueueSnackbar, dashboardId);\r\n if (response) {\r\n enqueueSnackbar(`Successfully set the queue dashboard [${dashboardName}] as default`, { variant: 'success' });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetDashboardAsDefault });\r\n dispatch(setDefaultQueueDashboardSuccess(dashboardId));\r\n handleClose();\r\n }\r\n } finally {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetSavingDashboard, payload: false });\r\n }\r\n }, [dispatchDashboardStateAction, dashboardId, dashboardName]);\r\n\r\n const saveEditModeChanges = async () => {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetSavingDashboard, payload: true });\r\n try {\r\n const savedDashboard = await saveUpdatedDashboard(enqueueSnackbar, dashboardId, {\r\n name: queueDashboardName,\r\n queueIdsFilter,\r\n selectedQueueId,\r\n dateTimeFilter,\r\n widgets: widgets.map((w) => {\r\n const { id, name, type, layout, metrics, config, ...rest } = w;\r\n return {\r\n id: id && typeof id === 'number' ? id : 0,\r\n name: type === WidgetTypes.QueueMetrics ? 'Queue Metrics' : name,\r\n type,\r\n layout: JSON.stringify(layout),\r\n metrics: metrics?.map((f, index) => {\r\n const { id, metric, calculationType, displayAs } = f;\r\n return {\r\n id: id && typeof id === 'number' ? id : 0,\r\n metric,\r\n calculationType,\r\n displayAs,\r\n displayOrder: index\r\n };\r\n }),\r\n config,\r\n ...rest\r\n };\r\n })\r\n });\r\n if (savedDashboard) {\r\n // Successful\r\n enqueueSnackbar(`Successfully saved changes for [${dashboardName}] queue dashboard`, { variant: 'success' });\r\n\r\n const oldDashboard = {\r\n id: dashboardId,\r\n name: dashboardName,\r\n dataSource,\r\n queueIdsFilter,\r\n selectedQueueId,\r\n isDefault,\r\n widgets,\r\n dateTimeFilter\r\n };\r\n\r\n // Order the widget metrics\r\n savedDashboard.widgets.forEach((widget) => {\r\n widget.metrics.sort((metric1, metric2) => metric1.displayOrder - metric2.displayOrder);\r\n });\r\n\r\n const newDashboard = {\r\n id: savedDashboard.id,\r\n name: savedDashboard.name,\r\n dataSource: savedDashboard.dataSource,\r\n queueIdsFilter: savedDashboard.queueIdsFilter,\r\n selectedQueueId: savedDashboard.selectedQueueId,\r\n isDefault: savedDashboard.isDefault,\r\n widgets: savedDashboard.widgets,\r\n dateTimeFilter: savedDashboard.dateTimeFilter\r\n };\r\n\r\n if (!isEqual(newDashboard, oldDashboard)) {\r\n // Set the updated dashboard\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SaveEditModeChanges, payload: savedDashboard });\r\n }\r\n\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetEditMode, payload: false });\r\n\r\n dispatch(\r\n updateDashboardName({\r\n id: dashboardId,\r\n name: queueDashboardName\r\n })\r\n );\r\n } else {\r\n enqueueSnackbar(`Failed to save changes for [${dashboardName}] queue dashboard`, { variant: 'error' });\r\n }\r\n } finally {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetSavingDashboard, payload: false });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: false });\r\n }\r\n };\r\n\r\n const onDashboardDeleteClick = useCallback(() => {\r\n setDeleteValidationMsg(`Are you sure you want to delete [${dashboardName}] queue dashboard? This action cannot be undone`);\r\n setShowDeleteConfirmationDlg(true);\r\n }, [dashboardName]);\r\n\r\n const handleDashboardDelete = useCallback(\r\n async (deleteDashboard) => {\r\n // Close the Dialog and Menu list\r\n setShowDeleteConfirmationDlg(false);\r\n handleClose();\r\n if (deleteDashboard) {\r\n try {\r\n const response = await deleteQueueDashboard(dashboardId);\r\n const defaultDashboard = queueDashboards.find((dashboard) => dashboard.isDefault && dashboard.id !== dashboardId);\r\n const nextDashboard = defaultDashboard || queueDashboards.find((dashboard) => dashboard.id !== dashboardId);\r\n if (response) {\r\n dispatch(deleteDashboardSuccess(dashboardId));\r\n // Reload the dashboard list and navigate to the next dashboard\r\n dispatch(loadQueueDashboardList(enqueueSnackbar));\r\n navigate(`/dashboard/queue-dashboard/${nextDashboard?.id ?? 0}`);\r\n enqueueSnackbar(`Successfully deleted [${dashboardName}] queue dashboard`, { variant: 'success' });\r\n } else {\r\n enqueueSnackbar(`Failed to delete [${dashboardName}] queue dashboard`, { variant: 'success' });\r\n }\r\n } catch {\r\n enqueueSnackbar(`Failed to delete [${dashboardName}] queue dashboard`, { variant: 'success' });\r\n }\r\n }\r\n // Reset the delete message\r\n setDeleteValidationMsg(null);\r\n },\r\n [queueDashboards, dashboardId, dashboardName]\r\n );\r\n\r\n const discardEditModeChanges = useCallback(() => {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.DiscardEditModeChanges });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetEditMode, payload: false });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: false });\r\n if (dashboardName !== queueDashboardName) {\r\n setQueueDashboardName(dashboardName);\r\n }\r\n }, [dispatchDashboardStateAction, dashboardName, queueDashboardName]);\r\n\r\n const toggleQueueFilterSelectionDialog = useCallback(() => {\r\n setIsQueueFilterSelectionDialogOpen((open) => !open);\r\n handleClose();\r\n }, [handleClose]);\r\n\r\n const toggleEditDateRangeDialogOpen = useCallback(() => {\r\n setIsEditDateRangeDialogOpen((open) => !open);\r\n handleClose();\r\n }, [handleClose]);\r\n\r\n const onUserNavigationCancel = useCallback(() => {\r\n cancelNavigation();\r\n }, []);\r\n\r\n const onUserNavigationConfirm = useCallback(() => {\r\n // Discard the changes before leaving the current page\r\n discardEditModeChanges();\r\n // Navigate to the intended page\r\n confirmNavigation();\r\n }, [discardEditModeChanges]);\r\n\r\n return (\r\n \r\n {isInEditMode ? (\r\n {\r\n setQueueDashboardName(e.target.value);\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n }}\r\n error={!!error}\r\n helperText={error}\r\n />\r\n ) : (\r\n
\r\n

\r\n {dashboardName}\r\n

\r\n {isDefault && }\r\n
\r\n )}\r\n {isInEditMode ? (\r\n
\r\n \r\n \r\n \r\n {isQueueFilterSelectionDialogOpen && (\r\n \r\n )}\r\n \r\n \r\n Save\r\n \r\n \r\n {hasUnsavedChanges ? 'Discard' : 'Cancel'}\r\n \r\n
\r\n ) : (\r\n
\r\n {dateTimeRange && dateTimeRange.start && dateTimeRange.end && (\r\n

\r\n {moment(dateTimeRange.start).format(defaultDateRangeFormat)} -{' '}\r\n {moment(dateTimeRange.end).format(defaultDateRangeFormat)}\r\n

\r\n )}\r\n \r\n \r\n \r\n 0 ? `Reload in ${reloadCooldownTicks}s` : 'Reload'}>\r\n \r\n 0} onClick={handleReload}>\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Edit Dashboard\r\n \r\n {!isDefault && (\r\n \r\n \r\n Set as Default Dashboard\r\n \r\n )}\r\n \r\n \r\n Delete Dashboard\r\n \r\n \r\n {isEditDateRangeDialogOpen && (\r\n \r\n )}\r\n handleDashboardDelete(true)}\r\n handleNo={() => handleDashboardDelete(false)}\r\n />\r\n
\r\n
\r\n )}\r\n onUserNavigationConfirm()}\r\n handleNo={() => onUserNavigationCancel()}\r\n />\r\n \r\n );\r\n}\r\n","import { useState, useContext, useEffect, useCallback } from 'react';\r\n\r\nimport Card from '@mui/material/Card';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { sortBy } from 'lodash';\r\nimport { IconMenu2 } from '@tabler/icons';\r\nimport { QueueDashboardEvents, StatusColor, RefreshIntervalMs } from '../constants';\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport { useSnackbar } from 'notistack';\r\nimport TitleBar from '../TitleBar/TitleBar';\r\nimport {\r\n getDateTimeWithDstAdjustment,\r\n getQueueDashboardRefreshDataEventObj,\r\n getRefreshingWidgetDataAnimateIcon\r\n} from '../Utils/queueDashboardUtils';\r\nimport { useTheme } from '@emotion/react';\r\nimport { getAllMetricsForQueue, getFilteredQueuesMetricsSummary, updateSelectedQueueId } from '../Utils/queueDashboardApiCallsUtil';\r\nimport { Divider } from '@mui/material';\r\n\r\nexport default function QueueListSelector({ children, height }) {\r\n const [drawerOpen, setDrawerOpen] = useState(false);\r\n const [loadingFilteredQueueSummary, setLoadingFilteredQueueSummary] = useState(false);\r\n const [refreshing, setRefreshing] = useState(false);\r\n const { isInEditMode, dashboardId, dataSource, filteredQueuesMetricsSummary, selectedQueueId, queueIdsFilter, dateTimeFilter } =\r\n useContext(DashboardStateContext);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const [needsRefresh, setNeedsRefresh] = useState(false);\r\n const [savingSelectedQueueId, setSavingSelectedQueueId] = useState(false);\r\n const theme = useTheme();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const selectedBorderColor = theme.palette.mode === 'dark' ? '#ffffff' : '#2b314e';\r\n\r\n const setSelectedQueueId = useCallback(\r\n async (queueId) => {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetSelectedQueueId, payload: queueId });\r\n\r\n // Doing this after the dashboard state is set to allow user to see data change\r\n // Also, no need to do this in edit mode or when user changes queues while the previous is still being saved\r\n if (!isInEditMode && !savingSelectedQueueId) {\r\n setSavingSelectedQueueId(true);\r\n const successful = await updateSelectedQueueId(dashboardId, queueId);\r\n if (!successful) {\r\n // NOTE: No need to notify the user if this fails\r\n console.log('Failed to update the selected queue Id in the database');\r\n }\r\n setSavingSelectedQueueId(false);\r\n }\r\n },\r\n [dispatchDashboardStateAction, dashboardId, isInEditMode, savingSelectedQueueId]\r\n );\r\n\r\n // Setup the interval to refresh widget data\r\n useEffect(() => {\r\n // If we are in edit Mode or the selected queueId is undefined, don't set the refresh interval\r\n if (isInEditMode || !selectedQueueId || !selectedQueueId.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const triggerRefresh = () => {\r\n const event = getQueueDashboardRefreshDataEventObj();\r\n document.body.dispatchEvent(event);\r\n };\r\n\r\n const intervalId = setInterval(triggerRefresh, RefreshIntervalMs);\r\n\r\n // cleanup interval\r\n return () => {\r\n clearInterval(intervalId);\r\n };\r\n }, [isInEditMode, selectedQueueId]);\r\n\r\n // Subscribe to queue dashboard events\r\n useEffect(() => {\r\n const handler = (e) => {\r\n setNeedsRefresh(true);\r\n };\r\n document.body.addEventListener(QueueDashboardEvents.RefreshWidgetData, handler);\r\n return () => {\r\n document.body.removeEventListener(QueueDashboardEvents.RefreshWidgetData, handler);\r\n };\r\n }, []);\r\n\r\n // load filteredQueues metrics summary\r\n const loadQueuesSummary = useCallback(\r\n async (inputDataSource, inputQueueIdsFilter, inputDateTimeFilter, isRefresh = false) => {\r\n const summary = await getFilteredQueuesMetricsSummary(\r\n enqueueSnackbar,\r\n inputDataSource,\r\n inputQueueIdsFilter,\r\n getDateTimeWithDstAdjustment(inputDateTimeFilter)\r\n );\r\n if (summary) {\r\n const sortedSummary = sortBy(summary, [(queue) => queue?.displayName?.toLowerCase()]);\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetFilteredQueuesMetricsSummary, payload: sortedSummary });\r\n } else if (isRefresh) {\r\n enqueueSnackbar(`Failed to refresh queues summary data`, { variant: 'error' });\r\n } else {\r\n // TODO: Handle error state for this\r\n enqueueSnackbar(`Failed to ${isRefresh ? 'refresh' : 'load'} queues summary data`, { variant: 'error' });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetFilteredQueuesMetricsSummary, payload: [] });\r\n }\r\n },\r\n [dispatchDashboardStateAction]\r\n );\r\n\r\n const loadMetricsData = useCallback(\r\n async (inputDataSource, queueId, inputDateTimeFilter, isRefresh = false) => {\r\n const metrics = await getAllMetricsForQueue(\r\n enqueueSnackbar,\r\n inputDataSource,\r\n queueId,\r\n getDateTimeWithDstAdjustment(inputDateTimeFilter)\r\n );\r\n if (metrics?.data) {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetQueueMetrics, payload: metrics?.data?.queueMetrics ?? {} });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetAgentMetricsList, payload: metrics?.data?.agents ?? [] });\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.SetDashboardDateTimeRange,\r\n payload: metrics?.data?.dateTimeRange\r\n });\r\n } else if (isRefresh) {\r\n enqueueSnackbar('Failed to refresh queue metrics data', { variant: 'error' });\r\n } else {\r\n if (metrics?.status === 404) {\r\n enqueueSnackbar('Selected Queue not found. Update Selected queue filter', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Failed to load queue metrics data', { variant: 'error' });\r\n }\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetQueueMetrics, payload: metrics?.data?.queueMetrics ?? {} });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetAgentMetricsList, payload: metrics?.data?.agents ?? [] });\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.SetDashboardDateTimeRange,\r\n payload: metrics?.data?.dateTimeRange\r\n });\r\n }\r\n },\r\n [dispatchDashboardStateAction]\r\n );\r\n\r\n useEffect(() => {\r\n async function refreshData() {\r\n setRefreshing(true);\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetRefreshingQueueAgentMetrics, payload: true });\r\n\r\n try {\r\n await Promise.all([\r\n loadQueuesSummary(dataSource, queueIdsFilter, dateTimeFilter, true),\r\n loadMetricsData(dataSource, selectedQueueId, dateTimeFilter, true)\r\n ]);\r\n } catch (ex) {\r\n console.log('Failed to refresh data. Error: ', ex);\r\n }\r\n\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetRefreshingQueueAgentMetrics, payload: false });\r\n setRefreshing(false);\r\n setNeedsRefresh(false);\r\n }\r\n if (!isInEditMode && needsRefresh) {\r\n refreshData();\r\n }\r\n }, [\r\n dispatchDashboardStateAction,\r\n loadQueuesSummary,\r\n isInEditMode,\r\n needsRefresh,\r\n dataSource,\r\n queueIdsFilter,\r\n selectedQueueId,\r\n dateTimeFilter\r\n ]);\r\n\r\n // Load the summary for the filtered queues\r\n useEffect(() => {\r\n async function onLoad() {\r\n setLoadingFilteredQueueSummary(true);\r\n await loadQueuesSummary(dataSource, queueIdsFilter, dateTimeFilter);\r\n setLoadingFilteredQueueSummary(false);\r\n }\r\n // TODO: Check why is this being called when the user switches to a different dashboard\r\n if (queueIdsFilter.length > 0) {\r\n onLoad();\r\n } else {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetFilteredQueuesMetricsSummary, payload: [] });\r\n }\r\n }, [dispatchDashboardStateAction, loadQueuesSummary, dataSource, queueIdsFilter, dateTimeFilter]);\r\n\r\n useEffect(() => {\r\n // If the earlier selected queue was filtered out, set the selected queue to be the first queue\r\n if (\r\n filteredQueuesMetricsSummary.length > 0 &&\r\n filteredQueuesMetricsSummary.find((q) => q.queueId === selectedQueueId) === undefined\r\n ) {\r\n setSelectedQueueId(filteredQueuesMetricsSummary[0].queueId);\r\n }\r\n }, [filteredQueuesMetricsSummary, setSelectedQueueId]);\r\n\r\n useEffect(() => {\r\n async function onLoad() {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetLoadingQueueAgentMetrics, payload: true });\r\n\r\n // Load the data from the service\r\n await loadMetricsData(dataSource, selectedQueueId, dateTimeFilter);\r\n\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetLoadingQueueAgentMetrics, payload: false });\r\n }\r\n if (\r\n !loadingFilteredQueueSummary &&\r\n !refreshing &&\r\n dataSource &&\r\n selectedQueueId &&\r\n filteredQueuesMetricsSummary.length > 0 &&\r\n filteredQueuesMetricsSummary.find((q) => q.queueId === selectedQueueId) !== undefined\r\n ) {\r\n onLoad();\r\n }\r\n\r\n // NOTE: refreshing is not added in the dependency array\r\n }, [loadMetricsData, loadingFilteredQueueSummary, filteredQueuesMetricsSummary, dataSource, selectedQueueId, dateTimeFilter]);\r\n\r\n const toggleDrawer = () => {\r\n setDrawerOpen((open) => !open);\r\n };\r\n\r\n const selectedQueue = filteredQueuesMetricsSummary.find((q) => q.queueId === selectedQueueId);\r\n let error = null;\r\n if (loadingFilteredQueueSummary) {\r\n error = null;\r\n } else if (!queueIdsFilter || !queueIdsFilter.length) {\r\n error = 'Queues Filter not selected. Edit the Dashboard to select the queues to be displayed';\r\n } else if (!filteredQueuesMetricsSummary || !filteredQueuesMetricsSummary.length) {\r\n error = 'Selected Queues Filter is no longer valid. Edit the Dashboard to select the filter again';\r\n } else if (!selectedQueue) {\r\n error = 'You no longer have access to the previously selected queue. Select a different queue';\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 {selectedQueue?.displayName}\r\n

\r\n \r\n
\r\n
\r\n {drawerOpen && (\r\n \r\n \r\n

\r\n Queues\r\n

\r\n {!isInEditMode &&\r\n (refreshing || loadingFilteredQueueSummary) &&\r\n getRefreshingWidgetDataAnimateIcon('queue-selector')}\r\n
\r\n {filteredQueuesMetricsSummary.map((item) => (\r\n <>\r\n setSelectedQueueId(item.queueId)}\r\n >\r\n

{item.displayName}

\r\n
\r\n
\r\n

\r\n {item.serviceLevelPercent === 'NA' ? 'N/A' : item.serviceLevelPercent}\r\n {item.serviceLevelPercent !== 'NA' && '%'}\r\n

\r\n

Service Level

\r\n
\r\n
\r\n

{item.totalCalls}

\r\n

Total Calls

\r\n
\r\n
\r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n
\r\n {error ? (\r\n
\r\n {error}\r\n
\r\n ) : (\r\n children\r\n )}\r\n
\r\n \r\n \r\n );\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport TextField from '@mui/material/TextField';\r\nimport Button from '@mui/material/Button';\r\nimport Typography from '@mui/material/Typography';\r\nimport Tooltip, { tooltipClasses } from '@mui/material/Tooltip';\r\nimport { IconAlertTriangle, IconGripVertical, IconTrash } from '@tabler/icons';\r\nimport { v4 as uuidV4 } from 'uuid';\r\n\r\nimport { MetricCardConfig } from '../constants';\r\nimport ReactGridLayout from 'react-grid-layout';\r\nimport { useTheme, styled } from '@mui/material/styles';\r\n\r\n// [metric]: {\r\n// displayName: ''\r\n// allowedCalculationMethods: {\r\n// [calculation]: {\r\n// displayName: ''\r\n// }\r\n// }\r\n// }\r\n\r\nconst HtmlTooltip = styled(({ className, ...props }) => )(({ theme }) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\r\n fontSize: theme.typography.pxToRem(12),\r\n paddingRight: 16\r\n }\r\n}));\r\n\r\nexport default function MetricsSubsetGrid({\r\n fieldsConfig,\r\n setFieldsConfig,\r\n allowedMetricsConfig,\r\n maxFieldCount,\r\n isReorderable = false,\r\n setHasError,\r\n disabled = false\r\n}) {\r\n const [layout, setLayout] = useState(\r\n fieldsConfig.map((item, index) => ({\r\n x: 0,\r\n y: index,\r\n w: 1,\r\n h: 1,\r\n i: item.id,\r\n isResizable: false\r\n }))\r\n );\r\n const theme = useTheme();\r\n\r\n const [metricsErrorCollection, setMetricsErrorCollection] = useState({});\r\n\r\n const hasDuplicateDisplayAs = (newDisplayAs, columId) => {\r\n // Check if the new displayAs exists in any other row (excluding the current one)\r\n return fieldsConfig.some((column) => {\r\n return column.displayAs === newDisplayAs && column.id !== columId;\r\n });\r\n };\r\n\r\n const addNewColumnToConfig = () => {\r\n if (maxFieldCount && fieldsConfig.length === maxFieldCount) {\r\n return;\r\n }\r\n setFieldsConfig((c) => [\r\n ...c,\r\n {\r\n id: `temp-id-${uuidV4()}`,\r\n metric: '',\r\n calculationType: '',\r\n displayAs: '',\r\n displayOrder: c.length - 1\r\n }\r\n ]);\r\n };\r\n\r\n useEffect(() => {\r\n if (fieldsConfig.length === 0) {\r\n setHasError(true);\r\n return;\r\n }\r\n\r\n const invalidFieldIndexes = fieldsConfig\r\n .map((item) => {\r\n const errors = [];\r\n if (item.displayAs.length > 50) {\r\n errors.push('Display As can have atmost 50 characters');\r\n }\r\n if (item.displayAs.length > 0 && hasDuplicateDisplayAs(item.displayAs, item.id)) {\r\n errors.push('Display As should have unique value');\r\n }\r\n if (\r\n !item.metric ||\r\n !item.calculationType ||\r\n !item.displayAs ||\r\n !item.displayAs.trim() || // Check if displayAs exists before trimming\r\n !Object.keys(allowedMetricsConfig[item.metric]?.allowedCalculationMethods || {})?.includes(item.calculationType)\r\n ) {\r\n errors.push('All the fields must be filled');\r\n }\r\n return errors.length > 0 ? { id: item.id, errors } : null;\r\n })\r\n .filter((item) => item !== null)\r\n .reduce((acc, cur) => {\r\n const key = cur.id;\r\n acc[key] = cur.errors;\r\n return acc;\r\n }, {});\r\n\r\n if (Object.keys(invalidFieldIndexes).length > 0) {\r\n setMetricsErrorCollection(invalidFieldIndexes);\r\n setHasError(true);\r\n } else {\r\n setMetricsErrorCollection({});\r\n setHasError(false);\r\n }\r\n }, [fieldsConfig]);\r\n\r\n const updatefieldsConfig = (index, field, value) => {\r\n const newFieldsConfig = JSON.parse(JSON.stringify(fieldsConfig));\r\n newFieldsConfig[index][field] = value;\r\n if (field === 'metric') {\r\n const selectedMetric = value;\r\n const allowedCalculations = Object.keys(allowedMetricsConfig[selectedMetric]?.allowedCalculationMethods);\r\n const defaultCalculation = allowedCalculations.find(\r\n (calculation) => !fieldsConfig.some((field) => field.metric === selectedMetric && field.calculationType === calculation)\r\n );\r\n newFieldsConfig[index].calculationType = defaultCalculation;\r\n }\r\n if (field === 'metric' || field === 'calculationType') {\r\n const { metric, calculationType } = newFieldsConfig[index];\r\n newFieldsConfig[index].displayAs =\r\n allowedMetricsConfig[metric]?.allowedCalculationMethods?.[calculationType]?.shortName ?? MetricCardConfig[metric]?.label;\r\n }\r\n setFieldsConfig(newFieldsConfig);\r\n };\r\n\r\n const deleteColumn = (index) => {\r\n const newFieldsConfig = JSON.parse(JSON.stringify(fieldsConfig));\r\n newFieldsConfig.splice(index, 1);\r\n setFieldsConfig(newFieldsConfig);\r\n };\r\n\r\n const reorderRows = (layoutArray) => {\r\n const newFieldsConfig = fieldsConfig.toSorted((field1, field2) => {\r\n const field1IndexInLayout = layoutArray.findIndex((layoutObj) => layoutObj.i === field1.id?.toString());\r\n const field2IndexInLayout = layoutArray.findIndex((layoutObj) => layoutObj.i === field2.id?.toString());\r\n return layoutArray[field1IndexInLayout].y - layoutArray[field2IndexInLayout].y;\r\n });\r\n setFieldsConfig(newFieldsConfig);\r\n setLayout(layoutArray.map((item) => ({ ...item, isResizable: false })));\r\n };\r\n\r\n if (!fieldsConfig || !Array.isArray(fieldsConfig)) {\r\n return
No data for the selected date range and filters
;\r\n }\r\n\r\n return (\r\n
\r\n {maxFieldCount !== 1 && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n

\r\n Metric\r\n

\r\n
\r\n
\r\n

\r\n Calculation\r\n

\r\n
\r\n
\r\n

\r\n Display As\r\n

\r\n
\r\n
\r\n {fieldsConfig.length === 0 ? (\r\n
Select at least one metric to save
\r\n ) : (\r\n \r\n {fieldsConfig.map((column, index) => {\r\n return (\r\n
\r\n
\r\n
\r\n updatefieldsConfig(index, 'metric', event.target.value)}\r\n error={!fieldsConfig[index].metric}\r\n >\r\n {Object.entries(allowedMetricsConfig || {}).map(([metricKey, metricValue], metricIndex) => {\r\n // Optimize it\r\n const associatedCalculations = Object.keys(metricValue.allowedCalculationMethods);\r\n // Check if all associated calculations for the current metric are already selected\r\n const allCalculationsSelected = associatedCalculations.every((calculation) =>\r\n fieldsConfig.some(\r\n (field) => field.metric === metricKey && field.calculationType === calculation\r\n )\r\n );\r\n return (\r\n \r\n {metricValue.displayName}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n updatefieldsConfig(index, 'calculationType', event.target.value)}\r\n error={\r\n !fieldsConfig[index].calculationType ||\r\n !Object.keys(\r\n allowedMetricsConfig[column.metric]?.allowedCalculationMethods || {}\r\n )?.includes(fieldsConfig[index].calculationType)\r\n }\r\n >\r\n {!!allowedMetricsConfig[column.metric]?.allowedCalculationMethods &&\r\n Object.keys(allowedMetricsConfig[column.metric]?.allowedCalculationMethods).map(\r\n (item) => (\r\n \r\n field.metric === column.metric && field.calculationType === item\r\n )}\r\n key={item}\r\n value={item}\r\n >\r\n {\r\n allowedMetricsConfig[column.metric]?.allowedCalculationMethods?.[item]\r\n ?.displayName\r\n }\r\n \r\n )\r\n )}\r\n \r\n
\r\n
\r\n updatefieldsConfig(index, 'displayAs', event.target.value)}\r\n error={\r\n !fieldsConfig[index].displayAs.trim() ||\r\n fieldsConfig[index]?.displayAs.length > 50 ||\r\n hasDuplicateDisplayAs(fieldsConfig[index].displayAs, column.id)\r\n }\r\n />\r\n
\r\n {maxFieldCount !== 1 && (\r\n <>\r\n deleteColumn(index)}>\r\n \r\n \r\n {isReorderable && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n {metricsErrorCollection[column.id]?.map((errorItem, errorIndex) => (\r\n
  • \r\n \r\n {errorItem}\r\n \r\n
  • \r\n ))}\r\n \r\n }\r\n >\r\n {metricsErrorCollection && metricsErrorCollection[column.id] && (\r\n \r\n \r\n \r\n )}\r\n \r\n
    \r\n {metricsErrorCollection && metricsErrorCollection[column.id] && (\r\n
    \r\n
      \r\n {metricsErrorCollection[column.id]?.map((errorItem, errorIndex) => (\r\n
    • \r\n \r\n {errorItem}\r\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","import React, { useContext, useState } from 'react';\r\n\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\nimport MetricsSubsetGrid from '../MetricsSubsetGrid/MetricsSubsetGrid';\r\nimport { useSelector } from 'store';\r\nimport { DashboardStateActions, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport { FormControl, FormControlLabel, InputLabel, MenuItem, Radio, RadioGroup, Select, FormHelperText } from '@mui/material';\r\n\r\nexport default function EditAgentMetricsTableDialog({ widgetId, columns, isEditTableDialogOpen, toggleEditTableDialog, config }) {\r\n const { allowedAgentTableWidgetConfig } = useSelector((state) => state.queueDashboard);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const [columnConfig, setColumnConfig] = useState(columns);\r\n const [hasError, setHasError] = useState(false);\r\n\r\n const [sortOrder] = config?.sortOrder != null ? config?.sortOrder : [];\r\n const [sortByColumn, setSortByColumn] = useState(sortOrder?.columnName ?? 'Name');\r\n const [isSortOrderAscending, setIsSortOrderAscending] = useState(sortOrder?.ascending ?? true);\r\n\r\n const sortOptions = ['Name', ...columnConfig.map((item) => item.displayAs)];\r\n const hasSortingError = !sortOptions?.includes(sortByColumn);\r\n\r\n const saveColumnConfig = () => {\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.UpdateWidget,\r\n payload: {\r\n widgetId,\r\n config: {\r\n ...config,\r\n sortOrder: [\r\n {\r\n columnName: sortByColumn,\r\n ascending: isSortOrderAscending\r\n }\r\n ]\r\n },\r\n metrics: columnConfig.map((column, index) => ({ ...column, displayOrder: index }))\r\n }\r\n });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n toggleEditTableDialog();\r\n };\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n Edit Widget\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n Sort By\r\n \r\n setSortByColumn(e.target.value)}\r\n label=\"Sort By\"\r\n error={hasSortingError}\r\n >\r\n {sortOptions?.map((item) => (\r\n \r\n {item}\r\n \r\n ))}\r\n \r\n {hasSortingError && Select a valid Sort By value}\r\n \r\n\r\n \r\n setIsSortOrderAscending(v === 'true')}\r\n >\r\n } label=\"Ascending\" />\r\n } label=\"Descending\" />\r\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","const AgentTableNameColumnHeader = 'Name';\r\n\r\nexport default AgentTableNameColumnHeader;\r\n","import { useContext, useState } from 'react';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { IconDotsVertical, IconEdit, IconTrash } from '@tabler/icons';\r\nimport { DashboardStateActions, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\n\r\nexport default function EditWidgetMenu({ onEditClick, widgetId }) {\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n\r\n const handleMenuBtnClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const deleteWidget = () => {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.DeleteWidget, payload: { id: widgetId } });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {\r\n onEditClick();\r\n handleClose();\r\n }}\r\n >\r\n \r\n Edit Widget\r\n \r\n {\r\n deleteWidget();\r\n handleClose();\r\n }}\r\n >\r\n \r\n Delete Widget\r\n \r\n \r\n \r\n );\r\n}\r\n","import { Grid, Dialog, DialogTitle, Divider, Typography, useTheme } from '@mui/material';\r\nimport { IconX } from '@tabler/icons';\r\nimport CustomStore from 'devextreme/data/custom_store';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { axiosMSTeamsCQService } from 'utils/axios';\r\nimport Slide from '@mui/material/Slide';\r\nimport { DashboardStateContext } from '../context/DashboardStateContext';\r\nimport React, { useContext, useMemo } from 'react';\r\nimport DataGrid, { Scrolling, Grouping, Pager, Paging, Sorting } from 'devextreme-react/data-grid';\r\nimport moment from 'moment';\r\nimport { useSnackbar } from 'notistack';\r\nimport { defaultDateRangeFormat } from '../constants';\r\nimport { getDateTimeWithDstAdjustment } from '../Utils/queueDashboardUtils';\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nconst MetricDetailsDialog = ({ apiUrl, open, handleClose, metricFilter, agentId, title, dataSize }) => {\r\n const { selectedQueueId, dateTimeFilter, dateTimeRange } = useContext(DashboardStateContext);\r\n const theme = useTheme();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const allowedPageSizes = [250, 500, 1000];\r\n const noDataText = 'No Data';\r\n\r\n function handleErrors(response) {\r\n if (!response?.data?.success) {\r\n throw Error(response);\r\n }\r\n return response;\r\n }\r\n const dataSource = useMemo(\r\n () =>\r\n new CustomStore({\r\n key: 'Id',\r\n load: (loadOptions) => {\r\n console.log('load options', loadOptions);\r\n\r\n let offset = 0;\r\n let count = 0;\r\n if (loadOptions.skip) {\r\n offset = loadOptions.skip;\r\n }\r\n if (loadOptions.take) {\r\n count = loadOptions.take;\r\n } else {\r\n count = 1000;\r\n }\r\n\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json'\r\n };\r\n\r\n const body = JSON.stringify({\r\n offset,\r\n count,\r\n queueId: selectedQueueId,\r\n dateTimeFilter: getDateTimeWithDstAdjustment(dateTimeFilter),\r\n metricFilter,\r\n agentId\r\n });\r\n\r\n return axiosMSTeamsCQService\r\n .post(apiUrl, body, {\r\n headers\r\n })\r\n .then(handleErrors)\r\n\r\n .then((response) => response.data)\r\n .then((response) => {\r\n return {\r\n data: response?.data,\r\n totalCount: parseInt(dataSize, 10)\r\n };\r\n })\r\n .catch((e) => {\r\n console.log('Network error', e);\r\n enqueueSnackbar('Failed to Load', { variant: 'error' });\r\n throw Error('error in fetching data');\r\n });\r\n }\r\n }),\r\n []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {title}\r\n\r\n \r\n \r\n {moment(dateTimeRange?.start)?.format(defaultDateRangeFormat)}\r\n \r\n \r\n {' '}\r\n -{' '}\r\n \r\n \r\n {moment(dateTimeRange?.end)?.format(defaultDateRangeFormat)}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {parseInt(dataSize, 10) === 0 ? (\r\n
    {noDataText}
    \r\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 MetricDetailsDialog;\r\n","import React, { useState, useContext, useMemo, useEffect } from 'react';\r\nimport Table from '@mui/material/Table';\r\nimport TableBody from '@mui/material/TableBody';\r\nimport TableCell from '@mui/material/TableCell';\r\nimport TableContainer from '@mui/material/TableContainer';\r\nimport TableHead from '@mui/material/TableHead';\r\nimport TableRow from '@mui/material/TableRow';\r\nimport TableSortLabel from '@mui/material/TableSortLabel';\r\n\r\nimport { Status, StatusColor } from '../constants';\r\nimport { DashboardStateContext } from '../context/DashboardStateContext';\r\nimport EditAgentMetricsTableDialog from './EditAgentMetricsTableDialog';\r\nimport AgentTableNameColumnHeader from './constants';\r\nimport EditWidgetMenu from '../EditWidgetMenu/EditWidgetMenu';\r\nimport { getRefreshingWidgetDataAnimateIcon } from '../Utils/queueDashboardUtils';\r\nimport { useTheme } from '@emotion/react';\r\nimport { convertToSeconds } from 'utils/QueueConfigurationFormatAndValidation';\r\nimport MetricDetailsDialog from '../MetricDetailsDialog/MetricDetailsDialog';\r\nimport { useSelector } from 'store';\r\nimport { visuallyHidden } from '@mui/utils';\r\nimport { Box } from '@mui/material';\r\n\r\nexport default function AgentMetricsTable({ widget }) {\r\n const [isEditTableDialogOpen, setIsEditTableDialogOpen] = useState(false);\r\n const [detailsOpen, setDetailsOpen] = React.useState(false);\r\n const [selectedMetric, setSelectedMetric] = React.useState(null);\r\n const [selectedAgent, setSelectedAgent] = React.useState(null);\r\n const [agentNameClick, setAgentNameClick] = React.useState(false);\r\n const theme = useTheme();\r\n const { allowedAgentTableWidgetConfig } = useSelector((state) => state.queueDashboard);\r\n const [sortDetail] = widget.config?.sortOrder !== undefined ? widget.config?.sortOrder : [{}];\r\n const [sortOrder, setSortOrder] = useState(sortDetail);\r\n\r\n const apiUrl = '/api/DetailedDataAnalytics/getAgentDataDetailsForMetric';\r\n const defaultCellBgColor = theme.palette.mode === 'dark' ? '#212946' : '#ffffff';\r\n const defaultCellFontColor = theme.palette.mode === 'dark' ? '#a0a9c0' : '#5c6e83';\r\n const allowedMetrics = allowedAgentTableWidgetConfig?.allowedMetrics;\r\n const { agentMetrics, isInEditMode, savingDashboard, loadingQueueAndAgentMetrics, refreshingQueueAndAgentMetrics } =\r\n useContext(DashboardStateContext);\r\n\r\n const toggleEditTableDialog = () => {\r\n setIsEditTableDialogOpen((open) => !open);\r\n };\r\n\r\n useEffect(() => {\r\n // set the sort order when sort is updated from the edit agent metrics dialog\r\n const [updatedSortDetail] = widget.config?.sortOrder !== undefined ? widget.config?.sortOrder : [{}];\r\n setSortOrder(updatedSortDetail);\r\n }, [widget.config?.sortOrder]);\r\n\r\n const getSortOrder = () => (sortOrder.ascending ? 'asc' : 'desc');\r\n const sortedAgentMetricsArray = useMemo(() => {\r\n const sortByColumnName = sortOrder?.columnName;\r\n const sortBy = widget.metrics.find((item) => item.displayAs === sortByColumnName);\r\n\r\n if (sortByColumnName === AgentTableNameColumnHeader || !sortBy) {\r\n const sortedAgentMetrics = agentMetrics.toSorted((itemA, itemB) => {\r\n if (itemA.name < itemB.name) return -1;\r\n if (itemA.name > itemB.name) return 1;\r\n return 0;\r\n });\r\n return sortOrder?.ascending ? sortedAgentMetrics : sortedAgentMetrics.reverse();\r\n }\r\n const sortByColumnMetric = sortBy?.metric;\r\n const sortByColumnCalculationType = sortBy?.calculationType;\r\n\r\n const sortedAgentMetrics = agentMetrics.sort((itemA, itemB) => {\r\n const metricValueA = itemA.metrics[sortByColumnMetric][sortByColumnCalculationType]?.value;\r\n const metricValueB = itemB.metrics[sortByColumnMetric][sortByColumnCalculationType]?.value;\r\n if (metricValueA.includes(':') && metricValueB.includes(':')) {\r\n return convertToSeconds(metricValueA) - convertToSeconds(metricValueB);\r\n }\r\n return parseFloat(metricValueA, 10) - parseFloat(metricValueB, 10);\r\n });\r\n\r\n return sortOrder?.ascending ? sortedAgentMetrics : sortedAgentMetrics.reverse();\r\n }, [agentMetrics, sortOrder?.columnName, sortOrder?.ascending]);\r\n\r\n const handleDetailsDialogClose = () => {\r\n setDetailsOpen(false);\r\n };\r\n\r\n const handleAgentCellClick = (isAgentName, agent, data) => {\r\n setSelectedAgent(agent);\r\n setSelectedMetric(data);\r\n setAgentNameClick(isAgentName);\r\n setDetailsOpen(true);\r\n };\r\n\r\n const handleLiveSort = (columnName, event) => {\r\n const isAsc = sortOrder.columnName === columnName && sortOrder?.ascending === true;\r\n setSortOrder({\r\n columnName,\r\n ascending: !isAsc\r\n });\r\n };\r\n return (\r\n <>\r\n
    \r\n

    \r\n Agents\r\n

    \r\n {!isInEditMode && refreshingQueueAndAgentMetrics && getRefreshingWidgetDataAnimateIcon(widget.id)}\r\n {isInEditMode && !savingDashboard && }\r\n {isEditTableDialogOpen && (\r\n \r\n )}\r\n
    \r\n {loadingQueueAndAgentMetrics ? (\r\n
    Loading data...
    \r\n ) : (\r\n /** Use the parent widget container's full height for this table */\r\n \r\n \r\n \r\n \r\n \r\n handleLiveSort(AgentTableNameColumnHeader, e)}\r\n >\r\n {AgentTableNameColumnHeader}\r\n {sortOrder.columnName === AgentTableNameColumnHeader ? (\r\n \r\n ) : null}\r\n \r\n \r\n {widget.metrics.map((col) => (\r\n \r\n handleLiveSort(col.displayAs, e)}\r\n >\r\n {col.displayAs}\r\n {sortOrder.columnName === col.displayAs ? : null}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n {sortedAgentMetricsArray.map((row) => (\r\n \r\n handleAgentCellClick(true, row)}\r\n align=\"left\"\r\n sx={{ '&:hover ': { background: theme.palette.secondary.light }, cursor: 'pointer' }}\r\n >\r\n {row.name?.length ? row.name : 'N.A.'}\r\n \r\n {widget.metrics.map((col) => (\r\n handleAgentCellClick(false, row, col)\r\n : null\r\n }\r\n key={`agent-table-col-${col.metric}-${col.calculationType}`}\r\n align=\"left\"\r\n sx={{\r\n backgroundColor:\r\n row.metrics[col.metric]?.[col.calculationType]?.status === Status.Normal\r\n ? defaultCellBgColor\r\n : StatusColor[row.metrics[col.metric]?.[col.calculationType]?.status],\r\n color:\r\n row.metrics[col.metric]?.[col.calculationType]?.status === Status.Normal\r\n ? defaultCellFontColor\r\n : '#000000',\r\n '&:hover ':\r\n allowedMetrics && allowedMetrics[col.metric]?.isDrilldownAllowed\r\n ? { background: theme.palette.secondary.light }\r\n : null,\r\n cursor:\r\n allowedMetrics && allowedMetrics[col.metric]?.isDrilldownAllowed ? 'pointer' : 'auto'\r\n }}\r\n >\r\n {row.metrics[col.metric]?.[col.calculationType]?.value ?? 0}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n \r\n )}\r\n {detailsOpen && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport { InputLabel, Tooltip } from '@mui/material';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport TextField from '@mui/material/TextField';\r\nimport { useFormik } from 'formik';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\nimport { IconChartDonut, IconChartPie } from '@tabler/icons';\r\n\r\nimport { DashboardStateActions, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport { DefaultDataGroupingOption, DonutWidgetChartTypes } from '../constants';\r\nimport { useContext } from 'react';\r\nimport * as Yup from 'yup';\r\nimport { useTheme } from '@emotion/react';\r\nimport { useSelector } from 'store';\r\n\r\nexport default function EditDonutChartWidgetDialog({\r\n isEditDonutChartDialogOpen,\r\n toggleEditDonutChartDialog,\r\n widget,\r\n onWidgetConfigUpdate\r\n}) {\r\n const { allowedDonutOrPieChartWidgetConfig } = useSelector((state) => state.queueDashboard);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const validationSchemaForFields = Yup.object().shape({\r\n widgetName: Yup.string().trim().max(50, 'at most 50 charachters are allowed').required('Widget Name is required')\r\n });\r\n const theme = useTheme();\r\n\r\n const selectedChartTypeBorderColor = theme.palette.mode === 'dark' ? '#a0a9c0' : '#000000';\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n widgetName: widget.name,\r\n groupDataBy: widget.config?.groupDataBy ?? DefaultDataGroupingOption.Donut,\r\n graphType: widget.config?.graphType ?? DonutWidgetChartTypes.Donut\r\n },\r\n\r\n validationSchema: validationSchemaForFields,\r\n onSubmit: (values) => {\r\n const payload = {\r\n widgetId: widget.id,\r\n config: {\r\n ...widget.config,\r\n graphType: values.graphType,\r\n name: values.widgetName,\r\n groupDataBy: values.groupDataBy\r\n }\r\n };\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.UpdateWidgetConfig,\r\n payload\r\n });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n onWidgetConfigUpdate(payload);\r\n toggleEditDonutChartDialog();\r\n }\r\n });\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n Edit Widget\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n Group By\r\n \r\n {Object.entries(allowedDonutOrPieChartWidgetConfig?.allowedDataGroupingOptions ?? []).map(([item, value]) => (\r\n \r\n {value.displayName}\r\n \r\n ))}\r\n \r\n \r\n Graph Type\r\n
    \r\n {Object.entries(allowedDonutOrPieChartWidgetConfig?.allowedGraphTypes ?? []).map(([item, value]) => {\r\n return (\r\n \r\n {\r\n formik.setFieldValue('graphType', item);\r\n }}\r\n >\r\n {item === DonutWidgetChartTypes.Pie ? : }\r\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","import { useCallback, useContext, useEffect, useRef, useState } from 'react';\r\nimport { Tooltip } from 'recharts';\r\n\r\nimport EditDonutChartWidgetDialog from './EditDonutChartWidgetDialog';\r\nimport { DashboardStateContext } from '../context/DashboardStateContext';\r\n\r\nimport {\r\n DonutWidgetChartTypes,\r\n QueueDashboardEvents,\r\n getMappedColorsForQueueDashboardWidgets,\r\n GroupWidgetDataBy,\r\n GroupDonutChartDataHierarchy\r\n} from '../constants';\r\nimport EditWidgetMenu from '../EditWidgetMenu/EditWidgetMenu';\r\nimport { useSnackbar } from 'notistack';\r\nimport { graphColors } from 'store/constant';\r\nimport { useTheme } from '@emotion/react';\r\nimport {\r\n DonutChartTooltip,\r\n getDateTimeWithDstAdjustment,\r\n getExitPreviewButton,\r\n getPreviousLevelButton,\r\n getRefreshingWidgetDataAnimateIcon\r\n} from '../Utils/queueDashboardUtils';\r\nimport { getCallBreakdown } from '../Utils/queueDashboardApiCallsUtil';\r\nimport { Grid } from '@mui/material';\r\nimport BasicPieChart from 'views/dashboard/BasicPieChart';\r\n\r\nexport default function DonutChartWidget({ widget }) {\r\n const [isEditDonutChartDialogOpen, setIsEditDonutChartDialogOpen] = useState(false);\r\n const [donutChartData, setDonutChartData] = useState([]);\r\n const [needsRefresh, setNeedsRefresh] = useState(false);\r\n const [refreshing, setRefreshing] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n const theme = useTheme();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const getWidgetConfigObject = useCallback(\r\n (config) => ({\r\n ...config,\r\n drillDownMode: false,\r\n additionalFilters: {},\r\n renderDonut: config.graphType === DonutWidgetChartTypes.Donut\r\n }),\r\n []\r\n );\r\n\r\n const [previewWidgetConfig, setPreviewWidgetConfig] = useState(getWidgetConfigObject(widget.config));\r\n const previousConfigsRef = useRef([]);\r\n\r\n const sectorColors = theme.palette.mode === 'dark' ? graphColors.dark : graphColors.light;\r\n\r\n const { isInEditMode, savingDashboard, dataSource, selectedQueueId, dateTimeFilter } = useContext(DashboardStateContext);\r\n\r\n const toggleEditDonutChartDialog = () => {\r\n setIsEditDonutChartDialogOpen((open) => !open);\r\n };\r\n\r\n // Subscribe to queue dashboard events\r\n useEffect(() => {\r\n const handler = (e) => {\r\n setNeedsRefresh(true);\r\n };\r\n document.body.addEventListener(QueueDashboardEvents.RefreshWidgetData, handler);\r\n return () => {\r\n document.body.removeEventListener(QueueDashboardEvents.RefreshWidgetData, handler);\r\n };\r\n }, []);\r\n\r\n // loads data for donut widget\r\n const loadCallbreakDownChartData = useCallback(\r\n async (inputDataSource, queueId, inputDateTimeFilter, groupDataBy, additionalFilters, isRefresh = false) => {\r\n setErrorMessage(null);\r\n const data = await getCallBreakdown(\r\n enqueueSnackbar,\r\n inputDataSource,\r\n queueId,\r\n groupDataBy,\r\n getDateTimeWithDstAdjustment(inputDateTimeFilter),\r\n additionalFilters\r\n );\r\n if (data && data.callBreakdownData) {\r\n const mappedColors =\r\n theme.palette.mode === 'dark'\r\n ? getMappedColorsForQueueDashboardWidgets(groupDataBy).dark\r\n : getMappedColorsForQueueDashboardWidgets(groupDataBy).light;\r\n const chartData = Object.keys(data.callBreakdownData).map((g, index) => ({\r\n name: g,\r\n displayName: data.callBreakdownData[g].displayName,\r\n Count: data.callBreakdownData[g].count,\r\n percent: data.callBreakdownData[g].percent,\r\n fill: mappedColors[data.callBreakdownData[g].displayName] ?? sectorColors[index]\r\n }));\r\n const hasData = chartData.some((x) => x.Count > 0);\r\n if (!hasData) {\r\n setDonutChartData([]);\r\n } else {\r\n setDonutChartData(chartData);\r\n }\r\n } else if (isRefresh) {\r\n // NOTE: Do not reset the data of the widget\r\n enqueueSnackbar(`Failed to refresh data for ${widget.name} widget`, { variant: 'error' });\r\n } else {\r\n setErrorMessage('Failed to load data');\r\n setDonutChartData([]);\r\n }\r\n },\r\n [widget.name]\r\n );\r\n\r\n const onWidgetConfigUpdate = (payload) => {\r\n setPreviewWidgetConfig(getWidgetConfigObject(payload.config));\r\n previousConfigsRef.current = [];\r\n };\r\n\r\n useEffect(() => {\r\n // Reset to original config and clear drilldown history when switching queues\r\n setPreviewWidgetConfig(getWidgetConfigObject(widget.config));\r\n previousConfigsRef.current = [];\r\n }, [selectedQueueId]);\r\n\r\n useEffect(() => {\r\n // Reset to original config and clear drilldown history when going out of edit mode\r\n if (!isInEditMode) {\r\n setPreviewWidgetConfig(getWidgetConfigObject(widget.config));\r\n previousConfigsRef.current = [];\r\n }\r\n }, [isInEditMode]);\r\n\r\n useEffect(() => {\r\n async function onLoad() {\r\n setIsLoading(true);\r\n await loadCallbreakDownChartData(\r\n dataSource,\r\n selectedQueueId,\r\n dateTimeFilter,\r\n previewWidgetConfig.groupDataBy,\r\n previewWidgetConfig.additionalFilters\r\n );\r\n setIsLoading(false);\r\n }\r\n if (widget.config && widget.config.groupDataBy) {\r\n onLoad();\r\n }\r\n // NOTE: Don't add selectedQueueId in DA as it can cause multiple API calls and renders.\r\n // It is already taken into consideration in above mentioned useEffect\r\n }, [dataSource, dateTimeFilter, loadCallbreakDownChartData, previewWidgetConfig.groupDataBy, previewWidgetConfig.additionalFilters]);\r\n\r\n useEffect(() => {\r\n async function refreshData() {\r\n setRefreshing(true);\r\n await loadCallbreakDownChartData(\r\n dataSource,\r\n selectedQueueId,\r\n dateTimeFilter,\r\n previewWidgetConfig.groupDataBy,\r\n previewWidgetConfig.additionalFilters,\r\n true\r\n );\r\n setRefreshing(false);\r\n setNeedsRefresh(false);\r\n }\r\n if (!isInEditMode && needsRefresh) {\r\n refreshData();\r\n }\r\n }, [\r\n needsRefresh,\r\n loadCallbreakDownChartData,\r\n dataSource,\r\n dateTimeFilter,\r\n previewWidgetConfig.groupDataBy,\r\n previewWidgetConfig.additionalFilters\r\n ]);\r\n\r\n const formatLegendValue = (value, entry) => {\r\n const payload = entry.payload.payload.payload;\r\n return (\r\n \r\n {payload?.displayName} ({payload?.percent?.toFixed(2)}%)\r\n \r\n );\r\n };\r\n\r\n const drillLevelUp = () => {\r\n const previousConfig = previousConfigsRef.current.pop();\r\n setPreviewWidgetConfig(previousConfigsRef.current.length === 0 ? { ...previewWidgetConfig, drillDownMode: false } : previousConfig);\r\n };\r\n\r\n const getNextDrilldownLevelConfig = (name, configObj) => {\r\n const previousLevel = configObj.groupDataBy;\r\n const updatedConfigObj = {\r\n ...configObj,\r\n additionalFilters: {\r\n ...configObj.additionalFilters,\r\n [previousLevel]: name\r\n },\r\n groupDataBy: GroupDonutChartDataHierarchy[configObj.groupDataBy],\r\n drillDownMode: true\r\n };\r\n return updatedConfigObj;\r\n };\r\n const handleDrillDown = async (name, configObj) => {\r\n if (\r\n configObj.groupDataBy === GroupWidgetDataBy.QueueSourceType ||\r\n configObj.groupDataBy === GroupWidgetDataBy.QueueHandlingType ||\r\n configObj.groupDataBy === GroupWidgetDataBy.QueueDisposition\r\n ) {\r\n previousConfigsRef.current.push(configObj);\r\n const updatedConfigObj = getNextDrilldownLevelConfig(name, configObj);\r\n setPreviewWidgetConfig(updatedConfigObj);\r\n }\r\n };\r\n\r\n const exitPreview = () => {\r\n const previousConfig = previousConfigsRef.current[0];\r\n setPreviewWidgetConfig({ ...previousConfig, drillDownMode: false });\r\n previousConfigsRef.current = [];\r\n };\r\n const tooltipForPieChart = () => (\r\n }\r\n />\r\n );\r\n\r\n const showPointerCursor =\r\n previewWidgetConfig.groupDataBy === GroupWidgetDataBy.QueueSourceType ||\r\n previewWidgetConfig.groupDataBy === GroupWidgetDataBy.QueueHandlingType ||\r\n previewWidgetConfig.groupDataBy === GroupWidgetDataBy.QueueDisposition;\r\n\r\n const getUpdatedWidgetConfig = (widgetConfig) => {\r\n return {\r\n ...widgetConfig,\r\n dataKey: 'Count',\r\n nameKey: 'displayName',\r\n width: '100%',\r\n height: '80%',\r\n showCountInLegend: true\r\n };\r\n };\r\n let widgetBodyContent;\r\n if (isLoading) {\r\n widgetBodyContent =
    Loading data...
    ;\r\n } else if (errorMessage) {\r\n widgetBodyContent =
    {errorMessage}
    ;\r\n } else if (donutChartData.length > 0) {\r\n widgetBodyContent = (\r\n \r\n );\r\n } else {\r\n widgetBodyContent =
    No data for the selected date range and filters
    ;\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n

    \r\n {widget.name}\r\n

    \r\n
    \r\n \r\n \r\n {previewWidgetConfig?.drillDownMode && !refreshing && {getExitPreviewButton(exitPreview)}}\r\n {previewWidgetConfig?.drillDownMode && !refreshing && previousConfigsRef.current.length > 1 && (\r\n {getPreviousLevelButton(drillLevelUp)}\r\n )}\r\n\r\n {!isInEditMode && refreshing && {getRefreshingWidgetDataAnimateIcon(widget.id)}}\r\n {isInEditMode && !savingDashboard && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
    \r\n {isEditDonutChartDialogOpen && (\r\n \r\n )}\r\n
    \r\n {widgetBodyContent}\r\n \r\n );\r\n}\r\n","import { useContext, useState, useEffect, useCallback } from 'react';\r\n\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport { InputLabel } from '@mui/material';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport TextField from '@mui/material/TextField';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport Tab from '@mui/material/Tab';\r\nimport { useFormik } from 'formik';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\nimport moment from 'moment';\r\nimport { useTheme } from '@emotion/react';\r\n\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Tooltip from '@mui/material/Tooltip';\r\n\r\nimport MetricsSubsetGrid from '../MetricsSubsetGrid/MetricsSubsetGrid';\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport { DefaultDataGroupingOption, TimeSeriesMetricsCategory, TimeSeriesWidgetChartTypes } from '../constants';\r\n\r\nimport AreaChartLogo from 'assets/images/icons/noun-area-chart.svg';\r\nimport AreaChartDarkLogo from 'assets/images/icons/noun-area-chart-dark.svg';\r\nimport LineChartLogo from 'assets/images/icons/noun-line-graph.svg';\r\nimport LineChartDarkLogo from 'assets/images/icons/noun-line-graph-dark.svg';\r\nimport StackedBarChartLogo from 'assets/images/icons/noun-stacked-bar-chart.svg';\r\nimport StackedBarChartDarkLogo from 'assets/images/icons/noun-stacked-bar-chart-dark.svg';\r\nimport StackedBarChartHorizontalLogo from 'assets/images/icons/noun-stacked-bar-chart-horizontal.svg';\r\nimport StackedBarChartHorizontalDarkLogo from 'assets/images/icons/noun-stacked-bar-chart-horizontal-dark.svg';\r\nimport DateTimeFilter, { DateRangeType, RelativeDateUnitOptions } from '../DateTimeFilter/DateTimeFilter';\r\nimport { getUtcOffsetInMinutes } from 'utils/QueueConfigurationFormatAndValidation';\r\nimport { useSelector } from 'store';\r\nimport * as Yup from 'yup';\r\nimport { IconAlertTriangle } from '@tabler/icons';\r\n\r\nconst ViewTabs = {\r\n Metrics: 'metrics',\r\n DateTime: 'dateTime'\r\n};\r\n\r\nconst getIconForChartType = (type, theme) => {\r\n switch (type) {\r\n case TimeSeriesWidgetChartTypes.Area:\r\n return theme === 'dark' ? AreaChartDarkLogo : AreaChartLogo;\r\n case TimeSeriesWidgetChartTypes.HorizontalBar:\r\n return theme === 'dark' ? StackedBarChartHorizontalDarkLogo : StackedBarChartHorizontalLogo;\r\n case TimeSeriesWidgetChartTypes.VerticalBar:\r\n return theme === 'dark' ? StackedBarChartDarkLogo : StackedBarChartLogo;\r\n default:\r\n return theme === 'dark' ? LineChartDarkLogo : LineChartLogo;\r\n }\r\n};\r\n\r\nexport default function EditTimeSeriesWidgetDialog({\r\n isEditTimeSeriesDialogOpen,\r\n toggleEditTimeSeriesDialogOpen,\r\n widget,\r\n onWidgetConfigUpdate\r\n}) {\r\n const validationSchemaForFields = Yup.object().shape({\r\n widgetName: Yup.string().trim().max(50, 'Widget name should not exceed 50 characters').required('Widget Name is required')\r\n });\r\n const { allowedTimeseriesWidgetConfig } = useSelector((state) => state.queueDashboard);\r\n const { filteredQueuesMetricsSummary, selectedQueueId } = useContext(DashboardStateContext);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const theme = useTheme();\r\n\r\n const [activeTab, setActiveTab] = useState(ViewTabs.Metrics);\r\n const [fieldsConfig, setFieldsConfig] = useState(widget.metrics);\r\n const [metricSubsetError, setMetricSubsetError] = useState(false);\r\n const [hasDateTimeErrors, setHasDateTimeErrors] = useState(false);\r\n const [saveDisabled, setSaveDisabled] = useState(false);\r\n\r\n useEffect(() => {\r\n setSaveDisabled(hasDateTimeErrors || metricSubsetError);\r\n }, [hasDateTimeErrors, metricSubsetError]);\r\n\r\n const selectedQueue = filteredQueuesMetricsSummary.find((q) => q.queueId === selectedQueueId);\r\n const formik = useFormik({\r\n initialValues: {\r\n id: widget.config.id,\r\n maxMetricsPerRow: widget.config.maxMetricsPerRow,\r\n widgetName: widget.name,\r\n type: widget.config.metricCategory,\r\n graphType: widget.config.graphType,\r\n groupTimeBy: widget.config.groupTimeBy,\r\n overrideDashboardDateTime: (widget.config.dateTimeFilter && true) ?? false,\r\n dateTimeFilter: widget.config.dateTimeFilter,\r\n yAxisCaption: widget.config.yAxisCaption,\r\n groupDataBy: widget.config.groupDataBy ?? DefaultDataGroupingOption.TimeSeries\r\n },\r\n validationSchema: validationSchemaForFields,\r\n\r\n onSubmit: (values) => {\r\n const { widgetName, type, overrideDashboardDateTime, dateTimeFilter, groupTimeBy, groupDataBy, ...rest } = values;\r\n const payload = {\r\n widgetId: widget.id,\r\n name: widgetName,\r\n metrics:\r\n type === TimeSeriesMetricsCategory.QueueCallCounts\r\n ? null\r\n : fieldsConfig.map((metric, index) => ({ ...metric, displayOrder: index })),\r\n config: {\r\n groupTimeBy,\r\n metricCategory: type,\r\n groupDataBy: type === TimeSeriesMetricsCategory.QueueCallCounts ? groupDataBy : null,\r\n dateTimeFilter: overrideDashboardDateTime ? dateTimeFilter : null,\r\n ...rest\r\n }\r\n };\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.UpdateWidget,\r\n payload\r\n });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n onWidgetConfigUpdate(payload);\r\n toggleEditTimeSeriesDialogOpen();\r\n }\r\n });\r\n\r\n const setYAxisCaption = (type, groupTimeBy) => {\r\n formik.setFieldValue(\r\n 'yAxisCaption',\r\n type.toLowerCase().includes('count') ? `# calls per ${groupTimeBy.slice(0, -1)}` : 'length of time'\r\n );\r\n };\r\n\r\n const getDefaultFieldsConfigForMetricCategory = (value) => {\r\n if (value === TimeSeriesMetricsCategory.CallsAnsweredByAgent) {\r\n const allowedMetrics =\r\n allowedTimeseriesWidgetConfig.allowedMetricCategories[TimeSeriesMetricsCategory.CallsAnsweredByAgent]?.allowedMetrics;\r\n return [\r\n {\r\n id: `reset-temp-id`,\r\n metric: Object.keys(allowedMetrics)[0] ?? 'answeredCalls',\r\n calculationType: Object.keys(Object.values(allowedMetrics)[0]?.allowedCalculationMethods ?? [])[0] ?? 'count',\r\n displayAs: Object.values(allowedMetrics)[0]?.displayName,\r\n displayOrder: 0\r\n }\r\n ];\r\n }\r\n return [\r\n {\r\n id: `reset-temp-id`,\r\n metric: '',\r\n calculationType: '',\r\n displayAs: '',\r\n displayOrder: 0\r\n }\r\n ];\r\n };\r\n\r\n const handleMetricCategoryTypeChange = (event) => {\r\n formik.setFieldValue('type', event.target.value);\r\n formik.setFieldValue('graphType', TimeSeriesWidgetChartTypes.Line);\r\n setYAxisCaption(event.target.value, formik.values.groupTimeBy);\r\n\r\n setFieldsConfig(\r\n event.target.value === widget.config.metricCategory\r\n ? widget.metrics\r\n : getDefaultFieldsConfigForMetricCategory(event.target.value)\r\n );\r\n // When metric category changes, reset metric subset errors as new metrics rules will apply\r\n setMetricSubsetError(false);\r\n };\r\n\r\n const setGroupTimeBy = (event) => {\r\n formik.setFieldValue('groupTimeBy', event.target.value);\r\n setYAxisCaption(formik.values.type, event.target.value);\r\n };\r\n\r\n const setDateTimeFilterValues = (values) => {\r\n const updatedDateTimeFilter = {\r\n type: values.type,\r\n date: {},\r\n time: {},\r\n countryCode: values.countryCode,\r\n utcOffsetInMinutes: getUtcOffsetInMinutes(values.utcOffsetInMinutes),\r\n useDst: values.useDst\r\n };\r\n\r\n if (values.type === DateRangeType.CurrentQueuePeriod) {\r\n updatedDateTimeFilter.date = null;\r\n updatedDateTimeFilter.time = null;\r\n }\r\n\r\n if (values.type === DateRangeType.Specific) {\r\n updatedDateTimeFilter.date = {\r\n specific: {\r\n startDate: values.startDate,\r\n endDate: values.endDate\r\n },\r\n relative: null,\r\n weekDays: values.weekDays\r\n };\r\n }\r\n\r\n if (values.type === DateRangeType.Relative) {\r\n updatedDateTimeFilter.date = {\r\n relative: {\r\n type: values.relativeDateType,\r\n length: values.relativeDateCount,\r\n includeToday: values.includeToday\r\n },\r\n specific: null,\r\n weekDays: values.weekDays\r\n };\r\n\r\n if (values.relativeDateType === RelativeDateUnitOptions.LastNHours) {\r\n updatedDateTimeFilter.time = null;\r\n }\r\n }\r\n\r\n if (\r\n values.type === DateRangeType.Specific ||\r\n (values.type === DateRangeType.Relative && values.relativeDateType === RelativeDateUnitOptions.LastNDays)\r\n ) {\r\n updatedDateTimeFilter.time = {\r\n type: values.timeType,\r\n startTime: moment(values.startTime).format('HH:mm'),\r\n endTime: moment(values.endTime).format('HH:mm')\r\n };\r\n }\r\n\r\n formik.setFieldValue('dateTimeFilter', updatedDateTimeFilter);\r\n };\r\n\r\n const handleTabChange = (_, tab) => {\r\n setActiveTab(tab);\r\n };\r\n\r\n const setShouldOverrideDashboardDateTime = useCallback(\r\n (event) => {\r\n if (!event.target.checked) {\r\n formik.setFieldValue('dateTimeFilter', formik.initialValues.dateTimeFilter);\r\n setHasDateTimeErrors(false);\r\n }\r\n\r\n formik.setFieldValue('overrideDashboardDateTime', event.target.checked);\r\n },\r\n [formik]\r\n );\r\n\r\n const selectedBorderColor = theme.palette.mode === 'dark' ? theme.palette.secondary.main : theme.palette.secondary.dark;\r\n\r\n const selectedAvatarStyle = {\r\n width: 64,\r\n height: 64,\r\n ...theme.typography.commonAvatar,\r\n transition: 'all .2s ease-in-out',\r\n background: theme.palette.mode === 'dark' ? theme.palette.common.black : theme.palette.secondary.light,\r\n color: theme.palette.mode === 'dark' ? theme.palette.secondary.main : theme.palette.secondary.dark,\r\n '&[aria-controls=\"menu-list-grow\"],&:hover': {\r\n background: theme.palette.mode === 'dark' ? theme.palette.dark.dark : theme.palette.primary.light\r\n }\r\n };\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n Edit Widget\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n Metrics{' '}\r\n {!formik.isValid || metricSubsetError ? (\r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n }\r\n />\r\n \r\n Date/Time{' '}\r\n {hasDateTimeErrors ? : ''}\r\n \r\n }\r\n />\r\n \r\n
    \r\n
    \r\n {activeTab === ViewTabs.Metrics ? (\r\n <>\r\n \r\n \r\n Group Time By\r\n \r\n {Object.entries(allowedTimeseriesWidgetConfig?.allowedTimeGroupingOptions ?? []).map(\r\n ([item, value]) => (\r\n \r\n {value.displayName}\r\n \r\n )\r\n )}\r\n \r\n \r\n \r\n Type\r\n \r\n {Object.entries(allowedTimeseriesWidgetConfig?.allowedMetricCategories ?? []).map(\r\n ([item, value]) => (\r\n \r\n {value.displayName}\r\n \r\n )\r\n )}\r\n \r\n \r\n Graph Type\r\n
    \r\n {Object.entries(\r\n allowedTimeseriesWidgetConfig?.allowedMetricCategories[formik.values.type]?.allowedGraphTypes ?? []\r\n ).map(([item, value]) => {\r\n return (\r\n \r\n {\r\n formik.setFieldValue('graphType', item);\r\n }}\r\n />\r\n \r\n );\r\n })}\r\n
    \r\n {formik.values.type === TimeSeriesMetricsCategory.QueueCallCounts && (\r\n \r\n Group By\r\n \r\n {Object.entries(\r\n allowedTimeseriesWidgetConfig?.allowedMetricCategories[formik.values.type]\r\n ?.allowedDataGroupingOptions ?? []\r\n ).map(([item, value]) => (\r\n \r\n {value.displayName}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n {formik.values.type !== TimeSeriesMetricsCategory.QueueCallCounts && (\r\n <>\r\n Metrics\r\n \r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n \r\n }\r\n label=\"Override Dashboard Date/Time\"\r\n />\r\n {formik.values.overrideDashboardDateTime && (\r\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","import { useTheme } from '@emotion/react';\r\nimport { CardContent, Grid, Typography } from '@mui/material';\r\nimport moment from 'moment';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useCallback, useContext, useEffect, useRef, useState } from 'react';\r\nimport { Area, Bar, Line, Tooltip } from 'recharts';\r\nimport { graphColors } from 'store/constant';\r\nimport BasicAreaChart from 'views/dashboard/BasicAreaChart';\r\nimport BasicLineChart from 'views/dashboard/BasicLineChart';\r\nimport CustomTooltip from 'views/dashboard/CustomTooltip';\r\nimport HorizontalStackedBarChart from 'views/dashboard/HorizontalStackedBarChart';\r\nimport SimpleBarChart from 'views/dashboard/SimpleBarChart';\r\nimport {\r\n getMappedColorsForQueueDashboardWidgets,\r\n QueueDashboardEvents,\r\n TimeSeriesGroupTimeByOptions,\r\n TimeSeriesMetricsCategory,\r\n TimeSeriesWidgetChartTypes\r\n} from '../constants';\r\nimport { DashboardStateContext } from '../context/DashboardStateContext';\r\nimport EditWidgetMenu from '../EditWidgetMenu/EditWidgetMenu';\r\nimport { getGroupedByTimeMetrics } from '../Utils/queueDashboardApiCallsUtil';\r\nimport {\r\n getDateTimeWithDstAdjustment,\r\n getExitPreviewButton,\r\n getPreviousLevelButton,\r\n getRefreshingWidgetDataAnimateIcon,\r\n lengthOfTimeLabel\r\n} from '../Utils/queueDashboardUtils';\r\nimport EditTimeSeriesWidgetDialog from './EditTimeSeriesWidgetDialog';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport { IconCircle } from '@tabler/icons';\r\n\r\nfunction getQueueMetricDataKey(metric, calc) {\r\n return `${metric}:${calc}`;\r\n}\r\n\r\nfunction getAgentMetricDataKey(agentId, metric, calc) {\r\n return `${agentId}:${metric}:${calc}`;\r\n}\r\n\r\nfunction getYValueFromString(value) {\r\n if (value == null) {\r\n return 0;\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n\r\n if (value.includes(':')) {\r\n // value is expected to be in this form: ::\r\n const time = value.split(':');\r\n return parseInt(time[0], 10) * 3600 + parseInt(time[1], 10) * 60 + parseInt(time[2], 10);\r\n }\r\n\r\n return parseInt(value, 10);\r\n}\r\n\r\nfunction getHHmmssStringFromSeconds(secs) {\r\n if (secs == null) {\r\n return '00:00:00';\r\n }\r\n\r\n return moment.utc(secs * 1000).format('HH:mm:ss');\r\n}\r\n\r\nexport default function TimeSeriesWidget({ widget }) {\r\n const [isEditTimeSeriesDialogOpen, setIsEditTimeSeriesDialogOpen] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const {\r\n isInEditMode,\r\n savingDashboard,\r\n dataSource,\r\n selectedQueueId,\r\n dateTimeFilter: dashboardDateTimeFilter\r\n } = useContext(DashboardStateContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [needsRefresh, setNeedsRefresh] = useState(false);\r\n const [refreshing, setRefreshing] = useState(false);\r\n const [chartData, setChartData] = useState([]);\r\n const [chartDataComponents, setChartDataComponents] = useState([]);\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n\r\n const getWidgetConfigObject = useCallback(\r\n (config) => ({\r\n ...config,\r\n drillDownMode: false,\r\n additionalDateTimeFilters: {},\r\n metrics: widget.metrics\r\n }),\r\n [widget.metrics]\r\n );\r\n const [previewWidgetConfig, setPreviewWidgetConfig] = useState(getWidgetConfigObject(widget.config));\r\n const previousConfigsRef = useRef([]);\r\n\r\n // Subscribe to queue dashboard events\r\n useEffect(() => {\r\n const handler = (e) => {\r\n setNeedsRefresh(true);\r\n };\r\n document.body.addEventListener(QueueDashboardEvents.RefreshWidgetData, handler);\r\n return () => {\r\n document.body.removeEventListener(QueueDashboardEvents.RefreshWidgetData, handler);\r\n };\r\n }, []);\r\n\r\n const theme = useTheme();\r\n\r\n const toggleEditTimeSeriesDialogOpen = () => {\r\n setIsEditTimeSeriesDialogOpen((open) => !open);\r\n };\r\n\r\n const dateTimeFilter = widget.config?.dateTimeFilter ?? dashboardDateTimeFilter;\r\n\r\n const loadTimeSeriesChartData = useCallback(\r\n async (\r\n inputDataSource,\r\n queueId,\r\n metricCategory,\r\n inputDateTimeFilter,\r\n inputMetrics,\r\n groupTimeBy,\r\n groupDataBy,\r\n additionalDateTimeFilters = {},\r\n isRefresh = false\r\n ) => {\r\n setErrorMessage(null);\r\n\r\n const data = await getGroupedByTimeMetrics(\r\n enqueueSnackbar,\r\n inputDataSource,\r\n queueId,\r\n metricCategory,\r\n getDateTimeWithDstAdjustment(inputDateTimeFilter),\r\n inputMetrics?.map((f) => ({\r\n metric: f.metric,\r\n calculationType: f.calculationType\r\n })),\r\n groupTimeBy,\r\n groupDataBy,\r\n additionalDateTimeFilters\r\n );\r\n // Extract and format data from the response\r\n if (data && data.queueCallCounts) {\r\n const xVals = Object.keys(data.queueCallCounts);\r\n if (!xVals || !xVals.length) {\r\n // No data\r\n setChartData([]);\r\n setChartDataComponents([]);\r\n return;\r\n }\r\n\r\n const fieldMap = [];\r\n const queueCallValues = Object.values(data.queueCallCounts);\r\n queueCallValues?.forEach((value) => {\r\n const keys = Object.keys(value);\r\n keys?.forEach((key) => {\r\n if (fieldMap.indexOf(key) === -1) {\r\n fieldMap.push(key);\r\n }\r\n });\r\n });\r\n\r\n const componentList = [];\r\n fieldMap?.forEach((k) => {\r\n componentList.push({ metric: k, key: getQueueMetricDataKey(k, 'count'), label: k });\r\n });\r\n const formattedData = xVals.map((x) => {\r\n const out = { xVal: x };\r\n componentList.forEach((l) => {\r\n out[l.key] = getYValueFromString(data.queueCallCounts[x][l.metric]);\r\n });\r\n return out;\r\n });\r\n setChartData(formattedData);\r\n setChartDataComponents(componentList);\r\n } else if (data && data.queueMetrics) {\r\n const xVals = Object.keys(data.queueMetrics);\r\n if (!xVals || !xVals.length) {\r\n // No data\r\n setChartData([]);\r\n setChartDataComponents([]);\r\n return;\r\n }\r\n\r\n // Will be non null when metric category for the widget is QueueCallTimes or QueueCallCount\r\n const fieldMap = inputMetrics.reduce((prev, curr) => {\r\n if (!prev[curr.metric]) {\r\n prev[curr.metric] = {};\r\n }\r\n\r\n prev[curr.metric][curr.calculationType] = {\r\n label: curr.displayAs,\r\n order: curr.displayOrder\r\n };\r\n\r\n return prev;\r\n }, {});\r\n\r\n const metrics = Object.keys(data.queueMetrics[xVals[0]]).map((k) => {\r\n return {\r\n name: k,\r\n calculations: Object.keys(data.queueMetrics[xVals[0]][k])\r\n };\r\n });\r\n // Build the list of components of the chart data\r\n const componentList = metrics.reduce((prev, m) => {\r\n const lst = m.calculations.map((c) => ({\r\n metric: m.name,\r\n calculation: c,\r\n key: getQueueMetricDataKey(m.name, c),\r\n label: fieldMap[m.name]?.[c]?.label ?? ''\r\n }));\r\n return [...prev, ...lst];\r\n }, []);\r\n // Build the formatted data required for the charts\r\n const formattedData = xVals.map((x) => {\r\n const out = { xVal: x };\r\n componentList.forEach((l) => {\r\n out[l.key] = getYValueFromString(data.queueMetrics[x][l.metric][l.calculation]);\r\n });\r\n return out;\r\n });\r\n setChartData(formattedData);\r\n setChartDataComponents(componentList);\r\n } else if (data && data.agentMetrics) {\r\n // Will be non null when metric category for the widget is AgentCallTimes or CallsAnsweredByAgent\r\n const xVals = Object.keys(data.agentMetrics);\r\n if (!xVals || !xVals.length) {\r\n // No data\r\n setChartData([]);\r\n setChartDataComponents([]);\r\n return;\r\n }\r\n\r\n // data.agentMetrics format\r\n // {\r\n // interval1: {\r\n // agentId1: {\r\n // upn: \"upn\",\r\n // name: \"name\",\r\n // metrics: {\r\n // metric1: {\r\n // calculationType: \"value\"\r\n // }\r\n // }\r\n // },\r\n // agentId2: ...\r\n // },\r\n // interval2: {\r\n // agentId1: ...,\r\n // agentId3: ...\r\n // }\r\n // }\r\n // Need to create one component for each unique agent (identified by agentId)\r\n const uniqueAgentIds = new Set();\r\n const componentList = [];\r\n Object.keys(data.agentMetrics).forEach((interval) => {\r\n Object.keys(data.agentMetrics[interval]).forEach((agentId) => {\r\n if (uniqueAgentIds.has(agentId)) {\r\n return;\r\n }\r\n uniqueAgentIds.add(agentId);\r\n const metricsObject = data.agentMetrics[interval][agentId].metrics ?? {};\r\n // Agents entry here would only have one metric & one calculation each\r\n const metricName = Object.keys(metricsObject)[0] ?? 'metricName';\r\n const calculation = Object.keys(metricsObject[metricName] ?? {})[0] ?? 'calculation';\r\n const comp = {\r\n agentId,\r\n metric: metricName,\r\n calculation,\r\n key: getAgentMetricDataKey(agentId, metricName, calculation),\r\n label: data.agentMetrics[interval][agentId].name\r\n };\r\n\r\n componentList.push(comp);\r\n });\r\n });\r\n const formattedData = xVals.map((x) => {\r\n const out = { xVal: x };\r\n componentList.forEach((l) => {\r\n out[l.key] = getYValueFromString(data.agentMetrics[x][l.agentId]?.metrics?.[l.metric]?.[l.calculation]);\r\n });\r\n return out;\r\n });\r\n setChartData(formattedData);\r\n setChartDataComponents(componentList);\r\n } else if (isRefresh) {\r\n // NOTE: Do not reset the data of the widget\r\n enqueueSnackbar(`Failed to refresh data for ${widget.name} widget`, { variant: 'error' });\r\n } else {\r\n setErrorMessage('Failed to load data');\r\n setChartData([]);\r\n setChartDataComponents([]);\r\n }\r\n },\r\n [widget.name]\r\n );\r\n\r\n const onWidgetConfigUpdate = (payload) => {\r\n setPreviewWidgetConfig(getWidgetConfigObject(payload.config));\r\n previousConfigsRef.current = [];\r\n };\r\n\r\n useEffect(() => {\r\n // Reset to original saved config and clear drilldown history when switching queues\r\n setPreviewWidgetConfig(getWidgetConfigObject(widget.config));\r\n previousConfigsRef.current = [];\r\n }, [selectedQueueId]);\r\n\r\n useEffect(() => {\r\n // Reset to original saved config and clear drilldown history when going out of edit mode\r\n if (!isInEditMode) {\r\n setPreviewWidgetConfig(getWidgetConfigObject(widget.config));\r\n previousConfigsRef.current = [];\r\n }\r\n }, [isInEditMode]);\r\n\r\n useEffect(() => {\r\n async function onLoad() {\r\n setIsLoading(true);\r\n await loadTimeSeriesChartData(\r\n dataSource,\r\n selectedQueueId,\r\n previewWidgetConfig.metricCategory,\r\n dateTimeFilter,\r\n previewWidgetConfig.metrics,\r\n previewWidgetConfig.groupTimeBy,\r\n previewWidgetConfig.groupDataBy,\r\n previewWidgetConfig.additionalDateTimeFilters\r\n );\r\n setIsLoading(false);\r\n }\r\n if (widget && widget.config && dateTimeFilter) {\r\n if (widget.config.metricCategory !== TimeSeriesMetricsCategory.QueueCallCounts) {\r\n if (widget.metrics === null || widget.metrics.length <= 0) {\r\n return;\r\n }\r\n }\r\n if (\r\n (widget.config.metricCategory === TimeSeriesMetricsCategory.CallsAnsweredByAgent ||\r\n widget.config.metricCategory === TimeSeriesMetricsCategory.AgentCallTimes) &&\r\n widget.metrics.length > 1\r\n ) {\r\n enqueueSnackbar(\r\n `Invalid configuration for time series widget. Only 1 metric should be selected when widget type is ${widget.config.metricCategory}`,\r\n { variant: 'error' }\r\n );\r\n return;\r\n }\r\n // Load the data from the API\r\n onLoad();\r\n }\r\n // TODO: This hook is being called even when queue list selector is opened / closed. This seems to be because\r\n // Metrics and config are changing. Figure out why metrics and config are changing just by opening / closing queue selector\r\n }, [dataSource, dateTimeFilter, previewWidgetConfig, loadTimeSeriesChartData]);\r\n\r\n useEffect(() => {\r\n async function refreshData() {\r\n setRefreshing(true);\r\n await loadTimeSeriesChartData(\r\n dataSource,\r\n selectedQueueId,\r\n previewWidgetConfig.metricCategory,\r\n dateTimeFilter,\r\n previewWidgetConfig.metrics,\r\n previewWidgetConfig.groupTimeBy,\r\n previewWidgetConfig.groupDataBy,\r\n previewWidgetConfig.additionalDateTimeFilters,\r\n true\r\n );\r\n setRefreshing(false);\r\n setNeedsRefresh(false);\r\n }\r\n if (!isInEditMode && needsRefresh) {\r\n refreshData();\r\n }\r\n }, [needsRefresh, dataSource, dateTimeFilter, previewWidgetConfig, loadTimeSeriesChartData]);\r\n\r\n const drillLevelUp = () => {\r\n const previousConfig = previousConfigsRef.current.pop();\r\n setPreviewWidgetConfig(previousConfigsRef.current.length === 0 ? { ...previewWidgetConfig, drillDownMode: false } : previousConfig);\r\n };\r\n\r\n const getNextDrilldownLevelConfig = (name, configObj) => {\r\n const previousLevel = configObj.groupTimeBy === TimeSeriesGroupTimeByOptions.Weeks ? 'week' : 'date';\r\n let yAxisCaption = configObj.yAxisCaption;\r\n if (configObj.yAxisCaption.includes('calls')) {\r\n yAxisCaption = `# calls per ${previousLevel === 'week' ? 'day' : 'hour'}`;\r\n }\r\n const updatedConfigObj = {\r\n ...configObj,\r\n additionalDateTimeFilters: {\r\n ...configObj.additionalDateTimeFilters,\r\n [previousLevel]: name\r\n },\r\n groupTimeBy: previousLevel === 'week' ? TimeSeriesGroupTimeByOptions.Days : TimeSeriesGroupTimeByOptions.Hours,\r\n drillDownMode: true,\r\n yAxisCaption\r\n };\r\n return updatedConfigObj;\r\n };\r\n const handleDrillDown = async (name, configObj) => {\r\n if (configObj.groupTimeBy === TimeSeriesGroupTimeByOptions.Weeks || configObj.groupTimeBy === TimeSeriesGroupTimeByOptions.Days) {\r\n previousConfigsRef.current.push(configObj);\r\n setPreviewWidgetConfig(getNextDrilldownLevelConfig(name, configObj));\r\n }\r\n };\r\n\r\n const exitPreview = () => {\r\n const previousConfig = previousConfigsRef.current[0];\r\n setPreviewWidgetConfig({ ...previousConfig, drillDownMode: false });\r\n previousConfigsRef.current = [];\r\n };\r\n const showPointerCursor =\r\n previewWidgetConfig.groupTimeBy === TimeSeriesGroupTimeByOptions.Weeks ||\r\n previewWidgetConfig.groupTimeBy === TimeSeriesGroupTimeByOptions.Days;\r\n\r\n const generateToolTipProp = (...args) => {\r\n switch (widget.config.graphType) {\r\n case TimeSeriesWidgetChartTypes.VerticalBar:\r\n case TimeSeriesWidgetChartTypes.HorizontalBar: {\r\n const [colors] = args;\r\n return (\r\n \r\n widget.config?.metricCategory?.toLowerCase()?.includes('time')\r\n ? getHHmmssStringFromSeconds(value)\r\n : value\r\n }\r\n />\r\n }\r\n />\r\n );\r\n }\r\n case TimeSeriesWidgetChartTypes.Area:\r\n default: {\r\n const [setActiveHoverPoint, colors] = args;\r\n return (\r\n \r\n previewWidgetConfig?.metricCategory?.toLowerCase()?.includes('time')\r\n ? getHHmmssStringFromSeconds(value)\r\n : value\r\n }\r\n colors={colors}\r\n setActiveHoverPoint={setActiveHoverPoint}\r\n />\r\n }\r\n />\r\n );\r\n }\r\n }\r\n };\r\n const genericGraphColors = theme.palette.mode === 'dark' ? graphColors.dark : graphColors.light;\r\n const generateGradients = (areas, colors) => {\r\n const gradientArr = [];\r\n areas.forEach((item, index) => {\r\n gradientArr.push(\r\n \r\n \r\n \r\n \r\n );\r\n });\r\n return gradientArr;\r\n };\r\n const generateChartGraphics = (...args) => {\r\n const [selectedData, colors, drillDownHandler, widgetInfo] = args;\r\n switch (widget.config.graphType) {\r\n case TimeSeriesWidgetChartTypes.VerticalBar:\r\n return chartDataComponents.map((comp, index) => (\r\n drillDownHandler(data.xVal, widgetInfo)} // args[2]: drilldown function, args[3]: widgetCongig object\r\n cursor={showPointerCursor ? 'pointer' : 'default'}\r\n />\r\n ));\r\n case TimeSeriesWidgetChartTypes.HorizontalBar:\r\n return chartDataComponents.map((comp, index) => (\r\n drillDownHandler(data.xVal, widgetInfo)} // args[2]: drilldown function, args[3]: widgetCongig object\r\n cursor={showPointerCursor ? 'pointer' : 'default'}\r\n />\r\n ));\r\n case TimeSeriesWidgetChartTypes.Area:\r\n return chartDataComponents.map((comp, index) => (\r\n \r\n ));\r\n default:\r\n return chartDataComponents.map((comp, index) => (\r\n \r\n ));\r\n }\r\n };\r\n\r\n const getUpdatedWidgetConfig = (widgetConfig) => {\r\n const commonKeys = {\r\n width: '99%',\r\n height: '99%',\r\n dataKey: 'xVal',\r\n tick: theme.palette.mode === 'dark' ? { fill: '#a0a9c0' } : {},\r\n labelValue: widgetConfig.yAxisCaption,\r\n margin: {\r\n top: 10,\r\n right: 20,\r\n left: 20,\r\n bottom: 5\r\n },\r\n yAxisWidth: widgetConfig.yAxisCaption === lengthOfTimeLabel ? 80 : 50\r\n };\r\n switch (widget.config.graphType) {\r\n case TimeSeriesWidgetChartTypes.VerticalBar:\r\n return {\r\n ...widgetConfig,\r\n ...commonKeys\r\n };\r\n case TimeSeriesWidgetChartTypes.HorizontalBar:\r\n return {\r\n ...widgetConfig,\r\n ...commonKeys,\r\n yAxisTickFormatter: (value) =>\r\n widgetConfig?.metricCategory?.toLowerCase()?.includes('time') ? getHHmmssStringFromSeconds(value) : value,\r\n labelPosition: 'left',\r\n yAxisWidth: widgetConfig.groupTimeBy === TimeSeriesGroupTimeByOptions.Hours ? 50 : 80\r\n };\r\n case TimeSeriesWidgetChartTypes.Area:\r\n return {\r\n ...widgetConfig,\r\n ...commonKeys,\r\n yAxisTickFormatter: (value) =>\r\n widgetConfig?.metricCategory?.toLowerCase()?.includes('time') ? getHHmmssStringFromSeconds(value) : value,\r\n chartData: chartDataComponents\r\n };\r\n default:\r\n return {\r\n ...widgetConfig,\r\n ...commonKeys,\r\n yAxisTickFormatter: (value) =>\r\n widgetConfig?.metricCategory?.toLowerCase()?.includes('time') ? getHHmmssStringFromSeconds(value) : value\r\n };\r\n }\r\n };\r\n\r\n const chartComponent = () => {\r\n switch (widget.config.graphType) {\r\n case TimeSeriesWidgetChartTypes.VerticalBar:\r\n /**\r\n * Bar Chart (Vertical)\r\n */\r\n return (\r\n \r\n );\r\n case TimeSeriesWidgetChartTypes.HorizontalBar:\r\n /**\r\n * Bar Chart (Horizontal)\r\n */\r\n return (\r\n \r\n );\r\n case TimeSeriesWidgetChartTypes.Area:\r\n /**\r\n * Area Chart\r\n */\r\n return (\r\n \r\n );\r\n\r\n /**\r\n * Line Chart\r\n */\r\n default:\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n let widgetBodyContent;\r\n if (isLoading) {\r\n widgetBodyContent =
    Loading data...
    ;\r\n } else if (errorMessage) {\r\n widgetBodyContent =
    {errorMessage}
    ;\r\n } else if (chartData.length > 0) {\r\n widgetBodyContent = chartComponent();\r\n } else {\r\n widgetBodyContent =
    No data for the selected date range and filters
    ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n

    \r\n {widget.name}\r\n

    \r\n
    \r\n \r\n \r\n {previewWidgetConfig?.drillDownMode && !refreshing && (\r\n {getExitPreviewButton(exitPreview)}\r\n )}\r\n {previewWidgetConfig?.drillDownMode && !refreshing && previousConfigsRef.current.length > 1 && (\r\n {getPreviousLevelButton(drillLevelUp)}\r\n )}\r\n\r\n {!isInEditMode && refreshing && {getRefreshingWidgetDataAnimateIcon(widget.id)}}\r\n {isInEditMode && !savingDashboard && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n
    \r\n
    \r\n \r\n {widgetBodyContent}\r\n \r\n
    \r\n\r\n {isEditTimeSeriesDialogOpen && (\r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n}\r\n","import Icon from '@mdi/react';\r\nimport { StatusColor, MetricCardConfig, Status } from '../constants';\r\nimport { useTheme } from '@emotion/react';\r\n\r\nexport default function QueueMetricItem({ metricName, metric, calculation, displayAs }) {\r\n const status = metric ? metric[calculation]?.status : Status.Normal;\r\n const theme = useTheme();\r\n const iconColor = StatusColor[status] ?? StatusColor.Normal;\r\n const metricValue = metric !== undefined ? metric[calculation]?.value ?? 0 : 0;\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    \r\n {metricValue === 'NA' ? 'N/A' : metricValue ?? 0}\r\n {metricValue !== 'NA' && MetricCardConfig[metricName]?.suffix}\r\n

    \r\n

    {displayAs || MetricCardConfig[metricName]?.label}

    \r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext, useEffect, useState } from 'react';\r\n\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Stack from '@mui/material/Stack';\r\nimport Button from '@mui/material/Button';\r\nimport TextField from '@mui/material/TextField';\r\nimport { DashboardStateActions, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport MetricsSubsetGrid from '../MetricsSubsetGrid/MetricsSubsetGrid';\r\nimport { useSelector } from 'store';\r\n\r\nexport default function EditQueueMetricsGroupDialog({ isEditQueueMetricsDialogOpen, toggleEditQueueMetricsDialog, widget }) {\r\n const { allowedQueueMetricsWidgetConfig } = useSelector((state) => state.queueDashboard);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n\r\n const [metricsConfig, setMetricsConfig] = useState(widget.metrics);\r\n const [maxMetricsPerRow, setMaxMetricsPerRow] = useState(widget.config?.maxMetricsPerRow ?? 5);\r\n const [metricsPerRowError, setMetricPerRowError] = useState(null);\r\n const [metricSubsetError, setMetricSubsetError] = useState(false);\r\n\r\n const saveFieldsConfig = () => {\r\n if (maxMetricsPerRow < 1 || maxMetricsPerRow > 6) {\r\n return;\r\n }\r\n\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.UpdateWidget,\r\n payload: {\r\n widgetId: widget.id,\r\n metrics: metricsConfig.map((metric, index) => ({ ...metric, displayOrder: index })),\r\n config: { ...widget.config, maxMetricsPerRow: parseInt(maxMetricsPerRow, 10) }\r\n }\r\n });\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetHasUnsavedChanges, payload: true });\r\n\r\n toggleEditQueueMetricsDialog();\r\n };\r\n\r\n const validateMetricPerRow = (event) => {\r\n const value = Number(event.target.value);\r\n if (!event.target.value) {\r\n setMetricPerRowError('Max Metrics Per Row is required');\r\n } else if (value < 1 || value > 6) {\r\n setMetricPerRowError('Max Metrics Per Row value should be between 1 and 6');\r\n } else {\r\n setMetricPerRowError(null);\r\n }\r\n };\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n Edit Widget\r\n \r\n \r\n \r\n
    \r\n
    \r\n {\r\n setMaxMetricsPerRow(e.target.value);\r\n validateMetricPerRow(e);\r\n }}\r\n error={metricsPerRowError !== null}\r\n helperText={metricsPerRowError !== null ? metricsPerRowError : ''}\r\n />\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useContext, useState } from 'react';\r\n\r\nimport { DashboardStateContext } from '../context/DashboardStateContext';\r\nimport QueueMetricItem from './QueueMetricItem';\r\nimport EditQueueMetricsGroupDialog from './EditQueueMetricsGroupDialog';\r\nimport EditWidgetMenu from '../EditWidgetMenu/EditWidgetMenu';\r\nimport Icon from '@mdi/react';\r\nimport { mdiAlert } from '@mdi/js';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { getRefreshingWidgetDataAnimateIcon } from '../Utils/queueDashboardUtils';\r\nimport { useTheme } from '@emotion/react';\r\nimport { chunk } from 'lodash';\r\nimport MetricDetailsDialog from '../MetricDetailsDialog/MetricDetailsDialog';\r\nimport { useSelector } from 'store';\r\nimport { Grid } from '@mui/material';\r\n\r\nfunction isItemInTheLastRow(itemIndex, rowWidth, totalItems) {\r\n const gridItemsIndexMatrix = new Array(totalItems).fill(1).map((item, index) => item * index);\r\n const result = chunk(gridItemsIndexMatrix, rowWidth);\r\n\r\n return result[result.length - 1].includes(itemIndex);\r\n}\r\n\r\nfunction QueueMetricsGrid({ widget }) {\r\n const { queueMetrics, isInEditMode, savingDashboard, breakpoint, loadingQueueAndAgentMetrics, refreshingQueueAndAgentMetrics } =\r\n useContext(DashboardStateContext);\r\n const { allowedQueueMetricsWidgetConfig } = useSelector((state) => state.queueDashboard);\r\n const [isEditQueueMetricsDialogOpen, setIsEditQueueMetricsDialogOpen] = useState(false);\r\n const theme = useTheme();\r\n const [detailsOpen, setDetailsOpen] = React.useState(false);\r\n const [metric, setMetric] = React.useState('');\r\n const borderColor = theme.palette.mode === 'dark' ? 'rgba(97, 97, 97, 0.1)' : '#eeeeee';\r\n const apiUrl = '/api/DetailedDataAnalytics/getQueueDataDetailsForMetric';\r\n\r\n const { h, w } = widget.layout[breakpoint];\r\n const widgetWidth = Math.min(w, widget.config.maxMetricsPerRow);\r\n const allowedMetrics = allowedQueueMetricsWidgetConfig?.allowedMetrics;\r\n const toggleEditQueueMetricsDialog = () => {\r\n setIsEditQueueMetricsDialogOpen((open) => !open);\r\n };\r\n\r\n const handleDetailsDialogClose = () => {\r\n setDetailsOpen(false);\r\n };\r\n\r\n const handleQueueCellClick = (metric) => {\r\n setMetric(metric);\r\n setDetailsOpen(true);\r\n };\r\n\r\n const widgetControlComponent = (\r\n <>\r\n
    \r\n {!isInEditMode && refreshingQueueAndAgentMetrics && getRefreshingWidgetDataAnimateIcon(widget.id)}\r\n {widgetWidth * h < widget.metrics.length && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {isInEditMode && !savingDashboard && }\r\n
    \r\n {isEditQueueMetricsDialogOpen && (\r\n \r\n )}\r\n \r\n );\r\n\r\n if (loadingQueueAndAgentMetrics) {\r\n return
    Loading data...
    ;\r\n }\r\n\r\n if (!queueMetrics || !Object.keys(queueMetrics).length) {\r\n return (\r\n
    \r\n No data for the selected date range and filters\r\n {widgetControlComponent}\r\n
    \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {queueMetrics &&\r\n widget.metrics.map((item, index) => (\r\n \r\n handleQueueCellClick(item)\r\n : null\r\n }\r\n sx={{\r\n cursor: allowedMetrics && allowedMetrics[item.metric]?.isDrilldownAllowed ? 'pointer' : 'auto',\r\n '&:hover ':\r\n allowedMetrics && allowedMetrics[item.metric]?.isDrilldownAllowed\r\n ? { background: theme.palette.secondary.light }\r\n : null\r\n }}\r\n >\r\n \r\n \r\n \r\n ))}\r\n {widgetControlComponent}\r\n \r\n {detailsOpen && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default function QueueMetricsGroup({ widget }) {\r\n return ;\r\n}\r\n","import { useContext, useEffect, useLayoutEffect, useMemo } from 'react';\r\nimport { Responsive as ResponsiveGridLayout } from 'react-grid-layout';\r\nimport { withSize } from 'react-sizeme';\r\nimport AgentMetricsTable from '../AgentMetricsTable/AgentMetricsTable';\r\nimport { DashboardStateActions, DashboardStateContext, DashboardStateDispatchContext } from '../context/DashboardStateContext';\r\nimport DonutChartWidget from '../DonutChartWidget/DonutChartWidget';\r\nimport { WidgetTypes } from '../constants';\r\nimport TimeSeriesWidget from '../TimeSeriesWidget/TimeSeriesWidget';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport { useTheme } from '@mui/material/styles';\r\nimport QueueMetricsGroup from '../QueueMetricsGroup/QueueMetricsGroup';\r\nimport { isEqual } from 'lodash';\r\n\r\nconst generateLayoutObject = (widgets, isInEditMode, savingDashboard) => {\r\n const layoutObject = {\r\n sm: [],\r\n md: [],\r\n lg: []\r\n };\r\n\r\n widgets.forEach((widget) => {\r\n Object.keys(layoutObject).forEach((item) => {\r\n let layout;\r\n\r\n if (typeof widget.layout[item] === 'object') {\r\n layout = widget.layout[item];\r\n } else {\r\n layout = { x: 0, y: 0, h: 2, w: 2 };\r\n }\r\n\r\n layoutObject[item].push({\r\n ...layout,\r\n i: widget.id.toString(),\r\n isDraggable: isInEditMode && !savingDashboard,\r\n isResizable: isInEditMode && !savingDashboard\r\n });\r\n });\r\n });\r\n\r\n return layoutObject;\r\n};\r\n\r\nfunction MainWidgetGrid({ size: { width } }) {\r\n const { widgets, discardFallbackWidgets, breakpoint, isInEditMode, savingDashboard } = useContext(DashboardStateContext);\r\n const { dispatchDashboardStateAction } = useContext(DashboardStateDispatchContext);\r\n const theme = useTheme();\r\n\r\n const currentLayout = useMemo(\r\n () => generateLayoutObject(widgets, isInEditMode, savingDashboard),\r\n [widgets, isInEditMode, savingDashboard]\r\n );\r\n\r\n useLayoutEffect(() => {\r\n let bp;\r\n if (width >= 1200) {\r\n bp = 'lg';\r\n }\r\n if (width >= 996 && width < 1200) {\r\n bp = 'md';\r\n }\r\n if (width >= 768 && width < 996) {\r\n bp = 'sm';\r\n }\r\n if (width >= 480 && width < 768) {\r\n bp = 'xs';\r\n }\r\n if (width < 480) {\r\n bp = 'xxs';\r\n }\r\n if (breakpoint !== bp) {\r\n dispatchDashboardStateAction({ type: DashboardStateActions.SetCurrentBreakpoint, payload: bp });\r\n }\r\n }, [width]);\r\n\r\n const generateWidgetCard = (widget) => {\r\n let widgetToCreate;\r\n\r\n switch (widget.type) {\r\n case WidgetTypes.QueueMetrics:\r\n widgetToCreate = ;\r\n break;\r\n case WidgetTypes.AgentTable:\r\n widgetToCreate = ;\r\n break;\r\n case WidgetTypes.TimeSeries:\r\n widgetToCreate = ;\r\n break;\r\n case WidgetTypes.DonutOrPieChart:\r\n default:\r\n widgetToCreate = ;\r\n }\r\n\r\n return (\r\n \r\n {widgetToCreate}\r\n \r\n );\r\n };\r\n\r\n const onLayoutChange = (_, layouts) => {\r\n widgets.forEach((widget) => {\r\n // eslint-disable-next-line\r\n const updatedLayoutObject = layouts[breakpoint].find((layout) => layout.i == widget.id);\r\n const { x, y, w, h } = updatedLayoutObject;\r\n widget.layout[breakpoint] = { x, y, w, h };\r\n });\r\n\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.SetWidgetsList,\r\n payload: widgets\r\n });\r\n\r\n if (isInEditMode) {\r\n // Note: Comparing the whole widget object as both layout and previous unsaved changes must be taken into account\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.SetHasUnsavedChanges,\r\n payload: !isEqual(widgets, discardFallbackWidgets)\r\n });\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n {!isInEditMode && !widgets.length ? (\r\n
    Edit Dashboard to add new widgets
    \r\n ) : (\r\n \r\n {widgets.map(generateWidgetCard)}\r\n \r\n )}\r\n
    \r\n );\r\n}\r\n\r\nexport default withSize({ refreshRate: 60 })(MainWidgetGrid);\r\n","import { useParams } from 'react-router-dom';\r\nimport { useCallback, useEffect, useLayoutEffect, useReducer, useState } from 'react';\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\n\r\nimport QueueListSelector from './QueueListSelector/QueueListSelector';\r\nimport MainWidgetGrid from './MainWidgetGrid/MainWidgetGrid';\r\nimport {\r\n DEFAULT_DASHBOARD_STATE,\r\n DashboardStateActions,\r\n DashboardStateContext,\r\n DashboardStateDispatchContext,\r\n DashboardStateReducer\r\n} from './context/DashboardStateContext';\r\nimport { getSelectedDashboardDetails } from './Utils/queueDashboardApiCallsUtil';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nexport default function QueueDashboard() {\r\n const { id: selectedDashboardId } = useParams();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n const [windowHeight, setWindowHeight] = useState(window.innerHeight);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [dashboardState, dispatchDashboardStateAction] = useReducer(DashboardStateReducer, DEFAULT_DASHBOARD_STATE);\r\n\r\n const handleResize = useCallback((e) => {\r\n setWindowHeight(e.target.innerHeight);\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n\r\n const getDashboardData = useCallback(async () => {\r\n setIsLoading(true);\r\n const dashboardData = await getSelectedDashboardDetails(enqueueSnackbar, selectedDashboardId);\r\n if (!dashboardData) {\r\n setIsLoading(false);\r\n setError('No Data available for the selected dashboard'); // TODO: Check with the design team\r\n return;\r\n }\r\n setError('');\r\n\r\n // Order the widget metrics\r\n dashboardData.widgets.forEach((widget) => {\r\n widget.metrics.sort((metric1, metric2) => metric1.displayOrder - metric2.displayOrder);\r\n });\r\n\r\n dispatchDashboardStateAction({\r\n type: DashboardStateActions.LoadDashboard,\r\n payload: {\r\n dataSource: dashboardData.dataSource,\r\n queueIdsFilter: dashboardData.queueIdsFilter,\r\n selectedQueueId: dashboardData.selectedQueueId,\r\n widgets: dashboardData.widgets,\r\n dateTimeFilter: dashboardData.dateTimeFilter,\r\n name: dashboardData.name,\r\n isDefault: dashboardData.isDefault,\r\n id: dashboardData.id\r\n }\r\n });\r\n setIsLoading(false);\r\n }, [selectedDashboardId]);\r\n\r\n useEffect(() => {\r\n getDashboardData();\r\n }, [selectedDashboardId]);\r\n\r\n useEffect(() => {\r\n // TODO: Remove this after dev completion\r\n console.debug('Dashboard State [context]: ', dashboardState);\r\n }, [dashboardState]);\r\n\r\n if (isLoading) {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n
    \r\n

    {error}

    \r\n
    \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\n
    \r\n );\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { styled, useTheme } from '@mui/material/styles';\r\nimport { Box, Container } from '@mui/material';\r\n\r\n// project imports\r\nimport useConfig from 'hooks/useConfig';\r\nimport { dispatch } from 'store';\r\n\r\nimport useRouteAccess from 'routes/useRouteAccess';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport NoAccess from 'views/pages/NoAccess';\r\nimport { openDrawer } from 'store/slices/menu';\r\n\r\n// styles\r\nconst Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open, layout }) => ({\r\n ...theme.typography.reportContent,\r\n borderBottomLeftRadius: 0,\r\n borderBottomRightRadius: 0\r\n}));\r\n\r\n// ==============================|| MAIN LAYOUT ||============================== //\r\n\r\nconst ReportLayout = () => {\r\n const theme = useTheme();\r\n const hasAccessToCurrentRoute = useRouteAccess();\r\n\r\n const { container, layout, navType } = useConfig();\r\n\r\n useEffect(() => {\r\n dispatch(openDrawer(true));\r\n // initialize pendo\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n {/* main content */}\r\n
    \r\n {!hasAccessToCurrentRoute ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {container && (\r\n \r\n \r\n \r\n )}\r\n {!container && (\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 ReportLayout;\r\n","import { lazy } from 'react';\r\nimport { Outlet } from 'react-router-dom';\r\n\r\n// project imports\r\nimport AuthGuard from 'utils/route-guard/AuthGuard';\r\nimport MainLayout from 'layout/MainLayout';\r\nimport CustomDashboardLayout from 'utils/CustomDashboardLayout';\r\nimport Loadable from 'ui-component/Loadable';\r\nimport IdleSessionTimer from 'utils/IdleSessionTimer';\r\nimport QueueDashboard from 'views/QueueDashboard';\r\nimport ReportLayout from 'layout/MainLayout/ReportLayout';\r\n\r\n// sample page routing\r\nconst Dashboard = Loadable(lazy(() => import('views/dashboard')));\r\nconst Reports = Loadable(lazy(() => import('views/Reports')));\r\nconst ReportHistory = Loadable(lazy(() => import('views/ReportHistory')));\r\nconst ScheduledReport = Loadable(lazy(() => import('views/ScheduledReports')));\r\nconst ReportsCustomizationRoot = Loadable(lazy(() => import('views/Reports/ReportsCustomization/main')));\r\nconst ReportsCustomization = Loadable(lazy(() => import('views/Reports/ReportsCustomization')));\r\nconst ReportPreview = Loadable(lazy(() => import('views/Reports/ReportsPreview')));\r\nconst ReportRunNow = Loadable(lazy(() => import('views/Reports/ReportRunNow')));\r\nconst Logout = Loadable(lazy(() => import('views/pages/authentication/Logout')));\r\nconst Connectors = Loadable(lazy(() => import('views/Administration/Connectors')));\r\nconst ConnectorTemplate = Loadable(lazy(() => import('views/Administration/Connectors/ConnectorTemplate')));\r\nconst RemoteCollectionTemplate = Loadable(lazy(() => import('views/Administration/Connectors/RemoteCollectionTemplate')));\r\nconst QueueConfigurationBase = Loadable(lazy(() => import('views/Administration/Connectors/CallQueues/QueueConfigurationBase')));\r\nconst DirectoryImportTemplate = Loadable(lazy(() => import('views/Administration/Connectors/DirectoryImportTemplate')));\r\nconst DirectoryImportPreview = Loadable(lazy(() => import('views/Administration/Connectors/DirectoryImportPreview')));\r\n// ==============================|| MAIN ROUTING ||============================== //\r\n\r\nconst MainRoutes = {\r\n path: '/',\r\n element: ,\r\n children: [\r\n {\r\n path: '/logout',\r\n element: \r\n },\r\n {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/dashboard',\r\n element: ,\r\n children: [\r\n {\r\n path: 'my-dashboard/:id',\r\n element: \r\n },\r\n {\r\n path: 'queue-dashboard/:id',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/reporting/reports',\r\n element: \r\n },\r\n\r\n {\r\n path: '/reporting/reports/customization',\r\n element: ,\r\n children: [\r\n {\r\n path: '/reporting/reports/customization/:id',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/edit',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/copy',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/preview',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/edit/preview',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/copy/preview',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/reporting/report-history',\r\n element: \r\n },\r\n {\r\n path: '/reporting/scheduled-report',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/connectorTemplate',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/connectorTemplate/:id',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/RCTemplate',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/RCTemplate/:id',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/connectorTemplate/:id/queues/:queueId',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/DirectoryImport',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/DirectoryImport/:id',\r\n element: \r\n }\r\n ]\r\n },\r\n {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/reporting/reports/:id/report',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/history/:id/report',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/report',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/edit/report',\r\n element: \r\n },\r\n {\r\n path: '/reporting/reports/customization/:id/copy/report',\r\n element: \r\n },\r\n {\r\n path: '/administration/connectors/DirectoryImport/:id/preview',\r\n element: \r\n }\r\n ]\r\n }\r\n ]\r\n};\r\nexport default MainRoutes;\r\n","import { useState, useEffect } from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Button, Card, CardContent, CircularProgress, Grid, Typography } from '@mui/material';\r\n\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\n// project imports\r\nimport AuthWrapper1 from '../AuthWrapper1';\r\nimport AuthCardWrapper from '../AuthCardWrapper';\r\nimport AuthFooter from 'ui-component/cards/AuthFooter';\r\nimport axios, { axiosRemoteApiService } from 'utils/axios';\r\nimport { useSnackbar } from 'notistack';\r\nimport useRouteAccess from 'routes/useRouteAccess';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport NoAccess from 'views/pages/NoAccess';\r\nimport useAuth from 'hooks/useAuth';\r\n\r\nconst RegisterRC = () => {\r\n const theme = useTheme();\r\n const navigate = useNavigate();\r\n const [remoteCollections, setRemoteCollections] = useState(null);\r\n const [remoteInfo, setRemoteInfo] = useState(null);\r\n const [rcValidateError, setRcValidateError] = useState(null);\r\n const [selectedRC, setSelectedRC] = useState(null);\r\n const hasAccessToCurrentRoute = useRouteAccess();\r\n const verificationToken = JSON.parse(window.localStorage.getItem('loginToken'));\r\n const { user } = useAuth();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const handleRcRegister = async (collection, isValidate) => {\r\n // check for a valid remoteInfo. If not, display an error.\r\n if (remoteInfo) {\r\n const url = isValidate\r\n ? `/connectors/remote-collections/${collection.id}/register?validate=true`\r\n : `/connectors/remote-collections/${selectedRC.id}/register?validate=false`;\r\n const response = await axios.post(url, remoteInfo).catch(() => {\r\n navigate('/register/cloud-connect/failure', { state: { error: 'An unexpected error occured' }, replace: true });\r\n });\r\n if (response?.data?.success) {\r\n // if no data and there's a message, display the message\r\n if (!response.data.data && response.data.message) {\r\n // this means validation failed. so display the appropriate message and give the choice of continue or go back\r\n setSelectedRC(collection);\r\n setRcValidateError({ rcName: collection.remoteName, message: response.data.message });\r\n } else if (response.data.data) {\r\n // make the next call to remoteApi to save the registration\r\n const payload = {\r\n Tenant: response.data.data.tenantId,\r\n Target: 'RemoteConfig',\r\n Request: 'ConfigSignalR',\r\n Remote: remoteInfo.rcid,\r\n Client: user.clientId,\r\n Data: {\r\n AuthServiceUrl: process.env.REACT_APP_API_BASE_URL,\r\n AuthServiceSub: process.env.REACT_APP_API_SUBSCRIPTION,\r\n VerificationToken: verificationToken.token,\r\n AuthUserName: response.data.data.authUserName,\r\n AuthPassword: response.data.data.authUserPassword,\r\n SignalRhostUrl: response.data.data.remoteHostURL,\r\n SignalRhostSub: response.data.data.remoteHostSUB\r\n }\r\n };\r\n const registerResponse = await axiosRemoteApiService.post(`/api`, payload).catch((error) => {\r\n console.log(`Error - ${error.message}`);\r\n });\r\n\r\n // if that call is successful, navigate to Registration complete screen\r\n if (registerResponse?.data?.result) {\r\n navigate('/register/cloud-connect/success', { replace: true });\r\n } else {\r\n navigate('/register/cloud-connect/failure', {\r\n state: { error: response.data?.message || 'An unexpected error occured' }\r\n });\r\n }\r\n }\r\n } else {\r\n navigate('/register/cloud-connect/failure', {\r\n state: { error: response.data?.message || 'An unexpected error occured' }\r\n });\r\n }\r\n } else {\r\n navigate('/register/cloud-connect/failure', { state: { error: 'An unexpected error occured' } });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const fetchRemoteInfo = async () => {\r\n const payload = {\r\n Target: 'RemoteConfig',\r\n Request: 'GetRemoteId',\r\n Data: {\r\n AuthServiceUrl: process.env.REACT_APP_API_BASE_URL,\r\n AuthServiceSub: process.env.REACT_APP_API_SUBSCRIPTION,\r\n VerificationToken: verificationToken.token\r\n }\r\n };\r\n\r\n const response = await axiosRemoteApiService.post(`/api`, payload).catch((error) => {\r\n console.log(`Error - ${error.message}`);\r\n });\r\n\r\n if (response?.data) {\r\n setRemoteInfo({ rcid: response.data.RemoteId, remoteHostName: response.data.HostName });\r\n }\r\n };\r\n\r\n const fetchRcData = async () => {\r\n try {\r\n const response = await axios.get('/connectors/remote-collections');\r\n if (!response?.data?.success) {\r\n enqueueSnackbar(response.data.message, { variant: 'error' });\r\n }\r\n if (response?.data?.success && response?.data.data) {\r\n setRemoteCollections(response.data.data);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n }\r\n };\r\n\r\n fetchRemoteInfo();\r\n fetchRcData();\r\n }, []);\r\n\r\n return (\r\n \r\n {!hasAccessToCurrentRoute ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {rcValidateError ? (\r\n \r\n \r\n \r\n {rcValidateError.rcName}\r\n \r\n \r\n \r\n {rcValidateError.message}\r\n \r\n \r\n handleRcRegister(null, false)}\r\n >\r\n Continue\r\n \r\n \r\n \r\n setRcValidateError(null)}\r\n >\r\n Go Back\r\n \r\n \r\n \r\n ) : (\r\n \r\n {remoteCollections && (\r\n \r\n {remoteCollections.length > 0 ? (\r\n \r\n Select Cloud Connect Server\r\n \r\n ) : (\r\n \r\n No Cloud Connect Servers configured. Please login and create a Cloud Connect\r\n Server\r\n \r\n )}\r\n \r\n )}\r\n \r\n {remoteCollections ? (\r\n remoteCollections?.map((collection, index) => (\r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleRcRegister(collection, true);\r\n }}\r\n >\r\n \r\n \r\n \r\n {collection.remoteName}\r\n \r\n \r\n \r\n {collection.rcid ? 'Registered' : 'Unregistered'}\r\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 RegisterRC;\r\n","// material-ui\r\nimport { Grid, Typography } from '@mui/material';\r\n\r\n// assets\r\nimport { IconCircleCheck } from '@tabler/icons';\r\n\r\n// project imports\r\nimport AuthWrapper1 from '../AuthWrapper1';\r\nimport AuthCardWrapper from '../AuthCardWrapper';\r\nimport AuthFooter from 'ui-component/cards/AuthFooter';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport NoAccess from 'views/pages/NoAccess';\r\nimport useRouteAccess from 'routes/useRouteAccess';\r\n\r\nconst RegisterRcSuccess = () => {\r\n const hasAccessToCurrentRoute = useRouteAccess();\r\n\r\n return (\r\n \r\n {!hasAccessToCurrentRoute ? (\r\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 Successfully Configured\r\n \r\n \r\n \r\n \r\n You can close this window.\r\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 RegisterRcSuccess;\r\n","// material-ui\r\nimport { Grid, Typography } from '@mui/material';\r\n\r\n// assets\r\nimport { IconCircleX } from '@tabler/icons';\r\n\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// project imports\r\nimport AuthWrapper1 from '../AuthWrapper1';\r\nimport AuthCardWrapper from '../AuthCardWrapper';\r\nimport AuthFooter from 'ui-component/cards/AuthFooter';\r\nimport MainCard from 'ui-component/cards/MainCard';\r\nimport NoAccess from 'views/pages/NoAccess';\r\nimport useRouteAccess from 'routes/useRouteAccess';\r\n\r\nconst RegisterRcFailure = () => {\r\n const hasAccessToCurrentRoute = useRouteAccess();\r\n const location = useLocation();\r\n const errorMessage = location.state?.error || 'Unknown error occurred';\r\n\r\n return (\r\n \r\n {!hasAccessToCurrentRoute ? (\r\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 Unable to Configure\r\n \r\n \r\n \r\n \r\n {errorMessage}\r\n \r\n \r\n \r\n \r\n Please try again\r\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 RegisterRcFailure;\r\n","import { Outlet } from 'react-router-dom';\r\n\r\n// project imports\r\nimport MinimalLayout from 'layout/MinimalLayout';\r\nimport NavMotion from 'layout/NavMotion';\r\nimport RegisterRC from 'views/pages/RcRegistration/RegisterRC';\r\nimport RegisterRcSuccess from 'views/pages/RcRegistration/RegisterRcSuccess';\r\nimport RegisterRcFailure from 'views/pages/RcRegistration/RegisterRcFailure';\r\n\r\nconst RcRegistrationRoutes = {\r\n path: '/',\r\n element: (\r\n \r\n \r\n \r\n ),\r\n children: [\r\n {\r\n path: '/',\r\n element: ,\r\n children: [\r\n {\r\n path: '/register/cloud-connect',\r\n element: \r\n },\r\n {\r\n path: '/register/cloud-connect/success',\r\n element: \r\n },\r\n {\r\n path: '/register/cloud-connect/failure',\r\n element: \r\n }\r\n ]\r\n }\r\n ]\r\n};\r\n\r\nexport default RcRegistrationRoutes;\r\n","import { useRoutes } from 'react-router-dom';\r\n\r\n// routes\r\nimport LoginRoutes from './LoginRoutes';\r\nimport MainRoutes from './MainRoutes';\r\nimport RcRegistrationRoutes from './RcRegistrationRoutes';\r\nimport NotFound from '../views/pages/NotFound';\r\n\r\n// ==============================|| ROUTING RENDER ||============================== //\r\n\r\nexport default function ThemeRoutes() {\r\n return useRoutes([\r\n LoginRoutes,\r\n MainRoutes,\r\n RcRegistrationRoutes,\r\n {\r\n path: '*',\r\n element: \r\n }\r\n ]);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport { useState, useEffect } from 'react';\r\n\r\n// third-party\r\nimport { IntlProvider } from 'react-intl';\r\nimport useConfig from 'hooks/useConfig';\r\n\r\n// load locales files\r\nconst loadLocaleData = (locale) => {\r\n switch (locale) {\r\n case 'fr':\r\n return import('utils/locales/fr.json');\r\n case 'ro':\r\n return import('utils/locales/ro.json');\r\n case 'zh':\r\n return import('utils/locales/zh.json');\r\n default:\r\n return import('utils/locales/en.json');\r\n }\r\n};\r\n\r\n// ==============================|| LOCALIZATION ||============================== //\r\n\r\nconst Locales = ({ children }) => {\r\n const { locale } = useConfig();\r\n const [messages, setMessages] = useState();\r\n\r\n useEffect(() => {\r\n loadLocaleData(locale).then((d) => {\r\n setMessages(d.default);\r\n });\r\n }, [locale]);\r\n\r\n return (\r\n <>\r\n {messages && (\r\n \r\n {children}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nLocales.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default Locales;\r\n","import PropTypes from 'prop-types';\r\nimport { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// ==============================|| NAVIGATION SCROLL TO TOP ||============================== //\r\n\r\nconst NavigationScroll = ({ children }) => {\r\n const { pathname } = useLocation();\r\n\r\n useEffect(() => {\r\n window.scrollTo({\r\n top: 0,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n }, [pathname]);\r\n\r\n return children || null;\r\n};\r\n\r\nNavigationScroll.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default NavigationScroll;\r\n","import PropTypes from 'prop-types';\r\nimport { useEffect } from 'react';\r\n\r\n// material-ui\r\nimport { CacheProvider } from '@emotion/react';\r\nimport createCache from '@emotion/cache';\r\n\r\n// third-party\r\nimport rtlPlugin from 'stylis-plugin-rtl';\r\nimport useConfig from 'hooks/useConfig';\r\nimport { CssBaseline } from '@mui/material';\r\n\r\n// ==============================|| RTL LAYOUT ||============================== //\r\n\r\nconst RTLLayout = ({ children }) => {\r\n const { rtlLayout } = useConfig();\r\n const id = document.getElementById('styleNonce')?.nonce;\r\n useEffect(() => {\r\n document.dir = rtlLayout ? 'rtl' : 'ltr';\r\n }, [rtlLayout]);\r\n\r\n const cacheRtl = createCache({\r\n key: rtlLayout ? 'rtl' : 'css',\r\n prepend: true,\r\n nonce: id,\r\n stylisPlugins: rtlLayout ? [rtlPlugin] : []\r\n });\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nRTLLayout.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default RTLLayout;\r\n","// material-ui\r\nimport { createTheme } from '@mui/material/styles';\r\n\r\n// assets\r\nimport defaultColor from 'assets/scss/_themes-vars.module.scss';\r\nimport theme1 from 'assets/scss/_theme1.module.scss';\r\nimport theme2 from 'assets/scss/_theme2.module.scss';\r\nimport theme3 from 'assets/scss/_theme3.module.scss';\r\nimport theme4 from 'assets/scss/_theme4.module.scss';\r\nimport theme5 from 'assets/scss/_theme5.module.scss';\r\nimport theme6 from 'assets/scss/_theme6.module.scss';\r\n\r\n// ==============================|| DEFAULT THEME - PALETTE ||============================== //\r\n\r\nconst Palette = (navType, presetColor) => {\r\n let colors;\r\n switch (presetColor) {\r\n case 'theme1':\r\n colors = theme1;\r\n break;\r\n case 'theme2':\r\n colors = theme2;\r\n break;\r\n case 'theme3':\r\n colors = theme3;\r\n break;\r\n case 'theme4':\r\n colors = theme4;\r\n break;\r\n case 'theme5':\r\n colors = theme5;\r\n break;\r\n case 'theme6':\r\n colors = theme6;\r\n break;\r\n case 'default':\r\n default:\r\n colors = defaultColor;\r\n }\r\n\r\n return createTheme({\r\n palette: {\r\n mode: navType,\r\n common: {\r\n black: colors.darkPaper\r\n },\r\n primary: {\r\n light: navType === 'dark' ? colors.darkPrimaryLight : colors.primaryLight,\r\n main: navType === 'dark' ? colors.darkPrimaryMain : colors.primaryMain,\r\n dark: navType === 'dark' ? colors.darkPrimaryDark : colors.primaryDark,\r\n 200: navType === 'dark' ? colors.darkPrimary200 : colors.primary200,\r\n 800: navType === 'dark' ? colors.darkPrimary800 : colors.primary800\r\n },\r\n secondary: {\r\n light: navType === 'dark' ? colors.darkSecondaryLight : colors.secondaryLight,\r\n main: navType === 'dark' ? colors.darkSecondaryMain : colors.secondaryMain,\r\n dark: navType === 'dark' ? colors.darkSecondaryDark : colors.secondaryDark,\r\n 200: navType === 'dark' ? colors.darkSecondary200 : colors.secondary200,\r\n 800: navType === 'dark' ? colors.darkSecondary800 : colors.secondary800\r\n },\r\n error: {\r\n light: colors.errorLight,\r\n main: colors.errorMain,\r\n dark: colors.errorDark\r\n },\r\n orange: {\r\n light: colors.orangeLight,\r\n main: colors.orangeMain,\r\n dark: colors.orangeDark\r\n },\r\n warning: {\r\n light: colors.warningLight,\r\n main: colors.warningMain,\r\n dark: colors.warningDark\r\n },\r\n success: {\r\n light: colors.successLight,\r\n 200: colors.success200,\r\n main: colors.successMain,\r\n dark: colors.successDark\r\n },\r\n grey: {\r\n 50: colors.grey50,\r\n 100: colors.grey100,\r\n 500: navType === 'dark' ? colors.darkTextSecondary : colors.grey500,\r\n 600: navType === 'dark' ? colors.darkTextTitle : colors.grey600,\r\n 700: navType === 'dark' ? colors.darkTextPrimary : colors.grey700,\r\n 900: navType === 'dark' ? colors.darkTextPrimary : colors.grey900\r\n },\r\n dark: {\r\n light: colors.darkTextPrimary,\r\n main: colors.darkLevel1,\r\n dark: colors.darkLevel2,\r\n 800: colors.darkBackground,\r\n 900: colors.darkPaper\r\n },\r\n purple: {\r\n light: colors.purpleLight,\r\n dark: colors.purpleDark,\r\n main: colors.purpleMain\r\n },\r\n text: {\r\n primary: navType === 'dark' ? colors.darkTextPrimary : colors.grey700,\r\n secondary: navType === 'dark' ? colors.darkTextSecondary : colors.grey500,\r\n dark: navType === 'dark' ? colors.darkTextPrimary : colors.grey900,\r\n hint: colors.grey100\r\n },\r\n divider: navType === 'dark' ? colors.darkTextPrimary : colors.grey200,\r\n background: {\r\n paper: navType === 'dark' ? colors.darkLevel2 : colors.paper,\r\n default: navType === 'dark' ? colors.darkPaper : colors.paper\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport default Palette;\r\n","const Typography = (theme, borderRadius, fontFamily) => ({\r\n fontFamily,\r\n h6: {\r\n fontWeight: 500,\r\n color: theme.palette.grey[600],\r\n fontSize: '0.875rem'\r\n },\r\n h5: {\r\n fontSize: '1rem',\r\n color: theme.palette.grey[600],\r\n fontWeight: 500\r\n },\r\n h4: {\r\n fontSize: '1.25rem',\r\n color: theme.palette.grey[600],\r\n fontWeight: 600\r\n },\r\n h3: {\r\n fontSize: '1.75rem',\r\n color: theme.palette.grey[600],\r\n fontWeight: 600\r\n },\r\n h2: {\r\n fontSize: '2.625rem',\r\n color: theme.palette.grey[600],\r\n fontWeight: 700\r\n },\r\n h1: {\r\n fontSize: '3.75rem',\r\n color: theme.palette.grey[600],\r\n fontWeight: 700\r\n },\r\n subtitle1: {\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n color: theme.palette.text.dark\r\n },\r\n subtitle2: {\r\n fontSize: '0.75rem',\r\n fontWeight: 400,\r\n color: theme.palette.text.secondary\r\n },\r\n caption: {\r\n fontSize: '0.75rem',\r\n color: theme.palette.text.secondary,\r\n fontWeight: 400\r\n },\r\n body1: {\r\n fontSize: '0.875rem',\r\n fontWeight: 400,\r\n lineHeight: '1.334em'\r\n },\r\n body2: {\r\n letterSpacing: '0em',\r\n fontWeight: 400,\r\n lineHeight: '1.5em',\r\n color: theme.palette.text.primary\r\n },\r\n button: {\r\n textTransform: 'capitalize'\r\n },\r\n customInput: {\r\n marginTop: 1,\r\n marginBottom: 1,\r\n '& > label': {\r\n top: 23,\r\n left: 0,\r\n color: theme.palette.grey[500],\r\n '&[data-shrink=\"false\"]': {\r\n top: 5\r\n }\r\n },\r\n '& > div > input': {\r\n padding: '30.5px 14px 11.5px !important'\r\n },\r\n '& legend': {\r\n display: 'none'\r\n },\r\n '& fieldset': {\r\n top: 0\r\n }\r\n },\r\n mainContent: {\r\n backgroundColor: theme.palette.mode === 'dark' ? theme.palette.dark[800] : theme.palette.primary.light,\r\n width: '100%',\r\n minHeight: 'calc(100vh - 88px)',\r\n flexGrow: 1,\r\n padding: '20px',\r\n marginTop: '88px',\r\n marginRight: '20px',\r\n borderRadius: `${borderRadius}px`\r\n },\r\n reportContent: {\r\n backgroundColor: theme.palette.mode === 'dark' ? theme.palette.dark[800] : theme.palette.primary.light,\r\n width: '100%',\r\n height: '100vh',\r\n flexGrow: 1,\r\n padding: '20px',\r\n // marginRight: '20px',\r\n // marginTop: '20px',\r\n // marginLeft: '20px',\r\n borderRadius: `${borderRadius}px`\r\n },\r\n menuCaption: {\r\n fontSize: '0.875rem',\r\n fontWeight: 500,\r\n color: theme.palette.grey[600],\r\n padding: '6px',\r\n textTransform: 'capitalize',\r\n marginTop: '10px'\r\n },\r\n subMenuCaption: {\r\n fontSize: '0.6875rem',\r\n fontWeight: 500,\r\n color: theme.palette.text.secondary,\r\n textTransform: 'capitalize'\r\n },\r\n commonAvatar: {\r\n cursor: 'pointer',\r\n borderRadius: '8px'\r\n },\r\n smallAvatar: {\r\n width: '22px',\r\n height: '22px',\r\n fontSize: '1rem'\r\n },\r\n mediumAvatar: {\r\n width: '34px',\r\n height: '34px',\r\n fontSize: '1.2rem'\r\n },\r\n largeAvatar: {\r\n width: '44px',\r\n height: '44px',\r\n fontSize: '1.5rem'\r\n }\r\n});\r\n\r\nexport default Typography;\r\n","import { alpha } from '@mui/material/styles';\r\n\r\nconst createCustomShadow = (theme, color) => {\r\n const transparent = alpha(color, 0.24);\r\n return {\r\n z1: `0 1px 2px 0 ${transparent}`,\r\n z8: `0 8px 16px 0 ${transparent}`,\r\n z12: `0 12px 24px 0 ${transparent} 0 10px 20px 0 ${transparent}`,\r\n z16: `0 0 3px 0 ${transparent} 0 14px 28px -5px ${transparent}`,\r\n z20: `0 0 3px 0 ${transparent} 0 18px 36px -5px ${transparent}`,\r\n z24: `0 0 6px 0 ${transparent} 0 21px 44px 0 ${transparent}`,\r\n\r\n primary: `0px 12px 14px 0px ${alpha(theme.palette.primary.main, 0.3)}`,\r\n secondary: `0px 12px 14px 0px ${alpha(theme.palette.secondary.main, 0.3)}`,\r\n orange: `0px 12px 14px 0px ${alpha(theme.palette.orange.main, 0.3)}`,\r\n success: `0px 12px 14px 0px ${alpha(theme.palette.success.main, 0.3)}`,\r\n warning: `0px 12px 14px 0px ${alpha(theme.palette.warning.main, 0.3)}`,\r\n error: `0px 12px 14px 0px ${alpha(theme.palette.error.main, 0.3)}`\r\n };\r\n};\r\n\r\nexport default function customShadows(navType, theme) {\r\n return navType === 'dark' ? createCustomShadow(theme, theme.palette.dark.main) : createCustomShadow(theme, theme.palette.grey[600]);\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport { useMemo } from 'react';\r\n\r\n// material-ui\r\nimport { CssBaseline, StyledEngineProvider } from '@mui/material';\r\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\r\n\r\n// project import\r\nimport useConfig from 'hooks/useConfig';\r\nimport Palette from './palette';\r\nimport Typography from './typography';\r\n\r\nimport componentStyleOverrides from './compStyleOverride';\r\nimport customShadows from './shadows';\r\n\r\nexport default function ThemeCustomization({ children }) {\r\n const { borderRadius, fontFamily, navType, outlinedFilled, presetColor } = useConfig();\r\n\r\n const theme = useMemo(() => Palette(navType, presetColor), [navType, presetColor]);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const themeTypography = useMemo(() => Typography(theme, borderRadius, fontFamily), [theme, borderRadius, fontFamily]);\r\n const themeCustomShadows = useMemo(() => customShadows(navType, theme), [navType, theme]);\r\n\r\n const themeOptions = useMemo(\r\n () => ({\r\n palette: theme.palette,\r\n mixins: {\r\n toolbar: {\r\n minHeight: '48px',\r\n padding: '16px',\r\n '@media (min-width: 600px)': {\r\n minHeight: '48px'\r\n }\r\n }\r\n },\r\n typography: themeTypography,\r\n customShadows: themeCustomShadows,\r\n overrides: {\r\n MuiButtonBase: {\r\n root: {\r\n '& .MuiTouchRipple-rippleVisible': {\r\n animationDuration: '100ms'\r\n }\r\n }\r\n },\r\n // if you want to change the ripple duration of all components that have ripple\r\n // effect (e.g. Button, CardActionArea, FAB...)\r\n MuiTouchRipple: {\r\n rippleVisible: {\r\n animationDuration: '100ms'\r\n }\r\n }\r\n }\r\n }),\r\n [theme, themeCustomShadows, themeTypography]\r\n );\r\n\r\n const themes = createTheme(themeOptions);\r\n themes.components = useMemo(\r\n () => componentStyleOverrides(themes, borderRadius, outlinedFilled),\r\n [themes, borderRadius, outlinedFilled]\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nThemeCustomization.propTypes = {\r\n children: PropTypes.node\r\n};\r\n","export default function componentStyleOverrides(theme, borderRadius, outlinedFilled) {\r\n const mode = theme.palette.mode;\r\n const bgColor = mode === 'dark' ? theme.palette.dark[800] : theme.palette.grey[50];\r\n const menuSelectedBack = mode === 'dark' ? theme.palette.secondary.main + 15 : theme.palette.secondary.light;\r\n const menuSelected = mode === 'dark' ? theme.palette.secondary.main : theme.palette.secondary.dark;\r\n\r\n return {\r\n MuiButton: {\r\n styleOverrides: {\r\n root: {\r\n fontWeight: 500,\r\n fontSize: '0.875rem',\r\n borderRadius: '40px',\r\n '&.Mui-disabled': {\r\n color: mode === 'dark' ? theme.palette.text.primary + 50 : theme.palette.grey[500]\r\n }\r\n }\r\n }\r\n },\r\n MuiPaper: {\r\n defaultProps: {\r\n elevation: 0\r\n },\r\n styleOverrides: {\r\n root: {\r\n backgroundImage: 'none'\r\n },\r\n rounded: {\r\n borderRadius: `${borderRadius}px`\r\n }\r\n }\r\n },\r\n MuiCardHeader: {\r\n styleOverrides: {\r\n root: {\r\n color: theme.palette.text.dark,\r\n padding: '24px'\r\n },\r\n title: {\r\n fontSize: '1.125rem'\r\n }\r\n }\r\n },\r\n MuiCardContent: {\r\n styleOverrides: {\r\n root: {\r\n padding: '24px'\r\n }\r\n }\r\n },\r\n MuiCardActions: {\r\n styleOverrides: {\r\n root: {\r\n padding: '24px'\r\n }\r\n }\r\n },\r\n MuiAlert: {\r\n styleOverrides: {\r\n root: {\r\n alignItems: 'center'\r\n },\r\n outlined: {\r\n border: '1px dashed'\r\n }\r\n }\r\n },\r\n MuiListItemButton: {\r\n styleOverrides: {\r\n root: {\r\n color: theme.palette.text.primary,\r\n paddingTop: '10px',\r\n paddingBottom: '10px',\r\n '&.Mui-selected': {\r\n color: menuSelected,\r\n backgroundColor: menuSelectedBack,\r\n '&:hover': {\r\n backgroundColor: menuSelectedBack\r\n },\r\n '& .MuiListItemIcon-root': {\r\n color: menuSelected\r\n }\r\n },\r\n '&:hover': {\r\n backgroundColor: menuSelectedBack,\r\n color: menuSelected,\r\n '& .MuiListItemIcon-root': {\r\n color: menuSelected\r\n }\r\n }\r\n }\r\n }\r\n },\r\n MuiListItemIcon: {\r\n styleOverrides: {\r\n root: {\r\n color: theme.palette.text.primary,\r\n minWidth: '36px'\r\n }\r\n }\r\n },\r\n MuiListItemText: {\r\n styleOverrides: {\r\n primary: {\r\n color: theme.palette.text.primary\r\n }\r\n }\r\n },\r\n MuiInputBase: {\r\n styleOverrides: {\r\n input: {\r\n color: theme.palette.text.dark,\r\n '&::placeholder': {\r\n color: theme.palette.text.secondary,\r\n fontSize: '0.875rem'\r\n }\r\n }\r\n }\r\n },\r\n MuiOutlinedInput: {\r\n styleOverrides: {\r\n root: {\r\n background: outlinedFilled ? bgColor : 'transparent',\r\n borderRadius: `${borderRadius}px`,\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n borderColor: mode === 'dark' ? theme.palette.text.primary + 28 : theme.palette.grey[400]\r\n },\r\n '&:hover $notchedOutline': {\r\n borderColor: theme.palette.primary.light\r\n },\r\n '&.MuiInputBase-multiline': {\r\n padding: 1\r\n }\r\n },\r\n input: {\r\n fontWeight: 500,\r\n background: outlinedFilled ? bgColor : 'transparent',\r\n padding: '15.5px 14px',\r\n borderRadius: `${borderRadius}px`,\r\n '&.MuiInputBase-inputSizeSmall': {\r\n padding: '10px 14px',\r\n '&.MuiInputBase-inputAdornedStart': {\r\n paddingLeft: 0\r\n }\r\n }\r\n },\r\n inputAdornedStart: {\r\n paddingLeft: 4\r\n },\r\n notchedOutline: {\r\n borderRadius: `${borderRadius}px`\r\n }\r\n }\r\n },\r\n MuiSlider: {\r\n styleOverrides: {\r\n root: {\r\n '&.Mui-disabled': {\r\n color: mode === 'dark' ? theme.palette.text.primary + 50 : theme.palette.grey[300]\r\n }\r\n },\r\n mark: {\r\n backgroundColor: theme.palette.background.paper,\r\n width: '4px'\r\n },\r\n valueLabel: {\r\n color: mode === 'dark' ? theme.palette.primary.main : theme.palette.primary.light\r\n }\r\n }\r\n },\r\n MuiAutocomplete: {\r\n styleOverrides: {\r\n root: {\r\n '& .MuiAutocomplete-tag': {\r\n background: mode === 'dark' ? theme.palette.text.primary + 20 : theme.palette.secondary.light,\r\n borderRadius: 4,\r\n color: theme.palette.text.dark,\r\n '.MuiChip-deleteIcon': {\r\n color: mode === 'dark' ? theme.palette.text.primary + 80 : theme.palette.secondary[200]\r\n }\r\n }\r\n },\r\n popper: {\r\n borderRadius: `${borderRadius}px`,\r\n boxShadow: '0px 8px 10px -5px rgb(0 0 0 / 20%), 0px 16px 24px 2px rgb(0 0 0 / 14%), 0px 6px 30px 5px rgb(0 0 0 / 12%)'\r\n }\r\n }\r\n },\r\n MuiDivider: {\r\n styleOverrides: {\r\n root: {\r\n borderColor: theme.palette.divider,\r\n opacity: mode === 'dark' ? 0.2 : 1\r\n }\r\n }\r\n },\r\n MuiSelect: {\r\n styleOverrides: {\r\n select: {\r\n '&:focus': {\r\n backgroundColor: 'transparent'\r\n }\r\n }\r\n }\r\n },\r\n MuiCheckbox: {\r\n styleOverrides: {\r\n root: {\r\n /** checked not prop\r\n *\"&.Mui-checked\": {\r\n * fontSize: \"28px\"\r\n *}\r\n */\r\n }\r\n }\r\n },\r\n MuiAvatar: {\r\n styleOverrides: {\r\n root: {\r\n color: mode === 'dark' ? theme.palette.dark.main : theme.palette.primary.dark,\r\n background: mode === 'dark' ? theme.palette.text.primary : theme.palette.primary[200]\r\n }\r\n }\r\n },\r\n MuiChip: {\r\n styleOverrides: {\r\n root: {\r\n '&.MuiChip-deletable .MuiChip-deleteIcon': {\r\n color: 'inherit'\r\n }\r\n }\r\n }\r\n },\r\n MuiTimelineContent: {\r\n styleOverrides: {\r\n root: {\r\n color: theme.palette.text.dark,\r\n fontSize: '16px'\r\n }\r\n }\r\n },\r\n MuiTreeItem: {\r\n styleOverrides: {\r\n label: {\r\n marginTop: 14,\r\n marginBottom: 14\r\n }\r\n }\r\n },\r\n MuiTimelineDot: {\r\n styleOverrides: {\r\n root: {\r\n boxShadow: 'none'\r\n }\r\n }\r\n },\r\n MuiInternalDateTimePickerTabs: {\r\n styleOverrides: {\r\n tabs: {\r\n backgroundColor: mode === 'dark' ? theme.palette.dark[900] : theme.palette.primary.light,\r\n '& .MuiTabs-flexContainer': {\r\n borderColor: mode === 'dark' ? theme.palette.text.primary + 20 : theme.palette.primary[200]\r\n },\r\n '& .MuiTab-root': {\r\n color: mode === 'dark' ? theme.palette.text.secondary : theme.palette.grey[900]\r\n },\r\n '& .MuiTabs-indicator': {\r\n backgroundColor: theme.palette.primary.dark\r\n },\r\n '& .Mui-selected': {\r\n color: theme.palette.primary.dark\r\n }\r\n }\r\n }\r\n },\r\n MuiTabs: {\r\n styleOverrides: {\r\n flexContainer: {\r\n borderBottom: '1px solid',\r\n borderColor: mode === 'dark' ? theme.palette.text.primary + 20 : theme.palette.grey[200]\r\n }\r\n }\r\n },\r\n MuiDialog: {\r\n styleOverrides: {\r\n paper: {\r\n padding: '12px 0 12px 0',\r\n maxWidth: '1024px'\r\n }\r\n }\r\n },\r\n MuiTableCell: {\r\n styleOverrides: {\r\n root: {\r\n borderColor: mode === 'dark' ? theme.palette.text.primary + 15 : theme.palette.grey[200],\r\n '&.MuiTableCell-head': {\r\n fontSize: '0.875rem',\r\n color: theme.palette.grey[600],\r\n fontWeight: 500\r\n }\r\n }\r\n }\r\n },\r\n MuiTooltip: {\r\n styleOverrides: {\r\n tooltip: {\r\n color: theme.palette.background.paper,\r\n background: theme.palette.text.primary\r\n }\r\n }\r\n },\r\n MuiDialogTitle: {\r\n styleOverrides: {\r\n root: {\r\n fontSize: '1.25rem'\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { useEffect } from 'react';\r\n// routing\r\nimport Routes from 'routes';\r\n\r\n// project imports\r\nimport Locales from 'ui-component/Locales';\r\nimport NavigationScroll from 'layout/NavigationScroll';\r\nimport RTLLayout from 'ui-component/RTLLayout';\r\nimport ThemeCustomization from 'themes';\r\nimport appInsightsConfig from 'utils/appInsights';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// auth provider\r\nimport { JWTProvider as AuthProvider } from 'contexts/JWTContext';\r\nimport { SnackbarProvider } from 'notistack';\r\n\r\n// ==============================|| APP ||============================== //\r\n\r\nconst App = () => {\r\n const location = useLocation();\r\n\r\n // This is used to track page changes in Azure Application Insights\r\n useEffect(() => {\r\n if (appInsightsConfig.appInsights) {\r\n appInsightsConfig.appInsights.trackPageView({ name: location.pathname }); // Log page views\r\n }\r\n }, [location]); // Re-run whenever the location changes\r\n\r\n return (\r\n \r\n {/* RTL layout */}\r\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","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","const reportWebVitals = (onPerfEntry) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","/**\r\n * axios setup to use mock service\r\n */\r\n\r\nimport axios from 'axios';\r\n\r\nconst axiosServices = axios.create();\r\n\r\n// interceptor for http\r\naxiosServices.interceptors.response.use(\r\n (response) => response,\r\n (error) => Promise.reject((error.response && error.response.data) || 'Wrong Services')\r\n);\r\n\r\nexport default axiosServices;\r\n","/**\r\n * Adaptor for axios\r\n */\r\n\r\nimport AxiosMockAdapter from 'axios-mock-adapter';\r\nimport axios from './axiosMock';\r\n\r\nconst services = new AxiosMockAdapter(axios, { delayResponse: 0 });\r\nexport default services;\r\n","// project imports\r\nimport services from 'utils/mockAdapter';\r\n\r\nconst dummyData = [\r\n {\r\n id: 1,\r\n title: 'Top Usage by Data Source',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 2,\r\n title: 'Call Detail Record Search - May month 2',\r\n description: 'Individual call recored sorted by phone number, daye/time , call type, duratin or cost',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 3,\r\n title: 'Top Usage by Data Source',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 4,\r\n title: 'Top Usage by Data Source',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 5,\r\n title: 'Call Detail Record Search - May month 2',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 6,\r\n title: 'Top Usage by Data Source',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 7,\r\n title: 'Top Usage by Data Source',\r\n description: 'Individual call recored sorted by phone number, daye/time , call type, duratin or cost',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 8,\r\n title: 'Top Usage by Data Source',\r\n description: 'Individual call recored sorted by phone number, daye/time , call type, duratin or cost',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 9,\r\n title: 'Top Usage by Data Source',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n },\r\n {\r\n id: 10,\r\n title: 'Top Usage by Data Source',\r\n description:\r\n 'Summary of the top # (defaut 10) extension for each data source based on duration or cost. Report includes call count, cost and duration information for each call type.',\r\n scheduedOn: '10-12-2023',\r\n scheduedFor: 'Daily'\r\n }\r\n];\r\n\r\n// ==============================|| MOCK SERVICES ||============================== //\r\n\r\nservices.onGet('/api/scheduleReport/list').reply(200, { data: dummyData, success: true });\r\n","import ReactDOM from 'react-dom';\r\n\r\n// third party\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { PersistGate } from 'redux-persist/integration/react';\r\n\r\n// project imports\r\nimport App from 'app';\r\nimport { BASE_PATH, MUI_LICENSE_KEY } from 'config';\r\nimport { store, persistor } from 'store';\r\nimport * as serviceWorker from 'serviceWorker';\r\nimport reportWebVitals from 'reportWebVitals';\r\nimport { ConfigProvider } from 'contexts/ConfigContext';\r\n\r\n// style + assets\r\n// import 'assets/scss/style.scss';\r\nimport 'assets/scss/_themes-vars.module.scss';\r\n\r\n// load mock apis\r\nimport '_mockApis';\r\n\r\nimport { LicenseInfo } from '@mui/x-license-pro';\r\n\r\nLicenseInfo.setLicenseKey(MUI_LICENSE_KEY);\r\n\r\n// =============================|| HOST REDIRECT ||=============================== //\r\n\r\nconst stagingOld = 'stagingpreview.isi-info.com';\r\nconst stagingNew = 'https://stagingapp.isianalytics.com';\r\nconst prodOld = 'preview.isi-info.com';\r\nconst prodNew = 'https://app.isianalytics.com';\r\n\r\nif (window.location.hostname === prodOld) {\r\n window.location.replace(prodNew + window.location.pathname + window.location.search);\r\n} else if (window.location.hostname === stagingOld) {\r\n window.location.replace(stagingNew + window.location.pathname + window.location.search);\r\n}\r\n\r\n// ==============================|| REACT DOM RENDER ||============================== //\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n","const LAYOUT_CONST = {\r\n VERTICAL_LAYOUT: 'vertical',\r\n HORIZONTAL_LAYOUT: 'horizontal',\r\n DEFAULT_DRAWER: 'default',\r\n MINI_DRAWER: 'mini-drawer'\r\n};\r\n\r\nexport default LAYOUT_CONST;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\n// initial state\r\nexport const initialState = {\r\n selectedItem: ['dashboard'],\r\n selectedID: null,\r\n drawerOpen: false,\r\n hasQueueRoles: false,\r\n hasLicensedQueuesAccess: false\r\n};\r\n\r\n// ==============================|| SLICE - MENU ||============================== //\r\n\r\nconst menu = createSlice({\r\n name: 'menu',\r\n initialState,\r\n reducers: {\r\n activeItem(state, action) {\r\n state.selectedItem = action.payload;\r\n },\r\n\r\n activeID(state, action) {\r\n state.selectedID = action.payload;\r\n },\r\n\r\n openDrawer(state, action) {\r\n state.drawerOpen = action.payload;\r\n },\r\n setHasQueueRoles(state, action) {\r\n state.hasQueueRoles = action.payload;\r\n },\r\n setHasLicensedQueuesAccess(state, action) {\r\n state.hasLicensedQueuesAccess = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default menu.reducer;\r\n\r\nexport const { activeItem, openDrawer, activeID, setHasQueueRoles, setHasLicensedQueuesAccess } = menu.actions;\r\n","import { axiosMSTeamsCQService, axiosUserDataService } from 'utils/axios';\r\nimport { QueueDataSource } from '../constants';\r\n\r\nexport async function getAccessibleCallQueues(enqueueSnackbar, dataSource, onlyLicensed = true) {\r\n if (dataSource === QueueDataSource.MicrosoftTeams) {\r\n try {\r\n const subquery = onlyLicensed ? '?status=licensed' : '';\r\n const response = await axiosMSTeamsCQService.get(`/api/users/getAccessibleQueues${subquery}`);\r\n if (response.data?.success && response.data?.data) {\r\n return response.data.data;\r\n }\r\n\r\n // failed\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access\r\n enqueueSnackbar('Insufficient privileges to query metrics data', { variant: 'error' });\r\n } else {\r\n console.log('Error while loading queues. Error: ', ex);\r\n }\r\n\r\n return null;\r\n }\r\n }\r\n\r\n enqueueSnackbar(`Unsupported data source: ${dataSource} for queue analytics`, { variant: 'error' });\r\n return null;\r\n}\r\n\r\nexport async function getAccessibleLicensedCallQueues(enqueueSnackbar, dataSource) {\r\n return getAccessibleCallQueues(enqueueSnackbar, dataSource, true);\r\n}\r\n\r\nexport async function getFilteredQueuesMetricsSummary(enqueueSnackbar, dataSource, queueIds, dateTimeFilter) {\r\n if (dataSource === QueueDataSource.MicrosoftTeams) {\r\n try {\r\n const response = await axiosMSTeamsCQService.post(`/api/metrics/getSummaryForCQs`, {\r\n queueIds,\r\n dateTimeFilter\r\n });\r\n if (response.data?.success && response.data?.data) {\r\n return response.data.data;\r\n }\r\n\r\n // failed\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access\r\n enqueueSnackbar('Insufficient privileges to query metrics data', { variant: 'error' });\r\n } else {\r\n console.log('Error while loading metrics summary for filtered queues. Error: ', ex);\r\n }\r\n\r\n return null;\r\n }\r\n }\r\n\r\n enqueueSnackbar(`Unsupported data source: ${dataSource} for queue analytics`, { variant: 'error' });\r\n return null;\r\n}\r\n\r\nexport async function getAllMetricsForQueue(enqueueSnackbar, dataSource, queueId, dateTimeFilter) {\r\n if (dataSource === QueueDataSource.MicrosoftTeams) {\r\n try {\r\n const response = await axiosMSTeamsCQService.post(`/api/metrics/getAllMetricsForCQ`, {\r\n queueId,\r\n dateTimeFilter\r\n });\r\n if (response.data?.success && response.data?.data) {\r\n return { data: response.data.data, status: 200 };\r\n }\r\n\r\n // failed\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access\r\n enqueueSnackbar('Insufficient privileges to query metrics data', { variant: 'error' });\r\n } else {\r\n console.log('Error while loading all metrics for filtered queue. Error: ', ex);\r\n }\r\n\r\n return { data: null, status: ex?.response?.status };\r\n }\r\n }\r\n\r\n enqueueSnackbar(`Unsupported data source: ${dataSource} for queue analytics`, { variant: 'error' });\r\n return null;\r\n}\r\n\r\nexport async function getGroupedByTimeMetrics(\r\n enqueueSnackbar,\r\n dataSource,\r\n queueId,\r\n metricCategory,\r\n dateTimeFilter,\r\n metrics,\r\n groupTimeBy,\r\n groupDataBy,\r\n additionalDateTimeFilters\r\n) {\r\n if (dataSource === QueueDataSource.MicrosoftTeams) {\r\n try {\r\n const response = await axiosMSTeamsCQService.post(`/api/metrics/getGroupedByTime`, {\r\n queueId,\r\n metricCategory,\r\n metrics,\r\n groupTimeBy,\r\n dateTimeFilter,\r\n groupDataBy,\r\n additionalDateTimeFilters\r\n });\r\n if (response.data?.success && response.data?.data) {\r\n return response.data.data;\r\n }\r\n\r\n // failed\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access\r\n enqueueSnackbar('Insufficient privileges to query metrics data', { variant: 'error' });\r\n } else {\r\n console.log('Error while loading the metrics data for a queue, grouped by time. Error: ', ex);\r\n }\r\n\r\n return null;\r\n }\r\n }\r\n\r\n enqueueSnackbar(`Unsupported data source: ${dataSource} for queue analytics`, { variant: 'error' });\r\n return null;\r\n}\r\n\r\nexport async function getCallBreakdown(enqueueSnackbar, dataSource, queueId, groupBy, dateTimeFilter, additionalFilters) {\r\n if (dataSource === QueueDataSource.MicrosoftTeams) {\r\n try {\r\n const response = await axiosMSTeamsCQService.post(`/api/metrics/getCallBreakdownForCQ`, {\r\n queueId,\r\n groupBy,\r\n dateTimeFilter,\r\n additionalFilters\r\n });\r\n if (response.data?.success && response.data?.data) {\r\n return response.data.data;\r\n }\r\n\r\n // failed\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access\r\n enqueueSnackbar('Insufficient privileges to query metrics data', { variant: 'error' });\r\n } else {\r\n console.log('Error while loading the metrics data for queue grouped by call actions. Error: ', ex);\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n enqueueSnackbar(`Unsupported data source: ${dataSource} for queue analytics`, { variant: 'error' });\r\n return null;\r\n}\r\n\r\nexport async function getSelectedDashboardDetails(enqueueSnackbar, id) {\r\n try {\r\n const response = await axiosUserDataService.get(`/api/queueDashboard/${id}`);\r\n if (response.data?.success && response.data?.data) {\r\n return response.data.data;\r\n }\r\n\r\n // failed\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access\r\n enqueueSnackbar('Insufficient privileges to access queue dashboard', { variant: 'error' });\r\n } else {\r\n console.log('Error while loading queue dashboard. Error: ', ex);\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport async function updateSelectedQueueId(dashboardId, queueId) {\r\n try {\r\n const response = await axiosUserDataService.patch(`/api/queueDashboard/${dashboardId}/updateSelectedQueueId?queueId=${queueId}`);\r\n if (response?.data?.success && response?.data?.data) {\r\n return true;\r\n }\r\n\r\n console.log('Failed to save selected queueId. Error: ', response?.data?.error);\r\n return false;\r\n } catch (ex) {\r\n if (ex.response) {\r\n console.log('Failed to save selected queueId. Error: ', ex.response?.data?.error);\r\n } else {\r\n console.log('Failed to connect to the server. Try again later. Error: ', ex);\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport async function saveUpdatedDateTimeFilter(dashboardId, updatedDateTimeFilter) {\r\n try {\r\n const response = await axiosUserDataService.patch(`/api/queueDashboard/${dashboardId}/updateDateTimeFilter`, updatedDateTimeFilter);\r\n if (response?.data?.success && response?.data?.data) {\r\n return true;\r\n }\r\n\r\n console.log('Failed to save date time filter. Error: ', response?.data?.error);\r\n return false;\r\n } catch (ex) {\r\n if (ex.response) {\r\n console.log('Failed to save date time filter. Error: ', ex.response?.data?.error);\r\n } else {\r\n console.log('Failed to connect to the server. Try again later. Error: ', ex);\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport async function saveUpdatedDashboard(enqueueSnackbar, dashboardId, updatedDashboard) {\r\n try {\r\n const response = await axiosUserDataService.put(`/api/queueDashboard/${dashboardId}`, updatedDashboard);\r\n if (response.data?.success && response.data?.data) {\r\n return response.data.data;\r\n }\r\n console.log('Failed to save updated dashboard. Error: ', response?.data?.error);\r\n return null;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access (Should not happen)\r\n enqueueSnackbar(`Insufficient privileges to update queue dashboard with id [${dashboardId}]`, { variant: 'error' });\r\n } else {\r\n console.log('Error while saving dashboard. Error: ', ex);\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport async function setDashboardAsDefault(enqueueSnackbar, dashboardId) {\r\n try {\r\n const response = await axiosUserDataService.patch(`/api/queueDashboard/${dashboardId}/setDefault`);\r\n if (response.data?.success && response.data?.data) {\r\n return true;\r\n }\r\n console.log('Failed to set dashboard as default. Error: ', response?.data?.error);\r\n return false;\r\n } catch (ex) {\r\n // failed\r\n if (ex?.response?.status === 403) {\r\n // Do not have access (Should not happen)\r\n enqueueSnackbar(`Insufficient privileges to set queue dashboard with id [${dashboardId}] as default`, { variant: 'error' });\r\n } else {\r\n console.log('Error while setting dashboard as default. Error: ', ex);\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport async function deleteQueueDashboard(dashboardId) {\r\n try {\r\n const response = await axiosUserDataService.delete(`/api/QueueDashboard/${dashboardId}`);\r\n if (response?.data?.success) {\r\n return true;\r\n }\r\n console.log('Failed to delete queue Dashboard. Error: ', response?.data?.error);\r\n return false;\r\n } catch (ex) {\r\n if (ex.response) {\r\n // Failure from backend;\r\n console.log('Error Response: ', ex.response);\r\n } else {\r\n // Failed to connect to backend\r\n console.log('Failed to connect to backend while trying to delete Dashboard. Exception: ', ex);\r\n }\r\n return false;\r\n }\r\n}\r\n","import { useContext } from 'react';\r\nimport { ConfigContext } from 'contexts/ConfigContext';\r\n\r\n// ==============================|| CONFIG - HOOKS ||============================== //\r\n\r\nconst useConfig = () => useContext(ConfigContext);\r\n\r\nexport default useConfig;\r\n","import { useCallback, useContext } from 'react';\r\n\r\n// auth provider\r\n// import AuthContext from 'contexts/FirebaseContext';\r\n// import AuthContext from 'contexts/Auth0Context';\r\nimport AuthContext from 'contexts/JWTContext';\r\n// import AuthContext from 'contexts/AWSCognitoContext';\r\n\r\n// ==============================|| AUTH HOOKS ||============================== //\r\n\r\nconst useAuth = () => {\r\n const context = useContext(AuthContext);\r\n\r\n if (!context) throw new Error('context must be use inside provider');\r\n\r\n const userHasRole = useCallback(\r\n (role) => {\r\n return context.isLoggedIn && context.user?.roles && context.user.roles.includes(role);\r\n },\r\n [context.isLoggedIn, context.user]\r\n );\r\n\r\n return { ...context, userHasRole };\r\n};\r\n\r\nexport default useAuth;\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Card, CardContent, CardHeader, Divider, Typography } from '@mui/material';\r\n\r\n// constant\r\nconst headerSX = {\r\n '& .MuiCardHeader-action': { mr: 0 }\r\n};\r\n\r\n// ==============================|| CUSTOM MAIN CARD ||============================== //\r\n\r\nconst MainCard = React.forwardRef(\r\n (\r\n {\r\n border = true,\r\n boxShadow,\r\n children,\r\n content = true,\r\n contentClass = '',\r\n contentSX = {},\r\n darkTitle,\r\n secondary,\r\n shadow,\r\n sx = {},\r\n title,\r\n ...others\r\n },\r\n ref\r\n ) => {\r\n const theme = useTheme();\r\n\r\n return (\r\n \r\n {/* card header and action */}\r\n {!darkTitle && title && }\r\n {darkTitle && title && (\r\n {title}} action={secondary} />\r\n )}\r\n\r\n {/* content & header divider */}\r\n {title && }\r\n\r\n {/* card content */}\r\n {content && (\r\n \r\n {children}\r\n \r\n )}\r\n {!content && children}\r\n \r\n );\r\n }\r\n);\r\n\r\nMainCard.propTypes = {\r\n border: PropTypes.bool,\r\n boxShadow: PropTypes.bool,\r\n children: PropTypes.node,\r\n content: PropTypes.bool,\r\n contentClass: PropTypes.string,\r\n contentSX: PropTypes.object,\r\n darkTitle: PropTypes.bool,\r\n secondary: PropTypes.oneOfType([PropTypes.node, PropTypes.string, PropTypes.object]),\r\n shadow: PropTypes.string,\r\n sx: PropTypes.object,\r\n title: PropTypes.oneOfType([PropTypes.node, PropTypes.string, PropTypes.object])\r\n};\r\n\r\nexport default MainCard;\r\n","import LAYOUT_CONST from 'constant';\r\n\r\nexport const FIREBASE_API = {\r\n apiKey: 'AIzaSyBernKzdSojh_vWXBHt0aRhf5SC9VLChbM',\r\n authDomain: 'berry-material-react.firebaseapp.com',\r\n projectId: 'berry-material-react',\r\n storageBucket: 'berry-material-react.appspot.com',\r\n messagingSenderId: '901111229354',\r\n appId: '1:901111229354:web:a5ae5aa95486297d69d9d3',\r\n measurementId: 'G-MGJHSL8XW3'\r\n};\r\n\r\n// basename: only at build time to set, and Don't add '/' at end off BASENAME for breadcrumbs, also Don't put only '/' use blank('') instead,\r\n// like '/berry-material-react/react/default'\r\nexport const BASE_PATH = '';\r\n\r\nexport const DASHBOARD_PATH = '/dashboard';\r\n\r\nexport const VERSION = '1';\r\n\r\nexport const MUI_LICENSE_KEY = '9fa0f113fa7d793fc372cd6dc37e8778Tz01MzI4MyxFPTE2OTg1MTIyNzgxMjksUz1wcm8sTE09c3Vic2NyaXB0aW9uLEtWPTI=';\r\nexport const HORIZONTAL_MAX_ITEM = 7;\r\n\r\nexport const HELP_URL = 'https://isianalytics.com/help';\r\n\r\nconst config = {\r\n layout: LAYOUT_CONST.VERTICAL_LAYOUT, // vertical, horizontal\r\n drawerType: LAYOUT_CONST.DEFAULT_DRAWER, // default, mini-drawer\r\n fontFamily: `'Poppins', sans-serif`,\r\n borderRadius: 8,\r\n outlinedFilled: true,\r\n navType: 'light', // light, dark\r\n presetColor: 'default', // default, theme1, theme2, theme3, theme4, theme5, theme6\r\n locale: 'en', // 'en' - English, 'fr' - French, 'ro' - Romanian, 'zh' - Chinese\r\n rtlLayout: false,\r\n container: false\r\n};\r\n\r\nexport default config;\r\n","// project imports\r\nimport { createSlice } from '@reduxjs/toolkit';\r\nimport { axiosUserDataService, axiosMSTeamsCQService } from 'utils/axios';\r\nimport { getAllowedMetricsConfigurationFromAPI, setAllowedMetricsConfig } from './queueConfig';\r\n\r\nexport const initialState = {\r\n queueDashboards: [],\r\n queueDashboardTemplates: [], // NOTE: This would have a list of { id, name, dataSource } objects\r\n queueDashboardError: null,\r\n isQueueDashboardListLoaded: false,\r\n reevaluateQueueAccess: true,\r\n allowedQueueMetricsWidgetConfig: {},\r\n allowedAgentTableWidgetConfig: {},\r\n allowedDonutOrPieChartWidgetConfig: {},\r\n allowedTimeseriesWidgetConfig: {},\r\n isCreateQueueDshDlgOpen: false\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'queueDashboard',\r\n initialState,\r\n reducers: {\r\n getQueueDashboardListSuccess(state, action) {\r\n state.queueDashboards = action.payload;\r\n state.isQueueDashboardListLoaded = true;\r\n },\r\n getQueueDashboardTemplateListSuccess(state, action) {\r\n state.queueDashboardTemplates = action.payload;\r\n },\r\n getQueueDashboardFailure(state, action) {\r\n state.queueDashboardError = action.payload;\r\n },\r\n setDefaultQueueDashboardSuccess(state, action) {\r\n state.queueDashboards = state.queueDashboards.map((d) => ({\r\n ...d,\r\n isDefault: d.id === action.payload\r\n }));\r\n },\r\n createQueueDashboardSuccess(state, action) {\r\n state.queueDashboards = [\r\n ...state.queueDashboards,\r\n {\r\n id: state.queueDashboards.length + 1,\r\n name: action.payload.name,\r\n displayOrder: 0,\r\n layout: '',\r\n ownerId: 0\r\n }\r\n ];\r\n },\r\n setReEvaluateQueueAccess(state, action) {\r\n state.reevaluateQueueAccess = action.payload;\r\n },\r\n setAllowedQueueMetricsWidgetConfig(state, action) {\r\n state.allowedQueueMetricsWidgetConfig = action.payload;\r\n },\r\n setAllowedAgentTableWidgetConfig(state, action) {\r\n state.allowedAgentTableWidgetConfig = action.payload;\r\n },\r\n setAllowedDonutOrPieChartWidgetConfig(state, action) {\r\n state.allowedDonutOrPieChartWidgetConfig = action.payload;\r\n },\r\n setAllowedTimeseriesWidgetConfig(state, action) {\r\n state.allowedTimeseriesWidgetConfig = action.payload;\r\n },\r\n deleteDashboardSuccess(state, action) {\r\n state.queueDashboards = state.queueDashboards.filter((item) => item.id !== action.payload);\r\n },\r\n toggleIsCreateQueueDshDlgOpn(state) {\r\n state.isCreateQueueDshDlgOpen = !state.isCreateQueueDshDlgOpen;\r\n },\r\n updateDashboardName(state, action) {\r\n state.queueDashboards = state.queueDashboards.map((item) => {\r\n if (item.id === parseInt(action.payload.id, 10)) {\r\n return {\r\n ...item,\r\n name: action.payload.name\r\n };\r\n }\r\n return item;\r\n });\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport const {\r\n setReEvaluateQueueAccess,\r\n getQueueDashboardListSuccess,\r\n getQueueDashboardTemplateListSuccess,\r\n getQueueDashboardFailure,\r\n setDefaultQueueDashboardSuccess,\r\n createQueueDashboardSuccess,\r\n deleteDashboardSuccess,\r\n setAllowedQueueMetricsWidgetConfig,\r\n setAllowedAgentTableWidgetConfig,\r\n setAllowedDonutOrPieChartWidgetConfig,\r\n setAllowedTimeseriesWidgetConfig,\r\n toggleIsCreateQueueDshDlgOpn,\r\n updateDashboardName\r\n} = slice.actions;\r\n\r\nexport function loadQueueDashboardList(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n try {\r\n // Call API to get the list of queue dashboards for the logged in user - dashId, dashName\r\n const response = await axiosUserDataService.get('/api/queueDashboard');\r\n if (response?.data?.success && response?.data?.data) {\r\n dispatch(slice.actions.getQueueDashboardListSuccess(response.data.data));\r\n } else {\r\n enqueueSnackbar('Failed to load the queue dashboards', { variant: 'error' });\r\n console.log('Failed to get the queue dashboards. Error: ', response?.data?.error);\r\n }\r\n } catch (ex) {\r\n if (ex.response) {\r\n if (ex.response.status === 403) {\r\n // No access\r\n enqueueSnackbar('Insufficient privelleges for queue dashboards', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Failed to load the queue dashboards', { variant: 'error' });\r\n console.log('Failed to query queue dashboards. Error: ', ex.response);\r\n }\r\n } else {\r\n enqueueSnackbar('Failed to load the queue dashboards', { variant: 'error' });\r\n console.log('Failed to connect to server while trying to get queue dashboards', ex);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function loadQueueDashboardTemplateList(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n try {\r\n // Call API to get the list of queue dashboards for the logged in user - dashId, dashName\r\n const response = await axiosUserDataService.get('/api/queueDashboard/templates');\r\n if (response?.data?.success && response?.data?.data) {\r\n dispatch(slice.actions.getQueueDashboardTemplateListSuccess(response.data.data));\r\n } else {\r\n console.log('Failed to get the queue dashboards. Error: ', response?.data?.error);\r\n }\r\n } catch (ex) {\r\n if (ex.response) {\r\n if (ex.response.status === 403) {\r\n // No access\r\n enqueueSnackbar('Insufficient privileges for queue dashboards', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Failed to get the queue dashboard templates', { variant: 'error' });\r\n console.log('Failed to query queue dashboard template. Error: ', ex.response);\r\n }\r\n } else {\r\n enqueueSnackbar('Failed to get the queue dashboards', { variant: 'error' });\r\n console.log('Failed to connect to server while trying to get queue dashboards', ex);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function createBlankQueueDashboard(enqueueSnackbar, dashboard, callback) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axiosUserDataService.post('api/queueDashboard', dashboard);\r\n if (response?.data?.success) {\r\n dispatch(loadQueueDashboardList(enqueueSnackbar));\r\n callback(response.data.data);\r\n enqueueSnackbar(`Successfully created dashboard - ${dashboard.name}`, { variant: 'success' });\r\n } else {\r\n enqueueSnackbar(`Failed to create queue dashboard`, { variant: 'error' });\r\n callback(null);\r\n }\r\n } catch (ex) {\r\n enqueueSnackbar(`Failed to create queue dashboard`, { variant: 'error' });\r\n callback(null);\r\n }\r\n };\r\n}\r\n\r\nexport function createQueueDashboardByCopying(enqueueSnackbar, dashboard, callback) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axiosUserDataService.post('api/queueDashboard/copy', dashboard);\r\n if (response?.data?.success) {\r\n dispatch(loadQueueDashboardList(enqueueSnackbar));\r\n callback(response.data.data);\r\n enqueueSnackbar(`Successfully created dashboard - ${dashboard.name}`, { variant: 'success' });\r\n } else {\r\n callback(null);\r\n enqueueSnackbar(`Failed to create queue dashboard`, { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n callback(null);\r\n enqueueSnackbar(`Failed to create queue dashboard`, { variant: 'error' });\r\n }\r\n };\r\n}\r\n\r\n// This method is not used right now, but might be needed later\r\nexport function loadAllowedQueueAndAgentMetricsConfiguration() {\r\n return async (dispatch) => {\r\n const allowedMetrics = await getAllowedMetricsConfigurationFromAPI();\r\n if (allowedMetrics) {\r\n dispatch(setAllowedMetricsConfig(allowedMetrics));\r\n }\r\n };\r\n}\r\n\r\nexport function loadAllowedWidgetsConfig(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axiosUserDataService.get(`/api/queueDashboardMeta/allowedWidgetsConfig`);\r\n if (response?.data?.success && response.data.data) {\r\n // Success\r\n dispatch(slice.actions.setAllowedQueueMetricsWidgetConfig(response.data.data.queueMetrics));\r\n dispatch(slice.actions.setAllowedAgentTableWidgetConfig(response.data.data.agentTable));\r\n dispatch(slice.actions.setAllowedDonutOrPieChartWidgetConfig(response.data.data.donutOrPieChart));\r\n dispatch(slice.actions.setAllowedTimeseriesWidgetConfig(response.data.data.timeSeries));\r\n } else {\r\n // Failure\r\n enqueueSnackbar('Failed to load allowed widgets configuration', { variant: 'error' });\r\n console.log('Failed to load allowed widgets configuration: ', response.data.error);\r\n }\r\n } catch (ex) {\r\n if (ex.response) {\r\n // Failure from backend\r\n enqueueSnackbar('Failed to load allowed widgets configuration', { variant: 'error' });\r\n console.log('Error Response: ', ex.response);\r\n } else {\r\n // Failed to connect to backend\r\n enqueueSnackbar('Failed to load allowed widgets configuration. Please try again in some time', {\r\n variant: 'error'\r\n });\r\n console.log('Failed to connect to backend while trying to load allowed widgets configuration. Exception: ', ex);\r\n }\r\n }\r\n };\r\n}\r\n","export const Category = {\r\n QueueDataReport: 'QueueDataReport',\r\n CallDataReport: 'CallDataReport',\r\n AgentDataReport: 'AgentDataReport',\r\n QueueSummaryByHandlingTypeReport: 'QueueSummaryByHandlingTypeReport',\r\n QueueSummaryByFinalActionReport: 'QueueSummaryByFinalActionReport',\r\n QueueDailySummaryByHandlingTypeReport: 'QueueDailySummaryByHandlingTypeReport',\r\n AgentSummaryByDispositionReport: 'AgentSummaryByDispositionReport'\r\n};\r\n\r\nexport const TemplateCategory = {\r\n SummaryTemplate: 'Summary',\r\n DetailTemplate: 'Detail'\r\n};\r\n\r\nexport const SummaryTemplateCategory = {\r\n Queue: 'Queue',\r\n Agent: 'Agent'\r\n};\r\n\r\nexport const SummaryTemplateMap = {\r\n QueueSummaryByHandlingTypeReport: SummaryTemplateCategory.Queue,\r\n QueueSummaryByFinalActionReport: SummaryTemplateCategory.Queue,\r\n QueueDailySummaryByHandlingTypeReport: SummaryTemplateCategory.Queue,\r\n AgentSummaryByDispositionReport: SummaryTemplateCategory.Agent\r\n};\r\n\r\nexport const Fields = {\r\n QueueHandlingType: 'QueueHandlingType',\r\n QueueSourceType: 'QueueSourceType',\r\n Agent: 'Agent',\r\n Queue: 'Queue',\r\n QueueFinalAction: 'QueueFinalAction',\r\n QueueDisposition: 'QueueDisposition',\r\n AgentFinalAction: 'AgentFinalAction',\r\n AgentDisposition: 'AgentDisposition',\r\n CallFinalAction: 'CallFinalAction',\r\n CallDirection: 'CallDirection'\r\n};\r\nexport const GroupBy = {\r\n QueueAndDateGroups: 'QueueAndDateGroups',\r\n QueueOnly: 'QueueOnly',\r\n AgentOnly: 'AgentOnly',\r\n AgentThenQueue: 'AgentThenQueue',\r\n QueueThenAgent: 'QueueThenAgent'\r\n};\r\n\r\nexport const SummeryType = {\r\n Breakout: 'Breakout',\r\n Time: 'Time',\r\n Percent: 'Percent'\r\n};\r\n\r\nexport const DateGroup = {\r\n Quarter: 'Quarter',\r\n Month: 'Month',\r\n Week: 'Week',\r\n Date: 'Date',\r\n Hour: 'Hour'\r\n};\r\n\r\nexport const Months = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n];\r\n\r\nexport const BreakoutShowHideOptions = {\r\n HideBreakout: 'HideBreakoutWithNoData',\r\n ShowBreakout: 'ShowBreakoutWithNoData'\r\n};\r\n\r\nexport const SummaryFieldNames = {\r\n Queue: 'Queue',\r\n Agent: 'Agent',\r\n DateTime: 'DateTime',\r\n ServiceLevel: 'ServiceLevel'\r\n};\r\n\r\nexport const FormulaType = {\r\n Percentage: 'Percentage',\r\n WeightedAverage: 'WeightedAverage'\r\n};\r\n\r\nexport const CommonTimeFormat = 'HH:mm:ss';\r\n","import moment from 'moment';\r\n\r\nexport const formatGMTOffsetToHoursAndMinutes = (utcOffsetInMinutes) => {\r\n const offsetHours = (utcOffsetInMinutes / 60).toFixed(2);\r\n return offsetHours;\r\n};\r\n\r\nexport const getUtcOffsetInMinutes = (gmt) => {\r\n return Number(gmt) * 60;\r\n};\r\n\r\nexport function convertToHHmm(value) {\r\n // Attempt to parse the value as HH:mm format\r\n const parsedTime = moment(value, 'HH:mm');\r\n // If parsing is successful, return the formatted time\r\n if (parsedTime.isValid()) {\r\n return parsedTime.format('HH:mm');\r\n }\r\n return value;\r\n}\r\nexport function convertToSeconds(timeString) {\r\n const [hours, minutes, seconds] = timeString.split(':').map(Number);\r\n const totalSeconds = hours * 3600 + minutes * 60 + seconds;\r\n return totalSeconds;\r\n}\r\n\r\nexport function validateAnswerTimeThreshold(value) {\r\n const timeParts = value.split(':');\r\n\r\n if (timeParts.length !== 3) {\r\n return 'Invalid time format. Please use HH:MM:SS';\r\n }\r\n\r\n const [hours, minutes, seconds] = timeParts.map(Number);\r\n\r\n if (hours > 23 || hours < 0) {\r\n return 'Hour must be between 0 and 23';\r\n }\r\n if (minutes > 59 || minutes < 0) {\r\n return 'Minutes must be between 0 and 59';\r\n }\r\n if (seconds > 59 || seconds < 0) {\r\n return 'Seconds must be between 0 and 59';\r\n }\r\n return null;\r\n}\r\n","import moment from 'moment';\r\nimport { getStartEndDateForMonth, getStartEndDateForWeek } from './format';\r\n\r\nfunction getColorsByCallTypeDesc(callTypeDescriptions) {\r\n const callTypeColorsLight = new Map([\r\n [1, '#3C59FC'],\r\n [2, '#00DBB7'],\r\n [3, '#DF309A'],\r\n [4, '#9435F9'],\r\n [5, '#FF7819'],\r\n [6, '#3C0077'],\r\n [7, '#FF8300'],\r\n [8, '#C339BE'],\r\n [9, '#808585'],\r\n [10, '#9067A7'],\r\n [11, '#AB6857'],\r\n [12, '#CCC210']\r\n ]);\r\n const callTypeColorsDark = new Map([\r\n [1, '#3C59FC'],\r\n [2, '#00DBB7'],\r\n [3, '#DF309A'],\r\n [4, '#9435F9'],\r\n [5, '#FF7819'],\r\n [6, '#0180D4'],\r\n [7, '#FF8300'],\r\n [8, '#C339BE'],\r\n [9, '#808585'],\r\n [10, '#9067A7'],\r\n [11, '#AB6857'],\r\n [12, '#CCC210']\r\n ]);\r\n return callTypeDescriptions.reduce(\r\n (acc, currItm) => {\r\n acc.light[currItm.effCallTypeDesc] = callTypeColorsLight.get(currItm.effCallTypeCode);\r\n acc.dark[currItm.effCallTypeDesc] = callTypeColorsDark.get(currItm.effCallTypeCode);\r\n return acc;\r\n },\r\n { light: {}, dark: {} }\r\n );\r\n}\r\n\r\nexport function getMappedColors(category, callTypeDescriptions) {\r\n switch (category?.toLowerCase()) {\r\n case 'calldirection':\r\n return {\r\n light: {\r\n Outbound: '#3C59FC',\r\n Inbound: '#00DBB7',\r\n Internal: '#DF309A',\r\n 'Trunk to Trunk': '#9435F9'\r\n },\r\n dark: {\r\n Outbound: '#3C59FC',\r\n Inbound: '#00DBB7',\r\n Internal: '#DF309A',\r\n 'Trunk to Trunk': '#9435F9'\r\n }\r\n };\r\n case 'calldisposition':\r\n return {\r\n light: {\r\n 'Inbound Answered': '#3C59FC',\r\n 'Inbound Abandoned': '#00DBB7',\r\n Outbound: '#DF309A',\r\n Internal: '#9435F9'\r\n },\r\n dark: {\r\n 'Inbound Answered': '#3C59FC',\r\n 'Inbound Abandoned': '#00DBB7',\r\n Outbound: '#DF309A',\r\n Internal: '#9435F9'\r\n }\r\n };\r\n case 'calltypedesc':\r\n return getColorsByCallTypeDesc(callTypeDescriptions);\r\n default:\r\n return {\r\n light: [\r\n '#3C59FC',\r\n '#00DBB7',\r\n '#DF309A',\r\n '#9435F9',\r\n '#FF7819',\r\n '#3C0077',\r\n '#FF8300',\r\n '#C339BE',\r\n '#808585',\r\n '#9067A7',\r\n '#AB6857',\r\n '#CCC210',\r\n '#8CCBAC',\r\n '#AEA2E0',\r\n '#CBCDB5',\r\n '#EA4D41',\r\n '#F2C96D'\r\n ],\r\n dark: [\r\n '#3C59FC',\r\n '#00DBB7',\r\n '#DF309A',\r\n '#9435F9',\r\n '#FF7819',\r\n '#0180D4',\r\n '#FF8300',\r\n '#C339BE',\r\n '#808585',\r\n '#9067A7',\r\n '#AB6857',\r\n '#CCC210',\r\n '#8CCBAC',\r\n '#AEA2E0',\r\n '#CBCDB5',\r\n '#EA4D41',\r\n '#F2C96D'\r\n ]\r\n };\r\n }\r\n}\r\n\r\nexport function getInitialBarProps(graphData) {\r\n const barCategories = Object.keys(graphData[0])?.slice(1);\r\n return barCategories?.reduce((acc, itm) => {\r\n acc[itm] = false;\r\n return acc;\r\n }, {});\r\n}\r\n\r\nexport function getColumnTypeFromName(name) {\r\n switch (name) {\r\n case 'duration':\r\n return 'number';\r\n case 'date':\r\n return 'date';\r\n default:\r\n return 'string';\r\n }\r\n}\r\n\r\nexport function getDrillDownFields(xAxisField, fields) {\r\n const filteredFields = fields.filter(\r\n (fieldItm) => fieldItm.name !== 'Hour' && fieldItm.name !== 'Date' && fieldItm.name !== 'Week' && fieldItm.name !== 'Month'\r\n );\r\n return [...filteredFields, { name: xAxisField, displayName: xAxisField, function: null }];\r\n}\r\n\r\nexport function getOrgDrillDownFields(xAxisField, fields) {\r\n const filteredFields = fields.filter((fieldItm) => !fieldItm.name.startsWith('Name'));\r\n return [...filteredFields, { name: xAxisField, displayName: xAxisField, function: null }];\r\n}\r\n\r\nexport function getOrgDrillDownFilters(widgetConfig, filterValue) {\r\n const nonOrgFilters = widgetConfig.filters.filter((filterItm) => !filterItm.fieldName.startsWith('Name'));\r\n const xAxisNumber = widgetConfig.xAxisField.startsWith('Name') ? parseInt(widgetConfig.xAxisField.replace('Name', ''), 10) : 0;\r\n const existingOrgFilter = widgetConfig.filters.filter((filterItm) => filterItm.fieldName.startsWith('Name'));\r\n // Filter the existingOrgFilter to get only those filters which have a \"lower\" org level than current level\r\n const lowerLevelFilters = existingOrgFilter?.filter((itm) => {\r\n const itmNumber = parseInt(itm.fieldName.replace('Name', ''), 10);\r\n return itmNumber < xAxisNumber;\r\n });\r\n\r\n const newOrgFilters = [...lowerLevelFilters, { fieldName: widgetConfig.xAxisField, operator: 'IN', value: filterValue }];\r\n\r\n return [...nonOrgFilters, ...newOrgFilters];\r\n}\r\n\r\nexport function groupDataByOther(data, dataKey, idx) {\r\n const top7 = data.slice(0, 7);\r\n const otherCount = data.slice(7).reduce((acc, curr) => acc + curr.Count, 0);\r\n const result = [...top7];\r\n if (otherCount > 0) {\r\n result.push({ [dataKey]: 'Others', Count: otherCount, index: top7.length + idx });\r\n }\r\n return result;\r\n}\r\n\r\nexport function getOrgGroupLevel(currOrgLevel) {\r\n const level = currOrgLevel.substring(currOrgLevel.length - 1);\r\n switch (level) {\r\n case '4':\r\n return 'Name3';\r\n case '3':\r\n return 'Name2';\r\n case '2':\r\n return 'Name1';\r\n case '1':\r\n return 'OwnerName';\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\nexport function getLowerLevelGroupingParams(widgetConfig, dataVal) {\r\n let groupingLevel = null;\r\n let isoStartDate = null;\r\n let isoEndDate = null;\r\n let updatedFields = null;\r\n\r\n switch (widgetConfig.xAxisField.toLowerCase()) {\r\n case 'month':\r\n groupingLevel = 'Week';\r\n [isoStartDate, isoEndDate] = getStartEndDateForMonth(dataVal, widgetConfig);\r\n updatedFields = getDrillDownFields(groupingLevel, widgetConfig.fields);\r\n break;\r\n case 'week':\r\n groupingLevel = 'Date';\r\n [isoStartDate, isoEndDate] = getStartEndDateForWeek(dataVal);\r\n updatedFields = getDrillDownFields(groupingLevel, widgetConfig.fields);\r\n break;\r\n case 'date':\r\n groupingLevel = 'Hour';\r\n isoStartDate = moment(dataVal, 'M/D/YY').format('YYYY-MM-DD');\r\n isoEndDate = isoStartDate;\r\n updatedFields = getDrillDownFields(groupingLevel, widgetConfig.fields);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (widgetConfig.xAxisField.toLowerCase().startsWith('name')) {\r\n // call a function that takes the current xAxisField and returns new xAxisField based on level,\r\n const xAxisValue = getOrgGroupLevel(widgetConfig.xAxisField);\r\n // new field with new level, modified filter based on current level\r\n const updatedFields = getOrgDrillDownFields(xAxisValue, widgetConfig.fields);\r\n const updatedFilters = getOrgDrillDownFilters(widgetConfig, dataVal);\r\n return {\r\n xAxisField: xAxisValue,\r\n fields: updatedFields,\r\n filters: updatedFilters\r\n };\r\n // eg - if current level is Org level 4, return new xAxis as Name3, fields - Name3, filters - Name4 IN dataVal\r\n }\r\n return {\r\n groupByField: groupingLevel,\r\n xAxisField: groupingLevel,\r\n dateType: 2,\r\n startDate: isoStartDate,\r\n endDate: isoEndDate,\r\n fields: updatedFields\r\n };\r\n}\r\n\r\nexport function getYAxisCaption(caption, xAxisField) {\r\n if (xAxisField === 'Date') {\r\n return `${caption} per day`;\r\n }\r\n return `${caption} per ${xAxisField.toLowerCase()}`;\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\n// material-ui\r\nimport { Collapse, Fade, Box, Grow, Slide, Zoom } from '@mui/material';\r\n\r\n// ==============================|| TRANSITIONS ||============================== //\r\n\r\nconst Transitions = React.forwardRef(({ children, position, type, direction, ...others }, ref) => {\r\n let positionSX = {\r\n transformOrigin: '0 0 0'\r\n };\r\n\r\n switch (position) {\r\n case 'top-right':\r\n positionSX = {\r\n transformOrigin: 'top right'\r\n };\r\n break;\r\n case 'top':\r\n positionSX = {\r\n transformOrigin: 'top'\r\n };\r\n break;\r\n case 'bottom-left':\r\n positionSX = {\r\n transformOrigin: 'bottom left'\r\n };\r\n break;\r\n case 'bottom-right':\r\n positionSX = {\r\n transformOrigin: 'bottom right'\r\n };\r\n break;\r\n case 'bottom':\r\n positionSX = {\r\n transformOrigin: 'bottom'\r\n };\r\n break;\r\n case 'top-left':\r\n default:\r\n positionSX = {\r\n transformOrigin: '0 0 0'\r\n };\r\n break;\r\n }\r\n\r\n return (\r\n \r\n {type === 'grow' && (\r\n \r\n {children}\r\n \r\n )}\r\n {type === 'collapse' && (\r\n \r\n {children}\r\n \r\n )}\r\n {type === 'fade' && (\r\n \r\n {children}\r\n \r\n )}\r\n {type === 'slide' && (\r\n \r\n {children}\r\n
    \r\n )}\r\n {type === 'zoom' && (\r\n \r\n {children}\r\n \r\n )}\r\n \r\n );\r\n});\r\n\r\nTransitions.propTypes = {\r\n children: PropTypes.node,\r\n type: PropTypes.oneOf(['grow', 'fade', 'collapse', 'slide', 'zoom']),\r\n position: PropTypes.oneOf(['top-left', 'top-right', 'top', 'bottom-left', 'bottom-right', 'bottom']),\r\n direction: PropTypes.oneOf(['up', 'down', 'left', 'right'])\r\n};\r\n\r\nTransitions.defaultProps = {\r\n type: 'grow',\r\n position: 'top-left',\r\n direction: 'up'\r\n};\r\n\r\nexport default Transitions;\r\n","import moment from 'moment';\r\n\r\nexport function formatDate(dateVal) {\r\n if (!dateVal) return '';\r\n return moment(dateVal).format('M/D/YY');\r\n}\r\n\r\nexport function formatDateMD(dateVal) {\r\n if (!dateVal) return '';\r\n return moment(dateVal).format('M/D');\r\n}\r\n\r\nexport function formatHour(hourStr) {\r\n // check to see if there's a space. If there is, it means the hourStr is a `date hour` format.\r\n // if it is a `date hour` format, split the hour part.\r\n let result = '';\r\n if (!hourStr) {\r\n return result;\r\n }\r\n const formattedHourStr = hourStr.split(' ')[1] || hourStr;\r\n const numHour = parseInt(formattedHourStr, 10);\r\n if (numHour === 0) {\r\n result = `12AM`;\r\n } else if (numHour < 12) {\r\n result = `${numHour}AM`;\r\n } else {\r\n result = numHour === 12 ? `12PM` : `${numHour % 12}PM`;\r\n }\r\n return hourStr.split(' ')[1] ? `${formatDateMD(hourStr.split(' ')[0])} ${result}` : result;\r\n}\r\n\r\nexport function formatTime(timeInput) {\r\n if (timeInput === 0) {\r\n return { hour: 0, minute: 0 };\r\n }\r\n const timeStr = timeInput.toString();\r\n const min = timeStr.slice(-2);\r\n const hr = timeStr.substring(0, timeStr.length - 2);\r\n return { hour: hr, minute: min };\r\n}\r\n\r\nexport function formatDateTime(dateVal, timeVal) {\r\n let formattedTimeVal = '';\r\n if (timeVal === 0) {\r\n formattedTimeVal = '0000';\r\n } else {\r\n const hh = timeVal.toString().substr(0, 2);\r\n const mm = timeVal.toString().substr(2, 2);\r\n formattedTimeVal = `${hh}${mm}`;\r\n }\r\n return `${moment(dateVal).format('YYYYMMDD')} ${formattedTimeVal}`;\r\n}\r\n\r\nexport function formatDateISO(dateVal) {\r\n return moment(dateVal).format('YYYY-MM-DD');\r\n}\r\n\r\nexport function formatDateAsMonth(dateVal) {\r\n return moment(dateVal).format('MMM YY');\r\n}\r\n\r\nexport function formatMonthYear(monthYearStr) {\r\n const year = monthYearStr.substring(0, 4);\r\n const month = monthYearStr.substring(4);\r\n return formatDateAsMonth(new Date(year, month - 1));\r\n}\r\n\r\nexport function getWeekRange(startDate, endDate) {\r\n return `${moment(startDate).format('M/D/YY')} - ${moment(endDate).format('M/D/YY')}`;\r\n}\r\n\r\nexport function formatNumbers(num) {\r\n if (num > 999 && num < 999950) {\r\n return `${(num / 1000).toFixed(1)}K`; // convert to K for number from > 1000 < 1 million\r\n }\r\n if (num >= 999950 && num < 999950000) {\r\n return `${(num / 1000000).toFixed(1)}M`; // convert to M for number from > 1 million\r\n }\r\n if (num >= 999950000) {\r\n return `${(num / 1000000000).toFixed(1)}B`; // convert to B for number from > 1\r\n }\r\n return `${num}`;\r\n}\r\n\r\nexport function isNumeric(input) {\r\n const pattern = /^\\d*$/;\r\n if (pattern.test(input) || input === 'Delete' || input === 'Backspace' || input === 'ArrowLeft' || input === 'ArrowRight') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function getTimeRange(startDate, endDate) {\r\n return moment(endDate).diff(moment(startDate), 'hours');\r\n}\r\n\r\nexport function getStartEndDateForMonth(monthYear, widgetConfig) {\r\n const momentDate = moment.utc(`01 ${monthYear}`, 'DD MMM YY'); // convert the MMM YY format to a moment\r\n const monthYearArr = momentDate.format('M/YY').split('/');\r\n const month = monthYearArr[0];\r\n const year = monthYearArr[1];\r\n\r\n const date = moment.utc(`${month}/01/${year}`, 'M/DD/YY');\r\n let relativeDateStart = null;\r\n if (widgetConfig.dateType === 1 && widgetConfig.relativeDate === 2) {\r\n relativeDateStart = moment.utc().subtract(widgetConfig.lastX, 'days');\r\n } else {\r\n relativeDateStart = moment.utc(`${month}/01/${year}`, 'M/DD/YY');\r\n }\r\n let startDate = null;\r\n\r\n if (date.isAfter(relativeDateStart, 'day')) {\r\n startDate = date;\r\n } else {\r\n startDate = relativeDateStart;\r\n }\r\n\r\n // if start date is not Sunday, set to previous Sunday\r\n if (startDate.day() !== 0) {\r\n startDate.day(0);\r\n }\r\n const retStartDate = startDate.format('YYYY-MM-DD');\r\n\r\n let endDate;\r\n const monthStartDate = moment.utc(`${month}/01/${year}`, 'M/DD/YY');\r\n if (moment.utc().isSame(monthStartDate, 'month')) {\r\n endDate = widgetConfig.includeToday ? moment.utc() : moment.utc().subtract(1, 'days');\r\n } else {\r\n endDate = monthStartDate.endOf('month');\r\n // if end date is not Saturday, set to next Saturday\r\n if (endDate.day() !== 6) {\r\n endDate.day(6);\r\n }\r\n }\r\n\r\n return [retStartDate, endDate.format('YYYY-MM-DD')];\r\n}\r\n\r\nexport function getStartEndDateForWeek(weekRange) {\r\n const dateRangeArr = weekRange.split('-');\r\n const startDate = moment(dateRangeArr[0], 'M/D/YY').format('YYYY-MM-DD');\r\n const endDate = moment(dateRangeArr[1], 'M/D/YY').format('YYYY-MM-DD');\r\n return [startDate, endDate];\r\n}\r\n\r\nexport function formatFieldPropValue(category, value) {\r\n let retVal = value;\r\n if (category.toLowerCase().includes('calldirection')) {\r\n switch (value) {\r\n case 'O':\r\n retVal = 'Outbound';\r\n break;\r\n case 'I':\r\n retVal = 'Inbound';\r\n break;\r\n case 'E':\r\n retVal = 'Internal';\r\n break;\r\n case 'T':\r\n retVal = 'Trunk to Trunk';\r\n break;\r\n default:\r\n retVal = value;\r\n break;\r\n }\r\n } else if (category.toLowerCase().includes('calldisposition')) {\r\n switch (value) {\r\n case 'IN':\r\n retVal = 'Inbound Answered';\r\n break;\r\n case 'IA':\r\n retVal = 'Inbound Abandoned';\r\n break;\r\n case 'OU':\r\n retVal = 'Outbound';\r\n break;\r\n case 'EX':\r\n retVal = 'Internal';\r\n break;\r\n default:\r\n retVal = value;\r\n break;\r\n }\r\n }\r\n return retVal;\r\n}\r\n\r\nexport function getConfiguredCategories(catField, filters, callTypeDescriptions) {\r\n let retVal = {};\r\n let excludeValues = '';\r\n // find the filter matching the category field\r\n const catFldMatchFilter = filters.find((itm) => itm.fieldName.toLowerCase() === catField?.toLowerCase());\r\n if (catFldMatchFilter) {\r\n // if there's a matching filter, check what values should be included\r\n if (catFldMatchFilter.operator.toLowerCase() === 'in') {\r\n const filterValues = catFldMatchFilter.value.split(';');\r\n return filterValues.reduce((acc, value) => {\r\n acc[formatFieldPropValue(catField, value)] = 0;\r\n return acc;\r\n }, {});\r\n }\r\n // if filter operator is 'not includes', collect the values to exclude\r\n excludeValues = catFldMatchFilter.value.split(';').map((itm) => formatFieldPropValue(catField, itm));\r\n }\r\n switch (catField?.toLowerCase()) {\r\n case 'calldirection':\r\n retVal = {\r\n Outbound: 0,\r\n Inbound: 0,\r\n Internal: 0,\r\n 'Trunk to Trunk': 0\r\n };\r\n break;\r\n case 'calldisposition':\r\n retVal = {\r\n 'Inbound Answered': 0,\r\n 'Inbound Abandoned': 0,\r\n Outbound: 0,\r\n Internal: 0\r\n };\r\n break;\r\n case 'calltypedesc':\r\n retVal = callTypeDescriptions?.reduce((acc, currItem) => {\r\n acc[currItem.effCallTypeDesc] = 0;\r\n return acc;\r\n }, {});\r\n break;\r\n default:\r\n retVal = {};\r\n }\r\n // if there are values to be excluded, filter them out from the categories returned\r\n if (excludeValues !== '') {\r\n const retCategories = Object.keys(retVal);\r\n // console.log(retCategories.filter((cat) => excludeValues.indexOf(cat) < 0));\r\n if (retCategories.length > 0) {\r\n return retCategories\r\n .filter((cat) => excludeValues.indexOf(cat) < 0)\r\n .reduce((acc, currItm) => {\r\n acc[currItm] = retVal[currItm];\r\n return acc;\r\n }, {});\r\n }\r\n }\r\n return retVal;\r\n}\r\n\r\nexport function getOperatorDisplayName(operator) {\r\n switch (operator.toLowerCase()) {\r\n case 'in':\r\n return 'Includes';\r\n case 'not in':\r\n return 'Not Includes';\r\n case 'like':\r\n return 'Like';\r\n case 'not like':\r\n return 'Not Like';\r\n default:\r\n return operator;\r\n }\r\n}\r\n\r\nfunction isDSTApplied(utcDate, gmtOffset, dstTest) {\r\n const utcTime = utcDate.getTime();\r\n const localTime = new Date(utcTime + gmtOffset * 60 * 60 * 1000);\r\n const januaryOffset = new Date(localTime.getFullYear(), 0, 1).getTimezoneOffset();\r\n const juneOffset = new Date(localTime.getFullYear(), 6, 1).getTimezoneOffset();\r\n const isDST = Math.max(januaryOffset, juneOffset) !== localTime.getTimezoneOffset();\r\n return dstTest || isDST;\r\n}\r\n\r\nexport function convertUtcToLocal(utcTime, gmtOffset, dstTest) {\r\n // Convert UTC time string to a date object\r\n const utcDate = new Date(utcTime);\r\n\r\n // Parse the GMT offset string and calculate the local offset in minutes\r\n const offsetHours = parseInt(gmtOffset, 10);\r\n const offsetMinutes = (gmtOffset - offsetHours) * 60;\r\n const localOffset = offsetHours * 60 + offsetMinutes;\r\n\r\n const isDstSet = isDSTApplied(utcDate, gmtOffset, dstTest);\r\n // Calculate the local time by adding the UTC time and the offset\r\n const dstAddition = isDstSet ? 60 : 0;\r\n const totalMinutes = localOffset + dstAddition;\r\n const localTime = new Date(utcDate.getTime() + totalMinutes * 60 * 1000);\r\n\r\n // Format the local time string as desired\r\n const localTimeString = moment(localTime).format('M/D h:mm a');\r\n\r\n return localTimeString;\r\n}\r\n\r\nexport function getCurrentGmtAppliedDate(gmtOffset, includeToday) {\r\n const date = new Date();\r\n if (!includeToday) {\r\n date.setDate(date.getDate() - 1);\r\n }\r\n const offset = date.getTimezoneOffset();\r\n const localTime = date.getTime();\r\n const localOffset = offset / 60;\r\n const targetTime = localTime + (localOffset + parseFloat(gmtOffset)) * 60 * 60 * 1000;\r\n const targetDate = new Date(targetTime);\r\n return targetDate;\r\n}\r\n\r\n// export function fillDataForEveryHour(xAxisDataObject, widgetConfig, category, callTypeDesc) {\r\n// // if lastX Hours, calculate the last x number of Hours from current time.\r\n// // set startIndex and endIndex accordingly.\r\n// let startIndex = 0;\r\n// let endIndex = 0;\r\n// if (widgetConfig.dateType === 1 && widgetConfig.relativeDate === 1) {\r\n// const date = getCurrentGmtAppliedDate(widgetConfig.gmtOffset, true);\r\n// const utcTime = moment(date.toUTCString()).format('YYYY-MM-DD HH:mm:ss');\r\n// console.log(utcTime);\r\n// const currentTime = convertUtcToLocalMomentObj(utcTime, widgetConfig.gmtOffset);\r\n// const endTime = convertUtcToLocalMomentObj(utcTime, widgetConfig.gmtOffset); // .add(widgetConfig.gmtOffset, 'hours');\r\n// const startTime = currentTime.subtract(widgetConfig.lastX, 'hours');\r\n\r\n// startIndex = parseInt(startTime.format('H'), 10);\r\n// endIndex = parseInt(endTime.format('H'), 10);\r\n\r\n// console.log(`${startTime} ${endTime}`);\r\n// } else {\r\n// const startTimeStr = widgetConfig.startTime.toString(); // eg - 500\r\n// const endTimeStr = widgetConfig.endTime.toString(); // eg - 2200\r\n// startIndex = startTimeStr === '0' ? 0 : parseInt(startTimeStr.substring(startTimeStr.length - 2, 0), 10); // 5\r\n// endIndex = parseInt(endTimeStr.substring(endTimeStr.length - 2, 0), 10); // 22\r\n// }\r\n// const hourKeys = Object.keys(xAxisDataObject); // ['5', '6', '7'...]\r\n// const graphXAxisKeys = []; // this holds all the valid XAxis keys to be displayed on the graph\r\n// for (let i = startIndex; i <= endIndex; i += 1) {\r\n// graphXAxisKeys.push(i);\r\n// }\r\n// const filteredResults = {};\r\n// graphXAxisKeys.forEach((xAxisKey) => {\r\n// const filterData = xAxisDataObject[xAxisKey.toString()] || getConfiguredCategories(category, widgetConfig.filters, callTypeDesc);\r\n// filteredResults[xAxisKey] = filterData;\r\n// });\r\n\r\n// // const filteredHourKeys = hourKeys.filter((hourKey) => graphXAxisKeys.find((key) => key.toString() === hourKey.toString()));\r\n\r\n// // const missingHourKeys = graphXAxisKeys.filter((hourKey) => !hourKeys.find((key) => key.toString() === hourKey.toString()));\r\n\r\n// // missingHourKeys.forEach((hourKey) => {\r\n// // xAxisDataObject[hourKey] = getConfiguredCategories(category, widgetConfig.filters, callTypeDesc);\r\n// // });\r\n\r\n// return filteredResults; // || xAxisDataObject;\r\n// }\r\n\r\nexport function calculateStartEndHoursForGivenDate(dateValue, lastX) {\r\n const currentMoment = moment();\r\n // Use moment.js to parse the input date\r\n const inputMoment = moment(dateValue);\r\n\r\n const currentTime = currentMoment.hour();\r\n let endTime = currentTime;\r\n let startTime = currentTime - lastX;\r\n\r\n // Check if we are looking at a past date\r\n if (currentMoment.isAfter(inputMoment, 'day')) {\r\n // In this case, end time is the end of the day (23)\r\n endTime = 23;\r\n\r\n // Calculate start time based on how many hours we are into the next day\r\n startTime = 24 - (lastX - currentTime);\r\n if (startTime < 0) startTime = 0;\r\n } else {\r\n // In case we are looking at the current day, ensure startTime doesn't go into negative\r\n startTime = startTime < 0 ? 0 : startTime;\r\n }\r\n\r\n return [startTime, endTime];\r\n // return {startTime, endTime};\r\n}\r\n\r\nexport function fillDataForEveryHour(xAxisDataObject, widgetConfig, category, callTypeDesc, dateValue) {\r\n const startTimeStr = widgetConfig.startTime.toString(); // eg - 500\r\n const endTimeStr = widgetConfig.endTime.toString(); // eg - 2200\r\n let startIndex = 0;\r\n let endIndex = 23;\r\n // if relativeDate = 1, calculate startIndex and endIndex based on the number of lastX hours from current time.\r\n if (widgetConfig.relativeDate === 1) {\r\n // return the start and end index for the hours based on the provided date and last X values.\r\n [startIndex, endIndex] = calculateStartEndHoursForGivenDate(dateValue, widgetConfig.lastX);\r\n } else {\r\n startIndex = startTimeStr === '0' ? 0 : parseInt(startTimeStr.substring(startTimeStr.length - 2, 0), 10); // 5\r\n endIndex = parseInt(endTimeStr.substring(endTimeStr.length - 2, 0), 10); // 22\r\n }\r\n\r\n const hourKeys = Object.keys(xAxisDataObject); // ['5', '6', '7'...]\r\n\r\n const missingHourKeys = Array.from({ length: endIndex - startIndex + 1 }, (_, i) => startIndex + i).filter(\r\n (hourKey) => !hourKeys.find((key) => key === hourKey.toString())\r\n );\r\n\r\n missingHourKeys.forEach((hourKey) => {\r\n xAxisDataObject[hourKey] = getConfiguredCategories(category, widgetConfig.filters, callTypeDesc);\r\n });\r\n\r\n return xAxisDataObject;\r\n}\r\n\r\nexport function formatWeekNumber(weekNum, widgetConfig) {\r\n const { dateType, lastX, relativeDate, includeToday, gmtOffset, startDate, endDate } = widgetConfig;\r\n // Extract the year and week number from the input string\r\n const year = weekNum.substring(0, 4);\r\n const weekNumber = parseInt(weekNum.substring(4), 10);\r\n\r\n // Calculate the date of January 1st of the year\r\n const janFirst = new Date(year, 0, 1);\r\n // Find the day of the week of January 1st (0 = Sunday, 1 = Monday, etc.)\r\n const janFirstDay = janFirst.getDay();\r\n // Calculate the number of days to the first day of the target week\r\n const daysDiffToTargetWeek = 7 * (weekNumber - 2);\r\n const daysToTargetWeek = 7 - janFirstDay + daysDiffToTargetWeek;\r\n // Calculate the date of the first day of the target week\r\n let firstDayOfWeek = new Date(year, 0, daysToTargetWeek + 1);\r\n const sixDaysLater = moment(firstDayOfWeek).add(6, 'days');\r\n const lastDayOfWeek = sixDaysLater.isSameOrBefore(moment()) ? sixDaysLater : moment();\r\n if (dateType === 2) {\r\n const momentStart = moment(startDate);\r\n const momentEnd = moment(endDate);\r\n // Check if the week is within the date range\r\n if (lastDayOfWeek >= momentStart && moment(firstDayOfWeek) <= momentEnd) {\r\n // Get the maximum date for the week end\r\n const weekEnd = lastDayOfWeek.isSameOrBefore(momentEnd) ? lastDayOfWeek : momentEnd;\r\n\r\n // Get the minimum date for the week start\r\n const weekStart = moment(firstDayOfWeek).isSameOrAfter(momentStart) ? moment(firstDayOfWeek) : momentStart;\r\n\r\n return getWeekRange(weekStart, weekEnd);\r\n }\r\n }\r\n // if relative date and relative date type of days, calculate the start day based on lastX value\r\n if (dateType === 1 && relativeDate === 2) {\r\n const lastXDate = getCurrentGmtAppliedDate(gmtOffset, includeToday);\r\n lastXDate.setDate(lastXDate.getDate() - lastX);\r\n if (firstDayOfWeek < lastXDate) {\r\n firstDayOfWeek = lastXDate;\r\n }\r\n return getWeekRange(moment(firstDayOfWeek), lastDayOfWeek);\r\n }\r\n // If Current Month selected\r\n if (dateType === 1 && relativeDate === 4) {\r\n return getWeekRange(moment(firstDayOfWeek), lastDayOfWeek);\r\n }\r\n return null;\r\n}\r\n\r\nexport function getDatesForSelectedDays(lastX, gmtOffset, weekdays, includeToday, passedDate) {\r\n const dates = [];\r\n const startDate = passedDate || getCurrentGmtAppliedDate(gmtOffset, includeToday);\r\n for (let i = 0; i <= lastX; i += 1) {\r\n const date = new Date(startDate.getTime());\r\n date.setDate(date.getDate() - i);\r\n if (weekdays.includes(date.getDay() + 1)) {\r\n // dates.push(date.toLocaleDateString());\r\n dates.push(formatDateISO(date));\r\n }\r\n }\r\n return dates;\r\n}\r\n\r\nexport function getMonthsForSelectedDays(lastX, gmtOffset, includeToday, passedDate) {\r\n const today = passedDate ? new Date(passedDate) : getCurrentGmtAppliedDate(gmtOffset, includeToday);\r\n const startDate = passedDate ? new Date(passedDate) : getCurrentGmtAppliedDate(gmtOffset, includeToday);\r\n startDate.setDate(new Date().getDate() - lastX);\r\n const endDate = today; // includeToday ? today : new Date(today.setDate(today.getDate() - 1));\r\n\r\n const months = [];\r\n\r\n let currMonth = startDate.getMonth();\r\n let currYear = startDate.getFullYear();\r\n\r\n while (currYear < endDate.getFullYear() || (currYear === endDate.getFullYear() && currMonth <= endDate.getMonth())) {\r\n const dateToAdd = new Date(currYear, currMonth, 1);\r\n months.push(moment(dateToAdd).format('YYYYMM'));\r\n currMonth += 1;\r\n if (currMonth === 12) {\r\n currMonth = 0;\r\n currYear += 1;\r\n }\r\n }\r\n return months;\r\n}\r\n\r\nexport function getDatesForSelectedMonths(months, gmtOffset, daysOfWeek, includeThisMonth, passedDate) {\r\n const date = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const result = [];\r\n const start = includeThisMonth ? 0 : 1;\r\n for (let i = start; i <= months; i += 1) {\r\n const prevMonth = new Date(date.getFullYear(), date.getMonth() - i, 1);\r\n const prevMonthDays = new Date(prevMonth.getFullYear(), prevMonth.getMonth() + 1, 0).getDate();\r\n for (let j = prevMonthDays; j > 0; j -= 1) {\r\n const prevDate = new Date(prevMonth.getFullYear(), prevMonth.getMonth(), j);\r\n const dayOfWeek = prevDate.getUTCDay();\r\n if (includeThisMonth && i === 0) {\r\n if (daysOfWeek.includes(dayOfWeek + 1) && prevDate <= date) {\r\n result.push(formatDateISO(prevDate));\r\n }\r\n } else if (daysOfWeek.includes(dayOfWeek + 1)) {\r\n result.push(formatDateISO(prevDate));\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction getWeekNumber(date) {\r\n const firstDayOfYear = new Date(date.getFullYear(), 0, 1);\r\n const daysSinceFirstDayOfYear = (date.getTime() - firstDayOfYear.getTime()) / (24 * 60 * 60 * 1000);\r\n const weekNumber = Math.ceil((daysSinceFirstDayOfYear + firstDayOfYear.getDay() + 1) / 7);\r\n return weekNumber;\r\n}\r\n\r\nexport function getWeeksForSelectedDays(lastX, gmtOffset, includeToday, passedDate) {\r\n const today = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const startDate = new Date(today.getTime() - lastX * 24 * 60 * 60 * 1000);\r\n const endDate = includeToday ? today : new Date(today.getTime() - 1 * 24 * 60 * 60 * 1000);\r\n const weekNumbers = new Set();\r\n\r\n for (let date = startDate; date < endDate; date.setDate(date.getDate() + 1)) {\r\n const weekNumber = getWeekNumber(date);\r\n // const formattedWeekNum = weekNumber < 10 ? `0${weekNumber}` : weekNumber;\r\n const year = date.getFullYear();\r\n weekNumbers.add(`${year}${weekNumber}`);\r\n }\r\n\r\n return Array.from(weekNumbers);\r\n}\r\n\r\nexport function getMonthsForSelectedMonths(lastX, gmtOffset, includeThisMonth, passedDate) {\r\n const months = [];\r\n const now = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const currentMonth = now.getMonth();\r\n const currentYear = now.getFullYear();\r\n\r\n for (let i = 0; i <= lastX; i += 1) {\r\n let month = currentMonth - i;\r\n let year = currentYear;\r\n\r\n if (month < 0) {\r\n month += 12;\r\n year -= 1;\r\n }\r\n months.push(moment(new Date(year, month)).format('YYYYMM'));\r\n }\r\n\r\n if (!includeThisMonth) {\r\n months.shift();\r\n }\r\n return months;\r\n}\r\n\r\nexport function getWeeksForSelectedMonths(lastXMonths, gmtOffset, includeThisMonth, passedDate) {\r\n const today = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const startDate = new Date(today.getFullYear(), today.getMonth() - lastXMonths, 1);\r\n const endDate = includeThisMonth ? today : new Date(today.getFullYear(), today.getMonth(), 0);\r\n const weekNumbers = new Set();\r\n\r\n for (let date = startDate; date <= endDate; date.setDate(date.getDate() + 1)) {\r\n const weekNumber = getWeekNumber(date);\r\n // const formattedWeekNum = weekNumber < 10 ? `0${weekNumber}` : weekNumber;\r\n const year = date.getFullYear();\r\n weekNumbers.add(`${year}${weekNumber}`);\r\n }\r\n\r\n return Array.from(weekNumbers);\r\n}\r\n\r\nexport function getDatesFromHours(lastX, gmtOffset, passedDate) {\r\n const date = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const result = [];\r\n for (let i = 0; i < lastX; i += 1) {\r\n const prevHour = new Date(date.getTime());\r\n prevHour.setHours(prevHour.getHours() - i);\r\n const formattedDate = formatDateISO(prevHour);\r\n if (!result.includes(formattedDate)) {\r\n result.push(formattedDate);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function getDatesForCurrentMonth(gmtOffset, weekdays, passedDate) {\r\n const date = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const result = [];\r\n const start = new Date(date.getFullYear(), date.getMonth(), 1);\r\n const end = date;\r\n for (let i = start; i <= end; i.setDate(i.getDate() + 1)) {\r\n const currentDate = new Date(i);\r\n const dayOfWeek = currentDate.getUTCDay();\r\n if (weekdays.includes(dayOfWeek + 1)) {\r\n result.push(formatDateISO(currentDate));\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function getCurrentMonth(gmtOffset) {\r\n const today = getCurrentGmtAppliedDate(gmtOffset, true);\r\n return [moment(today).format('YYYYMM')];\r\n}\r\n\r\nexport function getWeeksForCurrentMonth(gmtOffset, passedDate) {\r\n const today = passedDate || getCurrentGmtAppliedDate(gmtOffset, true);\r\n const startDate = new Date(today.getFullYear(), today.getMonth(), 1);\r\n const endDate = today;\r\n const weekNumbers = new Set();\r\n\r\n for (let date = startDate; date <= endDate; date.setDate(date.getDate() + 1)) {\r\n const weekNumber = getWeekNumber(date);\r\n // const formattedWeekNum = weekNumber < 10 ? `0${weekNumber}` : weekNumber;\r\n const year = date.getFullYear();\r\n weekNumbers.add(`${year}${weekNumber}`);\r\n }\r\n\r\n return Array.from(weekNumbers);\r\n}\r\n\r\nexport function getDatesBetween(startDate, endDate) {\r\n const result = [];\r\n let currentDate = moment(startDate);\r\n const end = moment(endDate);\r\n while (currentDate <= end) {\r\n result.push(formatDateISO(currentDate));\r\n currentDate = currentDate.add(1, 'days');\r\n }\r\n return result;\r\n}\r\n\r\nexport function getMonthsBetween(startDateStr, endDateStr) {\r\n const startDate = new Date(startDateStr);\r\n const endDate = new Date(endDateStr);\r\n const startMonth = startDate.getMonth();\r\n const endMonth = endDate.getMonth();\r\n const startYear = startDate.getFullYear();\r\n const endYear = endDate.getFullYear();\r\n const monthYearList = [];\r\n\r\n for (let year = startYear; year <= endYear; year += 1) {\r\n const start = year === startYear ? startMonth : 0;\r\n const end = year === endYear ? endMonth : 11;\r\n\r\n for (let month = start; month <= end; month += 1) {\r\n const date = new Date(year, month, 1);\r\n const monthYearStr = `${moment(date).format('MM-YY')}`;\r\n monthYearList.push(monthYearStr);\r\n }\r\n }\r\n\r\n return monthYearList;\r\n}\r\n\r\nexport function getWeeksBetween(startDate, endDate) {\r\n const start = new Date(startDate);\r\n const end = new Date(endDate);\r\n const weekNumbers = new Set();\r\n\r\n for (let date = start; date <= end; date.setDate(date.getDate() + 1)) {\r\n const weekNumber = getWeekNumber(date);\r\n const year = date.getFullYear();\r\n weekNumbers.add(`${year}${weekNumber}`);\r\n }\r\n\r\n return Array.from(weekNumbers);\r\n}\r\n\r\nexport function getListOfWeeksToDisplay({ dateType, relativeDate, lastX, gmtOffset, includeToday, weekdays, startDate, endDate }) {\r\n if (dateType === 1) {\r\n switch (relativeDate.toString()) {\r\n case '2':\r\n return getWeeksForSelectedDays(lastX, gmtOffset, includeToday);\r\n case '3':\r\n return getWeeksForSelectedMonths(lastX, gmtOffset, includeToday);\r\n case '4':\r\n return getWeeksForCurrentMonth(gmtOffset);\r\n default:\r\n return [];\r\n }\r\n } else {\r\n return getWeeksBetween(startDate, endDate);\r\n }\r\n}\r\n\r\nexport function getListOfMonthsToDisplay({ dateType, relativeDate, lastX, gmtOffset, includeToday, weekdays, startDate, endDate }) {\r\n if (dateType === 1) {\r\n switch (relativeDate.toString()) {\r\n case '2':\r\n return getMonthsForSelectedDays(lastX, gmtOffset, includeToday);\r\n case '3':\r\n return getMonthsForSelectedMonths(lastX, gmtOffset, includeToday);\r\n case '4':\r\n return getCurrentMonth(gmtOffset);\r\n default:\r\n return [];\r\n }\r\n } else {\r\n return getMonthsBetween(startDate, endDate);\r\n }\r\n}\r\n\r\nexport function getListOfDatesToDisplay({ dateType, relativeDate, lastX, gmtOffset, includeToday, weekdays, startDate, endDate }) {\r\n if (dateType === 1) {\r\n switch (relativeDate.toString()) {\r\n case '1':\r\n return getDatesFromHours(lastX, gmtOffset);\r\n case '2':\r\n return getDatesForSelectedDays(lastX, gmtOffset, weekdays, includeToday);\r\n case '3':\r\n return getDatesForSelectedMonths(lastX, gmtOffset, weekdays, includeToday);\r\n case '4':\r\n return getDatesForCurrentMonth(gmtOffset, weekdays);\r\n default:\r\n return [];\r\n }\r\n } else {\r\n return getDatesBetween(startDate, endDate);\r\n }\r\n}\r\n\r\nexport function fillDataForSelectedDateRange(dataObj, widgetConfig, category, callTypeDesc) {\r\n const allDates = getListOfDatesToDisplay(widgetConfig);\r\n const dataDates = Object.keys(dataObj);\r\n const missingDates = allDates.filter((dateKey) => !dataDates.find((key) => formatDateISO(key) === dateKey));\r\n missingDates.forEach((dateKey) => {\r\n dataObj[dateKey] = getConfiguredCategories(category, widgetConfig.filters, callTypeDesc);\r\n });\r\n return dataObj;\r\n}\r\n\r\nexport function fillDataForSelectedMonths(dataObj, widgetConfig, category, callTypeDesc) {\r\n const allMonths = getListOfMonthsToDisplay(widgetConfig);\r\n const dataMonths = Object.keys(dataObj);\r\n const missingMonths = allMonths.filter((monthKey) => !dataMonths.find((key) => key === monthKey));\r\n missingMonths.forEach((monthKey) => {\r\n dataObj[monthKey] = getConfiguredCategories(category, widgetConfig.filters, callTypeDesc);\r\n });\r\n return dataObj;\r\n}\r\n\r\nexport function fillDataForSelectedWeeks(dataObj, widgetConfig, category, callTypeDesc) {\r\n const allWeeks = getListOfWeeksToDisplay(widgetConfig);\r\n const dataWeeks = Object.keys(dataObj);\r\n const missingWeeks = allWeeks.filter((weekKey) => !dataWeeks.find((key) => key === weekKey));\r\n missingWeeks.forEach((weekKey) => {\r\n dataObj[weekKey] = getConfiguredCategories(category, widgetConfig.filters, callTypeDesc);\r\n });\r\n return dataObj;\r\n}\r\n\r\nexport function formatDataByDateHour(dateGroupObj, widgetConfig, category, callTypeDesc) {\r\n // fill in data for all dates selected\r\n const allDisplayDates = getListOfDatesToDisplay(widgetConfig);\r\n const dataDates = Object.keys(dateGroupObj);\r\n const missingDates = allDisplayDates.filter((dateKey) => !dataDates.find((key) => formatDateISO(key) === dateKey));\r\n missingDates.forEach((dateKey) => {\r\n dateGroupObj[dateKey] = fillDataForEveryHour({}, widgetConfig, category, callTypeDesc, dateKey);\r\n });\r\n // return an array grouped by date/hour\r\n // const retArr = Object.entries(dateGroupObj).flatMap(([date, hourValues]) =>\r\n // hourValues.map((obj) => {\r\n // const hour = Object.keys(obj)[0];\r\n // const hourlyData = obj[hour];\r\n // const newObj = { name: `${formatDate(date)} ${formatHour(hour)}` };\r\n // return { ...newObj, ...hourlyData };\r\n // })\r\n // );\r\n // return retArr;\r\n const retObj = {};\r\n const dates = Object.keys(dateGroupObj);\r\n dates.forEach((date) => {\r\n const hourObj = dateGroupObj[date];\r\n Object.keys(hourObj).forEach((hour) => {\r\n retObj[`${date} ${hour}`] = dateGroupObj[date][hour];\r\n });\r\n });\r\n return retObj;\r\n}\r\n\r\nexport function reduceByDate(inputArray) {\r\n return inputArray?.reduce((acc, itm) => {\r\n if (acc[itm.date]) {\r\n acc[itm.date] = [...acc[itm.date], itm];\r\n } else {\r\n acc[itm.date] = [itm];\r\n }\r\n return acc;\r\n }, {});\r\n}\r\n\r\nexport function startEndDateDifference(startDate, endDate) {\r\n const dateFormat = 'YYYY-MM-DD';\r\n const start = moment(startDate, dateFormat);\r\n const end = moment(endDate, dateFormat);\r\n const differenceInDays = end.diff(start, 'days');\r\n return differenceInDays;\r\n}\r\n","export default __webpack_public_path__ + \"static/media/403.ba4bb1fe.svg\";","import { Link } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { styled } from '@mui/material/styles';\r\nimport { Button, Card, CardMedia, Grid, Typography } from '@mui/material';\r\n\r\n// project imports\r\nimport { DASHBOARD_PATH } from 'config';\r\nimport AnimateButton from 'ui-component/extended/AnimateButton';\r\nimport { gridSpacing } from 'store/constant';\r\n\r\n// assets\r\nimport { IconDashboard } from '@tabler/icons';\r\n\r\nimport image403 from 'assets/images/maintenance/403.svg';\r\n\r\n// styles\r\nconst CardMediaWrapper = styled('div')({\r\n maxWidth: 720,\r\n margin: '0 auto',\r\n position: 'relative'\r\n});\r\n\r\nconst ErrorWrapper = styled('div')({\r\n maxWidth: 350,\r\n margin: 'auto',\r\n textAlign: 'center'\r\n});\r\n\r\nconst ErrorCard = styled(Card)({\r\n minHeight: '100vh',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n});\r\n\r\n// ==============================|| ERROR PAGE ||============================== //\r\n\r\nconst NoAccess = ({ hideDashboard }) => {\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 Error 403\r\n \r\n \r\n \r\n {`You don't have permission to access this resource.`}\r\n \r\n {!hideDashboard && (\r\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 NoAccess;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { axiosNotificationService } from 'utils/axios';\r\n\r\n// initial state\r\nexport const initialState = {\r\n notifications: [],\r\n isNewNotification: false,\r\n loading: false,\r\n error: null,\r\n temp: false,\r\n hasMoreData: true\r\n};\r\n\r\n// ==============================|| SLICE - notifications ||============================== //\r\nconst notifications = createSlice({\r\n name: 'notifications',\r\n initialState,\r\n reducers: {\r\n fetchNotificationsRequest(state) {\r\n // state.loading = true;\r\n state.hasMoreData = true;\r\n },\r\n fetchNotificationsFailure(state, action) {\r\n // state.loading = false;\r\n state.error = action.payload;\r\n },\r\n fetchNotificationsSuccess(state, action) {\r\n state.temp = false;\r\n // state.loading = false;\r\n for (let i = 0; i < action.payload.data.length; i += 1) {\r\n if (action.payload.data[i].deliveryStatus === 'Unread') {\r\n state.isNewNotification = true;\r\n state.temp = true;\r\n break;\r\n }\r\n }\r\n if (!state.temp) {\r\n state.isNewNotification = false;\r\n }\r\n if (!action.payload.fromLazyLoading) {\r\n state.notifications = action.payload.data;\r\n } else {\r\n state.notifications = state.notifications.concat(action.payload.data);\r\n }\r\n if (action.payload.data.length < 10) {\r\n state.hasMoreData = false;\r\n }\r\n },\r\n fetchNotificationsReadSuccess(state, action) {\r\n state.temp = false;\r\n for (let i = 0; i < state.notifications.length; i += 1) {\r\n if (state.notifications[i].notificationId === action.payload) {\r\n state.notifications[i].deliveryStatus = 'Read';\r\n }\r\n if (state.notifications[i].deliveryStatus === 'Unread') {\r\n state.isNewNotification = true;\r\n state.temp = true;\r\n break;\r\n }\r\n }\r\n if (!state.temp) {\r\n state.isNewNotification = false;\r\n }\r\n },\r\n clearAllNotificationsRequest(state, action) {\r\n state.loading = true;\r\n },\r\n clearAllNotificationSuccess(state, action) {\r\n state.loading = false;\r\n state.notifications = [];\r\n state.isNewNotification = false;\r\n },\r\n clearAllNotificationFailure(state, action) {\r\n state.loading = false;\r\n }\r\n }\r\n});\r\n\r\nexport function fetchNotifications(offset, fromLazyLoading) {\r\n return async (dispatch) => {\r\n const payload = { offset, size: 10 };\r\n dispatch(notifications.actions.fetchNotificationsRequest());\r\n\r\n try {\r\n const response = await axiosNotificationService.get('/notifications', { params: payload });\r\n if (response?.data?.success) {\r\n const data = response.data.data;\r\n dispatch(notifications.actions.fetchNotificationsSuccess({ data, fromLazyLoading }));\r\n } else {\r\n dispatch(notifications.actions.fetchNotificationsFailure(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(notifications.actions.fetchNotificationsFailure(ex.response));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function fetchNotification(id, handleRedirection) {\r\n return async (dispatch) => {\r\n // const payload = { id };\r\n dispatch(notifications.actions.fetchNotificationsRequest());\r\n\r\n try {\r\n const response = await axiosNotificationService.patch(`/notifications/${id}/read`);\r\n if (response?.data?.success) {\r\n dispatch(notifications.actions.fetchNotificationsReadSuccess(id));\r\n handleRedirection();\r\n } else {\r\n dispatch(notifications.actions.fetchNotificationsFailure(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(notifications.actions.fetchNotificationsFailure(ex.response));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function setNotification(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n await axiosNotificationService.post('/notifications', payload);\r\n\r\n dispatch(fetchNotifications());\r\n enqueueSnackbar(payload.successMessage || 'Notification saved successfully', { variant: 'info' });\r\n } catch (ex) {\r\n console.log(ex);\r\n enqueueSnackbar(payload.ErrorMessage || 'Failed to save notification', { variant: 'error' });\r\n }\r\n };\r\n}\r\n\r\nexport function clearAllNotifications() {\r\n return async (dispatch) => {\r\n dispatch(notifications.actions.clearAllNotificationsRequest());\r\n\r\n try {\r\n const response = await axiosNotificationService.patch(`/notifications/dismissAll`);\r\n if (response?.data?.success) {\r\n dispatch(notifications.actions.clearAllNotificationSuccess());\r\n } else {\r\n dispatch(notifications.actions.clearAllNotificationFailure(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(notifications.actions.clearAllNotificationFailure(ex.response));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport default notifications.reducer;\r\n\r\nexport const { fetchNotificationsRequest, fetchNotificationsFailure, fetchNotificationsSuccess } = notifications.actions;\r\n","import moment from 'moment';\r\n\r\nexport const GUID_REGEX =\r\n '^(?:\\\\{{0,1}(?:[0-9a-fA-F]){8}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){4}-(?:[0-9a-fA-F]){12}\\\\}{0,1})$';\r\n\r\nexport const GUID_PLACEHOLDER = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';\r\n\r\nexport default function debounce(fn, delay) {\r\n let timer;\r\n\r\n return function (...args) {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n fn(...args);\r\n }, delay);\r\n };\r\n}\r\n\r\nexport function sortDateHour(a, b) {\r\n if (a.indexOf(' ') === -1 && b.indexOf(' ') === -1) return parseInt(a, 10) - parseInt(b, 10);\r\n const [aDate, aHour] = a.split(' ');\r\n const [bDate, bHour] = b.split(' ');\r\n\r\n const aDateObj = new Date(aDate);\r\n const bDateObj = new Date(bDate);\r\n\r\n if (aDateObj < bDateObj) {\r\n return -1;\r\n }\r\n if (aDateObj > bDateObj) {\r\n return 1;\r\n }\r\n return parseInt(aHour, 10) - parseInt(bHour, 10);\r\n}\r\n\r\nexport function sortMonthDate(a, b) {\r\n const aYear = parseInt(a.substring(0, 4), 10);\r\n const bYear = parseInt(b.substring(0, 4), 10);\r\n const aMonth = parseInt(a.substring(4), 10);\r\n const bMonth = parseInt(b.substring(4), 10);\r\n\r\n if (aYear < bYear) {\r\n return -1;\r\n }\r\n if (aYear > bYear) {\r\n return 1;\r\n }\r\n return aMonth - bMonth;\r\n}\r\n\r\nexport function sortYearWeek(a, b) {\r\n const aYear = parseInt(a.substring(0, 4), 10);\r\n const bYear = parseInt(b.substring(0, 4), 10);\r\n const aWeekNum = parseInt(a.substring(4), 10);\r\n const bWeekNum = parseInt(b.substring(4), 10);\r\n\r\n if (aYear < bYear) {\r\n return -1;\r\n }\r\n if (aYear > bYear) {\r\n return 1;\r\n }\r\n return aWeekNum - bWeekNum;\r\n}\r\n\r\nexport function validate63Days(startDate, endDate) {\r\n const start = moment(startDate);\r\n const end = moment(endDate);\r\n\r\n const daysDiff = end.diff(start, 'days');\r\n return daysDiff;\r\n}\r\n\r\nexport function isDateValid(inputDate) {\r\n if (inputDate && inputDate.isValid() && inputDate.isAfter('1900-01-01')) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n","import { getTimeRange } from './format';\r\nimport axios from 'utils/axios';\r\n\r\nexport const FilterType = {\r\n input: 'Input',\r\n dropDown_SingleSelect: 'DropDown_SingleSelect',\r\n dropDown_MultiSelect: 'DropDown_MultiSelect',\r\n lookUp_SingleSelect: 'LookUp_SingleSelect',\r\n lookUp_MultiSelect: 'LookUp_MultiSelect',\r\n lookUp_MultiSelect_Input: 'LookUp_MultiSelect_Input',\r\n orgTree: 'OrgTree',\r\n duration: 'Duration'\r\n};\r\n\r\nexport const OperatorType = {\r\n numeric: 'Numeric',\r\n alphaNumeric: 'AlphaNumeric',\r\n boolean: 'Boolean',\r\n money: 'Money'\r\n};\r\nexport const CallOwnership = {\r\n Placed: 'Placed',\r\n Received: 'Received',\r\n Both: 'Both'\r\n};\r\n\r\nexport function getOperators(filterName) {\r\n const operators = [\r\n { label: 'Includes', value: 'IN' },\r\n { label: 'Not Includes', value: 'NOT IN' }\r\n ];\r\n switch (filterName) {\r\n case 'DataSourceName':\r\n return [...operators, { label: 'like', value: 'LIKE' }, { label: 'Not like', value: 'NOT LIKE' }];\r\n case 'CallDirection':\r\n case 'CallDisposition':\r\n return operators;\r\n case 'ExtensionLocation':\r\n default:\r\n return [\r\n ...operators,\r\n { label: 'like', value: 'LIKE' },\r\n { label: 'not like', value: 'NOT LIKE' },\r\n { label: '<=', value: '<=' },\r\n { label: '>=', value: '>=' }\r\n ];\r\n }\r\n}\r\n\r\nexport function getNonOrgBasedFilters() {\r\n return [\r\n {\r\n label: 'Data source',\r\n value: 'DataSourceName'\r\n },\r\n {\r\n label: 'Extension Location',\r\n value: 'ExtensionLocation'\r\n },\r\n {\r\n label: 'Call Direction',\r\n value: 'CallDirection'\r\n },\r\n {\r\n label: 'Call Disposition',\r\n value: 'CallDisposition'\r\n }\r\n ];\r\n}\r\n\r\nexport function mapOrgNameToDesc(fldName, orgLevelDescriptions) {\r\n const orgInfo = orgLevelDescriptions?.find((org) => org.level === parseInt(fldName.slice(-1), 10));\r\n return orgInfo ? orgInfo.description : fldName;\r\n}\r\n\r\nexport function readDisplayName(fldName, orgLevelDescriptions) {\r\n switch (fldName) {\r\n case 'DataSourceName':\r\n return 'Data source';\r\n case 'ExtensionLocation':\r\n return 'Extension Location';\r\n case 'CallDirection':\r\n return 'Call Direction';\r\n case 'CallDisposition':\r\n return 'Call Disposition';\r\n default:\r\n return mapOrgNameToDesc(fldName, orgLevelDescriptions);\r\n }\r\n}\r\n\r\nexport const availableFiltersList = [\r\n {\r\n filterName: 'DataSourceName',\r\n displayName: 'Data Source',\r\n filterType: 'operatorWithLookup',\r\n lookUpColumns: [\r\n {\r\n dataField: 'value',\r\n caption: 'Data Source'\r\n },\r\n {\r\n dataField: 'id',\r\n caption: 'ID'\r\n }\r\n ],\r\n operators: [\r\n { label: 'Includes', value: 'IN' },\r\n { label: 'Not Includes', value: 'NOT IN' },\r\n { label: 'Like', value: 'LIKE' },\r\n { label: 'Not Like', value: 'NOT LIKE' }\r\n ]\r\n },\r\n {\r\n filterName: 'ExtensionLocation',\r\n displayName: 'Extension Location',\r\n filterType: 'operatorWithLookup',\r\n lookUpColumns: [\r\n {\r\n dataField: 'value',\r\n caption: 'Extension Location'\r\n },\r\n {\r\n dataField: 'dataSource',\r\n caption: 'Data Source'\r\n }\r\n ],\r\n operators: [\r\n { label: 'Includes', value: 'IN' },\r\n { label: 'Not Includes', value: 'NOT IN' },\r\n { label: 'Like', value: 'LIKE' },\r\n { label: 'Not Like', value: 'NOT LIKE' }\r\n ]\r\n },\r\n {\r\n filterName: 'CallDirection',\r\n displayName: 'Call Direction',\r\n filterType: 'multiSelection',\r\n operators: []\r\n },\r\n {\r\n filterName: 'CallDisposition',\r\n displayName: 'Call Disposition',\r\n filterType: 'multiSelection',\r\n operators: []\r\n },\r\n {\r\n filterName: 'Name{n}',\r\n displayName: 'Directory Filter',\r\n filterType: 'treeSelection',\r\n operators: []\r\n }\r\n];\r\n\r\nexport function formatOrgDataForTree(orgList, orgLevelDescriptions, savedOrgFilters) {\r\n const usedLevels = orgLevelDescriptions.filter((desc) => !desc.description.toLowerCase().includes('unused'));\r\n\r\n // Recursive function to traverse and transform the organization tree\r\n const traverse = (org, parentSelected) => {\r\n const orgLevelName = `Name${org.orgLevel}`;\r\n const currentFilter = savedOrgFilters?.find((filter) => filter.fieldName === orgLevelName);\r\n\r\n // Skip org levels not found in usedLevels\r\n if (!usedLevels.find((l) => org.orgLevel === l.level)) {\r\n return org.children.map((childOrg) => traverse(childOrg, parentSelected)).flat();\r\n }\r\n\r\n let selected = false;\r\n if (currentFilter) {\r\n const isInFilter = currentFilter.value.split(';').includes(org.orgName);\r\n if (isInFilter && (parentSelected || !savedOrgFilters?.find((filter) => filter.fieldName === `Name${org.orgLevel + 1}`))) {\r\n selected = true;\r\n }\r\n }\r\n\r\n const items = org.children.map((childOrg) => traverse(childOrg, selected));\r\n\r\n const formattedOrg = {\r\n orgId: org.orgId,\r\n orgLevel: org.orgLevel,\r\n orgLevelDescription: usedLevels.find((l) => org.orgLevel === l.level)?.description,\r\n orgName: `${org.orgName}`,\r\n parentId: org.parentId,\r\n selected,\r\n expanded: items.some((item) => item.selected),\r\n items\r\n };\r\n\r\n return formattedOrg;\r\n };\r\n\r\n // Initial call to traverse the orgArray\r\n const result = orgList.map((org) => traverse(org, false)).flat();\r\n return result;\r\n}\r\n\r\nexport function getStaticFilterValues(filterName) {\r\n switch (filterName) {\r\n case 'CallDirection':\r\n return [\r\n { label: 'Inbound', value: 'I' },\r\n { label: 'Internal', value: 'E' },\r\n { label: 'Outbound', value: 'O' },\r\n { label: 'Trunk to Trunk', value: 'T' }\r\n ];\r\n case 'CallDisposition':\r\n return [\r\n { label: 'Inbound Answered', value: 'IN' },\r\n { label: 'Outbound', value: 'OU' },\r\n { label: 'Inbound Abandoned', value: 'IA' },\r\n { label: 'Internal', value: 'EX' }\r\n ];\r\n default:\r\n return [];\r\n }\r\n}\r\n\r\nexport async function getFilterLookUpData(ownerId, filterName) {\r\n try {\r\n let response;\r\n switch (filterName.toLowerCase()) {\r\n case 'datasourcename':\r\n response = await axios.get(`/sites?ownerId=${ownerId}`);\r\n return response?.data?.map((dataSource) => ({\r\n label: dataSource.name,\r\n value: dataSource.name,\r\n id: dataSource.siteId\r\n }));\r\n case 'extensionlocation':\r\n response = await axios.get(`/locations`);\r\n return response.data.map((item) => ({\r\n label: item.locationName,\r\n value: item.locationName,\r\n dataSource: item.dataSourceName\r\n }));\r\n default:\r\n return [];\r\n }\r\n } catch (ex) {\r\n console.log(ex.message);\r\n return [];\r\n }\r\n}\r\n\r\n// export function mapOrgNameToDesc(fldName, orgLevelDescriptions) {\r\n// const orgInfo = orgLevelDescriptions?.find((org) => org.level === parseInt(fldName.slice(-1), 10));\r\n// return orgInfo ? orgInfo.description : fldName;\r\n// }\r\n\r\n// export function readDisplayName(fldName, orgLevelDescriptions) {\r\n// switch (fldName) {\r\n// case 'DataSourceName':\r\n// return 'Data source';\r\n// case 'ExtensionLocation':\r\n// return 'Extension Location';\r\n// case 'CallDirection':\r\n// return 'Call Direction';\r\n// case 'CallDisposition':\r\n// return 'Call Disposition';\r\n// default:\r\n// return mapOrgNameToDesc(fldName, orgLevelDescriptions);\r\n// }\r\n// }\r\n\r\n// export function getOrgLevelBasedList(orgLevelMatch, orgList) {\r\n// const orgValueList = [];\r\n\r\n// function getOrgNames(node, path) {\r\n// Object.keys(node).forEach((key) => {\r\n// if (Array.isArray(node[key])) {\r\n// node[key].forEach((item) => {\r\n// getOrgNames(item, path);\r\n// });\r\n// } else if (key === 'orgLevel') {\r\n// if (node[key] > orgLevelMatch) {\r\n// path += node.orgName !== 'Unassigned' ? `${node.orgName} / ` : '';\r\n// } else if (node[key] === orgLevelMatch) {\r\n// orgValueList.push({ label: path ? `${path}${node.orgName}` : node.orgName, value: node.orgName });\r\n// }\r\n// }\r\n// });\r\n// }\r\n// orgList.forEach((orgInfo) => {\r\n// getOrgNames(orgInfo, '');\r\n// });\r\n// return orgValueList;\r\n// }\r\n\r\nexport function getGroupByOptions({ dateType, lastX, relativeDate, startDate, endDate }) {\r\n // relative date\r\n if (dateType === 1) {\r\n switch (relativeDate.toString()) {\r\n case '1':\r\n if (lastX <= 48) {\r\n return [\r\n { label: 'Hours', value: 'Hour' },\r\n { label: 'Days', value: 'Date' }\r\n ];\r\n }\r\n return [{ label: 'Days', value: 'Date' }];\r\n case '2':\r\n case '3':\r\n case '4':\r\n return [\r\n { label: 'Days', value: 'Date' },\r\n { label: 'Weeks', value: 'Week' },\r\n { label: 'Months', value: 'Month' }\r\n ];\r\n default:\r\n return [\r\n { label: 'Days', value: 'Date' },\r\n { label: 'Weeks', value: 'Week' },\r\n { label: 'Months', value: 'Month' }\r\n ];\r\n }\r\n }\r\n // specific date\r\n // if date range more than 48 hours, exclude group by hour\r\n const timeRange = getTimeRange(startDate, endDate);\r\n if (timeRange > 48) {\r\n return [\r\n { label: 'Days', value: 'Date' },\r\n { label: 'Weeks', value: 'Week' },\r\n { label: 'Months', value: 'Month' }\r\n ];\r\n }\r\n return [\r\n { label: 'Hours', value: 'Hour' },\r\n { label: 'Days', value: 'Date' }\r\n ];\r\n}\r\n\r\nexport function getGroupByDefault({ dateType, relativeDate, startDate, endDate }) {\r\n if (dateType === 1) {\r\n switch (relativeDate?.toString()) {\r\n case '1':\r\n return { label: 'Hours', value: 'Hour' };\r\n case '2':\r\n return { label: 'Days', value: 'Date' };\r\n case '3':\r\n return { label: 'Months', value: 'Month' };\r\n case '4':\r\n return { label: 'Days', value: 'Date' };\r\n default:\r\n return { label: 'Days', value: 'Date' };\r\n }\r\n }\r\n const timeRange = getTimeRange(startDate, endDate);\r\n if (timeRange > 48) {\r\n return { label: 'Days', value: 'Date' };\r\n }\r\n return { label: 'Hours', value: 'Hour' };\r\n}\r\n\r\nexport function mapRelativeDate(relDate) {\r\n switch (relDate.toString()) {\r\n case '1':\r\n return 'Hours';\r\n case '2':\r\n return 'Full Days';\r\n case '3':\r\n return 'Full Months';\r\n case '4':\r\n return 'Current Month';\r\n default:\r\n return 'Full Days';\r\n }\r\n}\r\n","/**\r\n * axios setup to use api service\r\n */\r\n\r\nimport axios from 'axios';\r\nimport { VERSION } from 'config';\r\nimport { constant } from 'lodash';\r\n\r\nconst baseUrl =\r\n process.env.NODE_ENV === 'development'\r\n ? `${process.env.REACT_APP_BASE_URL_DEV}/v${VERSION}`\r\n : `${process.env.REACT_APP_API_BASE_URL}/v${VERSION}`;\r\n\r\nconst axiosServices = axios.create({\r\n baseURL: baseUrl,\r\n headers: {\r\n common: {\r\n 'Subscription-Key': process.env.REACT_APP_API_SUBSCRIPTION\r\n }\r\n },\r\n cancelToken: axios.CancelToken.source().token\r\n});\r\n\r\nexport const getCancelTokenSource = () => axios.CancelToken.source();\r\n\r\nexport const axiosCustom = axios.create({\r\n baseURL: baseUrl,\r\n headers: {\r\n common: {\r\n 'Subscription-Key': process.env.REACT_APP_API_SUBSCRIPTION\r\n }\r\n }\r\n});\r\n\r\nexport const axiosReportService = axios.create({\r\n baseURL: process.env.REACT_APP_REPORT_API_BASE_URL,\r\n headers: {\r\n common: {\r\n 'Ocp-Apim-Subscription-Key': process.env.REACT_APP_REPORT_API_SUBSCRIPTION\r\n }\r\n }\r\n});\r\n\r\nexport const axiosNotificationService = axios.create({\r\n baseURL: process.env.REACT_APP_NOTIFICATION_API_BASE_URL,\r\n headers: {\r\n common: {\r\n 'Ocp-Apim-Subscription-Key': process.env.REACT_APP_REPORT_API_SUBSCRIPTION\r\n }\r\n }\r\n});\r\n\r\nexport const axiosMSTeamsCQService = axios.create({\r\n baseURL: process.env.REACT_APP_MSTEAMS_CQ_SERVICE_URL,\r\n headers: {\r\n common: {\r\n 'Ocp-Apim-Subscription-Key': process.env.REACT_APP_MSTEAMS_CQ_API_SUBSCRIPTION\r\n }\r\n }\r\n});\r\n\r\nexport const axiosUserDataService = axios.create({\r\n baseURL: process.env.REACT_APP_USER_DATA_SERVICE_URL,\r\n headers: {\r\n common: {\r\n 'Ocp-Apim-Subscription-Key': process.env.REACT_APP_USER_DATA_API_SUBSCRIPTION\r\n }\r\n }\r\n});\r\n\r\nexport const axiosRemoteApiService = axios.create({\r\n baseURL: `${process.env.REACT_APP_REMOTE_API_URL}`\r\n});\r\n\r\n// export const axiosPrivate = axios.create({\r\n// baseURL: baseUrl,\r\n// headers: {\r\n// common: {\r\n// 'Subscription-Key': process.env.REACT_APP_API_SUBSCRIPTION\r\n// }\r\n// }\r\n// // withCredentials: true;\r\n// });\r\n\r\n// if (process.env.NODE_ENV === 'development') {\r\n// axiosServices.defaults.baseURL = `${process.env.REACT_APP_BASE_URL_DEV}/v${VERSION}`;\r\n// } else {\r\n// axiosServices.defaults.baseURL = `${process.env.REACT_APP_API_BASE_URL}/v${VERSION}`;\r\n// }\r\n\r\n// axiosServices.defaults.headers.common['Subscription-Key'] = process.env.REACT_APP_API_SUBSCRIPTION;\r\n\r\n// interceptor for http\r\naxiosServices.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n if (error?.response?.status === 401) {\r\n console.log('401 error');\r\n // if unauthorized request, log the user out\r\n window.location.href = '/logout';\r\n return '';\r\n }\r\n return Promise.reject((error.response && error.response.data) || 'Wrong Services');\r\n }\r\n);\r\n\r\naxiosCustom.interceptors.response.use(\r\n (response) => response,\r\n (error) => Promise.reject((error.response && error.response.data) || 'Wrong Services')\r\n);\r\n\r\nconst uuidv4 = () => {\r\n return '10000000-1000-4000-8000-100000000000'.replace(\r\n /[018]/g,\r\n (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16) // eslint-disable-line no-bitwise\r\n );\r\n};\r\naxiosReportService.interceptors.request.use((config) => {\r\n config.headers['X-Trace-Id'] = uuidv4();\r\n return config;\r\n});\r\n\r\naxiosNotificationService.interceptors.request.use((config) => {\r\n config.headers['X-Trace-Id'] = uuidv4();\r\n return config;\r\n});\r\n\r\nexport default axiosServices;\r\n","import { Grid, Typography } from '@mui/material';\r\nimport { IconCircle } from '@tabler/icons';\r\n\r\nconst CustomLegend = ({ payload, onLegendClick, selectedData }) => {\r\n return (\r\n \r\n {payload.map((entry, index) => (\r\n onLegendClick(entry, e)}\r\n onKeyUp={(e) => onLegendClick(entry, e)}\r\n role=\"button\"\r\n tabIndex={0}\r\n >\r\n \r\n \r\n {entry.value}\r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default CustomLegend;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport axios, { axiosMSTeamsCQService } from 'utils/axios';\r\nimport moment from 'moment';\r\nimport { Category } from 'views/Reports/Constants';\r\n\r\nexport const initialState = {\r\n dataSourceList: [],\r\n extensionLocationList: [],\r\n orgList: [],\r\n orgLevelDescriptions: [],\r\n countries: [],\r\n countryBasedTimezone: [],\r\n callTypeDescriptions: [],\r\n selectedDataSource: '',\r\n columnLookUpData: [],\r\n columnLookUpLoading: false,\r\n appConfigValues: [],\r\n jurisdiction: [],\r\n queues: [],\r\n agents: [],\r\n agentFinalAction: [],\r\n agentDisposition: [],\r\n usersWithLogin: [],\r\n availableDateRange: {\r\n startDate: '',\r\n endDate: '',\r\n displayMessage: ''\r\n },\r\n directoryCustomAttribute: [],\r\n queueFilterConfig: {}\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'lookup',\r\n initialState,\r\n reducers: {\r\n getDataSourceSuccess(state, action) {\r\n state.dataSourceList = action.payload;\r\n },\r\n getOrganizationSuccess(state, action) {\r\n state.orgList = action.payload;\r\n },\r\n getCountriesSuccess(state, action) {\r\n state.countries = action.payload;\r\n },\r\n getTimezoneSuccess(state, action) {\r\n state.countryBasedTimezone = action.payload;\r\n },\r\n getExtensionLocationSuccess(state, action) {\r\n state.extensionLocationList = action.payload;\r\n },\r\n getOrgLevelDescriptionSuccess(state, action) {\r\n state.orgLevelDescriptions = action.payload;\r\n },\r\n getCallTypeDescSuccess(state, action) {\r\n state.callTypeDescriptions = action.payload;\r\n },\r\n setDefaultDataSource(state, action) {\r\n state.selectedDataSource = action.payload;\r\n },\r\n getColumnLookupRequest(state) {\r\n state.columnLookUpLoading = true;\r\n state.columnLookUpData = [];\r\n state.columnLookUpError = null;\r\n },\r\n getColumnLookupSuccess(state, action) {\r\n state.columnLookUpLoading = false;\r\n state.columnLookUpData = action.payload;\r\n },\r\n getColumnLookupError(state, action) {\r\n state.columnLookUpLoading = false;\r\n state.columnLookUpData = [];\r\n state.columnLookUpError = action.payload;\r\n },\r\n getAppConfigSuccess(state, action) {\r\n state.appConfigValues = action.payload;\r\n },\r\n getJurisdictionSuccess(state, action) {\r\n state.jurisdiction = action.payload;\r\n },\r\n getQueuesSuccess(state, action) {\r\n state.queues = action.payload;\r\n },\r\n getAgentFinalActionSuccess(state, action) {\r\n state.agentFinalAction = action.payload;\r\n },\r\n getAgentDispositionActionSuccess(state, action) {\r\n state.agentDisposition = action.payload;\r\n },\r\n getAgentsSuccess(state, action) {\r\n state.agents = action.payload;\r\n },\r\n setUsersWithLogin(state, action) {\r\n state.usersWithLogin = action.payload;\r\n },\r\n getAvailableDateRange(state, action) {\r\n state.availableDateRange = action.payload;\r\n },\r\n resetAvailableDateRange(state) {\r\n state.availableDateRange = {\r\n startDate: '',\r\n endDate: '',\r\n displayMessage: ''\r\n };\r\n },\r\n setDirectoryCustomeAttribute(state, action) {\r\n state.directoryCustomAttribute = action.payload;\r\n },\r\n getFilterConfigSuccess(state, action) {\r\n state.queueFilterConfig = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function getDataSources(ownerId) {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/sites?ownerId=${ownerId}`);\r\n const formattedList = response?.data?.map((dataSource) => ({\r\n label: dataSource.name,\r\n value: dataSource.name,\r\n id: dataSource.siteId\r\n }));\r\n dispatch(slice.actions.getDataSourceSuccess(formattedList));\r\n // if formatted list is not empty, set first data source as the default\r\n if (formattedList.length > 0) {\r\n dispatch(slice.actions.setDefaultDataSource(formattedList[0].value));\r\n }\r\n // get the extension locations for the default data source\r\n const locationResponse = await axios.get(`/locations?siteId=${formattedList[0].id || -1}`);\r\n const formattedExtLocList = locationResponse.data.map((item) => ({ label: item.locationName, value: item.locationId }));\r\n dispatch(slice.actions.getExtensionLocationSuccess(formattedExtLocList));\r\n };\r\n}\r\n\r\nexport function getOrganizations(ownerId) {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/orgs?ownerId=${ownerId}`);\r\n dispatch(slice.actions.getOrganizationSuccess(response.data));\r\n };\r\n}\r\n\r\nexport function getCountries() {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/refs/countries`);\r\n dispatch(slice.actions.getCountriesSuccess(response.data));\r\n };\r\n}\r\n\r\nexport function getTimezone(country) {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/refs/timezones?code=${country}`);\r\n dispatch(slice.actions.getTimezoneSuccess(response.data));\r\n };\r\n}\r\nexport function getJurisdiction() {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/dropdown/jurisdiction`);\r\n dispatch(slice.actions.getJurisdictionSuccess(response.data));\r\n };\r\n}\r\nexport function getQueues() {\r\n return async (dispatch) => {\r\n const response = await axiosMSTeamsCQService.get(`/api/users/getAccessibleQueues?status=licensed`);\r\n dispatch(slice.actions.getQueuesSuccess(response?.data?.data));\r\n };\r\n}\r\nexport function setQueues(data) {\r\n return (dispatch) => {\r\n dispatch(slice.actions.getQueuesSuccess(data));\r\n };\r\n}\r\nexport function getAgentDetailConfig() {\r\n return async (dispatch) => {\r\n const response = await axiosMSTeamsCQService.get(`/api/meta/agentDetailReportFiltersConfig`);\r\n dispatch(slice.actions.getAgentFinalActionSuccess(response?.data?.data?.agentFinalAction?.allowedValues));\r\n dispatch(slice.actions.getAgentDispositionActionSuccess(response?.data?.data?.agentDisposition?.allowedValues));\r\n };\r\n}\r\nexport function getQueueFilterConfig() {\r\n return async (dispatch) => {\r\n const response = await axiosMSTeamsCQService.get(`/api/meta/queueDetailReportFiltersConfig`);\r\n dispatch(slice.actions.getFilterConfigSuccess(response?.data?.data));\r\n };\r\n}\r\nexport function getAgents() {\r\n return async (dispatch) => {\r\n const response = await axiosMSTeamsCQService.get(`api/users/getAccessibleAgents`);\r\n dispatch(slice.actions.getAgentsSuccess(response?.data?.data));\r\n };\r\n}\r\n\r\nexport function getExtensionLocations() {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/locations`);\r\n const formattedList = response.data.map((item) => ({ label: item.locationName, value: item.locationId }));\r\n dispatch(slice.actions.getExtensionLocationSuccess(formattedList));\r\n };\r\n}\r\n\r\nexport function getOrgLevelDescriptions() {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/orgs/levels`);\r\n // filter out the unused levels\r\n const usedOrgLevels = response.data.filter((item) => !item.description.toLowerCase().includes('unused'));\r\n dispatch(slice.actions.getOrgLevelDescriptionSuccess(usedOrgLevels));\r\n };\r\n}\r\n\r\nexport function getCallTypeDescriptions() {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/refs/call-types`);\r\n dispatch(slice.actions.getCallTypeDescSuccess(response.data));\r\n };\r\n}\r\n\r\nexport function getColumnLookUp(ownerId, columnName, query, cb) {\r\n return async (dispatch) => {\r\n cb();\r\n dispatch(slice.actions.getColumnLookupRequest());\r\n try {\r\n const response = await axios.get(`/${columnName}?ownerId=${ownerId}${query ? `&query=${query}` : ''}`);\r\n dispatch(slice.actions.getColumnLookupSuccess(response.data));\r\n } catch (error) {\r\n dispatch(slice.actions.getColumnLookupError(error));\r\n }\r\n };\r\n}\r\n\r\nexport function getAppConfig() {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/AppConfiguration/AppConfig`);\r\n if (response?.data) {\r\n dispatch(slice.actions.getAppConfigSuccess(response.data));\r\n }\r\n };\r\n}\r\n\r\nexport function setUsersWithLoginData(userOwnerId, authorizedUserRoles) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axios.get(`/lookup/userswithLogin?roles=${authorizedUserRoles}`);\r\n if (response?.data) {\r\n const data = response.data.filter((d) => d.ownerID !== userOwnerId);\r\n dispatch(slice.actions.setUsersWithLogin(data));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function getAvailableDateRange(templateType = Category.CallDataReport) {\r\n return async (dispatch) => {\r\n try {\r\n let response;\r\n switch (templateType) {\r\n case Category.AgentDataReport:\r\n case Category.AgentSummaryByDispositionReport: {\r\n const res = await axiosMSTeamsCQService.get(\r\n `/api/DetailedDataAnalytics/analyticsAvailableDateRange?analyticsType=Agent`\r\n );\r\n response = res?.data;\r\n break;\r\n }\r\n case Category.QueueSummaryByHandlingTypeReport:\r\n case Category.QueueSummaryByFinalActionReport:\r\n case Category.QueueDailySummaryByHandlingTypeReport:\r\n case Category.QueueDataReport: {\r\n const res = await axiosMSTeamsCQService.get(\r\n `/api/DetailedDataAnalytics/analyticsAvailableDateRange?analyticsType=Queue`\r\n );\r\n response = res?.data;\r\n break;\r\n }\r\n case Category.CallDataReport:\r\n response = await axios.get(`/lookup/processed-date-range`);\r\n break;\r\n default:\r\n console.log('Invalid template type');\r\n }\r\n if (response?.data) {\r\n const startDate = moment(response.data.utcRangeStart).format('yyyy-MM-DD');\r\n const endDate = moment(response.data.utcRangeEnd).format('yyyy-MM-DD');\r\n const displayMessage = `Available Date Range: ${startDate} to ${endDate}`;\r\n dispatch(slice.actions.getAvailableDateRange({ startDate, endDate, displayMessage }));\r\n }\r\n } catch (ex) {\r\n const errorObj = { startDate: '', endDate: '', displayMessage: 'No Data Available' };\r\n dispatch(slice.actions.getAvailableDateRange(errorObj));\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetAvailableDateRange() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetAvailableDateRange());\r\n };\r\n}\r\n\r\nexport function getDirectoryCustomAttribute() {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axios.get(`lookup/custom-attributes`);\r\n if (response?.data) {\r\n dispatch(slice.actions.setDirectoryCustomeAttribute(response.data));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n","// theme constant\r\nexport const gridSpacing = 3;\r\nexport const drawerWidth = 300;\r\nexport const appDrawerWidth = 320;\r\nexport const SIZE = 20;\r\nexport const graphColors = {\r\n light: [\r\n '#3C59FC',\r\n '#DF309A',\r\n '#9435F9',\r\n '#38B3E3',\r\n '#3C0077',\r\n '#FF8300',\r\n '#C339BE',\r\n '#808585',\r\n '#9067A7',\r\n '#AB6857',\r\n '#CCC210',\r\n '#8CCBAC',\r\n '#AEA2E0',\r\n '#CBCDB5',\r\n '#EA4D41',\r\n '#F2C96D',\r\n '#00DBB7'\r\n ],\r\n dark: [\r\n '#3C59FC',\r\n '#DF309A',\r\n '#9435F9',\r\n '#38B3E3',\r\n '#0180D4',\r\n '#FF8300',\r\n '#C339BE',\r\n '#808585',\r\n '#9067A7',\r\n '#AB6857',\r\n '#CCC210',\r\n '#8CCBAC',\r\n '#AEA2E0',\r\n '#CBCDB5',\r\n '#EA4D41',\r\n '#F2C96D',\r\n '#00DBB7'\r\n ]\r\n};\r\n\r\nexport const APP_FEATURES = {\r\n Queues: 'CallQueuesReporting'\r\n};\r\n\r\n// These should match the connector Type enum in the backend service\r\nexport const ConnectorTypes = {\r\n Cucm: 1,\r\n MSTeams: 2,\r\n Webex: 3\r\n};\r\n\r\nexport const UserRoles = {\r\n SystemAdmin: 'SYSADMIN',\r\n QueueAdmin: 'QUEUEADMIN',\r\n QueueManager: 'QUEUEMGR',\r\n QueueAgent: 'QUEUEAGENT',\r\n ConnectorAdmin: 'CONNECTORADMIN',\r\n ConnectorViewer: 'CONNECTORVIEWER',\r\n ReportUser: 'RPTUSER',\r\n ReportAdmin: 'RPTADMIN'\r\n // TODO: Add other roles here too\r\n};\r\n\r\nexport const QueuesDisabledMessage = 'Contact your Sales Representative to enable Queue Analytics';\r\n\r\nexport const DiscardChangesConfirmationDlgMsg = 'You have unsaved changes. Are you sure you want to discard them and leave the screen?';\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\n// project imports\r\nimport axios from 'utils/axios';\r\n\r\nconst initialState = {\r\n dashboards: [],\r\n dashboard: null,\r\n dashboardError: null,\r\n defaultDashboard: 0,\r\n newDashboardId: 0,\r\n isDashListLoaded: false,\r\n firstDashCreated: false\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'dashboard',\r\n initialState,\r\n reducers: {\r\n getDashboardListSuccess(state, action) {\r\n state.dashboards = action.payload;\r\n state.isDashListLoaded = true;\r\n },\r\n getDashboardSuccess(state, action) {\r\n state.dashboard = action.payload;\r\n state.dashboardError = null;\r\n },\r\n getDashboardFailure(state, action) {\r\n state.dashboardError = action.payload;\r\n },\r\n setDefaultDashboardSuccess(state, action) {\r\n state.defaultDashboard = action.payload;\r\n },\r\n createDashboardSuccess(state, action) {\r\n state.newDashboardId = action.payload;\r\n state.isDashListLoaded = false;\r\n },\r\n updateDashboardSuccess(state, action) {\r\n state.dashboard = action.payload;\r\n },\r\n setFirstDashboard(state, action) {\r\n state.firstDashCreated = action.payload;\r\n },\r\n clearDashboard(state, action) {\r\n state.dashboard = null;\r\n state.firstDashCreated = false;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function getDashboardList() {\r\n return async (dispatch) => {\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n const response = await axios.get(`/dashboards`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data) {\r\n dispatch(slice.actions.getDashboardListSuccess(response.data));\r\n }\r\n };\r\n}\r\n\r\nexport function getDashboard(id) {\r\n return async (dispatch) => {\r\n // Call API to get the dashboard info for a given dashboard id\r\n try {\r\n const response = await axios.get(`/dashboards/${id}`);\r\n if (response?.data) {\r\n dispatch(slice.actions.getDashboardSuccess(response.data));\r\n }\r\n } catch (error) {\r\n dispatch(slice.actions.getDashboardFailure(error));\r\n }\r\n };\r\n}\r\n\r\nexport function setDefaultDashboard(id) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setDefaultDashboardSuccess(id));\r\n };\r\n}\r\n\r\nexport function createDashboard({ name, displayOrder, layout }, isFirst) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axios.post('/dashboards', { name, displayOrder, layout });\r\n dispatch(slice.actions.createDashboardSuccess(response.data.id));\r\n if (isFirst) {\r\n dispatch(slice.actions.setFirstDashboard(true));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDashboard({ id, ownerId, name, displayOrder, layout }) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axios.put(`/dashboards/${id}`, { name, displayOrder, layout });\r\n if (response?.data) {\r\n dispatch(slice.actions.updateDashboardSuccess({ id, ownerId, name, displayOrder, layout }));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setFirstDashboard(isFirstDash) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setFirstDashboard(isFirstDash));\r\n };\r\n}\r\n\r\nexport function clearDashboard() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.clearDashboard(null));\r\n };\r\n}\r\n\r\n// export function layoutWillChange(isChanged) {\r\n// return () => {\r\n// dispatch(slice.actions.updateLayoutChange(isChanged));\r\n// };\r\n// }\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\n\r\n// third-party\r\nimport { motion, useCycle } from 'framer-motion';\r\n\r\n// ==============================|| ANIMATION BUTTON ||============================== //\r\n\r\nconst AnimateButton = React.forwardRef(({ children, type, direction, offset, scale }, ref) => {\r\n let offset1;\r\n let offset2;\r\n switch (direction) {\r\n case 'up':\r\n case 'left':\r\n offset1 = offset;\r\n offset2 = 0;\r\n break;\r\n case 'right':\r\n case 'down':\r\n default:\r\n offset1 = 0;\r\n offset2 = offset;\r\n break;\r\n }\r\n\r\n const [x, cycleX] = useCycle(offset1, offset2);\r\n const [y, cycleY] = useCycle(offset1, offset2);\r\n\r\n switch (type) {\r\n case 'rotate':\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n case 'slide':\r\n if (direction === 'up' || direction === 'down') {\r\n return (\r\n cycleY()}\r\n onHoverStart={() => cycleY()}\r\n >\r\n {children}\r\n \r\n );\r\n }\r\n return (\r\n cycleX()} onHoverStart={() => cycleX()}>\r\n {children}\r\n \r\n );\r\n\r\n case 'scale':\r\n default:\r\n if (typeof scale === 'number') {\r\n scale = {\r\n hover: scale,\r\n tap: scale\r\n };\r\n }\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n});\r\n\r\nAnimateButton.propTypes = {\r\n children: PropTypes.node,\r\n offset: PropTypes.number,\r\n type: PropTypes.oneOf(['slide', 'scale', 'rotate']),\r\n direction: PropTypes.oneOf(['up', 'down', 'left', 'right']),\r\n scale: PropTypes.oneOfType([PropTypes.number, PropTypes.object])\r\n};\r\n\r\nAnimateButton.defaultProps = {\r\n type: 'scale',\r\n offset: 10,\r\n direction: 'right',\r\n scale: {\r\n hover: 1,\r\n tap: 0.9\r\n }\r\n};\r\n\r\nexport default AnimateButton;\r\n","// material-ui\r\nimport { styled } from '@mui/material/styles';\r\n\r\n// ==============================|| AUTHENTICATION 1 WRAPPER ||============================== //\r\n\r\nconst AuthWrapper1 = styled('div')(({ theme }) => ({\r\n backgroundColor: theme.palette.mode === 'dark' ? theme.palette.background.default : theme.palette.primary.light,\r\n minHeight: '100vh'\r\n}));\r\n\r\nexport default AuthWrapper1;\r\n","import PropTypes from 'prop-types';\r\n\r\n// material-ui\r\nimport { Box } from '@mui/material';\r\n\r\n// project import\r\nimport MainCard from 'ui-component/cards/MainCard';\r\n\r\n// ==============================|| AUTHENTICATION CARD WRAPPER ||============================== //\r\n\r\nconst AuthCardWrapper = ({ children, ...other }) => (\r\n *': {\r\n flexGrow: 1,\r\n flexBasis: '50%'\r\n }\r\n }}\r\n content={false}\r\n {...other}\r\n >\r\n {children}\r\n \r\n);\r\n\r\nAuthCardWrapper.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default AuthCardWrapper;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport axios from 'utils/axios';\r\nimport { dispatch } from '../index';\r\n\r\nconst initialState = {\r\n widgets: null,\r\n availableWidgets: []\r\n};\r\n\r\nconst widgets = createSlice({\r\n name: 'widgets',\r\n initialState,\r\n reducers: {\r\n addWidgetSuccess(state, action) {\r\n // state.widgets.push(action.payload);\r\n state.widgets[action.payload.id] = action.payload;\r\n },\r\n deleteWidgetSuccess(state, action) {\r\n // state.widgets = state.widgets.filter(({ definition }) => definition.gateID !== action.payload);\r\n delete state.widgets[action.payload];\r\n },\r\n getWidgetsSuccess(state, action) {\r\n state.widgets = action.payload;\r\n },\r\n getAvailableWidgetSuccess(state, action) {\r\n state.availableWidgets = action.payload;\r\n },\r\n updateWidgetById(state, action) {\r\n state.widgets[action.payload.id] = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default widgets.reducer;\r\n\r\n// read the widget template from API and save the new widget under the specified dashboard\r\nexport function addWidget(widgetTemplateId, dashId, orgLevelDesc) {\r\n return async () => {\r\n try {\r\n const { data } = await axios.get(`/dashboards/widgets/templates/${widgetTemplateId}`);\r\n // console.log(JSON.stringify(data));\r\n // create a new widget from the template and save\r\n // If widgetTemplateId is 4 (Top Org widget), we need to reset the xAxisField and the fields array to the highest org level\r\n let orgBasedXAxisField = data?.xAxisField;\r\n let orgBasedFields = data?.fields;\r\n if (widgetTemplateId === 4) {\r\n const highestLevel = orgLevelDesc.reduce((acc, curr) => Math.max(acc, curr.level), 0);\r\n orgBasedXAxisField = `Name${highestLevel}`;\r\n orgBasedFields = orgBasedFields.map((fieldItm) =>\r\n fieldItm.name.startsWith('Name') ? { name: `Name${highestLevel}`, displayName: `Name${highestLevel}` } : fieldItm\r\n );\r\n }\r\n const widgetParams = {\r\n name: data?.defaultName,\r\n showDataGrid: data?.showDataGrid,\r\n showGraph: data?.showGraph,\r\n graphType: data?.graphType,\r\n yAxisCaption: data?.yAxisCaption,\r\n xAxisField: orgBasedXAxisField,\r\n categoryField: data?.categoryField,\r\n rankingField: data?.rankingField,\r\n rankLimit: parseInt(data?.rankLimit, 10),\r\n rankDirection: data?.rankDirection,\r\n gmtOffset: data?.gmtOffset,\r\n groupByField: data?.groupByField || '',\r\n useDst: data?.useDst,\r\n countryCode: data?.countryCode,\r\n dateType: data?.dateType,\r\n lastX: data?.lastX,\r\n relativeDate: data?.relativeDate,\r\n includeToday: data?.includeToday,\r\n startTime: data?.startTime,\r\n endTime: data?.endTime,\r\n weekdays: data?.weekDays,\r\n startDate: data?.startDate,\r\n endDate: data?.endDate,\r\n widgetType: data?.widgetType,\r\n widgetTemplateId,\r\n fields: orgBasedFields,\r\n filters: data?.filters\r\n };\r\n // dispatch API call to create new widget\r\n const response = await axios.post(`/dashboards/${dashId}/widgets`, widgetParams).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data) {\r\n dispatch(widgets.actions.addWidgetSuccess({ ...widgetParams, id: response.data.id, drillDownMode: false }));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n}\r\n\r\nexport function getWidgets(dashId) {\r\n return async () => {\r\n const response = await axios.get(`/dashboards/${dashId}/widgets`);\r\n // response.data - returns array. Convert it into an object with WidgetId as key\r\n if (response?.data) {\r\n const widgetsObj = response.data.reduce((acc, currItem) => {\r\n acc[currItem.id] = { ...currItem, drillDownMode: false };\r\n return acc;\r\n }, {});\r\n dispatch(widgets.actions.getWidgetsSuccess(widgetsObj));\r\n }\r\n };\r\n}\r\n\r\nexport function getAvailableWidgets() {\r\n return async () => {\r\n const response = await axios.get(`/dashboards/widgets/templates`);\r\n if (response?.data) {\r\n dispatch(widgets.actions.getAvailableWidgetSuccess(response.data));\r\n }\r\n };\r\n}\r\n\r\nexport function saveWidget(dashId, widgetId, widgetInfo) {\r\n return async () => {\r\n // dispatch call to the save API\r\n // filter out any 'All' value filter\r\n const response = await axios.put(`/dashboards/${dashId}/widgets/${widgetId}`, {\r\n ...widgetInfo,\r\n filters: widgetInfo.filters.filter((itm) => !(itm.value === 'All' || itm.operator === ''))\r\n });\r\n dispatch(widgets.actions.updateWidgetById(widgetInfo));\r\n };\r\n}\r\n\r\nexport function updateWidget(widgetInfo) {\r\n return () => {\r\n dispatch(widgets.actions.updateWidgetById(widgetInfo));\r\n };\r\n}\r\n\r\nexport function deleteWidget(dashId, widgetId) {\r\n return async () => {\r\n const response = await axios.delete(`/dashboards/${dashId}/widgets/${widgetId}`);\r\n dispatch(widgets.actions.deleteWidgetSuccess(widgetId));\r\n };\r\n}\r\n","// material-ui\r\nimport { Link, Typography, Stack } from '@mui/material';\r\n\r\n// ==============================|| FOOTER - AUTHENTICATION 2 & 3 ||============================== //\r\n\r\nconst AuthFooter = () => (\r\n \r\n \r\n © {new Date().getFullYear()}, ISI Telemanagement Solutions LLC\r\n \r\n \r\n Privacy Policy\r\n \r\n \r\n);\r\n\r\nexport default AuthFooter;\r\n","import { Outlet } from 'react-router-dom';\r\n\r\n// ==============================|| MINIMAL LAYOUT ||============================== //\r\n\r\nconst MinimalLayout = () => (\r\n <>\r\n \r\n \r\n);\r\n\r\nexport default MinimalLayout;\r\n","import { FilterType, OperatorType } from 'utils/filterUtils';\r\nimport moment from 'moment';\r\nimport { BreakoutShowHideOptions, DateGroup, GroupBy, Months, SummaryFieldNames, FormulaType, CommonTimeFormat } from './Constants';\r\nimport { isEmpty } from 'lodash';\r\n\r\nexport const filterData = (string, data, properties) => {\r\n if (string.length > 0) {\r\n const newRows = data.filter((row) => {\r\n return properties.some((property) => {\r\n if (row[property].toString().toLowerCase().includes(string.toString().toLowerCase())) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n });\r\n\r\n return newRows;\r\n }\r\n\r\n return data;\r\n};\r\n\r\nexport const filterSearch = (newString, templates) => {\r\n return filterData(newString, templates, ['templateName', 'templateDescription']);\r\n};\r\n\r\nexport const filterAllTags = (tags, templates) => {\r\n if (tags?.length) {\r\n const newRows = templates.filter((row) => {\r\n return row.tags?.some((tagName) => tags?.some(({ value }) => tagName.tagId === value));\r\n });\r\n\r\n return newRows;\r\n }\r\n\r\n return templates;\r\n};\r\n\r\nexport const filterFavorite = (isFavSelected, templates) => {\r\n if (!isFavSelected) {\r\n return templates;\r\n }\r\n const newRows = templates.filter((row) => row?.isFavorite);\r\n return newRows;\r\n};\r\n\r\nexport const checkBoxClick = (templateId, selected) => {\r\n const selectedIndex = selected.indexOf(templateId);\r\n const newSelected = [];\r\n if (selectedIndex === -1) {\r\n return newSelected.concat(selected, templateId);\r\n }\r\n if (selectedIndex === 0) {\r\n return newSelected.concat(selected.slice(1));\r\n }\r\n if (selectedIndex === selected.length - 1) {\r\n return newSelected.concat(selected.slice(0, -1));\r\n }\r\n if (selectedIndex > 0) {\r\n return newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));\r\n }\r\n return newSelected;\r\n};\r\n\r\nexport const isValidEmail = (email) => {\r\n email = email.trim();\r\n // eslint-disable-next-line\r\n return /[\\w\\d\\.-]+@[\\w\\d\\.-]+\\.[\\w\\d\\.-]+/.test(email);\r\n};\r\n\r\nexport const getGmtOffSetInMinutes = (gmt) => {\r\n return Number(gmt) * 60;\r\n};\r\nexport const isIncludeInvalidChar = (inputtxt) => {\r\n // < (less than)\r\n // > (greater than)\r\n // : (colon - sometimes works, but is actually NTFS Alternate Data Streams)\r\n // \" (double quote)\r\n // / (forward slash)\r\n // \\ (backslash)\r\n // | (vertical bar or pipe)\r\n // ? (question mark)\r\n // * (asterisk)\r\n if (inputtxt === undefined || inputtxt?.length <= 0) {\r\n return false;\r\n }\r\n const v =\r\n inputtxt.includes('<') ||\r\n inputtxt.includes('>') ||\r\n inputtxt.includes(':') ||\r\n inputtxt.includes(`\\\\`) ||\r\n inputtxt.includes(`\"`) ||\r\n inputtxt.includes('/') ||\r\n inputtxt.includes(`|`) ||\r\n inputtxt.includes('?') ||\r\n inputtxt.includes(`*`);\r\n return v;\r\n};\r\n\r\nexport const getDuplicateFileNameTemplates = (data) => {\r\n const lookup = data?.reduce((a, e) => {\r\n /* eslint-disable no-plusplus */\r\n a[e.fileName] = ++a[e.fileName] || 0;\r\n\r\n return a;\r\n }, {});\r\n const duplicates = data?.filter((e) => lookup[e.fileName]);\r\n return duplicates;\r\n};\r\n\r\nexport const updateOrgLevelAlias = (templateFields, orgLevelDescription) => {\r\n const fieldsWithOrgLevelAlias = [];\r\n templateFields?.forEach((field) => {\r\n if (field.name === 'Name1' || field.name === 'Name2' || field.name === 'Name3' || field.name === 'Name4') {\r\n const myLevel = field?.name?.split('Name')?.[1];\r\n const orgDescription = orgLevelDescription.find(({ level }) => level === Number(myLevel));\r\n if (orgDescription === undefined) return;\r\n const orgDes = orgDescription?.description;\r\n\r\n const a = [];\r\n field?.fieldAttributes?.forEach((attribute) => {\r\n if (attribute.id === 1) {\r\n const newAttribute = { ...attribute, value: attribute?.value?.length <= 0 ? orgDes : attribute?.value };\r\n a.push(newAttribute);\r\n } else {\r\n a.push(attribute);\r\n }\r\n });\r\n\r\n field = { ...field, fieldAttributes: a, fieldDisplayName: orgDes };\r\n fieldsWithOrgLevelAlias.push(field);\r\n } else {\r\n fieldsWithOrgLevelAlias.push(field);\r\n }\r\n });\r\n\r\n return fieldsWithOrgLevelAlias;\r\n};\r\n\r\nexport const getFilters = (selectedFilters, directoryFieldId) => {\r\n const filters = [];\r\n selectedFilters?.forEach((filter) => {\r\n if (filter.fieldId === directoryFieldId) {\r\n filter.data?.forEach((item) => {\r\n let clonedObject = { ...item };\r\n clonedObject = { ...clonedObject, operator: filter.operator };\r\n filters.push(clonedObject);\r\n });\r\n } else {\r\n if (filter.filterType && filter.filterType === FilterType.duration) {\r\n const newValues = [];\r\n for (let j = 0; j < filter.values?.length; j += 1) {\r\n const durationInFormat = filter.values[j]?.value;\r\n const durationArr = durationInFormat?.split(':') ?? [];\r\n const durationInSeconds = +durationArr[0] * 60 * 60 + +durationArr[1] * 60 + +durationArr[2];\r\n newValues.push({ id: filter.values[j]?.id, value: durationInSeconds?.toString() });\r\n }\r\n filter = {\r\n ...filter,\r\n values: newValues\r\n };\r\n }\r\n filters.push(filter);\r\n }\r\n });\r\n return filters;\r\n};\r\n\r\nexport const getCurrentDateBasedOnLocale = (selectedGmt) => {\r\n const date = new Date();\r\n date.setMinutes(date.getMinutes() + selectedGmt * 60);\r\n const d = new Date(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours(),\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds()\r\n );\r\n return d;\r\n};\r\nexport const toSeconds = (timeStr) => {\r\n const [hours, minutes, seconds] = timeStr.split(':').map(Number);\r\n return hours * 3600 + minutes * 60 + seconds;\r\n};\r\n\r\nexport const isValidFormat = (duration, filterType, dataType) => {\r\n if (filterType === FilterType.duration && duration?.value?.length > 0) {\r\n return duration?.value?.match(`^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$`);\r\n }\r\n if (dataType === OperatorType.numeric) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const getDateUsingOffSet = (date, time, gmtOffsetInMinutes, dateFormat = 'YYYY-MM-DD') => {\r\n const targetTime = new Date(date?.concat(' ').concat(time));\r\n const offsetTime = new Date(targetTime.getTime() + gmtOffsetInMinutes * 60 * 1000);\r\n return moment(new Date(offsetTime)).format(dateFormat);\r\n};\r\n\r\nexport const hasDuplicates = (arr) => {\r\n const valuesArray = arr.map((obj) => obj.value);\r\n for (let i = 0; i < valuesArray.length; i += 1) {\r\n if (valuesArray.indexOf(valuesArray[i]) !== i) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\nexport const isNumeric = (n) => {\r\n return !Number.isNaN(parseFloat(Number(n))) && Number.isFinite(Number(n));\r\n};\r\n\r\nexport const hasWrongFormat = (dataType, arr) => {\r\n if (dataType === OperatorType.numeric) {\r\n const valuesArray = arr.map((obj) => obj.value);\r\n for (let i = 0; i < valuesArray.length; i += 1) {\r\n if (!isNumeric(valuesArray[i])) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const betweenRangeError = (valuesArr) => {\r\n const valuesArray = valuesArr.map((obj) => obj.value);\r\n const filteredArray = valuesArray.filter((str) => str);\r\n if (filteredArray.length > 1) {\r\n return hasDuplicates(valuesArr);\r\n }\r\n return false;\r\n};\r\n\r\nexport const toKebabCase = (string) =>\r\n string\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/[\\s_]+/g, '-')\r\n .toLowerCase();\r\n\r\n// Function to set the time of a date object to the beginning of the day (00:00:00)\r\nconst startOfDay = (date) => {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n};\r\n\r\n// Function to set the time of a date object to the end of the day (23:59:59)\r\nconst endOfDay = (date) => {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);\r\n};\r\n\r\n// Function to set the date to the start of the week (Sunday)\r\nconst startOfWeek = (date, startDayOfWeek) => {\r\n const diff = (7 + (date.getDay() - startDayOfWeek)) % 7;\r\n const startOfWeekDate = new Date(date);\r\n startOfWeekDate.setDate(startOfWeekDate.getDate() - diff);\r\n return startOfWeekDate;\r\n};\r\n\r\n// Function to set the date to the start of the previous nth week (Sunday)\r\nconst startOfPreviousNthWeek = (date, n, startDayOfWeek) => {\r\n const startOfWeekDate = startOfWeek(date, startDayOfWeek);\r\n startOfWeekDate.setDate(startOfWeekDate.getDate() - 7 * n);\r\n return startOfWeekDate;\r\n};\r\n\r\n// Function to set the date to the end of the previous week (Saturday)\r\nconst endOfPreviousWeek = (date, startDayOfWeek) => {\r\n const startOfWeekDate = startOfWeek(date, startDayOfWeek);\r\n const endOfWeekDate = new Date(startOfWeekDate);\r\n endOfWeekDate.setDate(endOfWeekDate.getDate() - 1);\r\n endOfWeekDate.setHours(23, 59, 59, 999);\r\n return endOfWeekDate;\r\n};\r\n\r\nconst calculateDateRange = (currentDate, lastDuration, includeToday, relativeValue, duration) => {\r\n let startDateTime;\r\n let endDateTime;\r\n if (relativeValue === 'Last') {\r\n if (duration === 'Hour') {\r\n startDateTime = new Date(currentDate.getTime() - lastDuration * 3600000); // Subtract hours in milliseconds\r\n endDateTime = currentDate;\r\n } else if (duration === 'Day') {\r\n startDateTime = startOfDay(new Date(currentDate.getTime() - lastDuration * 86400000)); // Subtract days in milliseconds\r\n endDateTime = includeToday ? currentDate : endOfDay(new Date(currentDate.getTime() - 86400000)); // Subtract one day if not including today\r\n } else if (duration === 'Week') {\r\n startDateTime = startOfPreviousNthWeek(currentDate, lastDuration, 0);\r\n endDateTime = endOfPreviousWeek(currentDate, 0);\r\n } else if (duration === 'Month') {\r\n startDateTime = new Date(currentDate.getFullYear(), currentDate.getMonth() - lastDuration, 1);\r\n endDateTime = new Date(currentDate.getFullYear(), currentDate.getMonth(), 0, 23, 59, 59, 999);\r\n } else if (duration === 'Year') {\r\n startDateTime = new Date(currentDate.getFullYear() - lastDuration, 0, 1);\r\n endDateTime = new Date(currentDate.getFullYear() - lastDuration, 11, 31, 23, 59, 59);\r\n }\r\n } else if (relativeValue === 'Current') {\r\n if (duration === 'Day') {\r\n startDateTime = startOfDay(currentDate);\r\n endDateTime = currentDate;\r\n } else if (duration === 'Week') {\r\n startDateTime = startOfWeek(currentDate, 0);\r\n endDateTime = includeToday ? currentDate : endOfDay(new Date(currentDate.getTime() - 86400000));\r\n } else if (duration === 'Month') {\r\n currentDate.setHours(0, 0, 0, 0);\r\n startDateTime = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1, 0, 0, 0);\r\n endDateTime = includeToday ? currentDate : endOfDay(new Date(currentDate.getTime() - 86400000));\r\n } else if (duration === 'Year') {\r\n startDateTime = new Date(currentDate.getFullYear(), 0, 1);\r\n endDateTime = includeToday ? currentDate : endOfDay(new Date(currentDate.getTime() - 86400000));\r\n }\r\n }\r\n return { startDateTime, endDateTime };\r\n};\r\n\r\nconst getUtcDateTime = (date, time, useDst, selectedGmt) => {\r\n const parseTime = moment(time);\r\n const parseDate = moment(date);\r\n // Set the time from startTime to startDate\r\n parseDate.set({\r\n hour: parseTime.get('hour'),\r\n minute: parseTime.get('minute'),\r\n second: parseTime.get('second')\r\n });\r\n\r\n const utcTime = parseTime\r\n .subtract(useDst ? getGmtOffSetInMinutes(selectedGmt) + 60 : getGmtOffSetInMinutes(selectedGmt), 'minutes')\r\n .format('HH:mm:ss');\r\n // Convert date to UTC considering the GMT offset\r\n const utcDate = parseDate\r\n .subtract(useDst ? getGmtOffSetInMinutes(selectedGmt) + 60 : getGmtOffSetInMinutes(selectedGmt), 'minutes')\r\n .format('YYYY-MM-DD');\r\n return { utcDate, utcTime };\r\n};\r\n\r\n// Relative date range start date\r\nexport const getStartDateRange = (lastDuration, includeToday, startTime, useDst, selectedGmt, relativeValue, duration) => {\r\n const currentDate = new Date();\r\n const { startDateTime } = calculateDateRange(currentDate, lastDuration, includeToday, relativeValue, duration);\r\n const { utcDate, utcTime } = getUtcDateTime(startDateTime, startTime, useDst, selectedGmt);\r\n return getDateUsingOffSet(utcDate, utcTime, useDst ? getGmtOffSetInMinutes(selectedGmt) + 60 : getGmtOffSetInMinutes(selectedGmt));\r\n};\r\n\r\n// Relative date range end date\r\nexport const getEndDateRange = (lastDuration, includeToday, endTime, useDst, selectedGmt, relativeValue, duration) => {\r\n const currentDate = new Date();\r\n const { endDateTime } = calculateDateRange(currentDate, lastDuration, includeToday, relativeValue, duration);\r\n const { utcDate, utcTime } = getUtcDateTime(endDateTime, endTime, useDst, selectedGmt);\r\n return getDateUsingOffSet(utcDate, utcTime, useDst ? getGmtOffSetInMinutes(selectedGmt) + 60 : getGmtOffSetInMinutes(selectedGmt));\r\n};\r\n\r\nconst getBackgroundColor = (level, totalGroups) => {\r\n const backgroundColors = [\r\n '#8A99F9', // Background color for level 0\r\n '#9EAAFA', // Background color for level 1\r\n '#B1BBFB',\r\n '#C5CCFC'\r\n ];\r\n const filteredColours = backgroundColors.slice(-totalGroups);\r\n return filteredColours[level] || '#D8DDFD'; // Default if level is 4 or above\r\n};\r\nexport const onRowPrepared = (e, totalGroups) => {\r\n if (e.rowType === 'group') {\r\n const backgroundColor = getBackgroundColor(e.groupIndex, totalGroups);\r\n e.rowElement.style.backgroundColor = backgroundColor;\r\n e.rowElement.style.color = '#5b5e74';\r\n }\r\n if (e.rowType === 'header') {\r\n e.rowElement.style.backgroundColor = '#2A314D';\r\n e.rowElement.style.color = '#FFFFFF';\r\n }\r\n if (e.rowType === 'data') {\r\n e.rowElement.style.height = '45px';\r\n }\r\n};\r\nexport const onQueueRowPrepared = (e) => {\r\n if (e.rowType === 'data') {\r\n e.rowElement.style.fontSize = '15px';\r\n e.rowElement.style.height = '45px';\r\n }\r\n};\r\n\r\nexport const getLocaleGMTOffSetInMinutes = () => {\r\n let gmt = (Math.round(-(new Date().getTimezoneOffset() / 60) * 100) / 100).toFixed(2);\r\n gmt = Number(gmt);\r\n if (moment().isDST()) {\r\n gmt -= 1;\r\n }\r\n return getGmtOffSetInMinutes(gmt);\r\n};\r\n\r\nexport const glowAnimation = {\r\n '@keyframes glow': {\r\n '0%': {\r\n textShadow: '0 0 2px red'\r\n },\r\n '50%': {\r\n textShadow: '0 0 10px red'\r\n },\r\n '100%': {\r\n textShadow: '0 0 2px red'\r\n }\r\n }\r\n};\r\n","import {\r\n mdiPhoneIncomingOutline,\r\n mdiPhoneCheckOutline,\r\n mdiPhoneRemoveOutline,\r\n mdiPhoneForwardOutline,\r\n mdiPhoneLogOutline,\r\n mdiPhoneRingOutline,\r\n mdiPhoneInTalkOutline,\r\n mdiPhoneOutline,\r\n mdiPhoneAlertOutline\r\n} from '@mdi/js';\r\nimport { graphColors } from 'store/constant';\r\n\r\nexport const Status = {\r\n Normal: 'Normal',\r\n Warning: 'Warning',\r\n Critical: 'Critical'\r\n};\r\n\r\nexport const StatusColor = {\r\n Normal: '#00DBB7',\r\n Warning: '#FFA823',\r\n Critical: '#FF4D58'\r\n};\r\n\r\nexport const WidgetTitleColor = '#212121';\r\n\r\nexport const CalculationTypes = {\r\n count: 'count',\r\n average: 'average',\r\n minimum: 'minimum',\r\n maximum: 'maximum',\r\n percent: 'percent'\r\n};\r\n\r\nexport const CalculationLabels = {\r\n count: 'Count',\r\n average: 'Average',\r\n minimum: 'Minimum',\r\n maximum: 'Maximum',\r\n percent: 'Percentage'\r\n};\r\n\r\nexport const WidgetTypes = {\r\n QueueMetrics: 'queueMetrics',\r\n AgentTable: 'agentTable',\r\n DonutOrPieChart: 'donutOrPieChart',\r\n TimeSeries: 'timeSeries'\r\n};\r\n\r\nexport const DonutWidgetChartTypes = {\r\n Donut: 'donut',\r\n Pie: 'pie'\r\n};\r\n\r\nexport const TimeSeriesGroupTimeByOptions = {\r\n Hours: 'hours',\r\n Days: 'days',\r\n Weeks: 'weeks'\r\n};\r\n\r\nexport const TimeSeriesWidgetChartTypes = {\r\n VerticalBar: 'stackedBarVertical',\r\n HorizontalBar: 'stackedBarHorizontal',\r\n Line: 'line',\r\n Area: 'area'\r\n};\r\n\r\nexport const QueueDataSource = {\r\n MicrosoftTeams: 'microsoftTeams',\r\n CiscoWebex: 'ciscoWebex'\r\n};\r\n\r\nexport const DateTimeFilterType = {\r\n Specific: 'Specific',\r\n Relative: 'Relative',\r\n QueuePeriod: 'QueuePeriod'\r\n};\r\n\r\nexport const RelativeDateFilterUnitType = {\r\n Hour: 'Hour',\r\n Day: 'Day',\r\n Week: 'Week'\r\n};\r\n\r\nexport const TimeFilterType = {\r\n Continuous: 'Continuous',\r\n Interval: 'Interval'\r\n};\r\n\r\nexport const TimeSeriesMetricsCategory = {\r\n QueueCallCounts: 'queueCallCounts',\r\n QueueCallTimes: 'queueCallTimes',\r\n CallsAnsweredByAgent: 'agentCallCounts',\r\n AgentCallTimes: 'agentCallTimes'\r\n};\r\n\r\nexport const GroupWidgetDataBy = {\r\n QueueSourceType: 'queueSourceType',\r\n QueueDisposition: 'queueDisposition',\r\n QueueHandlingType: 'queueHandlingType',\r\n QueueFinalAction: 'queueFinalAction',\r\n CallsAnsweredByAgent: 'answeringAgent'\r\n};\r\n\r\n// Defaults should be one of the allowed grouping options\r\nexport const DefaultDataGroupingOption = {\r\n Donut: GroupWidgetDataBy.QueueSourceType,\r\n TimeSeries: GroupWidgetDataBy.QueueSourceType\r\n};\r\n\r\nexport const GroupDonutChartDataHierarchy = {\r\n [GroupWidgetDataBy.QueueSourceType]: GroupWidgetDataBy.QueueDisposition,\r\n [GroupWidgetDataBy.QueueDisposition]: GroupWidgetDataBy.QueueHandlingType,\r\n [GroupWidgetDataBy.QueueHandlingType]: GroupWidgetDataBy.QueueFinalAction\r\n};\r\n\r\nexport const QueueDashboardEvents = {\r\n RefreshWidgetData: 'refreshQueueDashboardWidgetData'\r\n};\r\n\r\n// Refresh every 5 mins (300000 milliseconds)\r\nexport const RefreshIntervalMs = 300000;\r\n\r\nexport const MetricCardConfig = {\r\n totalCalls: {\r\n label: 'Total Calls',\r\n icon: () => mdiPhoneIncomingOutline\r\n },\r\n answeredCalls: {\r\n label: 'Answered Calls',\r\n icon: () => mdiPhoneCheckOutline\r\n },\r\n unansweredCalls: {\r\n label: 'Unanswered Calls',\r\n icon: () => null\r\n },\r\n abandonedCalls: {\r\n label: 'Abandoned Calls',\r\n icon: () => mdiPhoneRemoveOutline\r\n },\r\n missedCalls: {\r\n label: 'Missed Calls',\r\n icon: () => mdiPhoneForwardOutline\r\n },\r\n queuedCalls: {\r\n label: 'Queued Calls',\r\n icon: () => mdiPhoneLogOutline\r\n },\r\n presentedCalls: {\r\n label: 'Presented Calls',\r\n icon: () => mdiPhoneIncomingOutline\r\n },\r\n queueTime: {\r\n label: 'Queue Time',\r\n icon: () => mdiPhoneLogOutline\r\n },\r\n answerTime: {\r\n label: 'Answer Time',\r\n icon: () => mdiPhoneRingOutline\r\n },\r\n talkTime: {\r\n label: 'Talk Time',\r\n icon: () => mdiPhoneInTalkOutline\r\n },\r\n abandonTime: {\r\n label: 'Abandon Time',\r\n icon: () => mdiPhoneRingOutline\r\n },\r\n serviceLevel: {\r\n label: 'Service Level',\r\n icon: (status) => (status === Status.Normal ? mdiPhoneOutline : mdiPhoneAlertOutline),\r\n suffix: '%'\r\n }\r\n};\r\n\r\nexport function getMappedColorsForQueueDashboardWidgets(groupDataBy = '') {\r\n switch (groupDataBy?.toLowerCase()) {\r\n case 'queuesourcetype': {\r\n return {\r\n light: {\r\n Direct: '#00dbb7',\r\n 'Auto Attendant': '#3b55f6',\r\n User: '#9d42e6',\r\n Queue: '#ff7819'\r\n },\r\n dark: {\r\n Direct: '#00dbb7',\r\n 'Auto Attendant': '#3b55f6',\r\n User: '#9d42e6',\r\n Queue: '#ff7819'\r\n }\r\n };\r\n }\r\n case 'queuedisposition': {\r\n return {\r\n light: {\r\n Answered: '#00dbb7',\r\n Missed: '#FF4D58'\r\n },\r\n dark: { Answered: '#00dbb7', Missed: '#FF4D58' }\r\n };\r\n }\r\n case 'queuehandlingtype': {\r\n return {\r\n light: {\r\n Answered: '#00dbb7',\r\n Abandoned: '#FF4D58',\r\n Unanswered: '#ffc541',\r\n 'Timed Out': '#9d42e6',\r\n Overflown: '#3b55f6',\r\n 'No Agents': '#ff7819',\r\n Other: '#3C0077'\r\n },\r\n dark: {\r\n Answered: '#00dbb7',\r\n Abandoned: '#FF4D58',\r\n Unanswered: '#ffc541',\r\n 'Timed Out': '#9d42e6',\r\n Overflown: '#3b55f6',\r\n 'No Agents': '#ff7819',\r\n Other: '#3C0077'\r\n }\r\n };\r\n }\r\n case 'queuefinalaction': {\r\n return {\r\n light: {\r\n 'Completed by Agent': '#00dbb7',\r\n 'Abandoned by Caller': '#FF4D58',\r\n 'Forwarded to Voicemail': '#ff7819',\r\n 'Transferred to Voicemail': '#ffc541',\r\n 'Transferred to User': '#3C59FC',\r\n 'Forwarded to User': '#AB6857',\r\n 'Forwarded to Queue': '#9435F9',\r\n 'Conferenced in User': '#AEA2E0',\r\n 'Conferenced in External Phone Number': '#C339BE',\r\n 'Forwarded to External Phone Number': '#3C0077'\r\n },\r\n dark: {\r\n 'Completed by Agent': '#00dbb7',\r\n 'Abandoned by Caller': '#FF4D58',\r\n 'Forwarded to Voicemail': '#ff7819',\r\n 'Transferred to Voicemail': '#ffc541',\r\n 'Transferred to User': '#3C59FC',\r\n 'Forwarded to User': '#F2C96D',\r\n 'Forwarded to Queue': '#CBCDB5',\r\n 'Conferenced in User': '#AEA2E0',\r\n 'Conferenced in External Phone Number': '#C339BE',\r\n 'Forwarded to External Phone Number': '#3C0077'\r\n }\r\n };\r\n }\r\n\r\n default:\r\n return graphColors;\r\n }\r\n}\r\n\r\nexport const defaultDateRangeFormat = 'YYYY-MM-DD HH:mm:ss';\r\nexport const relativeDateRangeFormat = 'YYYY-MM-DD';\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { axiosMSTeamsCQService } from 'utils/axios';\r\n\r\nexport const initialState = {\r\n loading: true,\r\n queueDisplayName: '',\r\n queueStartTime: '',\r\n queueEndTime: '',\r\n\r\n queueCountry: '',\r\n queueUtcOffset: '',\r\n\r\n queueDst: false,\r\n\r\n queuePercentage: '',\r\n queueSeconds: '',\r\n\r\n queueUsers: [],\r\n thresholds: [],\r\n allowedMetricsConfig: null,\r\n isPerformingAction: false\r\n};\r\n\r\nconst queueConfig = createSlice({\r\n name: 'queueConfig',\r\n initialState,\r\n reducers: {\r\n setDataLoading(state) {\r\n state.loading = true;\r\n },\r\n resetDataLoading(state) {\r\n state.loading = false;\r\n },\r\n setQueueDetails(state, action) {\r\n state.queueDisplayName = action.payload.displayName;\r\n state.queueStartTime = action.payload.activeStartTime;\r\n state.queueEndTime = action.payload.activeEndTime;\r\n state.queueDst = action.payload.useDST;\r\n state.queueSeconds = action.payload.serviceLevelAnswerTimeThreshold;\r\n state.queueCountry = action.payload.countryCode;\r\n state.queueUtcOffset = action.payload.utcOffset !== undefined ? action.payload.utcOffset : action.payload.utcOffsetInMinutes;\r\n },\r\n setThresholdDetails(state, action) {\r\n state.thresholds = action.payload;\r\n },\r\n setQueueUsers(state, action) {\r\n state.queueUsers = action.payload;\r\n },\r\n setAllowedMetricsConfig(state, action) {\r\n state.allowedMetricsConfig = action.payload;\r\n },\r\n onGrantUsersAccessSuccess(state, action) {\r\n state.queueUsers = [...state.queueUsers, ...action.payload];\r\n },\r\n onRevokeUserAccessSuccess(state, action) {\r\n state.queueUsers = state.queueUsers.filter((user) => user.infortelOwnerId !== action.payload);\r\n },\r\n setIsPerformingAction(state, action) {\r\n state.isPerformingAction = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default queueConfig.reducer;\r\nexport const {\r\n setQueueDetails,\r\n setDataLoading,\r\n resetDataLoading,\r\n setThresholdDetails,\r\n setQueueUsers,\r\n onGrantUsersAccessSuccess,\r\n onRevokeUserAccessSuccess,\r\n setAllowedMetricsConfig,\r\n setIsPerformingAction\r\n} = queueConfig.actions;\r\n\r\nexport async function getAllowedMetricsConfigurationFromAPI() {\r\n try {\r\n const response = await axiosMSTeamsCQService.get(`/api/meta/getAllowedMetricsConfiguration`);\r\n if (response?.data?.success && response.data?.data) {\r\n // Success\r\n return response.data.data;\r\n }\r\n // Failure\r\n return null;\r\n } catch (ex) {\r\n if (ex.response) {\r\n // Failure from backend\r\n console.log('Error Response: ', ex.response);\r\n } else {\r\n // Failed to connect to backend\r\n console.log('Failed to connect to backend while trying to get the threshold configuration. Exception: ', ex);\r\n }\r\n return null;\r\n }\r\n}\r\n","export const initializePendo = ({ clientId, userName }) => {\r\n const visitor = userName === 'VISITOR-UNIQUE-ID' || userName.toLowerCase();\r\n window.pendo.initialize({\r\n visitor: {\r\n id: visitor // Required if user is logged in, default creates anonymous ID\r\n // email: // Recommended if using Pendo Feedback, or NPS Email\r\n // full_name: // Recommended if using Pendo Feedback\r\n // role: // Optional\r\n\r\n // You can add any additional visitor level key-values here,\r\n // as long as it's not one of the above reserved names.\r\n },\r\n\r\n account: {\r\n id: clientId.toUpperCase() // Required if using Pendo Feedback, default uses the value 'ACCOUNT-UNIQUE-ID'\r\n // name: // Optional\r\n // is_paying: // Recommended if using Pendo Feedback\r\n // monthly_value:// Recommended if using Pendo Feedback\r\n // planLevel: // Optional\r\n // planPrice: // Optional\r\n // creationDate: // Optional\r\n\r\n // You can add any additional account level key-values here,\r\n // as long as it's not one of the above reserved names.\r\n }\r\n });\r\n};\r\n\r\nexport const identifyPendo = ({ clientId, userName }) => {\r\n window.pendo.identify({\r\n visitor: {\r\n id: userName.toLowerCase() // Required if user is logged in, default creates anonymous ID\r\n // email: // Recommended if using Pendo Feedback, or NPS Email\r\n // full_name: // Recommended if using Pendo Feedback\r\n // role: // Optional\r\n\r\n // You can add any additional visitor level key-values here,\r\n // as long as it's not one of the above reserved names.\r\n },\r\n\r\n account: {\r\n id: clientId.toUpperCase() // Required if using Pendo Feedback, default uses the value 'ACCOUNT-UNIQUE-ID'\r\n // name: // Optional\r\n // is_paying: // Recommended if using Pendo Feedback\r\n // monthly_value:// Recommended if using Pendo Feedback\r\n // planLevel: // Optional\r\n // planPrice: // Optional\r\n // creationDate: // Optional\r\n\r\n // You can add any additional account level key-values here,\r\n // as long as it's not one of the above reserved names.\r\n }\r\n });\r\n};\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { sortBy, template } from 'lodash';\r\n// project imports\r\nimport { axiosReportService } from 'utils/axios';\r\nimport { FilterType } from 'utils/filterUtils';\r\nimport { updateOrgLevelAlias } from 'views/Reports/utils';\r\nimport { setTitle } from './breadcrumb';\r\nimport { setTemplateName } from './report';\r\nimport { displayName } from 'react-quill';\r\n\r\nexport const initialState = {\r\n originalTemplateData: null,\r\n templateData: null,\r\n templateDataError: null,\r\n dataLoaded: false,\r\n availableColumns: [],\r\n availableFilters: [],\r\n availableGroupings: [],\r\n selectedColumns: [],\r\n selectedGroupings: [],\r\n selectedFilters: [],\r\n categoryMap: {},\r\n dateTimeFilter: {},\r\n configDetails: {},\r\n isTemplateDataLoadingStart: false,\r\n hasUnsavedTemplateChanges: false,\r\n selectedFeatureType: 0,\r\n templateSummaryDetails: {},\r\n summarySortByOptions: [],\r\n lowestDateGroup: ''\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'reportParameters',\r\n initialState,\r\n reducers: {\r\n createTemplateDataSuccess(state, action) {\r\n state.originalTemplateData = action.payload;\r\n state.templateData = action.payload;\r\n state.templateDataError = null;\r\n state.dataLoaded = true;\r\n state.configDetails = action.payload?.templateConfigDetails;\r\n state.templateSummaryDetails = action.payload?.templateSummaryDetails;\r\n state.summarySortByOptions = [action.payload?.templateSummaryDetails?.summaryDetails?.summaryDisplayOptions?.defaultSortBy];\r\n },\r\n createTemplateDataError(state, action) {\r\n state.templateData = null;\r\n state.templateDataError = action.payload;\r\n state.dataLoaded = true;\r\n },\r\n\r\n fetchTemplateDataStart(state, action) {\r\n state.isTemplateDataLoadingStart = true;\r\n },\r\n resetTemplateLoading(state, action) {\r\n state.isTemplateDataLoadingStart = false;\r\n },\r\n setReportParameter(state, action) {\r\n state.availableColumns = [...action.payload.availableColumns];\r\n state.availableGroupings = [...action.payload.availableGroupings];\r\n state.selectedColumns = [...action.payload.selectedColumns];\r\n state.selectedGroupings = [...action.payload.selectedGroupings];\r\n state.categoryMap = { ...action.payload.categoryMap };\r\n },\r\n setReportParameterAndFilters(state, action) {\r\n state.availableColumns = [...action.payload.availableColumns];\r\n state.availableGroupings = [...action.payload.availableGroupings];\r\n state.selectedColumns = [...action.payload.selectedColumns];\r\n state.selectedGroupings = [...action.payload.selectedGroupings];\r\n state.categoryMap = { ...action.payload.categoryMap };\r\n state.selectedFilters = [...state.selectedFilters, ...action.payload.filters];\r\n state.availableFilters = [...action.payload.availableFilters];\r\n },\r\n\r\n setSelectedColumns(state, action) {\r\n state.selectedColumns = action.payload;\r\n },\r\n setSelectedGrouping(state, action) {\r\n state.selectedGroupings = action.payload;\r\n },\r\n setDateTimeFilter(state, action) {\r\n state.dateTimeFilter = action.payload;\r\n },\r\n\r\n setAvailableColumns(state, action) {\r\n state.availableColumns = action.payload.availableColumns;\r\n if (action.payload.items) {\r\n if (action.payload.isColumn) {\r\n state.selectedColumns = action.payload.items;\r\n } else {\r\n state.selectedGroupings = action.payload.items;\r\n }\r\n }\r\n },\r\n setAvailableGroups(state, action) {\r\n state.availableGroupings = action.payload;\r\n },\r\n setTemplateFilters(state, action) {\r\n state.selectedFilters = action.payload;\r\n },\r\n setAvailableFilters(state, action) {\r\n state.availableFilters = action.payload;\r\n },\r\n resetTemplateData(state) {\r\n state.templateData = null;\r\n state.dataLoaded = false;\r\n state.availableColumns = [];\r\n state.availableGroupings = [];\r\n state.selectedColumns = [];\r\n state.selectedGroupings = [];\r\n state.categoryMap = {};\r\n state.selectedFilters = [];\r\n state.hasUnsavedTemplateChanges = false;\r\n state.selectedFeatureType = 0;\r\n state.templateSummaryDetails = {};\r\n state.lowestDateGroup = '';\r\n },\r\n updateIncludeSeconds(state, action) {\r\n state.configDetails.includeSeconds = action.payload;\r\n },\r\n updateHourFormat(state, action) {\r\n state.configDetails.isTwelveHourFormat = action.payload === '12-Hour';\r\n },\r\n updateCallOwnerShip(state, action) {\r\n state.configDetails.internalCallOwnership = action.payload;\r\n },\r\n updateDurationFormat(state, action) {\r\n state.configDetails.durationFormat = action.payload;\r\n },\r\n updateDateFormat(state, action) {\r\n const dateFormats = [];\r\n state.configDetails.dateFormats.forEach((dateFormat) => {\r\n if (dateFormat.format === action.payload) {\r\n const format = {};\r\n format.format = dateFormat.format;\r\n format.isSelected = true;\r\n dateFormats.push(format);\r\n } else {\r\n const format = {};\r\n format.format = dateFormat.format;\r\n format.isSelected = false;\r\n dateFormats.push(format);\r\n }\r\n });\r\n state.configDetails.dateFormats = dateFormats;\r\n },\r\n setHasUnsavedTemplateChanges(state, action) {\r\n state.hasUnsavedTemplateChanges = action.payload;\r\n },\r\n setSelectedFeatureType(state, action) {\r\n state.selectedFeatureType = action.payload;\r\n },\r\n setSummaryFields(state, action) {\r\n state.templateSummaryDetails.summaryFields = action.payload;\r\n },\r\n setSummaryDetailsCountFlags(state, action) {\r\n state.templateSummaryDetails.summaryDetails.includeCount = action.payload.countFlag;\r\n state.templateSummaryDetails.summaryDetails.includeCountPercent = action.payload.countPercentFlag;\r\n },\r\n setSummaryDetailsIncludeTimeFor(state, action) {\r\n state.templateSummaryDetails.summaryDetails.includeTimesFor.selectedValue = action.payload;\r\n },\r\n setSummaryGroupGroupBy(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryGroupOptions.groupBy.selectedValue = action.payload;\r\n },\r\n setSummaryGroupDateOrientation(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryGroupOptions.showDateGroupsAs.selectedValue = action.payload;\r\n },\r\n setSummaryGroupShowDateGroup(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryGroupOptions.showDateGroups.selectedValue = action.payload;\r\n },\r\n setSummaryGroupIncludeDateGroups(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryGroupOptions.dateGroupsToInclude.selectedValues = action.payload;\r\n },\r\n setSummaryDisplaySortType(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.sortType.selectedValue = action.payload;\r\n },\r\n setSortBy(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.sortBy = action.payload;\r\n },\r\n setSummaryDisplayBreakout(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.hideEmptyBreakouts.selectedValue = action.payload;\r\n },\r\n setSummaryDisplayShowQueue(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.showQueueAs.selectedValue = action.payload;\r\n },\r\n setSummaryDisplayShowQueueAndAgent(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.showQueueAndAgentAs.selectedValue = action.payload;\r\n },\r\n setSummaryDisplaySummary(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.showSummaryAs.selectedValue = action.payload;\r\n },\r\n setSummaryDisplaySummaryOrder(state, action) {\r\n state.templateSummaryDetails.summaryDetails.summaryDisplayOptions.summaryOrder.selectedValue = action.payload;\r\n },\r\n setSummarySortByOptions(state, action) {\r\n state.summarySortByOptions = action.payload;\r\n },\r\n setLowestDateGroup(state, action) {\r\n state.lowestDateGroup = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function setTemplateFilters(payload) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setTemplateFilters(payload));\r\n };\r\n}\r\n\r\nexport function setAvailableFilters(payload) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setAvailableFilters(payload));\r\n };\r\n}\r\n\r\nexport function setReportParameter(availableColumns, availableGroupings, selectedColumns, selectedGroupings, categoryMap) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(\r\n slice.actions.setReportParameter({ availableColumns, availableGroupings, selectedColumns, selectedGroupings, categoryMap })\r\n );\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setReportParameterAndFilters(\r\n availableColumns,\r\n availableGroupings,\r\n selectedColumns,\r\n selectedGroupings,\r\n categoryMap,\r\n filters,\r\n availableFilters\r\n) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(\r\n slice.actions.setReportParameterAndFilters({\r\n availableColumns,\r\n availableGroupings,\r\n selectedColumns,\r\n selectedGroupings,\r\n categoryMap,\r\n filters,\r\n availableFilters\r\n })\r\n );\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nconst updateTemplateFieldsBasedOnDirectory = (templateFields, directoryCustomAttribute, dirctoryCatId) => {\r\n const filedsBasedOnDirectory = [];\r\n templateFields.forEach((field) => {\r\n if (field.categoryId === dirctoryCatId) {\r\n const customAttr = directoryCustomAttribute?.find((attr) => attr?.code?.toUpperCase() === field.name.toUpperCase());\r\n if (customAttr) {\r\n if (customAttr.enabled) {\r\n filedsBasedOnDirectory.push(field);\r\n }\r\n } else {\r\n filedsBasedOnDirectory.push(field);\r\n }\r\n } else {\r\n filedsBasedOnDirectory.push(field);\r\n }\r\n });\r\n return filedsBasedOnDirectory;\r\n};\r\n\r\nexport function generateFiltersSkeleton(fieldIds) {\r\n const filterPayload = [];\r\n fieldIds.forEach((fieldId) => {\r\n filterPayload.push({\r\n fieldId,\r\n operator: 'Equals',\r\n values: [],\r\n logicalOperator: 'AND',\r\n isFilterRequired: true\r\n });\r\n });\r\n return filterPayload;\r\n}\r\n\r\nexport const extractColumns = (\r\n fieldCategories,\r\n templateFields,\r\n templateFilters,\r\n dispatch,\r\n orgLevelDescription,\r\n directoryCustomAttribute,\r\n templateCategory\r\n) => {\r\n const dirctoryCatId = fieldCategories.find((cat) => cat.categoryName === 'Directory')?.categoryId;\r\n // update templateFields based on directoryCustomAttribute\r\n if (dirctoryCatId) templateFields = updateTemplateFieldsBasedOnDirectory(templateFields, directoryCustomAttribute, dirctoryCatId);\r\n templateFields = updateOrgLevelAlias(templateFields, orgLevelDescription);\r\n templateFields = templateFields.map((item) => ({\r\n ...item,\r\n displayOrder: fieldCategories.find((cat) => cat.categoryId === item.categoryId).displayOrder\r\n }));\r\n templateFields = sortBy(templateFields, ['displayOrder', 'fieldDisplayOrder']);\r\n const availableColumns = templateFields;\r\n const availableFilters = templateFields.filter((field) => field?.isFilterable);\r\n fieldCategories = sortBy(fieldCategories, 'displayOrder');\r\n const availableGroupings = [];\r\n const selectedColumns = [];\r\n const selectedGroupings = [];\r\n const categoryMap = {};\r\n\r\n fieldCategories.forEach((category) => {\r\n categoryMap[category.displayOrder] = category.categoryName;\r\n });\r\n\r\n const fieldsSortedByColumnOrder = sortBy(templateFields, 'columnOrder');\r\n fieldsSortedByColumnOrder.forEach((field) => {\r\n if (field.isSelectedField) selectedColumns.push(field);\r\n });\r\n\r\n const fieldsSortedByGroupOrder = sortBy(templateFields, 'groupOrder');\r\n fieldsSortedByGroupOrder.forEach((field) => {\r\n if (field.isSelectedGroup) selectedGroupings.push({ ...field, category: 'Available Grouping' });\r\n });\r\n\r\n templateFields.forEach((field) => {\r\n if (field.isGroupable) {\r\n availableGroupings.push({ ...field, category: 'Available Grouping' });\r\n }\r\n });\r\n let filters = [];\r\n if (templateCategory === 'Summary') {\r\n let requiredFilterIds = templateFields?.filter((f) => f.isFilterRequired).map((f) => f.fieldId);\r\n if (templateFilters && templateFilters.length > 0) {\r\n const selectedFiltersIDs = templateFilters.map((sf) => sf.fieldId);\r\n requiredFilterIds = requiredFilterIds.filter((rf) => !selectedFiltersIDs.includes(rf));\r\n }\r\n const requiredFilters = generateFiltersSkeleton(requiredFilterIds);\r\n filters.push(...requiredFilters);\r\n }\r\n const directoryFieldId = templateFields?.find((selectedColumn) => selectedColumn.name === 'Directory')?.fieldId;\r\n const durationFieldIds = templateFields\r\n ?.filter((selectedColumn) => selectedColumn.filterType === FilterType.duration)\r\n ?.map((ele) => ele.fieldId);\r\n templateFilters.forEach((filter) => {\r\n const { name, isFilterRequired } = templateFields?.find((selectedColumn) => selectedColumn.fieldId === filter.fieldId);\r\n filter = { ...filter, fieldName: name, isFilterRequired };\r\n if (name === 'Name1' || name === 'Name2' || name === 'Name3' || name === 'Name4') {\r\n let directoryFilter = filters?.find((selectedColumn) => selectedColumn.fieldId === directoryFieldId);\r\n if (directoryFilter) {\r\n const clonedObject = [...directoryFilter.values];\r\n clonedObject?.push(...filter.values);\r\n const clonedData = [...directoryFilter.data];\r\n const d = clonedData?.find((data) => data.fieldId === filter.fieldId);\r\n if (d) {\r\n const clonedValues = [...d.values];\r\n clonedValues?.push(...filter);\r\n } else {\r\n clonedData?.push(...[filter]);\r\n }\r\n\r\n directoryFilter = { ...directoryFilter, values: clonedObject, data: clonedData };\r\n\r\n filters = filters.filter((e) => {\r\n return e.fieldId !== directoryFieldId;\r\n });\r\n\r\n filters.push(directoryFilter);\r\n } else {\r\n const newFilter = {\r\n fieldId: directoryFieldId,\r\n logicalOperator: filter.logicalOperator,\r\n operator: filter.operator,\r\n values: filter.values\r\n };\r\n newFilter.data = [filter];\r\n filters.push(newFilter);\r\n }\r\n } else {\r\n const d = durationFieldIds?.find((durationFieldId) => durationFieldId === filter.fieldId);\r\n if (d) {\r\n const newValues = [];\r\n for (let j = 0; j < filter.values?.length; j += 1) {\r\n let durationInSeconds = filter.values[j]?.value;\r\n let hours = Math.floor(durationInSeconds / 3600);\r\n if (hours <= 9) {\r\n hours = `0${hours}`;\r\n }\r\n durationInSeconds %= 3600;\r\n let minutes = Math.floor(durationInSeconds / 60);\r\n if (minutes <= 9) {\r\n minutes = `0${minutes}`;\r\n }\r\n let seconds = durationInSeconds % 60;\r\n if (seconds <= 9) {\r\n seconds = `0${seconds}`;\r\n }\r\n newValues.push({ id: filter.values[j]?.id, value: `${hours}:${minutes}:${seconds}` });\r\n }\r\n filter = {\r\n ...filter,\r\n values: newValues,\r\n filterType: FilterType.duration,\r\n fieldName: name\r\n };\r\n }\r\n filters.push(filter);\r\n }\r\n });\r\n dispatch(\r\n setReportParameterAndFilters(\r\n availableColumns,\r\n availableGroupings,\r\n selectedColumns,\r\n selectedGroupings,\r\n categoryMap,\r\n filters,\r\n availableFilters\r\n )\r\n );\r\n};\r\n\r\nexport function fetchTemplateData(enqueueSnackbar, templateId, orgLevelDescription, directoryCustomAttribute) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.fetchTemplateDataStart());\r\n\r\n const response = await axiosReportService.get(`/templates/${templateId}`);\r\n if (response?.data?.success) {\r\n if (response.data?.data?.templateName) {\r\n dispatch(setTitle(response.data?.data?.templateName));\r\n dispatch(setTemplateName(response.data?.data?.templateName));\r\n }\r\n\r\n const templateData = response.data.data;\r\n dispatch(slice.actions.createTemplateDataSuccess(templateData));\r\n\r\n extractColumns(\r\n templateData.fieldCategories,\r\n templateData.templateFields,\r\n templateData.templateFilters,\r\n dispatch,\r\n orgLevelDescription,\r\n directoryCustomAttribute,\r\n templateData.templateCategory\r\n );\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(slice.actions.createTemplateDataError(ex.response));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting data', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function setSelectedColumnsData(selectedColumns) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSelectedColumns(selectedColumns));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function updateIncludeSeconds(value) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateIncludeSeconds(value));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function updateHourFormat(value) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateHourFormat(value));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function updateDurationFormat(value) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDurationFormat(value));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDateFormat(value) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDateFormat(value));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function updateCallOwnerShip(value) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateCallOwnerShip(value));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setSelectedGroupingData(selectedGroupings) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSelectedGrouping(selectedGroupings));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setDateTimeFilter(dateTimeFilter) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setDateTimeFilter(dateTimeFilter));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setAvailableColumnsData(isColumn, items, availableColumns) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setAvailableColumns({ isColumn, items, availableColumns }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setAvailableGroupsData(availableGroups) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setAvailableGroups(availableGroups));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setSelectedTemplateDetails(templateId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetTemplateData());\r\n dispatch(slice.actions.createSelectedTemplateId({ templateId }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetTemplateData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetTemplateData());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetTemplateLoading() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetTemplateLoading());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setUnsavedTemplateChanges(hasChanges) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setHasUnsavedTemplateChanges(hasChanges));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setSelectedFeatureType(featureType) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSelectedFeatureType(featureType));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setUpdateSummaryFields(summaryFields) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryFields(summaryFields));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setSummaryDetailCountFlag(countFlag, countPercentFlag) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryDetailsCountFlags({ countFlag, countPercentFlag }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setSummaryDetailsIncludeTimeFor(selectedValue) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryDetailsIncludeTimeFor(selectedValue));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setSummaryGroupGroupBy(selectedValue) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryGroupGroupBy(selectedValue));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setSummaryGroupDateOrientation(selectedValue) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryGroupDateOrientation(selectedValue));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setShowSummaryDateGroup(selectedValue) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryGroupShowDateGroup(selectedValue));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setSummaryGroupIncludeDateGroups(selectedValue) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setSummaryGroupIncludeDateGroups(selectedValue));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setLowestDateGroup(dateGroup) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setLowestDateGroup(dateGroup));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function setSummaryDisplayOptions(selectedValue, type) {\r\n return async (dispatch) => {\r\n try {\r\n switch (type) {\r\n case 'sortType':\r\n dispatch(slice.actions.setSummaryDisplaySortType(selectedValue));\r\n break;\r\n case 'sortBy':\r\n dispatch(slice.actions.setSortBy(selectedValue));\r\n break;\r\n case 'breakout':\r\n dispatch(slice.actions.setSummaryDisplayBreakout(selectedValue));\r\n break;\r\n case 'showQueue':\r\n dispatch(slice.actions.setSummaryDisplayShowQueue(selectedValue));\r\n break;\r\n case 'showQueueAgent':\r\n dispatch(slice.actions.setSummaryDisplayShowQueueAndAgent(selectedValue));\r\n break;\r\n case 'summary':\r\n dispatch(slice.actions.setSummaryDisplaySummary(selectedValue));\r\n break;\r\n case 'summaryOrder':\r\n dispatch(slice.actions.setSummaryDisplaySummaryOrder(selectedValue));\r\n break;\r\n default:\r\n console.log('Incorrect summary display type');\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function fetchSummarySortByOptions(enqueueSnackbar, requestPayload) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axiosReportService.post('/templateSummary/generateFieldNames', requestPayload);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.setSummarySortByOptions(response.data.data));\r\n // Default selection to first element when new data is fetched\r\n dispatch(slice.actions.setSortBy(response.data.data[0]));\r\n } else {\r\n enqueueSnackbar('Error in getting data', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting data', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\n// project imports\r\nimport { axiosMSTeamsCQService, axiosReportService } from 'utils/axios';\r\nimport { sortBy } from 'lodash';\r\nimport { updateOrgLevelAlias } from 'views/Reports/utils';\r\nimport { TemplateCategory } from 'views/Reports/Constants';\r\n\r\nconst initialState = {\r\n previewData: null,\r\n previewDataLoading: false,\r\n previewDataError: null,\r\n reportId: 0,\r\n runNowDataLoaded: false,\r\n templateName: '',\r\n runNowDataError: null,\r\n exportStart: false,\r\n isExportSuccess: false,\r\n selectedColumnsFromTemplate: [],\r\n selectedGroupingsFromTemplates: [],\r\n reportLoadingStart: false,\r\n reportDetails: {},\r\n queueRecordDetails: {},\r\n queueRecordLoading: false,\r\n summaryFieldsConfig: [],\r\n summaryReportData: [],\r\n reportSummaryDetails: {},\r\n summaryPreviewtData: [],\r\n summaryPreviewDetails: {},\r\n reportDataLoadingStart: false\r\n};\r\nconst slice = createSlice({\r\n name: 'report',\r\n initialState,\r\n reducers: {\r\n createExportRequest(state) {\r\n state.exportStart = true;\r\n },\r\n createExportSuccess(state) {\r\n state.exportStart = false;\r\n state.isExportSuccess = true;\r\n },\r\n createExportError(state) {\r\n state.exportStart = false;\r\n },\r\n\r\n createPreviewDataRequest(state) {\r\n state.reportDataLoadingStart = true;\r\n state.previewDataLoading = true;\r\n state.previewData = null;\r\n state.previewDataError = null;\r\n },\r\n\r\n createPreviewDataSuccess(state, action) {\r\n state.previewDataLoading = false;\r\n state.previewData = action.payload;\r\n state.previewDataError = null;\r\n },\r\n\r\n createPreviewDataError(state, action) {\r\n state.reportDataLoadingStart = false;\r\n state.previewDataLoading = false;\r\n state.previewData = null;\r\n state.previewDataError = action.payload;\r\n },\r\n\r\n createRunNowSuccess(state, action) {\r\n state.reportId = action.payload;\r\n state.reportLoadingStart = false;\r\n },\r\n createRunNowRequest(state, action) {\r\n state.reportLoadingStart = true;\r\n state.runNowDataError = null;\r\n state.reportId = 0;\r\n },\r\n createRunNowError(state, action) {\r\n state.runNowDataError = action.payload;\r\n state.reportLoadingStart = false;\r\n state.reportDataLoadingStart = false;\r\n },\r\n resetReportId(state, action) {\r\n state.reportId = 0;\r\n state.reportLoadingStart = false;\r\n },\r\n cleanUpExport(state, action) {\r\n state.exportStart = false;\r\n state.isExportSuccess = false;\r\n },\r\n resetTemplateName(state, action) {\r\n state.templateName = '';\r\n },\r\n resetPreviewDetails(state, action) {\r\n state.summaryPreviewDetails = {};\r\n state.summaryPreviewtData = [];\r\n },\r\n\r\n resetPreviewError(state, action) {\r\n state.previewDataError = null;\r\n },\r\n setTemplateName(state, action) {\r\n state.templateName = action.payload;\r\n },\r\n setReportParameter(state, action) {\r\n state.selectedColumnsFromTemplate = [...action.payload.selectedColumns];\r\n state.selectedGroupingsFromTemplates = [...action.payload.selectedGroupings];\r\n },\r\n setReportDetails(state, action) {\r\n state.reportDetails = {\r\n reportStartDate: action.payload.reportStartDate,\r\n reportStartTime: action.payload.reportStartTime,\r\n gmtOffsetInMinutes: action.payload.gmtOffsetInMinutes,\r\n reportEndDate: action.payload.reportEndDate,\r\n reportEndTime: action.payload.reportEndTime,\r\n templateName: action.payload.templateName,\r\n reportConfigDetails: action.payload.reportConfigDetails,\r\n summaryFieldsConfig: action.payload.reportSummaryFieldsConfiguration,\r\n reportSummaryDetails: action.payload.reportSummaryDetails\r\n };\r\n },\r\n setSummaryPreviewDetails(state, action) {\r\n state.reportDataLoadingStart = false;\r\n state.previewDataLoading = false;\r\n state.previewDataError = null;\r\n state.summaryPreviewtData = JSON.parse(action.payload.data.reportData);\r\n state.summaryPreviewDetails = {\r\n reportConfigDetails: action.payload.reportConfig,\r\n summaryFieldsConfig: action.payload.data.reportSummaryFieldsConfiguration,\r\n reportSummaryDetails: action.payload.data.reportSummaryDetails\r\n };\r\n },\r\n setQueueRecordDetails(state, action) {\r\n state.queueRecordDetails = action.payload;\r\n state.queueRecordLoading = false;\r\n },\r\n createQueueRecordDetails(state, action) {\r\n state.queueRecordLoading = true;\r\n },\r\n createQueueRecordError(state, action) {\r\n state.queueRecordLoading = false;\r\n },\r\n clearQueueRecordDetails(state, action) {\r\n state.queueRecordDetails = {};\r\n state.queueRecordLoading = false;\r\n },\r\n createSummaryDataRequest(state) {\r\n state.reportDataLoadingStart = true;\r\n },\r\n setSummaryReportData(state, action) {\r\n state.reportDataLoadingStart = false;\r\n state.summaryReportData = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nconst getReportConfig = (reportConfig) => {\r\n return {\r\n dateFormat: reportConfig.dateFormats.filter((date) => date.isSelected)[0]?.format,\r\n isTwelveHourFormat: reportConfig.isTwelveHourFormat,\r\n timeFormat: reportConfig.includeSeconds ? 'hh:mm:ss' : 'hh:mm',\r\n durationFormat: reportConfig.durationFormat,\r\n includeSeconds: reportConfig.includeSeconds,\r\n internalCallOwnership: reportConfig.internalCallOwnership\r\n };\r\n};\r\n\r\nexport function fetchPreviewData(enqueueSnackbar, payload, templateCategory) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createPreviewDataRequest());\r\n const response = await axiosReportService.post(`/ReportGeneration/preview`, payload);\r\n if (response?.data?.success) {\r\n if (response.data?.data?.reportData === '[]') enqueueSnackbar('No Data available', { variant: 'info' });\r\n if (templateCategory === TemplateCategory.DetailTemplate)\r\n dispatch(slice.actions.createPreviewDataSuccess(JSON.parse(response.data.data.reportData)));\r\n if (templateCategory === TemplateCategory.SummaryTemplate)\r\n dispatch(\r\n slice.actions.setSummaryPreviewDetails({\r\n data: response.data.data,\r\n reportConfig: getReportConfig(payload?.reportParams?.reportConfig)\r\n })\r\n );\r\n } else {\r\n dispatch(slice.actions.createPreviewDataError(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response.data.error) {\r\n dispatch(slice.actions.createPreviewDataError(ex.response.data.error));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function fetchReportDetails(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createRunNowRequest());\r\n const response = await axiosReportService.post(`/ReportGeneration/report`, payload);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.createRunNowSuccess(response.data.data.reportId));\r\n } else {\r\n dispatch(slice.actions.createRunNowError(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response.data.error) {\r\n dispatch(slice.actions.createRunNowError(ex.response.data.error));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Session expired'));\r\n } else {\r\n enqueueSnackbar('Error in getting Report Data', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Error in getting Report Data'));\r\n }\r\n }\r\n };\r\n}\r\nexport function setReportParameter(selectedColumns, selectedGroupings) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setReportParameter({ selectedColumns, selectedGroupings }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nconst extractColumns = (fields, templateFields, dispatch, orgLevelDescription) => {\r\n templateFields = updateOrgLevelAlias(templateFields, orgLevelDescription);\r\n let selectedColumns = [];\r\n let selectedGroupings = [];\r\n\r\n templateFields.forEach((field) => {\r\n if (field.isSelectedField) selectedColumns.push(field);\r\n if (field.isGroupable) {\r\n if (field.isSelectedGroup) selectedGroupings.push({ ...field, category: 'Available Grouping' });\r\n }\r\n });\r\n selectedColumns = sortBy(selectedColumns, 'columnOrder');\r\n selectedGroupings = sortBy(selectedGroupings, 'groupOrder');\r\n\r\n dispatch(setReportParameter(selectedColumns, selectedGroupings));\r\n};\r\n\r\nconst extractColumnsForReports = (fieldsAndGroups, dispatch, orgLevelDescription) => {\r\n fieldsAndGroups = updateOrgLevelAlias(fieldsAndGroups, orgLevelDescription);\r\n let selectedColumns = [];\r\n let selectedGroupings = [];\r\n\r\n fieldsAndGroups.forEach((field) => {\r\n selectedColumns.push(field);\r\n if (field.groupOrder > 0) {\r\n selectedGroupings.push({ ...field, category: 'Available Grouping' });\r\n }\r\n });\r\n selectedColumns = sortBy(selectedColumns, 'columnOrder');\r\n selectedGroupings = sortBy(selectedGroupings, 'groupOrder');\r\n\r\n dispatch(setReportParameter(selectedColumns, selectedGroupings));\r\n};\r\n\r\nexport function fetchReportDetailsFromTemplates(enqueueSnackbar, payload, templateId, orgLevelDescription) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createRunNowRequest());\r\n const response = await axiosReportService.post(`/ReportGeneration/report/${templateId}`, payload);\r\n if (response?.data?.success) {\r\n const templateResponse = response.data?.data?.templateResponse;\r\n extractColumns(templateResponse?.fieldCategories, templateResponse.templateFields, dispatch, orgLevelDescription);\r\n dispatch(slice.actions.createRunNowSuccess(response.data.data.reportId));\r\n } else {\r\n dispatch(slice.actions.createRunNowError(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response?.data?.error) {\r\n dispatch(slice.actions.createRunNowError(ex.response.data.error));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Session expired'));\r\n } else {\r\n enqueueSnackbar('Error in getting Report Data', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Error in getting Report Data'));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function fetchReportDetailsFromHistory(enqueueSnackbar, reportId, orgLevelDescription) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createRunNowRequest());\r\n const response = await axiosReportService.get(`/Reports/${reportId}`);\r\n if (response?.data?.success) {\r\n const reportFieldDetails = response.data?.data?.reportFieldDetails;\r\n dispatch(slice.actions.setReportDetails(response.data?.data));\r\n extractColumnsForReports(reportFieldDetails, dispatch, orgLevelDescription);\r\n } else {\r\n dispatch(slice.actions.createRunNowError(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response?.data?.error) {\r\n dispatch(slice.actions.createRunNowError(ex.response.data.error));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Session expired'));\r\n } else {\r\n enqueueSnackbar('Error in getting Report Data', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Error in getting Report Data'));\r\n }\r\n }\r\n };\r\n}\r\nexport function fetchSummaryReportData(enqueueSnackbar, reportId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createSummaryDataRequest());\r\n const payload = { offset: 0, count: 20000, reportParams: { filtersGroups: [], groups: [] } };\r\n const response = await axiosReportService.post(`/Reports/${reportId}/data`, payload);\r\n\r\n if (response?.data?.success) {\r\n const reportDataString = response.data?.data?.reportData;\r\n\r\n let result = [];\r\n if (reportDataString) {\r\n try {\r\n // Parse the stringified JSON array\r\n const parsedData = JSON.parse(reportDataString);\r\n\r\n if (Array.isArray(parsedData)) {\r\n result = parsedData;\r\n } else {\r\n console.error('Parsed report data is not an array:', parsedData);\r\n }\r\n } catch (parseError) {\r\n console.error('Failed to parse report data:', parseError);\r\n }\r\n }\r\n dispatch(slice.actions.setSummaryReportData(result));\r\n } else {\r\n // dispatch(slice.actions.createSummaryDataError(response.data.error));\r\n enqueueSnackbar('Error in getting Report Data', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.error('Error fetching summary report data:', ex);\r\n\r\n if (ex.response?.data?.error) {\r\n dispatch(slice.actions.createRunNowError(ex.response.data.error));\r\n enqueueSnackbar(ex.response.data.error, { variant: 'error' });\r\n } else if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Session expired'));\r\n } else {\r\n enqueueSnackbar('Error in getting Report Data', { variant: 'error' });\r\n dispatch(slice.actions.createRunNowError('Error in getting Report Data'));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function resetReportId() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetReportId());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function clearQueueRecordDetails() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.clearQueueRecordDetails());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function cleanUpExport() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.cleanUpExport());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setTemplateName(templateName) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setTemplateName(templateName));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetTemplateName() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetTemplateName());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function resetPreviewDetails() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetPreviewDetails());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetPreviewError() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetPreviewError());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function exportReportFile(enqueueSnackbar, reportId, payload) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createExportRequest());\r\n const response = await axiosReportService.post(`/Reports/${reportId}/export`, payload);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.createExportSuccess(response.data.data.reportId));\r\n } else {\r\n dispatch(slice.actions.createExportError(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response.data.error) {\r\n dispatch(slice.actions.createExportError(ex.response.data.error));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Report', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getQueueRecordDetails(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createQueueRecordDetails());\r\n const response = await axiosMSTeamsCQService.post('/api/DetailedDataAnalytics/getQueueRecordDetails', payload);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.setQueueRecordDetails(response.data?.data));\r\n } else {\r\n dispatch(slice.actions.createQueueRecordError(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response?.data?.error) {\r\n dispatch(slice.actions.createQueueRecordError(ex.response.data.error));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n dispatch(slice.actions.createQueueRecordError());\r\n } else {\r\n enqueueSnackbar('Error in getting Data', { variant: 'error' });\r\n dispatch(slice.actions.createQueueRecordError());\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function setQueueRecordLoading() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createQueueRecordDetails());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setRunNowError(error) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.createRunNowError(error));\r\n };\r\n}\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\n// initial state\r\nconst initialState = {\r\n title: null,\r\n parentTitles: []\r\n};\r\n\r\n// ==============================|| SLICE - BREADCRUMB ||============================== //\r\n\r\nconst menu = createSlice({\r\n name: 'breadcrumb',\r\n initialState,\r\n reducers: {\r\n setTitle(state, action) {\r\n state.title = action.payload;\r\n\r\n // Reset the parent Title array if the title was set by a menu item or a menu sub item\r\n if (state.parentTitles.length > 0) {\r\n state.parentTitles = [];\r\n }\r\n },\r\n // To be used when there is a nesting and the breadcrumb menu will be using a custom title\r\n // which cannot be retrieved from the path / search parameters. Like in case of connectors\r\n // In that case, the path parameter is the connector Id but the title is the Connector name.. So, for the\r\n // child pages of connectors, like queues, that connector name needs to be preserved\r\n // Expected payload: {\r\n // index: index of the child, relative to the first sub item in the menu. Like in connectors menu,\r\n // a connector is the first sub item and it's child queues will have index 0\r\n // title: title of the child\r\n // }\r\n setChildTitle(state, action) {\r\n // Remove all the parent titles after this index and add the current title as the parent title\r\n const childIndex = action.payload.index === undefined ? -1 : 0;\r\n if (childIndex >= 0) {\r\n if (childIndex < state.parentTitles.length) {\r\n // Only keep the old titles before the current index\r\n state.parentTitles = state.parentTitles.toSpliced(childIndex);\r\n } else {\r\n // Keep the current parent titles and also add the current title as the parent title\r\n state.parentTitles = [...state.parentTitles, state.title];\r\n }\r\n\r\n state.title = action.payload.title;\r\n } else {\r\n console.log('Invalid value for the child title index');\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport default menu.reducer;\r\n\r\nexport const { setTitle, setChildTitle } = menu.actions;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { axiosReportService } from 'utils/axios';\r\n\r\n// initial state\r\nexport const initialState = {\r\n preferences: null,\r\n loading: false,\r\n error: null\r\n};\r\n\r\n// ==============================|| SLICE - preferences ||============================== //\r\nconst preferences = createSlice({\r\n name: 'preferences',\r\n initialState,\r\n reducers: {\r\n fetchPreferencesRequest(state) {\r\n state.loading = true;\r\n },\r\n fetchPreferencesFailure(state, action) {\r\n state.loading = false;\r\n state.error = action.payload;\r\n },\r\n fetchPreferencesSuccess(state, action) {\r\n state.loading = false;\r\n\r\n if (action.payload) {\r\n const pref = {};\r\n action.payload.forEach((element) => {\r\n pref[element.preferenceKey] = element;\r\n });\r\n\r\n state.preferences = pref;\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport function fetchPreferences(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n dispatch(preferences.actions.fetchPreferencesRequest());\r\n try {\r\n const response = await axiosReportService.get('/user/preferences/list');\r\n if (response?.data?.success) {\r\n dispatch(preferences.actions.fetchPreferencesSuccess(response.data.data));\r\n } else {\r\n dispatch(preferences.actions.fetchPreferencesFailure(response.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(preferences.actions.fetchPreferencesFailure(ex.response));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Prefrences', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function setPreference(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n await axiosReportService.post('/user/preferences', payload);\r\n\r\n dispatch(fetchPreferences(enqueueSnackbar));\r\n enqueueSnackbar(payload.successMessage || 'Preference saved successfully', { variant: 'info' });\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(payload.ErrorMessage || 'Failed to save preference', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function updatePreference(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n await axiosReportService.patch(`/user/preferences/${payload.userPreferenceId}`, payload);\r\n\r\n dispatch(fetchPreferences());\r\n enqueueSnackbar(payload.successMessage || 'Preference saved successfully', { variant: 'info' });\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(payload.ErrorMessage || 'Failed to save preference', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport default preferences.reducer;\r\n\r\nexport const { fetchPreferencesRequest, fetchPreferencesFailure, fetchPreferencesSuccess } = preferences.actions;\r\n","// third-party\r\nimport { combineReducers } from 'redux';\r\nimport storage from 'redux-persist/lib/storage';\r\nimport { persistReducer } from 'redux-persist';\r\n\r\n// project imports\r\nimport menuReducer from './slices/menu';\r\nimport widgetsReducer from './slices/widgets';\r\nimport dashboardReducer from './slices/dashboard';\r\nimport lookupReducer from './slices/lookup';\r\nimport templateReducer from './slices/templates';\r\nimport reportParametersReducer from './slices/reportParameters';\r\nimport reportReducer from './slices/report';\r\nimport breadcrumbReducer from './slices/breadcrumb';\r\nimport scheduledReportsReducer from './slices/scheduledReports';\r\nimport preferencesReducer from './slices/preferences';\r\nimport notificationsReducer from './slices/notifications';\r\nimport historyReducer from './slices/history';\r\nimport connectorReducer from './slices/connector';\r\nimport remoteCollectionsReducer from './slices/remoteCollections';\r\nimport queueDashboardReducer from './slices/queueDashboard';\r\nimport callQueuesReducer from './slices/callQueues';\r\nimport directoryImportsReducer from './slices/directoryImports';\r\nimport directoryImportParameters from './slices/directoryImportParameters';\r\nimport directoryImportSchedule from './slices/dirImportSchedule';\r\nimport queueConfigReducer from './slices/queueConfig';\r\n\r\n// ==============================|| COMBINE REDUCER ||============================== //\r\n\r\nconst menuPersistConfig = {\r\n key: 'menu',\r\n version: 1,\r\n storage,\r\n whitelist: ['drawerOpen']\r\n};\r\n\r\nconst reducer = combineReducers({\r\n menu: persistReducer(menuPersistConfig, menuReducer),\r\n dashboard: dashboardReducer,\r\n queueDashboard: queueDashboardReducer,\r\n widgets: widgetsReducer,\r\n lookup: lookupReducer,\r\n templates: templateReducer,\r\n reportParameters: reportParametersReducer,\r\n report: reportReducer,\r\n breadcrumb: breadcrumbReducer,\r\n scheduledReports: scheduledReportsReducer,\r\n preferences: preferencesReducer,\r\n notifications: notificationsReducer,\r\n history: historyReducer,\r\n connector: connectorReducer,\r\n remoteCollection: remoteCollectionsReducer,\r\n callQueues: callQueuesReducer,\r\n directoryImport: directoryImportsReducer,\r\n directoryImportParameters,\r\n directoryImportSchedule,\r\n queueConfig: queueConfigReducer\r\n});\r\n\r\nexport default reducer;\r\n","// third-party\r\nimport { configureStore } from '@reduxjs/toolkit';\r\nimport { useDispatch as useAppDispatch, useSelector as useAppSelector } from 'react-redux';\r\n\r\nimport { persistStore } from 'redux-persist';\r\nimport thunk from 'redux-thunk';\r\n\r\n// project imports\r\nimport reducer from './reducer';\r\nimport { RESET_STORE } from './actions';\r\n\r\n// ==============================|| REDUX - MAIN STORE ||============================== //\r\n\r\nconst rootReducer = (state, action) => {\r\n if (action.type === RESET_STORE) {\r\n state = undefined;\r\n }\r\n return reducer(state, action);\r\n};\r\n\r\nconst store = configureStore({\r\n reducer: rootReducer,\r\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false, immutableCheck: false, thunk })\r\n});\r\n\r\nexport const persistor = persistStore(store);\r\n\r\nconst { dispatch } = store;\r\n\r\nconst useDispatch = () => useAppDispatch();\r\nconst useSelector = useAppSelector;\r\n\r\nexport { store, dispatch, useSelector, useDispatch };\r\n","import React from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Stack } from '@mui/material';\r\n\r\n// project imports\r\nimport { getWeekRange } from 'utils/format';\r\nimport { graphColors } from 'store/constant';\r\nimport { IconCircle } from '@tabler/icons';\r\n\r\nconst CustomTooltip = ({ active, payload, label, colors, setActiveHoverPoint, valueFormatter }) => {\r\n const theme = useTheme();\r\n const genericColors = theme.palette.mode === 'dark' ? graphColors.dark : graphColors.light;\r\n if (active && payload && payload.length) {\r\n if (setActiveHoverPoint) setActiveHoverPoint(payload);\r\n return (\r\n \r\n

    {`${label}`}

    \r\n {payload.length < 5 ? (\r\n \r\n {payload.map((itm, index) => (\r\n \r\n \r\n {`${itm.name} : ${valueFormatter ? valueFormatter(itm.value) : itm.value}`}\r\n

    \r\n ))}\r\n
    \r\n ) : (\r\n \r\n {Object.values(\r\n payload.reduce((acc, currItm, index) => {\r\n if (index === 0 || index % 2 === 0) {\r\n acc[index] = acc[index] || [{ name: currItm.name, value: currItm.value, idx: index }];\r\n } else {\r\n acc[index - 1][1] = { name: currItm.name, value: currItm.value, idx: index };\r\n }\r\n return acc;\r\n }, {})\r\n ).map((group, idx) => (\r\n \r\n {group.map((itm, childIndex) => (\r\n \r\n \r\n {`${itm.name} : ${itm.value}`}\r\n

    \r\n ))}\r\n
    \r\n ))}\r\n
    \r\n )}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport default CustomTooltip;\r\n","// material-ui\r\nimport LinearProgress from '@mui/material/LinearProgress';\r\nimport { styled } from '@mui/material/styles';\r\n\r\n// styles\r\nconst LoaderWrapper = styled('div')({\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n zIndex: 1301,\r\n width: '100%'\r\n});\r\n\r\n// ==============================|| LOADER ||============================== //\r\n\r\nconst Loader = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default Loader;\r\n","import PropTypes from 'prop-types';\r\nimport { createContext } from 'react';\r\n\r\n// project import\r\nimport defaultConfig from 'config';\r\nimport useLocalStorage from 'hooks/useLocalStorage';\r\n\r\n// initial state\r\nconst initialState = {\r\n ...defaultConfig,\r\n onChangeLayout: () => {},\r\n onChangeDrawer: () => {},\r\n onChangeMenuType: () => {},\r\n onChangePresetColor: () => {},\r\n onChangeLocale: () => {},\r\n onChangeRTL: () => {},\r\n onChangeContainer: () => {},\r\n onChangeFontFamily: () => {},\r\n onChangeBorderRadius: () => {},\r\n onChangeOutlinedField: () => {},\r\n onReset: () => {}\r\n};\r\n\r\n// ==============================|| CONFIG CONTEXT & PROVIDER ||============================== //\r\n\r\nconst ConfigContext = createContext(initialState);\r\n\r\nfunction ConfigProvider({ children }) {\r\n const [config, setConfig] = useLocalStorage('berry-config-v1', {\r\n layout: initialState.layout,\r\n drawerType: initialState.drawerType,\r\n fontFamily: initialState.fontFamily,\r\n borderRadius: initialState.borderRadius,\r\n outlinedFilled: initialState.outlinedFilled,\r\n navType: initialState.navType,\r\n presetColor: initialState.presetColor,\r\n locale: initialState.locale,\r\n rtlLayout: initialState.rtlLayout\r\n });\r\n\r\n const onChangeLayout = (layout) => {\r\n setConfig({\r\n ...config,\r\n layout\r\n });\r\n };\r\n\r\n const onChangeDrawer = (drawerType) => {\r\n setConfig({\r\n ...config,\r\n drawerType\r\n });\r\n };\r\n\r\n const onChangeMenuType = (navType) => {\r\n setConfig({\r\n ...config,\r\n navType\r\n });\r\n };\r\n\r\n const onChangePresetColor = (presetColor) => {\r\n setConfig({\r\n ...config,\r\n presetColor\r\n });\r\n };\r\n\r\n const onChangeLocale = (locale) => {\r\n setConfig({\r\n ...config,\r\n locale\r\n });\r\n };\r\n\r\n const onChangeRTL = (rtlLayout) => {\r\n setConfig({\r\n ...config,\r\n rtlLayout\r\n });\r\n };\r\n\r\n const onChangeContainer = (container) => {\r\n setConfig({\r\n ...config,\r\n container\r\n });\r\n };\r\n\r\n const onChangeFontFamily = (fontFamily) => {\r\n setConfig({\r\n ...config,\r\n fontFamily\r\n });\r\n };\r\n\r\n const onChangeBorderRadius = (event, newValue) => {\r\n setConfig({\r\n ...config,\r\n borderRadius: newValue\r\n });\r\n };\r\n\r\n const onChangeOutlinedField = (outlinedFilled) => {\r\n setConfig({\r\n ...config,\r\n outlinedFilled\r\n });\r\n };\r\n\r\n const onReset = () => {\r\n setConfig({ ...defaultConfig });\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nConfigProvider.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport { ConfigProvider, ConfigContext };\r\n","// action - state management\r\nimport {\r\n LOGIN,\r\n LOGOUT,\r\n REGISTER,\r\n SET_TENANT_INFO,\r\n SET_FUSIONAUTH_CONFIG,\r\n SET_RECOVERY_CODES,\r\n SET_MFA_VERIFICATION_INFO,\r\n SET_AUTH_INFO,\r\n SET_TENANT_CONFIG,\r\n EVALUATE_FEATURES,\r\n SET_SUBSCRIPTION_DETAILS\r\n} from './actions';\r\n\r\nimport { APP_FEATURES } from './constant';\r\n\r\n// ==============================|| ACCOUNT REDUCER ||============================== //\r\n\r\nconst initialState = {\r\n isLoggedIn: false,\r\n loginType: '',\r\n isInitialized: false,\r\n tenant: null,\r\n fusionAuth: null,\r\n fusionAuthConfig: null,\r\n recoveryCodes: null,\r\n mfaVerificationInfo: null,\r\n user: null,\r\n authInfo: null, // entire authentication info including auth, user and fusionAuthConfig used for generating a transfer token for non-sql logins.\r\n appFeatures: {}, // A map of current application features, indicating whether the feature is enabled or not,\r\n subscriptionDetails: null\r\n};\r\n\r\nfunction evaluateFeatures(currentAppFeatures, tenant) {\r\n const appFeatures = { ...currentAppFeatures };\r\n appFeatures[APP_FEATURES.Queues] = tenant && tenant.tenantData.queueLicensesCount > 0;\r\n return appFeatures;\r\n}\r\n\r\nconst accountReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case REGISTER: {\r\n const { user } = action.payload;\r\n return {\r\n ...state,\r\n user\r\n };\r\n }\r\n case LOGIN: {\r\n const { user, loginType } = action.payload;\r\n return {\r\n ...state,\r\n isLoggedIn: true,\r\n isInitialized: true,\r\n user,\r\n loginType\r\n };\r\n }\r\n case LOGOUT: {\r\n return {\r\n ...state,\r\n isInitialized: true,\r\n isLoggedIn: false,\r\n user: null,\r\n subscriptionDetails: null\r\n };\r\n }\r\n case SET_TENANT_INFO: {\r\n const { tenant, fusionAuth, loginType } = action.payload;\r\n const appFeatures = evaluateFeatures(state.appFeatures, tenant);\r\n return {\r\n ...state,\r\n tenant,\r\n fusionAuth,\r\n loginType,\r\n appFeatures\r\n };\r\n }\r\n case SET_TENANT_CONFIG: {\r\n const tenant = action.payload;\r\n const appFeatures = evaluateFeatures(state.appFeatures, tenant);\r\n return {\r\n ...state,\r\n tenant,\r\n appFeatures\r\n };\r\n }\r\n case SET_FUSIONAUTH_CONFIG: {\r\n const { fusionAuthConfig } = action.payload;\r\n return {\r\n ...state,\r\n fusionAuthConfig\r\n };\r\n }\r\n case SET_RECOVERY_CODES: {\r\n const { recoveryCodes } = action.payload;\r\n return {\r\n ...state,\r\n recoveryCodes\r\n };\r\n }\r\n case SET_MFA_VERIFICATION_INFO: {\r\n // const { mfaVerificationInfo } = action.payload;\r\n return {\r\n ...state,\r\n mfaVerificationInfo: action.payload\r\n };\r\n }\r\n case SET_AUTH_INFO: {\r\n return { ...state, authInfo: action.payload };\r\n }\r\n case EVALUATE_FEATURES: {\r\n const appFeatures = evaluateFeatures(state.appFeatures, state.tenant);\r\n return {\r\n ...state,\r\n appFeatures\r\n };\r\n }\r\n case SET_SUBSCRIPTION_DETAILS: {\r\n return {\r\n ...state,\r\n subscriptionDetails: action.payload\r\n };\r\n }\r\n default: {\r\n return { ...state };\r\n }\r\n }\r\n};\r\n\r\nexport default accountReducer;\r\n","import PropTypes from 'prop-types';\r\nimport { createContext, useCallback, useEffect, useReducer } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\n// reducer - state management\r\nimport {\r\n LOGIN,\r\n LOGOUT,\r\n RESET_STORE,\r\n SET_TENANT_INFO,\r\n SET_FUSIONAUTH_CONFIG,\r\n SET_RECOVERY_CODES,\r\n SET_MFA_VERIFICATION_INFO,\r\n SET_AUTH_INFO,\r\n SET_TENANT_CONFIG,\r\n SET_SUBSCRIPTION_DETAILS\r\n} from 'store/actions';\r\nimport accountReducer from 'store/accountReducer';\r\nimport { useDispatch } from 'store';\r\n\r\n// project imports\r\nimport Loader from 'ui-component/Loader';\r\nimport axios, { axiosCustom, axiosReportService, axiosNotificationService, axiosMSTeamsCQService, axiosUserDataService } from 'utils/axios';\r\nimport { identifyPendo } from 'utils/pendo';\r\nimport { UserRoles } from 'store/constant';\r\n\r\n// constant\r\nconst initialState = {\r\n isLoggedIn: false,\r\n loginType: '',\r\n isInitialized: false,\r\n tenant: null,\r\n fusionAuth: null,\r\n fusionAuthConfig: null,\r\n recoveryCodes: null,\r\n mfaVerificationInfo: null,\r\n user: null,\r\n authInfo: null,\r\n subscriptionDetails: null\r\n};\r\n\r\nconst verifyToken = ({ token, expires }) => {\r\n if (!token) {\r\n return false;\r\n }\r\n // const decoded = jwtDecode(serviceToken);\r\n /**\r\n * Property 'exp' does not exist on type '(token, options?: JwtDecodeOptions | undefined) => T'.\r\n */\r\n return Date.parse(expires) > Date.now();\r\n};\r\n\r\nconst setStorage = (loginToken, initialLogin) => {\r\n if (loginToken) {\r\n const strLoginToken = JSON.stringify(loginToken);\r\n localStorage.setItem('loginToken', strLoginToken);\r\n if (initialLogin && loginToken?.isReportAdmin) {\r\n const strSelectedUser = JSON.stringify({\r\n label: 'My',\r\n value: loginToken?.ownerId\r\n });\r\n localStorage.setItem('selectedUser', strSelectedUser);\r\n }\r\n axios.defaults.headers.common.Authorization = `Bearer ${loginToken.token}`;\r\n axiosReportService.defaults.headers.common.Authorization = `Bearer ${loginToken.token}`;\r\n axiosNotificationService.defaults.headers.common.Authorization = `Bearer ${loginToken.token}`;\r\n axiosMSTeamsCQService.defaults.headers.common.Authorization = `Bearer ${loginToken.token}`;\r\n axiosUserDataService.defaults.headers.common.Authorization = `Bearer ${loginToken.token}`;\r\n } else {\r\n localStorage.removeItem('selectedUser');\r\n localStorage.removeItem('loginToken');\r\n localStorage.setItem('forceLogout', true);\r\n delete axios.defaults.headers.common.Authorization;\r\n }\r\n};\r\n\r\n// ==============================|| JWT CONTEXT & PROVIDER ||============================== //\r\nconst JWTContext = createContext(null);\r\n\r\nexport const JWTProvider = ({ children }) => {\r\n const [state, dispatch] = useReducer(accountReducer, initialState);\r\n const storeDispatch = useDispatch();\r\n const navigate = useNavigate();\r\n\r\n const getSubscriptionDetails = useCallback(\r\n async (tenantId, tenantName) => {\r\n try {\r\n if (!tenantId && !tenantName) {\r\n dispatch({\r\n type: SET_SUBSCRIPTION_DETAILS,\r\n payload: 'no-subscription'\r\n });\r\n }\r\n const subscriptionResponse = await axios.get(`/users/subscriptiondetail?tenantId=${tenantId}&tenantName=${tenantName}`);\r\n if (subscriptionResponse.data.success) {\r\n dispatch({\r\n type: SET_SUBSCRIPTION_DETAILS,\r\n payload: subscriptionResponse.data.data\r\n });\r\n } else {\r\n dispatch({\r\n type: SET_SUBSCRIPTION_DETAILS,\r\n payload: 'no-subscription'\r\n });\r\n console.log(`Error fetching subscription details for tenant ${tenantName}`);\r\n }\r\n } catch (ex) {\r\n console.log(`Error fetching subscription details for tenant ${tenantName}`);\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n const retrieveTenantConfigForClient = useCallback(\r\n async (initialLogin) => {\r\n try {\r\n const uri = `/tenant/config/client?initialLogin=${initialLogin}`;\r\n const response = await axios.get(uri);\r\n const tenant = response.data;\r\n dispatch({\r\n type: SET_TENANT_CONFIG,\r\n payload: tenant\r\n });\r\n // get the subscription details for the tenant\r\n getSubscriptionDetails(tenant.tenantId, tenant.name);\r\n } catch (error) {\r\n // For now silently logging the error\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else if (error.code) {\r\n console.log(`Error code ${error?.code}`);\r\n } else {\r\n console.log(error.message);\r\n }\r\n }\r\n },\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n // Add Report service interceptor to handle 401 and perform logout\r\n const errorCallback = (error) => {\r\n if (error?.response?.status === 401) {\r\n console.log('401 error, Redirecting to login page from JWTProvider');\r\n dispatch({\r\n type: LOGOUT\r\n });\r\n }\r\n return Promise.reject(error);\r\n };\r\n\r\n axiosReportService.interceptors.response.use((response) => response, errorCallback);\r\n axiosNotificationService.interceptors.response.use((response) => response, errorCallback);\r\n axiosMSTeamsCQService.interceptors.response.use((response) => response, errorCallback);\r\n axiosUserDataService.interceptors.response.use((response) => response, errorCallback);\r\n }, []);\r\n\r\n useEffect(() => {\r\n const init = async () => {\r\n try {\r\n const loginToken = JSON.parse(window.localStorage.getItem('loginToken'));\r\n if (loginToken && verifyToken(loginToken)) {\r\n setStorage(loginToken, false);\r\n // if non-sql login, use the /users/current/auth to get all information needed for retrieving the transfer token\r\n // otherwise use the /users/current end point for sql auth\r\n // appending the current time stamp to make sure that the browser doesn't use the cached response for this particular end point\r\n const endpoint = loginToken.loginType === 'sql' ? '/users/current' : `/users/current/auth?_=${new Date().getTime()}`;\r\n const response = await axios.get(endpoint);\r\n // check if username is empty and role is SYSADMIN\r\n // if that's the case, set username to the value stored in session\r\n const { userName, clientId, ownerId, orgId, roles } = response.data.user || response.data;\r\n let loggedInUser = userName;\r\n if (userName === '' && roles?.includes('SYSADMIN')) {\r\n loggedInUser = loginToken.username;\r\n }\r\n dispatch({\r\n type: LOGIN,\r\n payload: {\r\n isLoggedIn: true,\r\n loginType: loginToken.loginType,\r\n user: {\r\n userName: loggedInUser,\r\n clientId,\r\n ownerId,\r\n orgId,\r\n roles\r\n }\r\n }\r\n });\r\n // storeDispatch(fetchPreferences());\r\n\r\n // Retrieve the current tenant config again\r\n await retrieveTenantConfigForClient(false);\r\n if (loginToken.loginType !== 'sql') {\r\n // store the response object as is to be sent for retrieving the transfer token later when redirecting to legacy\r\n dispatch({\r\n type: SET_AUTH_INFO,\r\n payload: response.data\r\n });\r\n }\r\n } else {\r\n dispatch({\r\n type: LOGOUT\r\n });\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n dispatch({\r\n type: LOGOUT\r\n });\r\n }\r\n };\r\n\r\n init();\r\n }, [storeDispatch, retrieveTenantConfigForClient]);\r\n\r\n const login = async (clientId, username, password) => {\r\n const response = await axiosCustom.post('/users/auth', { clientId, username, password }).catch((error) => {\r\n if (error?.status === 'INVALID_CREDENTIALS') {\r\n throw new Error(\r\n 'The Username and Password combination are invalid, please ensure you typed it accurately and try again. If you are still unable to login, you can open a support ticket for assistance.'\r\n );\r\n }\r\n });\r\n if (response?.data?.message?.toLowerCase().includes('the specified client was not found in the database')) {\r\n throw new Error(`Please Enter a Valid Customer ID`);\r\n }\r\n // check if response status is 401 (unauthorized - due to wrong password or username)\r\n try {\r\n const { user, auth } = response.data;\r\n setStorage(\r\n {\r\n token: auth.token,\r\n expires: auth.expires,\r\n transfer: auth.transfer,\r\n clientId: user.clientId,\r\n username: user.userName,\r\n ownerId: user.ownerId,\r\n loginType: 'sql',\r\n isReportAdmin: user.roles?.includes(UserRoles.SystemAdmin) || user.roles?.includes(UserRoles.ReportAdmin)\r\n },\r\n true\r\n );\r\n dispatch({\r\n type: LOGIN,\r\n payload: {\r\n isLoggedIn: true,\r\n loginType: 'sql',\r\n user\r\n }\r\n });\r\n // initialize pendo\r\n identifyPendo(user);\r\n\r\n // Query the Tenant config for CustomerId login\r\n dispatch(retrieveTenantConfigForClient(true));\r\n } catch (ex) {\r\n console.log(response);\r\n throw new Error(`Login failed for user ${username}`);\r\n }\r\n };\r\n\r\n const logout = async () => {\r\n // if sso, logout from FusionAuth\r\n if (state.loginType === 'sso') {\r\n await axios.get('/logout');\r\n const ssoLogoutUrl = localStorage.getItem('faLogoutUrl').replace('%REDIRECT_URI%', process.env.REACT_APP_SSO_LOGOUT_URL);\r\n window.location.replace(ssoLogoutUrl);\r\n }\r\n if (state.loginType === 'idp') {\r\n await axios.get('/logout');\r\n }\r\n setStorage(null, false);\r\n dispatch({ type: LOGOUT });\r\n storeDispatch({ type: RESET_STORE });\r\n localStorage.removeItem('forceLogout');\r\n localStorage.removeItem('loginToken');\r\n };\r\n\r\n const retrieveTenantConfig = async (email) => {\r\n const response = await axios.get(`/tenant/config?email=${encodeURIComponent(email)}`).catch((error) => {\r\n if (error.response) {\r\n throw new Error(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n throw new Error(`${error.request}`);\r\n } else if (error.code) {\r\n throw new Error(`Error code ${error?.code}`);\r\n } else {\r\n throw new Error(error.message);\r\n }\r\n });\r\n try {\r\n const { tenant, fusionAuth } = response.data;\r\n if (tenant.tenantData.isSso) {\r\n const faSSORedirectUrl = fusionAuth.authUrl.replace('%REDIRECT_URI%', process.env.REACT_APP_SSO_REDIRECT_URL);\r\n window.location.replace(faSSORedirectUrl);\r\n } else {\r\n dispatch({\r\n type: SET_TENANT_INFO,\r\n payload: {\r\n tenant,\r\n fusionAuth,\r\n loginType: tenant.tenantData.isSso ? 'sso' : 'idp'\r\n }\r\n });\r\n // get the subscription details for the tenant\r\n getSubscriptionDetails(tenant.tenantId, tenant.name);\r\n navigate(`/login?type=fa&userName=${encodeURIComponent(email)}`);\r\n }\r\n } catch (ex) {\r\n throw new Error(ex.message);\r\n }\r\n };\r\n\r\n const setTenantConfigInfo = async (userName) => {\r\n const response = await axios.get(`/tenant/config?email=${encodeURIComponent(userName)}`).catch((error) => {\r\n if (error.response) {\r\n throw new Error(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n throw new Error(`${error.request}`);\r\n } else {\r\n throw new Error(`Error - ${error.message}`);\r\n }\r\n });\r\n try {\r\n const { tenant, fusionAuth } = response.data;\r\n dispatch({\r\n type: SET_TENANT_INFO,\r\n payload: {\r\n tenant,\r\n fusionAuth,\r\n loginType: tenant.tenantData.isSso ? 'sso' : 'idp'\r\n }\r\n });\r\n // store the fusionAuth log out url in the session so that when the app refreshes, the sso log out is still successful\r\n localStorage.setItem('faLogoutUrl', fusionAuth.logoutUrl);\r\n // get the subscription details for the tenant\r\n getSubscriptionDetails(tenant.tenantId, tenant.name);\r\n } catch (ex) {\r\n throw new Error(ex.message);\r\n }\r\n };\r\n\r\n const loginSSO = async ({ state, code, redirectUri }) => {\r\n const response = await axios.post(`/users/auth/sso`, { state, code, redirectUri }).catch((error) => {\r\n throw new Error(error);\r\n });\r\n try {\r\n if (response?.data?.message) throw response.data.message;\r\n const { user, auth } = response.data;\r\n setStorage(\r\n {\r\n token: auth.token,\r\n expires: auth.expires,\r\n transfer: auth.transfer,\r\n clientId: user.clientId,\r\n username: user.userName,\r\n ownerId: user.ownerId,\r\n loginType: 'sso',\r\n isReportAdmin: user.roles?.includes(UserRoles.SystemAdmin) || user.roles?.includes(UserRoles.ReportAdmin)\r\n },\r\n true\r\n );\r\n dispatch({\r\n type: LOGIN,\r\n payload: {\r\n isLoggedIn: true,\r\n loginType: 'sso',\r\n user\r\n }\r\n });\r\n // store the response object as is to be sent for retrieving the transfer token later when redirecting to legacy\r\n dispatch({\r\n type: SET_AUTH_INFO,\r\n payload: response.data\r\n });\r\n setTenantConfigInfo(user.userName);\r\n // initialize pendo\r\n // initializePendo(user);\r\n } catch (ex) {\r\n throw new Error(ex);\r\n }\r\n };\r\n\r\n const loginFaIdp = async (username, password) => {\r\n const response = await axiosCustom.post(`/users/auth/idp`, { username, password }).catch(async (error) => {\r\n if (error.status === 'TWO_FACTOR_AUTH') {\r\n // set state and load MFA verification screen\r\n dispatch({\r\n type: SET_MFA_VERIFICATION_INFO,\r\n payload: {\r\n tenantId: state.tenant.tenantData.fusionAuthTenantId,\r\n userName: username,\r\n twoFactorId: error.twoFactorId,\r\n methodId: error.methods[0].id,\r\n email: error.methods[0].email,\r\n phoneNumber: error.methods[0].mobilePhone,\r\n authenticator: error.methods[0].authenticator\r\n }\r\n });\r\n if (error.methods[0].method !== 'authenticator') {\r\n const response = await axios\r\n .post(`/users/auth/mfa/send`, {\r\n tenantId: state.tenant.tenantData.fusionAuthTenantId,\r\n userName: username,\r\n twoFactorId: error.twoFactorId,\r\n methodId: error.methods[0].id\r\n })\r\n .catch((error) => {\r\n console.log(error.message);\r\n });\r\n if (response) {\r\n navigate(`/login/mfa-verify/${error.methods[0].method}`, { replace: true });\r\n }\r\n } else {\r\n navigate(`/login/mfa-verify/${error.methods[0].method}`, { replace: true });\r\n }\r\n } else if (error.status === 'INVALID_CREDENTIALS') {\r\n throw new Error(\r\n `The Username and Password combination are invalid, please ensure you typed it accurately and try again. If you are still unable to login, please reach out to your system administrator for assistance.`\r\n );\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n try {\r\n const { fusionAuthConfig } = response.data;\r\n if (fusionAuthConfig.status === 'PASSWORD_CHANGE_REQUIRED') {\r\n dispatch({\r\n type: SET_FUSIONAUTH_CONFIG,\r\n payload: {\r\n fusionAuthConfig\r\n }\r\n });\r\n navigate(`/login/change-password?userName=${encodeURIComponent(username)}`, { replace: true });\r\n } else if (fusionAuthConfig.status === 'OK') {\r\n // check to see if mfa turned on AND user needs to be registered.\r\n // if not proceed and complete the login process\r\n if (fusionAuthConfig.mfaOptions?.enabled && fusionAuthConfig.mfaOptions?.isUserToBeRegistered) {\r\n dispatch({\r\n type: SET_FUSIONAUTH_CONFIG,\r\n payload: {\r\n fusionAuthConfig: { ...fusionAuthConfig, mfaRegisterPwd: password }\r\n }\r\n });\r\n navigate(`/login/mfa/register?userName=${encodeURIComponent(username)}`, { replace: true });\r\n } else {\r\n const { auth, user } = response.data;\r\n setStorage(\r\n {\r\n token: auth.token,\r\n expires: auth.expires,\r\n transfer: auth.transfer,\r\n clientId: user.clientId,\r\n username: user.userName,\r\n ownerId: user.ownerId,\r\n loginType: 'idp',\r\n isReportAdmin: user.roles?.includes(UserRoles.SystemAdmin) || user.roles?.includes(UserRoles.ReportAdmin)\r\n },\r\n true\r\n );\r\n dispatch({\r\n type: LOGIN,\r\n payload: {\r\n isLoggedIn: true,\r\n loginType: 'idp',\r\n user,\r\n fusionAuthConfig: null\r\n }\r\n });\r\n // store the response object as is to be sent for retrieving the transfer token later when redirecting to legacy\r\n dispatch({\r\n type: SET_AUTH_INFO,\r\n payload: response.data\r\n });\r\n // initialize pendo\r\n // initializePendo(user);\r\n }\r\n }\r\n } catch (ex) {\r\n throw new Error('Invalid credentials');\r\n }\r\n };\r\n\r\n const loginFaMfa = async (userName, code, twoFactorId) => {\r\n const response = await axios.post(`/users/auth/idp`, { userName, code, twoFactorId }).catch(() => {\r\n throw new Error(`Login failed for user`);\r\n });\r\n try {\r\n const { data } = response;\r\n if (data.user && data.auth) {\r\n const { user, auth } = data;\r\n setStorage(\r\n {\r\n token: auth.token,\r\n expires: auth.expires,\r\n transfer: auth.transfer,\r\n clientId: user.clientId,\r\n username: user.userName,\r\n ownerId: user.ownerId,\r\n loginType: 'idp',\r\n isReportAdmin: user.roles?.includes(UserRoles.SystemAdmin) || user.roles?.includes(UserRoles.ReportAdmin)\r\n },\r\n true\r\n );\r\n dispatch({\r\n type: LOGIN,\r\n payload: {\r\n isLoggedIn: true,\r\n loginType: 'idp',\r\n user\r\n }\r\n });\r\n // store the response object as is to be sent for retrieving the transfer token later when redirecting to legacy\r\n dispatch({\r\n type: SET_AUTH_INFO,\r\n payload: data\r\n });\r\n } else if (data.fusionAuthConfig) {\r\n const { fusionAuthConfig } = data;\r\n if (fusionAuthConfig.status === 'PASSWORD_CHANGE_REQUIRED') {\r\n dispatch({\r\n type: SET_FUSIONAUTH_CONFIG,\r\n payload: {\r\n fusionAuthConfig\r\n }\r\n });\r\n navigate(`/login/change-password?userName=${encodeURIComponent(userName)}`, { replace: true });\r\n } else {\r\n throw new Error(`Unexpected fusionAuthConfig status: ${fusionAuthConfig.status}`);\r\n }\r\n } else {\r\n throw new Error(`Unexpected response format`);\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n throw new Error(`Login failed for user`);\r\n }\r\n };\r\n\r\n const changeFaPassword = async ({ tenantId, userName, currentPassword, newPassword, changePasswordId }) => {\r\n try {\r\n await axios\r\n .post(`/users/auth/idp/change-password`, { tenantId, userName, currentPassword, newPassword, changePasswordId })\r\n .catch((error) => {\r\n if (error.status === 'INVALID_CREDENTIALS') {\r\n throw new Error(`Change Password request failed. Invalid credentials passed in`);\r\n } else if (error?.code) {\r\n throw new Error(`Error code ${error.code}`);\r\n } else {\r\n throw new Error(`Change Password request failed`);\r\n }\r\n });\r\n navigate(`/login`, { replace: true });\r\n } catch (ex) {\r\n throw new Error(ex.message);\r\n }\r\n };\r\n\r\n const verifyMfaCode = async ({ userName, password, tenantId, method, contact, code, secretBase32Encoded }) => {\r\n const response = await axios\r\n .post(`/users/auth/mfa/verify`, { userName, password, tenantId, method, contact, code, secretBase32Encoded })\r\n .catch((error) => {\r\n throw new Error(`Could not verify the code`);\r\n });\r\n try {\r\n if (response?.data) {\r\n dispatch({\r\n type: SET_RECOVERY_CODES,\r\n payload: {\r\n recoveryCodes: response.data.recoveryCodes\r\n }\r\n });\r\n navigate(`/login/recoveryCodes`, { replace: true });\r\n }\r\n } catch (ex) {\r\n throw new Error(`Couldn't verify the code`);\r\n }\r\n };\r\n\r\n if (state.isInitialized !== undefined && !state.isInitialized) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nJWTProvider.propTypes = {\r\n children: PropTypes.node\r\n};\r\n\r\nexport default JWTContext;\r\n","import { Button, Dialog, DialogActions, DialogTitle, DialogContent, DialogContentText, Typography } from '@mui/material';\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\nconst ConfirmationDialog = ({ title, content, okButton, isOkCancel, open, handleYes, handleNo, handleOk }) => {\r\n const theme = useTheme();\r\n\r\n return (\r\n \r\n {open && (\r\n <>\r\n {title}\r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n {okButton ? (\r\n \r\n ) : (\r\n <>\r\n \r\n {isOkCancel ? `Cancel` : `No`}\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 ConfirmationDialog;\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#edeef5\",\"primary200\":\"#aa89fc\",\"primaryMain\":\"#3b55f6\",\"primaryDark\":\"#3847e8\",\"primary800\":\"#2f24c3\",\"secondaryLight\":\"#ede7f6\",\"secondary200\":\"#b39ddb\",\"secondaryMain\":\"#384055\",\"secondaryDark\":\"#2f3b4f\",\"secondary800\":\"#4527a0\",\"successLight\":\"#b9f6ca\",\"success200\":\"#69f0ae\",\"successMain\":\"#00e676\",\"successDark\":\"#00c853\",\"errorLight\":\"#ef9a9a\",\"errorMain\":\"#f44336\",\"errorDark\":\"#c62828\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fff8e1\",\"warningMain\":\"#ffe57f\",\"warningDark\":\"#ffc107\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#222631\",\"grey700\":\"#5c6e83\",\"grey900\":\"#212121\",\"darkPaper\":\"#111936\",\"darkBackground\":\"#1a223f\",\"darkLevel1\":\"#29314f\",\"darkLevel2\":\"#212946\",\"darkTextTitle\":\"#d7dcec\",\"darkTextPrimary\":\"#a0a9c0\",\"darkTextSecondary\":\"#8492c4\",\"darkPrimaryLight\":\"#edeef5\",\"darkPrimaryMain\":\"#3b55f6\",\"darkPrimaryDark\":\"#3847e8\",\"darkPrimary200\":\"#aa89fc\",\"darkPrimary800\":\"#2f24c3\",\"darkSecondaryLight\":\"#ede7f6\",\"darkSecondaryMain\":\"#a0a9c0\",\"darkSecondaryDark\":\"#303648\",\"darkSecondary200\":\"#b39ddb\",\"darkSecondary800\":\"#6200ea\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\"};","import { createSlice } from '@reduxjs/toolkit';\r\n// project imports\r\nimport axiosServices, { axiosReportService } from 'utils/axios';\r\nimport { SIZE } from '../constant';\r\nimport { dispatch } from 'store';\r\nimport { setLowestDateGroup } from './reportParameters';\r\n\r\nexport const initialState = {\r\n savedTemplates: [],\r\n sharedTemplates: [],\r\n standardTemplates: [],\r\n saveTemplateLoaded: false,\r\n saveTemplateLoadingStart: false,\r\n standardDataLoaded: false,\r\n savedDataLoaded: false,\r\n isDeleteInProgress: false,\r\n isDeleteCompleted: false,\r\n tags: [],\r\n dataMap: [],\r\n updatedDataMap: [],\r\n shareTemplateLoadingStart: false,\r\n shareTemplateLoaded: false,\r\n shareTemplateUsers: [],\r\n shareListLoaded: false,\r\n isRoleUpdated: false,\r\n ownerNotValid: false,\r\n isUpdateStart: false,\r\n changeOwnerStart: false,\r\n templatesForScheduling: [],\r\n templatesForSchedulingLoading: false,\r\n templatesForSchedulingError: null,\r\n hasMoreSavedTemplateData: true,\r\n hasMoreSharedTemplateData: true,\r\n isDeleteConfirmationrequire: false,\r\n deleteTemplateError: {},\r\n isReassignComplete: false,\r\n deleteAccessDone: false,\r\n ownerList: [],\r\n templateLowestDateGroup: [],\r\n isOwnerFatched: false,\r\n loading: false\r\n};\r\n\r\nexport const slice = createSlice({\r\n name: 'templates',\r\n initialState,\r\n reducers: {\r\n markAsFavorite(state, action) {\r\n if (action.payload.templateType === 'saved') {\r\n for (let i = 0; i < state.savedTemplates.length; i += 1) {\r\n if (state.savedTemplates[i].templateId === action.payload.templateId) {\r\n state.savedTemplates[i].isFavorite = !state.savedTemplates[i].isFavorite;\r\n }\r\n }\r\n } else if (action.payload.templateType === 'shared') {\r\n for (let i = 0; i < state.sharedTemplates.length; i += 1) {\r\n if (state.sharedTemplates[i].templateId === action.payload.templateId) {\r\n state.sharedTemplates[i].isFavorite = !state.sharedTemplates[i].isFavorite;\r\n }\r\n }\r\n }\r\n },\r\n getStandardListSuccess(state, action) {\r\n state.standardTemplates = action.payload;\r\n state.standardDataLoaded = true;\r\n },\r\n getStandardListFailure(state, action) {\r\n state.standardDataLoaded = true;\r\n },\r\n getSavedListSuccess(state, action) {\r\n if (action.payload.length < SIZE) {\r\n state.hasMoreSavedTemplateData = false;\r\n }\r\n state.savedTemplates = state.savedTemplates.concat(action.payload);\r\n state.savedDataLoaded = true;\r\n },\r\n getSavedListFailure(state, action) {\r\n state.savedDataLoaded = true;\r\n },\r\n\r\n getSharedListSuccess(state, action) {\r\n if (action.payload.length < SIZE) {\r\n state.hasMoreSharedTemplateData = false;\r\n }\r\n state.sharedTemplates = state.sharedTemplates.concat(action.payload);\r\n state.shareListLoaded = true;\r\n },\r\n\r\n getSharedListFailure(state, action) {\r\n state.shareListLoaded = true;\r\n },\r\n removeTagFromTemplateSuccess(state, action) {\r\n state.saveTemplateLoadingStart = false;\r\n state.isUpdateStart = false;\r\n\r\n for (let i = 0; i < state.savedTemplates.length; i += 1) {\r\n if (state.savedTemplates[i].templateId === action.payload.templateId) {\r\n state.savedTemplates[i].tags = [\r\n ...state.savedTemplates[i].tags.filter((templateTag) => {\r\n return !action.payload.tagIds.includes(templateTag.tagId);\r\n })\r\n ];\r\n break;\r\n }\r\n }\r\n\r\n for (let i = 0; i < state.sharedTemplates.length; i += 1) {\r\n if (state.sharedTemplates[i].templateId === action.payload.templateId) {\r\n state.sharedTemplates[i].tags = [\r\n ...state.sharedTemplates[i].tags.filter((templateTag) => {\r\n return !action.payload.tagIds.includes(templateTag.tagId);\r\n })\r\n ];\r\n break;\r\n }\r\n }\r\n state.loading = false;\r\n },\r\n\r\n createSaveTemplateSuccess(state, action) {\r\n state.saveTemplateLoadingStart = false;\r\n state.saveTemplateLoaded = !action.payload?.notCloseModal;\r\n state.isUpdateStart = false;\r\n\r\n // update title, description, tags intp standardTemplates\r\n if (action.payload?.isRename) {\r\n if (action.payload?.templateType === 'saved') {\r\n for (let i = 0; i < state.savedTemplates.length; i += 1) {\r\n if (state.savedTemplates[i].templateId === action.payload.data.templateId) {\r\n state.savedTemplates[i].templateName = action.payload.data.templateName;\r\n state.savedTemplates[i].templateDescription = action.payload.data.templateDescription;\r\n state.savedTemplates[i].tags = [\r\n ...action.payload.data.templateTags\r\n .map((templateTag) => {\r\n return state.tags.find(({ value }) => value === templateTag.tagId);\r\n })\r\n .map((data) => ({ tagId: data.value, tagName: data.label }))\r\n ];\r\n break;\r\n }\r\n }\r\n } else if (action.payload?.templateType === 'shared') {\r\n for (let i = 0; i < state.sharedTemplates.length; i += 1) {\r\n if (state.sharedTemplates[i].templateId === action.payload.data.templateId) {\r\n state.sharedTemplates[i].templateName = action.payload.data.templateName;\r\n state.sharedTemplates[i].templateDescription = action.payload.data.templateDescription;\r\n state.sharedTemplates[i].tags = [\r\n ...action.payload.data.templateTags\r\n .map((templateTag) => {\r\n return state.tags.find(({ value }) => value === templateTag.tagId);\r\n })\r\n .map((data) => ({ tagId: data.value, tagName: data.label }))\r\n ];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n state.loading = false;\r\n },\r\n createShareTemplateSuccess(state, action) {\r\n state.shareTemplateLoadingStart = false;\r\n state.shareTemplateLoaded = true;\r\n if (action.payload && action.payload.templateType) {\r\n if (action.payload.templateType === 'saved') {\r\n for (let i = 0; i < state.savedTemplates.length; i += 1) {\r\n if (state.savedTemplates[i].templateId === action.payload.templateId) {\r\n if (action.payload.isOwnerChange) {\r\n const newList = state.savedTemplates.filter((item) => action.payload.templateId !== item.templateId);\r\n state.savedTemplates = newList;\r\n } else {\r\n state.savedTemplates[i].isShared = true;\r\n }\r\n }\r\n }\r\n }\r\n if (action.payload.templateType === 'shared') {\r\n for (let i = 0; i < state.sharedTemplates.length; i += 1) {\r\n if (state.sharedTemplates[i].templateId === action.payload.templateId) {\r\n state.sharedTemplates[i].isShared = true;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n createDeleteAccessSuccess(state, action) {\r\n state.deleteAccessDone = true;\r\n },\r\n\r\n createSaveTemplateStart(state, action) {\r\n state.saveTemplateLoadingStart = true;\r\n state.isUpdateStart = true;\r\n state.loading = true;\r\n },\r\n createUpdateOwnerSuccess(state, action) {\r\n state.changeOwnerStart = false;\r\n state.saveTemplateLoaded = true;\r\n state.isReassignComplete = true;\r\n if (action.payload?.ownerUpdated) {\r\n const newList = state.savedTemplates.filter((item) => action.payload.templateId !== item.templateId);\r\n state.savedTemplates = newList;\r\n }\r\n },\r\n createResetTemplateLoaded(state, action) {\r\n state.saveTemplateLoaded = false;\r\n state.saveTemplateLoadingStart = false;\r\n },\r\n createResetShareTemplateData(state, action) {\r\n state.shareTemplateUsers = [];\r\n state.shareTemplateLoaded = false;\r\n state.shareTemplateLoadingStart = false;\r\n state.updatedDataMap = [];\r\n state.dataMap = [];\r\n state.shareTemplateUsers = [];\r\n state.isRoleUpdated = false;\r\n state.deleteAccessDone = false;\r\n },\r\n resetOwnerValidation(state, action) {\r\n state.ownerNotValid = false;\r\n state.changeOwnerStart = false;\r\n },\r\n\r\n updateDeleteTemplateStart(state, action) {\r\n state.isDeleteInProgress = action.payload;\r\n },\r\n updateDeleteTemplateComplete(state, action) {\r\n state.isDeleteCompleted = action.payload;\r\n state.isReassignComplete = false;\r\n },\r\n updateReassignComplete(state, action) {\r\n state.isReassignComplete = action.payload;\r\n },\r\n createDeleteTemplate(state, action) {\r\n if (action.payload.isFromShared) {\r\n const newList = state.sharedTemplates.filter((item) => !action.payload.templateIds.find((rm) => item.templateId === rm));\r\n state.sharedTemplates = newList;\r\n } else {\r\n const newList = state.savedTemplates.filter((item) => !action.payload.templateIds.find((rm) => item.templateId === rm));\r\n state.savedTemplates = newList;\r\n }\r\n },\r\n getTagsListSuccess(state, action) {\r\n const data = [];\r\n action.payload.forEach((tag) => {\r\n const item = {};\r\n item.label = tag.tagName;\r\n item.value = tag.tagId;\r\n data.push(item);\r\n });\r\n state.tags = data;\r\n },\r\n validEmailAddress(state, action) {\r\n const data = {\r\n key: action.payload.email,\r\n value: action.payload.data\r\n };\r\n state.dataMap.push(data);\r\n },\r\n\r\n changeOwnerStart(state, action) {\r\n state.changeOwnerStart = true;\r\n },\r\n\r\n notValidEmailAddress(state, action) {\r\n const data = {\r\n key: action.payload,\r\n value: null\r\n };\r\n state.dataMap.push(data);\r\n state.ownerNotValid = true;\r\n state.changeOwnerStart = false;\r\n },\r\n\r\n createShareTemplateStart(state, action) {\r\n state.shareTemplateLoadingStart = true;\r\n },\r\n\r\n setShareTemplateUsers(state, action) {\r\n const result = [];\r\n state.shareTemplateUsers = action.payload;\r\n state.updatedDataMap = action.payload;\r\n },\r\n updateShareTemplateUsers(state, action) {\r\n const newList = state.updatedDataMap.filter((item) => action.payload !== item.shareeLoginName);\r\n state.shareTemplateUsers = newList;\r\n state.updatedDataMap = newList;\r\n },\r\n\r\n setShareTemplateFailure(state, action) {\r\n // state.shareDataLoaded = true;\r\n },\r\n updateExistingUserRole(state, action) {\r\n for (let i = 0; i < state.updatedDataMap.length; i += 1) {\r\n if (state.updatedDataMap[i].shareeLoginName === action.payload.email) {\r\n state.updatedDataMap[i].shareeRole = action.payload.selectedOption;\r\n break;\r\n }\r\n }\r\n\r\n if (JSON.stringify(state.updatedDataMap) === JSON.stringify(state.shareTemplateUsers)) {\r\n state.isRoleUpdated = false;\r\n } else {\r\n state.isRoleUpdated = true;\r\n }\r\n },\r\n\r\n removeExistingUser(state, action) {\r\n const newList = state.updatedDataMap.filter((item) => !action.payload.email === item.loginName);\r\n state.updatedDataMap = newList;\r\n state.isRoleUpdated = true;\r\n },\r\n fetchTemplatesForSchedulingRequest(state) {\r\n state.templatesForSchedulingLoading = true;\r\n state.templatesForSchedulingError = null;\r\n state.templatesForScheduling = [];\r\n },\r\n fetchTemplatesForSchedulingSuccess(state, action) {\r\n state.templatesForSchedulingLoading = false;\r\n state.templatesForScheduling = action.payload;\r\n },\r\n fetchTemplatesForSchedulingError(state, action) {\r\n state.templatesForSchedulingLoading = false;\r\n state.templatesForSchedulingError = action.payload;\r\n },\r\n fetchSavedTemplateRequest(state, action) {\r\n state.savedDataLoaded = false;\r\n if (action.payload) {\r\n state.savedTemplates = [];\r\n state.hasMoreSavedTemplateData = true;\r\n }\r\n },\r\n // fetchSharedTemplateRequest(state, action) {\r\n // state.savedDataLoaded = false;\r\n // if (action.payload) {\r\n // state.sharedTemplates = [];\r\n // state.hasMoreSavedTemplateData = true;\r\n // }\r\n // },\r\n fetchSharedTemplateRequest(state, action) {\r\n state.shareListLoaded = false;\r\n if (action.payload) {\r\n state.sharedTemplates = [];\r\n state.hasMoreSharedTemplateData = true;\r\n }\r\n },\r\n setOwnerList(state, action) {\r\n state.isOwnerFatched = true;\r\n state.ownerList = action.payload;\r\n },\r\n setTemplatesSelectedDateGroup(state, action) {\r\n state.templateLowestDateGroup = action.payload;\r\n },\r\n\r\n updateDeleteConfirmationrequire(state, action) {\r\n state.isDeleteConfirmationRequire = action.payload.isRequire;\r\n state.deleteTemplateError = action.payload.error;\r\n },\r\n setDeleteConfirmationRequire(state, action) {\r\n state.isDeleteConfirmationRequire = false;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function fetchTemplatesForScheduling(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.fetchTemplatesForSchedulingRequest());\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n try {\r\n const allResponse = await Promise.all([\r\n axiosReportService.get(`/templates?DefaultTemplates=true`),\r\n axiosReportService.get(`/templates/share`),\r\n axiosReportService.get(`/templates?DefaultTemplates=false`)\r\n ]);\r\n\r\n let allData = [];\r\n\r\n allResponse.forEach(({ data }) => {\r\n if (data.data) {\r\n allData = [...allData, ...data.data];\r\n }\r\n });\r\n\r\n dispatch(slice.actions.fetchTemplatesForSchedulingSuccess(allData));\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.fetchTemplatesForSchedulingError(ex));\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting templates', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function markAsFavorite(enqueueSnackbar, templateId, isFavorite, templateType) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.markAsFavorite({ templateId, templateType }));\r\n let response;\r\n if (isFavorite) {\r\n response = await axiosReportService.delete(`/templates/${templateId}/user/favorite`);\r\n } else {\r\n response = await axiosReportService.post(`/templates/${templateId}/user/favorite`);\r\n }\r\n if (response?.data?.success) {\r\n const title = isFavorite ? 'Template removed from Favorite' : 'Template marked favorite';\r\n enqueueSnackbar(title, { variant: 'info' });\r\n } else {\r\n enqueueSnackbar('Failed to mark template as favorite', { variant: 'error' });\r\n }\r\n if (response?.status !== 200 || !response?.data?.success) {\r\n dispatch(slice.actions.markAsFavorite({ templateId, templateType }));\r\n }\r\n } catch (ex) {\r\n dispatch(slice.actions.markAsFavorite({ templateId, templateType }));\r\n console.log(ex);\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Failed to mark template as favorite', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function removeTagFromTemplate(enqueueSnackbar, templateId, tagIds) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createSaveTemplateStart());\r\n const response = await axiosReportService.delete(`/tags/${templateId}`, { data: tagIds });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.removeTagFromTemplateSuccess({ templateId, tagIds }));\r\n } else {\r\n console.log('Error in removing Tag');\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in removing Tag', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getStandardTemplateList(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n try {\r\n const response = await axiosReportService.get(`/templates?DefaultTemplates=true`);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.getStandardListSuccess(response.data.data));\r\n } else {\r\n dispatch(slice.actions.getStandardListFailure(response?.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.getStandardListFailure());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Standard templates', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getTags(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n try {\r\n const response = await axiosReportService.get(`/tags`);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.getTagsListSuccess(response.data.data));\r\n } else {\r\n enqueueSnackbar('Error in getting tags', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting tags', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function changeTemplateOwner(enqueueSnackbar, payload, templateId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createSaveTemplateStart());\r\n const response = await axiosReportService.patch(`/templates/${templateId}/share`, payload);\r\n if (response?.data?.success) {\r\n const ownerUpdated = true;\r\n dispatch(slice.actions.createUpdateOwnerSuccess({ ownerUpdated, templateId }));\r\n enqueueSnackbar(`Reassign template Successfully`, { variant: 'info' });\r\n } else {\r\n dispatch(slice.actions.createUpdateOwnerSuccess());\r\n enqueueSnackbar(`Reassign template failed`, { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.createUpdateOwnerSuccess());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`Reassign template failed`, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function verifyEmail(enqueueSnackbar, email, templateId, isReassign, ownerId) {\r\n return async (dispatch) => {\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n try {\r\n if (isReassign) {\r\n dispatch(slice.actions.changeOwnerStart());\r\n }\r\n const response = await axiosServices.get(`/users?login=${email}`);\r\n if (response?.data) {\r\n const data = response.data;\r\n dispatch(slice.actions.validEmailAddress({ data, email }));\r\n\r\n if (isReassign) {\r\n const payload = {\r\n templateId,\r\n users: [{ loginName: data?.loginName, userRole: 'Owner' }]\r\n };\r\n dispatch(changeTemplateOwner(enqueueSnackbar, payload, templateId));\r\n }\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.notValidEmailAddress(email));\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('User is not valid', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getSavedTemplateList(enqueueSnackbar, offset, searchQuery, filterTagIds, isFavorite, isFromSearch, ownerIdFilter) {\r\n return async (dispatch) => {\r\n const payload = { DefaultTemplates: false, offset, limit: SIZE, searchQuery, filterTagIds, ownerIdFilter, isFavorite };\r\n dispatch(slice.actions.fetchSavedTemplateRequest(isFromSearch));\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n try {\r\n const response = await axiosReportService.get('/templates', { params: payload });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.getSavedListSuccess(response.data.data));\r\n } else {\r\n dispatch(slice.actions.getSavedListFailure(response?.data.error));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.getSavedListFailure());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Saved templates', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function saveAndUpddateTemplate(enqueueSnackbar, isUpdate, payload, templateId, isRename, templateType, notCloseModal) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createSaveTemplateStart());\r\n let response;\r\n if (isRename) {\r\n response = await axiosReportService.patch(`/templates/${templateId}/rename`, payload);\r\n } else if (isUpdate) {\r\n response = await axiosReportService.patch(`/templates/${templateId}/user`, payload);\r\n } else {\r\n response = await axiosReportService.post('/templates/user', payload);\r\n }\r\n\r\n if (response?.data?.success) {\r\n const data = response.data.data;\r\n dispatch(slice.actions.createSaveTemplateSuccess({ data, isRename, templateType, notCloseModal }));\r\n if (notCloseModal) {\r\n enqueueSnackbar(`Tag added to the template Successfully`, { variant: 'info' });\r\n } else {\r\n enqueueSnackbar(`Save template Successfully`, { variant: 'info' });\r\n }\r\n } else {\r\n dispatch(slice.actions.createSaveTemplateSuccess());\r\n enqueueSnackbar(`Save template failed`, { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.createSaveTemplateSuccess());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`${isUpdate ? 'Update' : 'Save'} template failed`, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\nexport function deleteTemplateStandard(enqueueSnackbar, isUserConfirmed, templateIds, isFromShared) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDeleteTemplateStart(true));\r\n let response;\r\n if (isFromShared) {\r\n response = await axiosReportService.delete(`/templates/${templateIds[0]}/share/self?isUserConfirmed=${isUserConfirmed}`);\r\n } else {\r\n response = await axiosReportService.delete(`/templates/user?isUserConfirmed=${isUserConfirmed}`, { data: templateIds });\r\n }\r\n dispatch(slice.actions.updateDeleteTemplateStart(false));\r\n dispatch(slice.actions.updateDeleteTemplateComplete(true));\r\n dispatch(slice.actions.createDeleteTemplate({ templateIds, isFromShared }));\r\n if (isUserConfirmed) {\r\n if (response?.data.success) {\r\n enqueueSnackbar(`Delete template Successfully`, { variant: 'info' });\r\n } else {\r\n enqueueSnackbar(`Delete template Failed`, { variant: 'error' });\r\n }\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.updateDeleteTemplateStart(false));\r\n if (ex?.response?.status === 400 && ex?.response?.data?.error?.includes('ErrorType')) {\r\n const error = JSON.parse(ex?.response?.data?.error);\r\n dispatch(slice.actions.updateDeleteConfirmationrequire({ isRequire: true, error }));\r\n console.log(error);\r\n } else if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`Delete template Failed`, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function resetDeleteInProgress() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createResetTemplateLoaded());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setDeleteConfirmationRequire() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setDeleteConfirmationRequire());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetTemplateLoaded() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createResetTemplateLoaded());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\nexport function resetShareTemplateData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createResetShareTemplateData());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetOwnerValidation() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetOwnerValidation());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetDeleteTemplate() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDeleteTemplateStart(false));\r\n dispatch(slice.actions.updateDeleteTemplateComplete(false));\r\n dispatch(slice.actions.updateReassignComplete(false));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateExistingUserRole(user, selectedOption) {\r\n return async (dispatch) => {\r\n try {\r\n const email = user.shareeLoginName;\r\n dispatch(slice.actions.updateExistingUserRole({ email, selectedOption }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function shareAndUpddateTemplate(enqueueSnackbar, isUpdate, payload, isRemove, templateType) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createShareTemplateStart());\r\n let response;\r\n if (!isUpdate) {\r\n response = await axiosReportService.post(`/templates/${payload.templateId}/share`, payload);\r\n } else {\r\n response = await axiosReportService.patch(`/templates/${payload.templateId}/share`, payload);\r\n }\r\n if (response?.data?.success) {\r\n const templateId = payload.templateId;\r\n const owner = payload?.users?.map((user) => user.userRole === 'Owner');\r\n const isOwnerChange = owner[0];\r\n dispatch(slice.actions.createShareTemplateSuccess({ templateId, templateType, isOwnerChange }));\r\n if (isRemove) {\r\n dispatch(slice.actions.setShareTemplateUsers(payload.users));\r\n enqueueSnackbar(`Delete Access Successfully`, { variant: 'info' });\r\n } else if (isUpdate) {\r\n enqueueSnackbar(`Update template Successfully`, { variant: 'info' });\r\n } else {\r\n enqueueSnackbar(`Shared template successfully`, { variant: 'info' });\r\n }\r\n } else if (isRemove) {\r\n enqueueSnackbar(`Error in Deleting Access`, { variant: 'error' });\r\n } else if (isUpdate) {\r\n enqueueSnackbar(`Update template Failed`, { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`Share template failed`, { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.createShareTemplateSuccess());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else if (isRemove) {\r\n enqueueSnackbar(`Error in Deleting Access`, { variant: 'error' });\r\n } else if (isUpdate) {\r\n enqueueSnackbar(`Update template Failed`, { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`Share template failed`, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function removeTemplateAccess(enqueueSnackbar, templateId, payloadArr) {\r\n return async (dispatch) => {\r\n try {\r\n payloadArr.forEach(async (payload) => {\r\n dispatch(slice.actions.createSaveTemplateStart());\r\n const response = await axiosReportService.delete(`/templates/${templateId}/share/user`, { data: payload });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.updateShareTemplateUsers(payload.loginName));\r\n dispatch(slice.actions.createDeleteAccessSuccess());\r\n enqueueSnackbar(`Delete Access Successfully`, { variant: 'info' });\r\n } else {\r\n enqueueSnackbar(`Error in Deleting Access`, { variant: 'error' });\r\n }\r\n });\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.createDeleteAccessSuccess());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`Error in Deleting Access`, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function removeUserFromList(payload) {\r\n return (dispatch) => {\r\n dispatch(slice.actions.updateShareTemplateUsers(payload));\r\n };\r\n}\r\n\r\nexport function getShareTemplateUsers(enqueueSnackbar, templateId, setOriginalDataMapCB) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axiosReportService.get(`/templates/${templateId}/share/users`);\r\n if (response?.data?.success) {\r\n setOriginalDataMapCB(response.data?.data);\r\n dispatch(slice.actions.setShareTemplateUsers(response.data?.data));\r\n } else {\r\n dispatch(slice.actions.setShareTemplateFailure());\r\n enqueueSnackbar('Error in getting Template users', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.setShareTemplateFailure());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Template users', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getSharedTemplateList(enqueueSnackbar, offset, searchQuery, filterTagIds, isFavorite, isFromSearch, ownerIdFilter) {\r\n return async (dispatch) => {\r\n const payload = { DefaultTemplates: false, offset, limit: SIZE, searchQuery, filterTagIds, isFavorite, ownerIdFilter };\r\n dispatch(slice.actions.fetchSharedTemplateRequest(isFromSearch));\r\n\r\n // Call API to get the list of dashboards for the logged in user - dashId, dashName\r\n try {\r\n const response = await axiosReportService.get(`/templates/share`, { params: payload });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.getSharedListSuccess(response.data?.data));\r\n } else {\r\n dispatch(slice.actions.getSharedListFailure());\r\n enqueueSnackbar('Error in getting Shared templates', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.getSharedListFailure());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Shared templates', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getOwnerList(userOwnerId) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axiosReportService.get(`/templates/templateOwnerList`);\r\n if (response?.data?.data) {\r\n const data = response.data.data.filter((d) => d.ownerID !== userOwnerId);\r\n dispatch(slice.actions.setOwnerList(data));\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function getDateRangeValidationInfo(enqueueSnackbar, templateIds, isFromSavedShared = false) {\r\n return async (dispatch) => {\r\n try {\r\n const commaSeperatedTemplatesId = templateIds?.toString();\r\n const payload = { templateIds: commaSeperatedTemplatesId };\r\n const response = await axiosReportService.get(`/templates/getDateRangeValidationInfo`, { params: payload });\r\n if (response?.data?.success) {\r\n if (!isFromSavedShared) {\r\n dispatch(slice.actions.setTemplatesSelectedDateGroup(response.data?.data));\r\n } else {\r\n const lowestSelection = response.data?.data?.[0]?.lowestSelectedDateGroup;\r\n dispatch(setLowestDateGroup(lowestSelection));\r\n }\r\n } else {\r\n enqueueSnackbar('Error in getting Template information', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Template users', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n","import React, { useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\nimport DataGrid, { Column, Selection, SearchPanel, Scrolling, FilterRow } from 'devextreme-react/data-grid';\r\nimport { IconTrash, IconPencil } from '@tabler/icons';\r\nimport { Tooltip, IconButton } from '@mui/material';\r\n\r\nconst DxDataGrid = ({\r\n dataSet,\r\n columns,\r\n keyField,\r\n isFilterRow = false,\r\n height,\r\n scrolling = false,\r\n selectedFilterValues,\r\n setSelectedFilterValues,\r\n showBorders = false,\r\n selection = false,\r\n allowSelectAll = false,\r\n showRowLines = false,\r\n searchPanel = false,\r\n handleEdit,\r\n handleDelete\r\n}) => {\r\n const theme = useTheme();\r\n const dataGrid = useRef(null);\r\n\r\n const onSelectionChanged = (e) => {\r\n // console.log(selectedRowsData);\r\n setSelectedFilterValues(e.selectedRowKeys, e.currentDeselectedRowKeys, e.selectedRowsData);\r\n };\r\n\r\n return (\r\n \r\n {selection && }\r\n {scrolling && }\r\n {isFilterRow && }\r\n {searchPanel && }\r\n {columns.map((colItem, index) => {\r\n if (colItem.type === 'custom') {\r\n return (\r\n {\r\n return colItem.getComponent(cellData.data);\r\n }}\r\n />\r\n );\r\n }\r\n if (colItem.dataField === 'actionButtons') {\r\n return (\r\n (\r\n <>\r\n {handleEdit && (\r\n \r\n \r\n handleEdit(cellData.data)}\r\n disabled={colItem.disableEdit ? colItem.disableEdit(cellData.data) : false}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {handleDelete && (\r\n \r\n \r\n handleDelete(cellData.data)}\r\n disabled={colItem.disableDelete ? colItem.disableDelete(cellData.data) : false}\r\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 return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nDxDataGrid.propTypes = {\r\n dataSet: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n columns: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n keyField: PropTypes.string.isRequired,\r\n isFilterRow: PropTypes.bool,\r\n height: PropTypes.number,\r\n scrolling: PropTypes.bool,\r\n selectedFilterValues: PropTypes.array,\r\n setSelectedFilterValues: PropTypes.func,\r\n showBorders: PropTypes.bool,\r\n selection: PropTypes.bool,\r\n showRowLines: PropTypes.bool,\r\n allowSelectAll: PropTypes.bool,\r\n searchPanel: PropTypes.bool,\r\n handleEdit: PropTypes.func,\r\n handleDelete: PropTypes.func\r\n};\r\n\r\nexport default DxDataGrid;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\n// material ui\r\nimport { Autocomplete, Grid, Checkbox, FormControlLabel, TextField, Typography } from '@mui/material';\r\n\r\n// project imports\r\nimport { useDispatch, useSelector } from 'store';\r\nimport { getCountries, getTimezone } from 'store/slices/lookup';\r\n\r\nconst TimeZone = ({ country, gmtOffset, useDst, setCountry, setGmt, setUseDst, setTimeZoneError, setPaddingTop, disabled = false }) => {\r\n const { countries, countryBasedTimezone } = useSelector((state) => state.lookup);\r\n\r\n const countriesOptionList = countries.map((country) => ({ label: country.countryName, value: country.countryCode }));\r\n const timezoneOptionsList = countryBasedTimezone.map((timezone) => ({ label: timezone.description, value: timezone.gmtOffset }));\r\n\r\n const [timezoneList, setTimezoneList] = useState(timezoneOptionsList);\r\n const dispatch = useDispatch();\r\n\r\n // const [selCountry, setSelCountry] = useState(\"\");\r\n useEffect(() => {\r\n if (countries?.length <= 0) dispatch(getCountries());\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(getTimezone(country));\r\n }, [country]);\r\n\r\n useEffect(() => {\r\n setTimezoneList(countryBasedTimezone.map((timezone) => ({ label: timezone.description, value: timezone.gmtOffset })));\r\n }, [countryBasedTimezone]);\r\n\r\n useEffect(() => {\r\n if (gmtOffset === '' && timezoneList.length > 0) {\r\n setGmt(timezoneList[0].value);\r\n }\r\n }, [timezoneList]);\r\n\r\n useEffect(() => {\r\n if (setTimeZoneError) {\r\n if (timezoneList?.length === 0) {\r\n setTimeZoneError(true);\r\n } else {\r\n setTimeZoneError(false);\r\n }\r\n }\r\n }, [timezoneList]);\r\n\r\n const getGmtValue = () => {\r\n let retVal = '';\r\n const validGmt = timezoneList.find((itm) => Number(itm.value) === Number(gmtOffset));\r\n if (validGmt) {\r\n retVal = validGmt;\r\n } else {\r\n retVal = timezoneList[0];\r\n }\r\n return retVal;\r\n };\r\n\r\n const handleCountryChange = (e, newVal) => {\r\n // setSelCountry(e.target.value);\r\n setCountry(newVal.value);\r\n setGmt('');\r\n };\r\n\r\n const handleGmtOffsetChange = (e, newVal) => {\r\n setGmt(newVal.value);\r\n };\r\n\r\n const handleDstChange = (e) => {\r\n setUseDst(e.target.checked);\r\n };\r\n\r\n const selectedCountry = countriesOptionList.find((itm) => itm.value === country) || null;\r\n\r\n return (\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n 0 ? getGmtValue() : ''}\r\n onChange={handleGmtOffsetChange}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n \r\n handleDstChange(e)} />}\r\n label=\"Use DST\"\r\n key={1}\r\n disabled={disabled}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TimeZone;\r\n","// Map the Infortel fields to corresponding Cisco Fields\r\n// InfortelFields: CiscoFields\r\nconst columnMapping = {\r\n FirstName: 'FirstName',\r\n LastName: 'LastName',\r\n Extension: 'AssignedExtensions',\r\n CiscoLoginName: 'UserID',\r\n Device: 'ControlledDevices',\r\n 'Name{n}': 'Department',\r\n WebexUserId: 'UserId',\r\n LocationInfo: 'Location'\r\n};\r\n\r\n// this is for testing purpose\r\nexport const sampleData = [\r\n {\r\n LastName: 'Leo',\r\n FirstName: 'Mason',\r\n Department: 'Civil',\r\n MailID: 'Ezra@tekvizion.com',\r\n TelephoneNumber: '4355435',\r\n Extension: '1002',\r\n UserID: '1002',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'California',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: 'Luca',\r\n MiddleName: 'Jackson',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'Jonathan',\r\n FirstName: 'Mark',\r\n Department: 'Engineering',\r\n MailID: 'mjonathanr@tekvizion.com',\r\n TelephoneNumber: '4378435',\r\n Extension: '3002',\r\n UserID: '3002',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'California',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: 'Luca',\r\n MiddleName: 'Rob',\r\n Mobile: '3217854467',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'Ray',\r\n FirstName: 'Jhonson',\r\n Department: 'IT',\r\n MailID: 'rjohn@tekvizion.com',\r\n TelephoneNumber: '7856935',\r\n Extension: '6235',\r\n UserID: '6235',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'Chicago',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: 'Brad',\r\n MiddleName: 'Paul',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'Levi',\r\n FirstName: 'Benjamin',\r\n Department: 'IT',\r\n MailID: 'rjohn@tekvizion.com',\r\n TelephoneNumber: '7856935',\r\n Extension: '6235',\r\n UserID: '6235',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'Chicago',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: '',\r\n MiddleName: '',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'Alexander',\r\n FirstName: 'Jack',\r\n Department: 'Network',\r\n MailID: 'jalexander@tekvizion.com',\r\n TelephoneNumber: '7856935',\r\n Extension: '6235',\r\n UserID: '6235',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'Chicago',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: '',\r\n MiddleName: '',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'Clark',\r\n FirstName: 'Emilia',\r\n Department: '',\r\n MailID: 'mclark@tekvizion.com',\r\n TelephoneNumber: '7489',\r\n Extension: '6235',\r\n UserID: '6235',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'Chicago',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: 'Kristian',\r\n MiddleName: '',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'user',\r\n FirstName: '',\r\n Department: '',\r\n MailID: '',\r\n TelephoneNumber: '5665',\r\n Extension: '6235',\r\n UserID: '6235',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'Chicago',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: 'Allyson',\r\n MiddleName: 'Brad',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n },\r\n {\r\n LastName: 'user',\r\n FirstName: 'Test',\r\n Department: '',\r\n MailID: 'testuser1@tekvizion.com',\r\n TelephoneNumber: '6550',\r\n Extension: '6235',\r\n UserID: '6235',\r\n DeviceDescription: 'SEP50F7222CF69B',\r\n PKID: '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n AssocPC: 'Chicago',\r\n Building: '',\r\n ControlledDevice: 'SEP50F7222CF69B',\r\n EnableEMCC: 'F',\r\n EnableMobileVoice: 'F',\r\n EnableMobility: 'F',\r\n ExtensionRank: '1',\r\n HomePhone: '345435234',\r\n Manager: 'Benjamin',\r\n MiddleName: 'Paul',\r\n Mobile: '253595',\r\n NickName: '',\r\n OCSPrimaryUserAddress: '',\r\n Site: '',\r\n Status: '1',\r\n Title: 'Testing4',\r\n UniqueIdentifier: '',\r\n UserLocale: 'English, United States',\r\n Custom1: '',\r\n Custom2: '',\r\n Custom3: '',\r\n Custom4: '',\r\n Custom5: ''\r\n }\r\n];\r\n\r\nexport const sampleData1 = {\r\n columns: [\r\n 'LastName',\r\n 'FirstName',\r\n 'Department',\r\n 'MailID',\r\n 'TelephoneNumber',\r\n 'Extension',\r\n 'UserID',\r\n 'DeviceDescription',\r\n 'PKID',\r\n 'AssocPC',\r\n 'Building',\r\n 'ControlledDevice',\r\n 'EnableEMCC',\r\n 'EnableMobileVoice',\r\n 'EnableMobility',\r\n 'ExtensionRank',\r\n 'HomePhone',\r\n 'Manager',\r\n 'MiddleName',\r\n 'Mobile',\r\n 'NickName',\r\n 'OCSPrimaryUserAddress',\r\n 'Site',\r\n 'Status',\r\n 'Title',\r\n 'UniqueIdentifier',\r\n 'UserLocale',\r\n 'Custom1',\r\n 'Custom2',\r\n 'Custom3',\r\n 'Custom4',\r\n 'Custom5'\r\n ],\r\n rows: [\r\n [\r\n 'Leo',\r\n 'Mason',\r\n 'Civil',\r\n 'Ezra@tekvizion.com',\r\n '4355435',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n 'California',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ],\r\n [\r\n 'Jonathan',\r\n 'Mark',\r\n 'Engineering',\r\n 'jmark@tekvizion.com',\r\n '4355435',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n 'California',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ],\r\n [\r\n 'Ray',\r\n 'Jhonson',\r\n 'IT',\r\n 'rjohnson@tekvizion.com',\r\n '4355435',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n 'California',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ],\r\n [\r\n 'Alexander',\r\n 'Jackson',\r\n 'Support',\r\n 'ajackson@tekvizion.com',\r\n '',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n 'California',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ],\r\n [\r\n 'Clark',\r\n 'Emily',\r\n '',\r\n 'eclark@tekvizion.com',\r\n '4355435',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n 'California',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ],\r\n [\r\n 'user',\r\n '',\r\n '',\r\n 'user1@tekvizion.com',\r\n '4355435',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n '',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ],\r\n [\r\n 'user',\r\n 'test',\r\n '',\r\n '',\r\n '4355435',\r\n '1002',\r\n '1002',\r\n 'SEP50F7222CF69B',\r\n '06fceae0-f0b6-4435-9c55-f7479547ab21',\r\n 'California',\r\n '',\r\n 'SEP50F7222CF69B',\r\n 'F',\r\n 'F',\r\n 'F',\r\n '1',\r\n '345435234',\r\n 'Luca',\r\n 'Jackson',\r\n '253595',\r\n '',\r\n '',\r\n '',\r\n '1',\r\n 'Testing4',\r\n '',\r\n 'English, United States',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ]\r\n ]\r\n};\r\n\r\nexport default columnMapping;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nimport axios from 'utils/axios';\r\nimport columnMapping from 'views/Administration/Connectors/Constants/columnMapping';\r\nimport moment from 'moment';\r\nimport { isDateValid } from 'utils/generic';\r\n\r\nexport const initialState = {\r\n directoryImports: [],\r\n currentDirImport: null,\r\n isDirImportsLoading: true,\r\n dirImportProps: null,\r\n directoryImportFields: [],\r\n isDirImportFieldsLoading: true,\r\n previewData: null,\r\n previewDataLoading: false,\r\n previewDataError: null,\r\n rcData: null,\r\n rcDataLoading: false,\r\n rcDataError: null,\r\n runNowRequested: false,\r\n runNowSuccessMsg: null,\r\n runNowError: null,\r\n dirImportSchedules: null,\r\n isDirImportSchedulesLoading: true,\r\n currentDirImportScheduleId: 0,\r\n fetchDataRequested: false,\r\n fetchDataError: null,\r\n isFetchingData: false,\r\n fetchDataLoadStatus: null,\r\n fetchDataLastModifiedDate: null,\r\n refetchRequired: false,\r\n lastFetchFailed: false\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'directoryImport',\r\n initialState,\r\n reducers: {\r\n createDirImportSuccess(state, action) {\r\n // state.newRemoteCollectionId = action.payload;\r\n // state.directoryImports = [\r\n // ...state.directoryImports,\r\n // { id: action.payload.id, remoteName: action.payload.remoteName, contactInfo: action.payload.contactInfo }\r\n // ];\r\n // state.newRemoteCollectionId = action.payload.id;\r\n },\r\n getDirectoryImportsSuccess(state, action) {\r\n state.directoryImports = action.payload;\r\n state.isDirImportsLoading = false;\r\n },\r\n getDirectoryImportsFailure(state, action) {\r\n state.isDirImportsLoading = false;\r\n },\r\n setCurrentDirectoryImport(state, action) {\r\n state.currentDirImport = {\r\n ...state.currentDirImport,\r\n ...action.payload\r\n };\r\n },\r\n resetIsDirImportsLoading(state, action) {\r\n state.isDirImportsLoading = true;\r\n },\r\n setDirImportProps(state, action) {\r\n state.dirImportProps = action.payload;\r\n },\r\n // resetCurrentRemoteCollection(state, action) {\r\n // state.currentRemoteCollection = null;\r\n // },\r\n saveDirectoryImportSuccess(state, action) {\r\n state.currentDirImport = {\r\n ...state.currentDirImport,\r\n ...action.payload\r\n };\r\n state.directoryImports = [...state.directoryImports, action.payload];\r\n },\r\n deleteDirImportSuccess(state, action) {\r\n state.directoryImports = state.directoryImports.filter((dirImp) => dirImp.tenantDirImportId !== action.payload);\r\n // state.deleteSuccess = true;\r\n },\r\n deleteDirImportSchSuccess(state, action) {\r\n state.dirImportSchedules = state.dirImportSchedules.filter((sch) => sch.eventId !== action.payload);\r\n },\r\n setSourceConnectorId(state, action) {\r\n state.sourceConnectorId = action.payload;\r\n },\r\n resetDeleteSuccess(state, action) {\r\n // state.deleteSuccess = false;\r\n },\r\n getDirImportFieldsSuccess(state, action) {\r\n state.directoryImportFields = action.payload;\r\n state.isDirImportFieldsLoading = false;\r\n },\r\n setTenantDirImportColumns(state, action) {\r\n state.currentDirImport = {\r\n ...state.currentDirImport,\r\n tenantDirImportColumns: action.payload\r\n };\r\n },\r\n createPreviewDataRequest(state) {\r\n state.previewDataLoading = true;\r\n state.previewData = null;\r\n state.previewDataError = null;\r\n },\r\n createPreviewDataSuccess(state, action) {\r\n state.previewDataLoading = false;\r\n state.previewData = action.payload;\r\n state.previewDataError = null;\r\n },\r\n createPreviewDataError(state, action) {\r\n state.previewDataLoading = false;\r\n state.previewData = null;\r\n state.previewDataError = action.payload;\r\n },\r\n resetPreviewError(state, action) {\r\n state.previewDataError = null;\r\n },\r\n resetPreviewData(state, action) {\r\n state.previewData = null;\r\n },\r\n createRcDataRequest(state) {\r\n state.rcDataLoading = true;\r\n state.rcData = null;\r\n state.rcDataError = null;\r\n },\r\n createRcDataSuccess(state, action) {\r\n state.rcDataLoading = false;\r\n state.rcData = action.payload;\r\n state.rcDataError = null;\r\n },\r\n createRcDataError(state, action) {\r\n state.rcDataLoading = false;\r\n state.rcData = null;\r\n state.rcDataError = action.payload;\r\n },\r\n resetRcError(state, action) {\r\n state.rcDataError = null;\r\n },\r\n resetRcData(state, action) {\r\n state.rcData = null;\r\n },\r\n createRunNowRequest(state, action) {\r\n state.runNowRequested = true;\r\n state.runNowError = null;\r\n state.runNowSuccessMsg = null;\r\n },\r\n createRunNowSuccess(state, action) {\r\n state.runNowSuccessMsg = action.payload;\r\n state.runNowRequested = false;\r\n state.runNowError = null;\r\n },\r\n createRunNowError(state, action) {\r\n state.runNowSuccessMsg = null;\r\n state.runNowRequested = false;\r\n state.runNowError = action.payload;\r\n },\r\n resetRunNowError(state, action) {\r\n state.runNowError = null;\r\n },\r\n resetFetchDataError(state, action) {\r\n state.fetchDataError = null;\r\n },\r\n resetRunNowSuccessMsg(state, action) {\r\n state.runNowSuccessMsg = null;\r\n },\r\n createFetchDataRequest(state, action) {\r\n state.fetchDataRequested = true;\r\n state.fetchDataError = null;\r\n state.refetchRequired = false;\r\n },\r\n createFetchDataError(state, action) {\r\n state.fetchDataRequested = false;\r\n state.fetchDataError = action.payload;\r\n },\r\n createFetchDataSuccess(state, action) {\r\n state.fetchDataRequested = false;\r\n state.fetchDataError = null;\r\n state.isFetchingData = true;\r\n state.fetchDataLoadStatus = 'fetchingData';\r\n },\r\n createDataStatusSuccess(state, action) {\r\n const { dataStatus } = action.payload;\r\n const fileDate = moment(dataStatus.FileDate);\r\n const parsedLastFetchDate = moment(dataStatus.LastFetchDate, 'MM/DD/YYYY HH:mm:ss');\r\n // Format the parsed date to match the FileDate format\r\n const formattedLastFetchDate = parsedLastFetchDate.format('YYYY-MM-DDTHH:mm:ssZ');\r\n const lastFetchDate = moment(formattedLastFetchDate);\r\n // if state is either fetching or waiting, set status to fetching\r\n if (dataStatus.State.toLowerCase() === 'fetching' || dataStatus.State.toLowerCase() === 'waiting') {\r\n state.isFetchingData = true;\r\n state.fetchDataLoadStatus = 'fetchingData';\r\n state.lastFetchFailed = false;\r\n } else if (isDateValid(fileDate) && dataStatus.State.toLowerCase() !== 'fetching') {\r\n // fileDate valid\r\n // if fileDate >= lastFetchDate then that means fetch completed\r\n if (isDateValid(lastFetchDate) && fileDate.isSameOrAfter(lastFetchDate)) {\r\n state.isFetchingData = false;\r\n state.fetchDataLoadStatus = 'availableData';\r\n state.fetchDataLastModifiedDate = fileDate.format('YYYY-MM-DD hh:mm:ss A');\r\n state.lastFetchFailed = false;\r\n } else if (dataStatus.LastFetchStatus.toLowerCase() === 'failed') {\r\n // this would be a failed case where fileDate is valid but lastFetchDate is invalid or after fileDate.\r\n // check for LastFetchStatus. If failed, then set a new property lastFetchFailed to true\r\n state.isFetchingData = false;\r\n state.fetchDataLoadStatus = 'availableData';\r\n state.fetchDataLastModifiedDate = fileDate.format('YYYY-MM-DD hh:mm:ss A');\r\n state.lastFetchFailed = true;\r\n } else {\r\n state.isFetchingData = false;\r\n state.fetchDataLoadStatus = 'availableData';\r\n state.fetchDataLastModifiedDate = fileDate.format('YYYY-MM-DD hh:mm:ss A');\r\n state.lastFetchFailed = false;\r\n }\r\n } else if (!isDateValid(fileDate) && dataStatus.State.toLowerCase() !== 'fetching') {\r\n // fileDate invalid\r\n // if lastFetchDate is valid, and lastFetchStatus !== 'Failed', then fetching data\r\n // otherwise no data\r\n if (isDateValid(lastFetchDate) && dataStatus.LastFetchStatus.toLowerCase() !== 'failed') {\r\n state.isFetchingData = true;\r\n state.fetchDataLoadStatus = 'fetchingData';\r\n state.lastFetchFailed = false;\r\n } else {\r\n // check for LastFetchStatus. If failed, then set property lastFetchFailed to true\r\n state.isFetchingData = false;\r\n state.fetchDataLoadStatus = 'noData';\r\n state.fetchDataLastModifiedDate = null;\r\n state.lastFetchFailed = dataStatus.LastFetchStatus.toLowerCase() === 'failed';\r\n }\r\n }\r\n },\r\n updateFetchStatusSuccess(state, action) {\r\n const fetchStatus = action.payload;\r\n if (fetchStatus === 'fetchingData') {\r\n state.isFetchingData = true;\r\n state.fetchDataLoadStatus = 'fetchingData';\r\n }\r\n },\r\n getDirImportSchedulesSuccess(state, action) {\r\n state.dirImportSchedules = action.payload;\r\n state.isDirImportSchedulesLoading = false;\r\n },\r\n getDirImportSchedulesFailure(state, action) {\r\n state.isDirImportSchedulesLoading = false;\r\n },\r\n saveDirImportScheduleSuccess(state, action) {\r\n const { schId, schConfig, edit } = action.payload;\r\n state.currentDirImportScheduleId = schId;\r\n const updatedDirImportSchedules = [...state.dirImportSchedules];\r\n if (edit) {\r\n const filteredSchedules = updatedDirImportSchedules.filter((sch) => sch.eventId !== schId);\r\n state.dirImportSchedules = [...filteredSchedules, schConfig];\r\n } else {\r\n state.dirImportSchedules = [...updatedDirImportSchedules, { ...schConfig, eventId: schId }];\r\n }\r\n },\r\n setCurrentDirImportScheduleId(state, action) {\r\n state.currentDirImportScheduleId = action.payload;\r\n },\r\n resetCurrentDirImportScheduleId(state, action) {\r\n state.currentDirImportScheduleId = 0;\r\n },\r\n resetFetchStatusSuccess(state, action) {\r\n state.fetchDataError = null;\r\n state.isFetchingData = false;\r\n state.fetchDataLoadStatus = null;\r\n state.fetchDataLastModifiedDate = null;\r\n },\r\n resetDirectoryImportFields(state, action) {\r\n state.directoryImportFields = [];\r\n state.isDirImportFieldsLoading = true;\r\n },\r\n setRefetchRequired(state, action) {\r\n state.refetchRequired = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function getDirectoryImports(enqueueSnackbar, dataSourceList) {\r\n return async (dispatch) => {\r\n // call API to get list of all saved Directory Imports\r\n try {\r\n const response = await axios.get(`/TenantDirectoryConfiguration`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data) {\r\n // go through the list of data and insert a \"destinationSourceName\" field by looking up the data source name in the dataSourceList\r\n const updatedDataSet = response.data.map((dirImp) => ({\r\n ...dirImp,\r\n destinationSourceName: dataSourceList.find((site) => site.id === dirImp.destinationSourceId)?.label || '',\r\n lastRunDate: dirImp.lastRunDate ? moment(dirImp.lastRunDate) : null\r\n }));\r\n const sortedList = updatedDataSet.sort((a, b) => {\r\n if (a.importName < b.importName) {\r\n return -1;\r\n }\r\n if (a.importName > b.importName) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n dispatch(slice.actions.getDirectoryImportsSuccess(sortedList));\r\n }\r\n } catch (ex) {\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n dispatch(slice.actions.getDirectoryImportsFailure());\r\n enqueueSnackbar('Failed to get the Directory Imports', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function saveDirectoryImport(enqueueSnackbar, configObj, isEdit = false, scheduleSaveConfig, clientId) {\r\n return async (dispatch) => {\r\n if (isEdit) {\r\n const response = await axios.put(`/TenantDirectoryConfiguration`, configObj).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data?.data) {\r\n dispatch(slice.actions.saveDirectoryImportSuccess(response.data.data));\r\n }\r\n } else {\r\n const response = await axios.post(`/TenantDirectoryConfiguration`, configObj).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data?.data) {\r\n // attempt to save the scheduler\r\n const configObj = {\r\n ...scheduleSaveConfig,\r\n // eventId: response.data.data?.tenantDirImportId,\r\n eventName: `${response.data.data?.tenantDirImportId}`\r\n };\r\n if (scheduleSaveConfig) {\r\n const schResponse = await axios.post(`/scheduler/directory-import`, configObj).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n dispatch(slice.actions.saveDirectoryImportSuccess(response.data.data));\r\n if (schResponse?.data?.success) {\r\n dispatch(\r\n slice.actions.saveDirImportScheduleSuccess({ schId: schResponse.data.data, schConfig: configObj, edit: false })\r\n );\r\n } else {\r\n enqueueSnackbar('Failed to save Directory Import Schedule', { variant: 'error' });\r\n }\r\n } else {\r\n dispatch(slice.actions.saveDirectoryImportSuccess(response.data.data));\r\n }\r\n // attempt to do a fetchData\r\n dispatch(slice.actions.createFetchDataRequest());\r\n const payload = {\r\n request: 'FetchData',\r\n data: {\r\n recordId: response.data.data.tenantDirImportId,\r\n clientId\r\n }\r\n };\r\n const fetchResponse = await axios.post(`/TenantDirectoryConfiguration/RunNow`, payload);\r\n if (fetchResponse?.data?.success) {\r\n dispatch(slice.actions.createFetchDataSuccess(fetchResponse.data.data));\r\n } else {\r\n dispatch(slice.actions.createFetchDataError(`Failed to refresh the data. ${JSON.parse(response.data.data)}`));\r\n }\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function loadCurrentDirectoryImport(enqueueSnackbar, dirImpInfo, sourceConnectorId, savedConnectors) {\r\n return async (dispatch) => {\r\n // if id is -1, set the template, otherwise get the information from end point\r\n if (dirImpInfo?.tenantDirImportId > 0) {\r\n const response = await axios.get(`/TenantDirectoryConfiguration/${dirImpInfo.tenantDirImportId}`);\r\n if (response?.data?.data) {\r\n const propsResponse = await axios.get(\r\n `/TenantDirectoryConfiguration/DirectoryImportProperties/${dirImpInfo.tenantConnector.connectorId}`\r\n );\r\n if (propsResponse?.data?.success) {\r\n dispatch(slice.actions.setDirImportProps(propsResponse.data.data.sort((a, b) => a.displayIndex - b.displayIndex)));\r\n dispatch(slice.actions.setCurrentDirectoryImport(response.data.data));\r\n } else {\r\n enqueueSnackbar('Failed to load Directory Import properties', { variant: 'error' });\r\n }\r\n }\r\n } else {\r\n const dirImportTemplate = {\r\n sourceConnectorId,\r\n sourceConnectorName: savedConnectors.find((connector) => connector.tenantConnectorId === sourceConnectorId).connectorName,\r\n destinationSourceId: '',\r\n expireOption: 'None',\r\n deliveryOption: 'NeverSend',\r\n emailMessageContent: '',\r\n emailAddresses: [],\r\n scheduleType: 'daily',\r\n time: '',\r\n scheduleActive: true,\r\n importName: '',\r\n tenantConnector: {\r\n id: sourceConnectorId,\r\n connectorName: savedConnectors.find((connector) => connector.tenantConnectorId === sourceConnectorId).connectorName\r\n },\r\n tenantDirImportId: 0,\r\n tenantDirImportProperties: [],\r\n tenantDirImportColumns: [],\r\n tenantDirImportFilters: [],\r\n tenantDirImportDefaults: []\r\n };\r\n // get the dirImport properties\r\n const importConnectorId = savedConnectors.find((connector) => connector.tenantConnectorId === sourceConnectorId).connectorId;\r\n const propsResponse = await axios.get(`/TenantDirectoryConfiguration/DirectoryImportProperties/${importConnectorId}`);\r\n if (propsResponse?.data?.success) {\r\n dispatch(slice.actions.setDirImportProps(propsResponse.data?.data.sort((a, b) => a.displayIndex - b.displayIndex)));\r\n dispatch(slice.actions.setCurrentDirectoryImport(dirImportTemplate));\r\n } else {\r\n enqueueSnackbar('Failed to load Directory Import properties', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\n// export function resetCurrentRemoteCollection() {\r\n// return async (dispatch) => {\r\n// dispatch(slice.actions.resetCurrentRemoteCollection());\r\n// };\r\n// }\r\n\r\nexport function resetIsDirImportsLoading() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetIsDirImportsLoading());\r\n };\r\n}\r\n\r\nexport function resetDirImportFields() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetDirectoryImportFields());\r\n };\r\n}\r\n\r\n// export function resetDeleteSuccess() {\r\n// return async (dispatch) => {\r\n// dispatch(slice.actions.resetDeleteSuccess());\r\n// };\r\n// }\r\n\r\nexport function deleteDirectoryImport(enqueueSnackbar, id, schId, clientId) {\r\n return async (dispatch) => {\r\n // before deleting the import, get the import waiting queue and delete the entry for the given id if present\r\n const queuePayload = {\r\n request: 'GetRuntimeStatus',\r\n data: {\r\n clientId\r\n }\r\n };\r\n const waitingQueueResponse = await axios.post(`/TenantDirectoryConfiguration/RunNow`, queuePayload);\r\n if (waitingQueueResponse?.data?.success) {\r\n // if success, check if the import to be deleted is in the waiting queue\r\n const queueData = JSON.parse(waitingQueueResponse.data.data);\r\n // extract the importId from a string of the format - [708] ScrumIDP1 (Import_Name) where import id is 708\r\n const isDeleteItemInQueue = queueData.WaitingImports.find((queueImportInfo) => {\r\n const match = queueImportInfo.match(/\\[(\\d+)\\]/);\r\n const importId = match ? parseInt(match[1], 10) : null;\r\n return importId === id;\r\n });\r\n if (isDeleteItemInQueue) {\r\n // if import to be deleted is found in waiting queue, delete the item from the waiting queue\r\n const deleteQueuePayload = {\r\n request: 'PurgeWaitingQueue',\r\n data: {\r\n recordId: id,\r\n clientId\r\n }\r\n };\r\n const deleteQueueResponse = await axios.post(`/TenantDirectoryConfiguration/RunNow`, deleteQueuePayload);\r\n if (!deleteQueueResponse?.data?.success) {\r\n enqueueSnackbar('Failed to delete the Directory Import from the waiting queue', { variant: 'error' });\r\n }\r\n }\r\n } else {\r\n enqueueSnackbar('Failed to get the Directory Import waiting queue', { variant: 'error' });\r\n }\r\n // do the actual delete of the Import\r\n const response = await axios.delete(`/TenantDirectoryConfiguration?Id=${id}`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data) {\r\n dispatch(slice.actions.deleteDirImportSuccess(id));\r\n // if there's a valid schId, call endpoint to delete the schedule\r\n if (schId > 0) {\r\n const schResponse = await axios.delete(`/scheduler/${schId}`);\r\n if (schResponse?.data?.success) {\r\n dispatch(slice.actions.deleteDirImportSchSuccess(schId));\r\n } else {\r\n enqueueSnackbar('Failed to delete the directory import schedule', { variant: 'error' });\r\n }\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function setSourceConnector(id) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setSourceConnectorId(id));\r\n };\r\n}\r\n\r\nfunction mapFieldDisplayName(field, orgLevelDescriptions, appConfigValues) {\r\n // if the field is not enabled in the appConfigValues, return null\r\n const configInfoForTheField = appConfigValues.find((config) => config.code.toLowerCase() === field.fieldName.toLowerCase());\r\n if (configInfoForTheField && !configInfoForTheField.enabled) {\r\n return null;\r\n }\r\n // if displayName involves \"<%\", then look up the fieldName to check if it starts with Name.\r\n // if yes, map to corresponding OrgDescription for org level Name{n}\r\n // else, lookup the fieldName in AppConfig info\r\n if (field.displayName.startsWith('<%')) {\r\n if (field.fieldName.startsWith('Name') || field.fieldName.startsWith('Code')) {\r\n const orgDescription = orgLevelDescriptions.find(\r\n (desc) => desc.level.toString() === field.fieldName.charAt(field.fieldName.length - 1)\r\n )?.description;\r\n if (orgDescription) {\r\n return field.fieldName.startsWith('Name') ? `${orgDescription} Name` : `${orgDescription} Code`;\r\n }\r\n return null;\r\n }\r\n // find the item in appConfigValues.code that matches the field.fieldName\r\n // check for any username. If no username, return defname\r\n const appConfigItem = appConfigValues.find((config) => config.code.toLowerCase() === field.fieldName.toLowerCase());\r\n return appConfigItem?.userName === '' ? appConfigItem?.defname : appConfigItem?.userName;\r\n }\r\n return field.displayName;\r\n}\r\n\r\nexport function getDirImportFields(enqueueSnackbar, orgLevelDescriptions, appConfigValues, connectorId) {\r\n return async (dispatch) => {\r\n // get the fields from api end point\r\n const response = await axios.get(`/TenantDirectoryConfiguration/DirectoryImportField?connectorId=${connectorId}`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data?.success) {\r\n const transformedFields = response.data.data.map((field) => {\r\n const dispName = mapFieldDisplayName(field, orgLevelDescriptions, appConfigValues);\r\n return {\r\n id: field.id,\r\n dirImportGroupId: field.dirImportGroupId,\r\n fieldName: field.fieldName,\r\n displayName: dispName,\r\n ciscoFieldName:\r\n field.fieldName.startsWith('Name') && dispName?.toLowerCase().includes('department')\r\n ? columnMapping['Name{n}'] // this is to account for Cisco field - Department based on the Org levels available\r\n : columnMapping[field.fieldName] || '',\r\n displayIndex: field.displayIndex,\r\n groupName: field.dirImportGroup.groupName,\r\n groupDisplayIndex: field.dirImportGroup.displayIndex,\r\n // Spread the isRequired property if it exists in the original object\r\n ...(field.isRequired !== undefined && { isRequired: field.isRequired })\r\n };\r\n });\r\n // filter out values with displayName = null\r\n const filteredFields = transformedFields.filter((field) => field.displayName !== null);\r\n dispatch(slice.actions.getDirImportFieldsSuccess(filteredFields));\r\n } else {\r\n enqueueSnackbar('Failed to load the directory import fields', { variant: 'error' });\r\n }\r\n };\r\n}\r\n\r\nexport function fetchPreviewData(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createPreviewDataRequest());\r\n const response = await axios.post(`/TenantDirectoryConfiguration/Preview`, payload);\r\n if (response?.data?.success) {\r\n const responseData = JSON.parse(response.data?.data);\r\n const count = responseData?.count;\r\n const previewDataItems = responseData?.data;\r\n dispatch(slice.actions.createPreviewDataSuccess({ userCount: count, data: previewDataItems }));\r\n } else {\r\n const errorMsg = JSON.parse(response.data.data);\r\n // dispatch(slice.actions.createPreviewDataError(response.data.error));\r\n dispatch(slice.actions.createPreviewDataError(`Failed to do a Preview. ${errorMsg.ERROR}`));\r\n }\r\n } catch (ex) {\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n dispatch(slice.actions.createPreviewDataError('Failed to do a Preview'));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function fetchCollectionData(enqueueSnackbar, payload, token) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createRcDataRequest());\r\n const response = await axios.post(`/TenantDirectoryConfiguration/RemoteCollectionData`, payload, { cancelToken: token });\r\n if (response?.data?.success) {\r\n // if (response.data?.data?.rows === '[]') enqueueSnackbar('No Data available', { variant: 'info' });\r\n const responseData = JSON.parse(response.data?.data);\r\n if (Object.keys(responseData).length > 0 && Object.keys(responseData)[0].toLowerCase().includes('error')) {\r\n dispatch(slice.actions.createRcDataError('Failed to fetch data'));\r\n } else {\r\n dispatch(slice.actions.createRcDataSuccess(responseData));\r\n }\r\n } else {\r\n const errorMsg = JSON.parse(response.data.data);\r\n dispatch(slice.actions.createRcDataError(`Failed to fetch data. ${errorMsg.ERROR}`));\r\n }\r\n } catch (ex) {\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n dispatch(slice.actions.createRcDataError('Failed to fetch data'));\r\n }\r\n }\r\n };\r\n}\r\nexport function doDirImportRunNow(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n if (payload.request === 'ProcessImport') {\r\n dispatch(slice.actions.createRunNowRequest());\r\n } else if (payload.request === 'FetchData') {\r\n dispatch(slice.actions.createFetchDataRequest());\r\n }\r\n const response = await axios.post(`/TenantDirectoryConfiguration/RunNow`, payload);\r\n if (response?.data?.success) {\r\n if (payload.request === 'ProcessImport') {\r\n const dataSet = JSON.parse(response.data.data);\r\n if (dataSet.Success) {\r\n dispatch(slice.actions.createRunNowSuccess(dataSet.Message));\r\n enqueueSnackbar(dataSet.Message, { variant: 'success' });\r\n } else {\r\n dispatch(slice.actions.createRunNowError(dataSet.Message));\r\n enqueueSnackbar(dataSet.Message, { variant: 'error' });\r\n }\r\n } else if (payload.request === 'FetchData') {\r\n const dataSet = JSON.parse(response.data.data);\r\n if (dataSet.Success) {\r\n dispatch(slice.actions.createFetchDataSuccess(response.data.data));\r\n } else {\r\n dispatch(slice.actions.createFetchDataError(`Failed to fetch latest data. ${JSON.parse(dataSet.Message)}`));\r\n }\r\n } else {\r\n const dataStatus = JSON.parse(response.data.data);\r\n dispatch(slice.actions.createDataStatusSuccess({ dataStatus }));\r\n }\r\n } else if (payload.request === 'ProcessImport') {\r\n const errorMsg = JSON.parse(response.data.data);\r\n dispatch(slice.actions.createRunNowError(`Failed to run the import. ${errorMsg.ERROR}`));\r\n } else if (payload.request === 'FetchData') {\r\n dispatch(slice.actions.createFetchDataError(`Failed to fetch latest data. ${JSON.parse(response.data.data)}`));\r\n }\r\n } catch (ex) {\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else if (payload.request === 'RunNow') {\r\n dispatch(slice.actions.createRunNowError('Failed to run Directory Import'));\r\n } else if (payload.request === 'FetchData') {\r\n dispatch(slice.actions.createFetchDataError('Failed to run Directory Import'));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function getDirectoryImportSchedules(enqueueSnackbar, payload) {\r\n return async (dispatch) => {\r\n try {\r\n const response = await axios.post(`/schedulers`, payload);\r\n if (response.data.success && response.data.data) {\r\n const schedulerConfigs = response.data.data.map((schData) => ({\r\n ...JSON.parse(schData.requestJson),\r\n eventId: schData.eventId\r\n }));\r\n dispatch(slice.actions.getDirImportSchedulesSuccess(schedulerConfigs));\r\n } else {\r\n enqueueSnackbar('Failed to fetch Directory Import Schedules', { variant: 'error' });\r\n dispatch(slice.actions.getDirImportSchedulesFailure());\r\n }\r\n } catch (ex) {\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Failed to fetch Directory Import Schedules', { variant: 'error' });\r\n dispatch(slice.actions.getDirImportSchedulesFailure());\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function saveDirectoryImportSchedule(configObj) {\r\n return async (dispatch) => {\r\n const response = await axios.post(`/scheduler/directory-import`, configObj).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.saveDirImportScheduleSuccess({ schId: response.data.data, schConfig: configObj, edit: true }));\r\n }\r\n };\r\n}\r\n\r\nexport function setTenantDirImportColumns(columns) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setTenantDirImportColumns(columns));\r\n };\r\n}\r\n\r\nexport function resetPreviewError() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetPreviewError());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetPreviewData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetPreviewData());\r\n } catch (ex) {\r\n console.log(ex.message);\r\n }\r\n };\r\n}\r\n\r\nexport function resetRunNowError() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetRunNowError());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetFetchDataError() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetFetchDataError());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetRcDataError() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetRcError());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetRcData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetRcData());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetRunNowSuccessMsg() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetRunNowSuccessMsg());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setCurrentDirImportScheduleId(schId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setCurrentDirImportScheduleId(schId));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetCurrentDirImportScheduleId() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetCurrentDirImportScheduleId());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetFetchStatus() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetFetchStatusSuccess());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateFetchStatus(fetchStatus) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateFetchStatusSuccess(fetchStatus));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setRefetchRequired(isRefetchRequired) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setRefetchRequired(isRefetchRequired));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport const {\r\n createDirImportSuccess,\r\n getDirectoryImportsSuccess,\r\n setCurrentDirectoryImport,\r\n saveDirectoryImportSuccess,\r\n deleteDirImportSuccess\r\n} = slice.actions;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { axiosReportService } from 'utils/axios';\r\nimport { SIZE } from '../constant';\r\n\r\nexport const initialState = {\r\n scheduledReports: [],\r\n scheduledReportsLoading: false,\r\n scheduledReportsError: null,\r\n isDeleteInProgress: false,\r\n isDeleteCompleted: false,\r\n hasMoreData: true,\r\n scheduleReportLoadingStart: false,\r\n scheduleTemplateComplete: false,\r\n scheduleSuccess: false,\r\n runScheduleStart: false\r\n};\r\n\r\nexport const slice = createSlice({\r\n name: 'scheduledReports',\r\n initialState,\r\n reducers: {\r\n fetchScheduledReportsRequest(state, action) {\r\n state.scheduledReportsError = null;\r\n state.scheduledReportsLoading = true;\r\n state.scheduleSuccess = false;\r\n if (action.payload) {\r\n state.scheduledReports = [];\r\n state.hasMoreData = true;\r\n }\r\n },\r\n fetchScheduledReportsSuccess(state, action) {\r\n if (action.payload?.length < SIZE) {\r\n state.hasMoreData = false;\r\n }\r\n state.scheduledReports = state.scheduledReports.concat(action.payload);\r\n state.scheduledReportsError = null;\r\n state.scheduledReportsLoading = false;\r\n },\r\n fetchScheduledReportsError(state, action) {\r\n state.scheduledReportsError = action.payload;\r\n state.scheduledReportsLoading = false;\r\n },\r\n\r\n createScheduleReportStart(state, action) {\r\n state.scheduleReportLoadingStart = true;\r\n state.scheduleTemplateComplete = false;\r\n },\r\n createScheduleReportSuccess(state, action) {\r\n state.scheduleReportLoadingStart = false;\r\n state.scheduleTemplateComplete = true;\r\n state.scheduleSuccess = true;\r\n },\r\n createScheduleReportError(state, action) {\r\n state.scheduleReportLoadingStart = false;\r\n // state.scheduleTemplateComplete = true;\r\n },\r\n deleteScheduledReportRequest(state) {\r\n state.isDeleteInProgress = true;\r\n },\r\n deleteScheduledReportSuccess(state, action) {\r\n state.scheduledReports = [];\r\n state.scheduledReports = action.payload;\r\n state.isDeleteCompleted = true;\r\n state.isDeleteInProgress = false;\r\n },\r\n deleteScheduledReportError(state, action) {\r\n state.scheduledReportsError = action.payload;\r\n state.isDeleteCompleted = true;\r\n state.isDeleteInProgress = false;\r\n },\r\n deleteScheduledReportClear(state) {\r\n state.isDeleteCompleted = false;\r\n },\r\n resetScheduleReportData(state, action) {\r\n state.scheduledReports = [];\r\n },\r\n resetScheduleTemplateData(state, action) {\r\n state.scheduleTemplateComplete = false;\r\n },\r\n createRunScheduleReportStart(state, action) {\r\n state.runScheduleStart = true;\r\n },\r\n createRunScheduleReportSuccess(state, action) {\r\n state.runScheduleStart = false;\r\n },\r\n createRunScheduleReportError(state, action) {\r\n state.runScheduleStart = false;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function fetchScheduledReports(enqueueSnackbar, offset, searchText, isFromSearch, ownerIdFilter) {\r\n return async (dispatch) => {\r\n const payload = { offset, size: SIZE, searchQuery: searchText, ownerIdFilter };\r\n dispatch(slice.actions.fetchScheduledReportsRequest(isFromSearch));\r\n\r\n try {\r\n const response = await axiosReportService.get('/schedules', { params: payload });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.fetchScheduledReportsSuccess(response.data.data));\r\n } else {\r\n dispatch(slice.actions.fetchScheduledReportsError(response?.data.error));\r\n enqueueSnackbar('Error in fetching data', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.fetchScheduledReportsError());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in getting Scheduled reports', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function deleteScheduledReport(enqueueSnackbar, payload) {\r\n return async (dispatch, getState) => {\r\n dispatch(slice.actions.deleteScheduledReportRequest());\r\n\r\n try {\r\n const response = await axiosReportService.delete(`/schedules/delete`, { data: payload });\r\n if (response?.data?.success) {\r\n const { scheduledReports } = getState().scheduledReports;\r\n setTimeout(() => {\r\n dispatch(\r\n slice.actions.deleteScheduledReportSuccess(\r\n scheduledReports.filter((item) => !payload.find((rm) => item.scheduleId === rm))\r\n )\r\n );\r\n }, 500);\r\n enqueueSnackbar('Schedule Deleted Successfully', { variant: 'info' });\r\n } else {\r\n dispatch(slice.actions.deleteScheduledReportError(response.data.error));\r\n enqueueSnackbar('Error in deleting schedule', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(slice.actions.deleteScheduledReportError(ex.response));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in deleting schedule', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function resetScheduleReportData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetScheduleReportData());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetScheduleTemplateData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetScheduleTemplateData());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function deleteScheduledReportClear(payload) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.deleteScheduledReportClear());\r\n };\r\n}\r\n\r\nexport function saveAndUpddateSchedule(enqueueSnackbar, isUpdate, payload, scheduleId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createScheduleReportStart());\r\n let response;\r\n if (!isUpdate) {\r\n response = await axiosReportService.post('/schedules', payload);\r\n } else {\r\n response = await axiosReportService.patch(`/schedules/${scheduleId}`, payload);\r\n }\r\n\r\n if (response?.data?.success) {\r\n const data = response.data.data;\r\n dispatch(slice.actions.createScheduleReportSuccess());\r\n enqueueSnackbar(`Schedule Report Successfully`, { variant: 'info' });\r\n } else {\r\n dispatch(slice.actions.createScheduleReportError());\r\n enqueueSnackbar(`Schedule Report failed`, { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.createScheduleReportError());\r\n const errorObject = JSON.parse(ex?.response?.data?.error);\r\n let errorMessage = 'Schedule report failed';\r\n if (errorObject) {\r\n const [key, value] = Object.entries(errorObject)[0];\r\n errorMessage = value[0];\r\n }\r\n\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n // enqueueSnackbar(`${isUpdate ? 'Update' : 'Schedule'} Report failed`, { variant: 'error' });\r\n enqueueSnackbar(errorMessage, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\nexport function runSchedule(enqueueSnackbar, scheduleId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.createRunScheduleReportStart());\r\n const response = await axiosReportService.post(`/schedules/${scheduleId}/export`);\r\n\r\n if (response?.data?.success) {\r\n const data = response.data.data;\r\n dispatch(slice.actions.createRunScheduleReportSuccess());\r\n enqueueSnackbar(`Schedule Run Successfully`, { variant: 'info' });\r\n } else {\r\n dispatch(slice.actions.createRunScheduleReportError());\r\n enqueueSnackbar(`Schedule Run failed`, { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n dispatch(slice.actions.createRunScheduleReportError());\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar(`Report failed`, { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nimport axios, { axiosMSTeamsCQService } from 'utils/axios';\r\nimport { gzipSync } from 'zlib';\r\nimport { ConnectorTypes } from 'store/constant';\r\nimport { QueueDataSource } from 'views/QueueDashboard/constants';\r\nimport { getAccessibleCallQueues } from 'views/QueueDashboard/Utils/queueDashboardApiCallsUtil';\r\n\r\nexport const initialState = {\r\n savedConnectors: [],\r\n connectorTypesInfo: [],\r\n manufacturer: null,\r\n connectorId: -1,\r\n currentTenantConnector: null,\r\n isCurrentTenantConnectorLoading: true,\r\n isSavedConnectorsLoading: true,\r\n isSavingConnector: false,\r\n connectorSaveDisplayMsg: null,\r\n loadingLicensedQueueCount: false,\r\n totalLicensedQueueCount: -1 // -1 Value indicates failure to load the values\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'connector',\r\n initialState,\r\n reducers: {\r\n getConnectorListSuccess(state, action) {\r\n state.savedConnectors = action.payload;\r\n state.isSavedConnectorsLoading = false;\r\n },\r\n getConnectorTypesInfoSuccess(state, action) {\r\n state.connectorTypesInfo = action.payload;\r\n },\r\n setConnectorIdSuccess(state, action) {\r\n state.connectorId = action.payload;\r\n },\r\n setManufacturer(state, action) {\r\n state.manufacturer = action.payload;\r\n },\r\n setCurrentTenantConnector(state, action) {\r\n state.currentTenantConnector = {\r\n ...state.currentTenantConnector,\r\n ...action.payload\r\n };\r\n state.isCurrentTenantConnectorLoading = false;\r\n },\r\n resetCurrentTenantConnector(state, action) {\r\n state.currentTenantConnector = null;\r\n state.isCurrentTenantConnectorLoading = true;\r\n },\r\n resetIsSavedConnectorsLoading(state, action) {\r\n state.isSavedConnectorsLoading = true;\r\n },\r\n saveConnectorSuccess(state, action) {\r\n const connector = action.payload.connector;\r\n state.currentTenantConnector = {\r\n ...state.currentTenantConnector,\r\n ...connector\r\n };\r\n state.connectorSaveDisplayMsg = action.payload.op;\r\n },\r\n deleteConnectorSuccess(state, action) {\r\n state.savedConnectors = state.savedConnectors.filter((connector) => connector.tenantConnectorId !== action.payload);\r\n },\r\n onLoadingLicensedQueueCount(state, action) {\r\n state.loadingLicensedQueueCount = true;\r\n },\r\n onLoadingLicensedQueueCountSuccess(state, action) {\r\n state.loadingLicensedQueueCount = false;\r\n if (state.totalLicensedQueueCount !== action.payload) {\r\n state.totalLicensedQueueCount = action.payload;\r\n }\r\n },\r\n onLoadingLicensedQueueCountFailure(state, action) {\r\n state.loadingLicensedQueueCount = false;\r\n state.totalLicensedQueueCount = -1;\r\n },\r\n onQueueLicensingSuccess(state, action) {\r\n const count = action.payload.count;\r\n if (action.payload.licensed) {\r\n state.totalLicensedQueueCount += count;\r\n } else {\r\n state.totalLicensedQueueCount -= count;\r\n }\r\n },\r\n setSavingConnector(state, action) {\r\n state.isSavingConnector = action.payload;\r\n },\r\n resetConnectorSaveDisplayMsg(state, action) {\r\n state.connectorSaveDisplayMsg = null;\r\n },\r\n resetConnectTypeInfoSuccess(state, action) {\r\n state.connectorTypesInfo = [];\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function getSavedConnectors() {\r\n return async (dispatch) => {\r\n // call API to get list of all saved connectors\r\n const response = await axios.get(`/connectors/tenant-connectors`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data.data) {\r\n dispatch(slice.actions.getConnectorListSuccess(response.data.data));\r\n }\r\n };\r\n}\r\n\r\nexport function getConnectorTypesInfo(manufacturerId) {\r\n return async (dispatch) => {\r\n const response = await axios.get(`/connectors/manufacturers/${manufacturerId}/options`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data) {\r\n dispatch(slice.actions.getConnectorTypesInfoSuccess(response.data));\r\n }\r\n };\r\n}\r\n\r\nexport function setConnectorId(id) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setConnectorIdSuccess(id));\r\n };\r\n}\r\n\r\nexport function setManufacturer(manufacturerInfo) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setManufacturer(manufacturerInfo));\r\n };\r\n}\r\n\r\nexport function loadCurrentTenantConnector(id, isEdit = false) {\r\n return async (dispatch) => {\r\n if (isEdit) {\r\n const response = await axios.get(`/connectors/tenant-connectors/${id}`);\r\n if (response?.data?.data) {\r\n dispatch(slice.actions.setCurrentTenantConnector(response.data.data));\r\n }\r\n } else {\r\n const response = await axios.get(`/connectors/tenant-connectors/templates/${id}`);\r\n if (response?.data) {\r\n dispatch(slice.actions.setCurrentTenantConnector(response.data));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function resetCurrentTenantConnector() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetCurrentTenantConnector());\r\n };\r\n}\r\n\r\nexport function resetIsSavedConnectorsLoading() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetIsSavedConnectorsLoading());\r\n };\r\n}\r\n\r\nexport function updateCurrentTenantConnector(connectorTemplate) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setCurrentTenantConnector(connectorTemplate));\r\n };\r\n}\r\n\r\nexport async function saveConnector(dispatch, configObject, isEdit, noValidate) {\r\n let error;\r\n dispatch(slice.actions.setSavingConnector(true));\r\n if (isEdit) {\r\n const reqUrl = noValidate\r\n ? `/connectors/tenant-connectors/${configObject.tenantConnectorId}?validate=false`\r\n : `/connectors/tenant-connectors/${configObject.tenantConnectorId}`;\r\n console.log('ReqUrl: ', reqUrl);\r\n const response = await axios.put(reqUrl, configObject).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n\r\n // pass op: null as for edit connector no success message needs to be displayed\r\n if (response?.data?.success && response?.data?.data) {\r\n dispatch(slice.actions.saveConnectorSuccess({ connector: response.data.data, op: null }));\r\n // dispatch(slice.actions.setCurrentTenantConnector(response.data));\r\n } else {\r\n error = response?.data?.message ?? 'Failed to connect to the server';\r\n }\r\n } else {\r\n const reqUrl = noValidate ? `/connectors/tenant-connectors?validate=false` : `/connectors/tenant-connectors`;\r\n const response = await axios.post(reqUrl, configObject).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n\r\n if (response?.data?.success && response?.data.data) {\r\n // pass op: 'new' for new connector to display connector creation success message\r\n dispatch(\r\n slice.actions.saveConnectorSuccess({ connector: { ...configObject, tenantConnectorId: response.data.data }, op: 'new' })\r\n );\r\n // dispatch(slice.actions.setCurrentTenantConnector({ ...configObject, tenantConnectorId: response.data.data }));\r\n } else {\r\n error = response?.data?.message ?? 'Failed to connect to the server';\r\n }\r\n }\r\n\r\n dispatch(slice.actions.setSavingConnector(false));\r\n return error;\r\n}\r\n\r\nexport function deleteConnector(tenantConnectorId) {\r\n return async (dispatch) => {\r\n const response = await axios.delete(`/connectors/tenant-connectors/${tenantConnectorId}?validate=false`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data?.data) {\r\n dispatch(slice.actions.deleteConnectorSuccess(tenantConnectorId));\r\n }\r\n };\r\n}\r\n\r\nasync function loadTotalLicensedCountForTeamsConnectors(allConnectors) {\r\n let azureADTenantIds = allConnectors\r\n .filter((x) => x.connectorType === ConnectorTypes.MSTeams)\r\n .reduce((str, c) => {\r\n return `${str};${c.queueLicenseIdentifyingInfo.azureADTenantId}`;\r\n }, '');\r\n // If there are no Teams Connectors, return 0\r\n if (!azureADTenantIds || azureADTenantIds?.length === 0) {\r\n return 0;\r\n }\r\n\r\n azureADTenantIds = azureADTenantIds.charAt(0) === ';' ? azureADTenantIds.slice(1) : azureADTenantIds;\r\n const compressedAndEncodedAadTenantIds = encodeURIComponent(gzipSync(azureADTenantIds).toString('base64'));\r\n try {\r\n const response = await axiosMSTeamsCQService.get(\r\n `/api/callQueues/getLicensedQueueCount?azureADTenantIds=${compressedAndEncodedAadTenantIds}`\r\n );\r\n if (response.data.success) {\r\n return response.data.data;\r\n }\r\n\r\n console.log('Failed to load licensed queue count from MSTeams CQ Service. Error: ', response.data.error);\r\n } catch (ex) {\r\n console.log('Failed to load licensed queue Count from MSTeams CQ Service. Error: ', ex);\r\n }\r\n\r\n return -1;\r\n}\r\n\r\n// Awaitable function to get the total licensed queue Count\r\nexport async function getTotalLicensedQueueCount(allConnectors) {\r\n let totalLicensedQueueCount = 0;\r\n const teamsLicensedQueueCount = await loadTotalLicensedCountForTeamsConnectors(allConnectors);\r\n if (teamsLicensedQueueCount < 0) {\r\n return -1;\r\n }\r\n\r\n totalLicensedQueueCount += teamsLicensedQueueCount;\r\n\r\n return totalLicensedQueueCount;\r\n}\r\n\r\n// Dispatchable function to load the queue count into the store\r\nexport function loadTotalLicensedQueueCount(enqueueSnackbar, allConnectors) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.onLoadingLicensedQueueCount());\r\n\r\n let totalLicensedQueueCount = 0;\r\n\r\n // Load the licensedQueue count for MSTeams\r\n const teamsLicensedQueueCount = await loadTotalLicensedCountForTeamsConnectors(allConnectors);\r\n if (teamsLicensedQueueCount < 0) {\r\n // failed\r\n enqueueSnackbar('Failed to load licensed queue count for Teams connectors', { variant: 'error' });\r\n dispatch(slice.actions.onLoadingLicensedQueueCountFailure());\r\n return;\r\n }\r\n totalLicensedQueueCount += teamsLicensedQueueCount;\r\n\r\n // Update the total queue count\r\n dispatch(slice.actions.onLoadingLicensedQueueCountSuccess(totalLicensedQueueCount));\r\n };\r\n}\r\n\r\nexport async function getAzureADTenantIdsForAccessibleQueues(enqueueSnackbar) {\r\n const queues = await getAccessibleCallQueues(enqueueSnackbar, QueueDataSource.MicrosoftTeams, false);\r\n if (queues && queues.length > 0) {\r\n return Array.from(new Set(queues.map((q) => q.azureADTenantId)));\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport function resetConnectorSaveDisplayMsg() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetConnectorSaveDisplayMsg());\r\n };\r\n}\r\n\r\nexport function resetConnectorTypeInfo() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetConnectTypeInfoSuccess());\r\n };\r\n}\r\n\r\nexport const {\r\n getConnectorListSuccess,\r\n setConnectorIdSuccess,\r\n setCurrentTenantConnector,\r\n saveConnectorSuccess,\r\n deleteConnectorSuccess,\r\n getConnectorTypesInfoSuccess,\r\n onQueueLicensingSuccess,\r\n onLoadingLicensedQueueCount,\r\n onLoadingLicensedQueueCountSuccess,\r\n onLoadingLicensedQueueCountFailure\r\n} = slice.actions;\r\n","export default __webpack_public_path__ + \"static/media/ISI-logo-dark.cfb70d6a.svg\";","export default __webpack_public_path__ + \"static/media/ISI-logo.10f7822b.svg\";","// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\n/**\r\n * if you want to use image instead of uncomment following.\r\n * *\r\n */\r\nimport logoDark from 'assets/images/ISI-logo-dark.svg';\r\nimport logo from 'assets/images/ISI-logo.svg';\r\n\r\n// ==============================|| LOGO SVG ||============================== //\r\n\r\nconst Logo = () => {\r\n const theme = useTheme();\r\n\r\n return \"Infortel;\r\n};\r\n\r\nexport default Logo;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nimport axios from 'utils/axios';\r\n\r\nexport const initialState = {\r\n remoteCollections: [],\r\n newRemoteCollectionId: -1,\r\n currentRemoteCollection: null,\r\n isRemoteCollectionsLoading: true,\r\n deleteSuccess: false,\r\n RCFailure: null\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'remoteCollection',\r\n initialState,\r\n reducers: {\r\n createRCSuccess(state, action) {\r\n // state.newRemoteCollectionId = action.payload;\r\n state.remoteCollections = [\r\n ...state.remoteCollections,\r\n { id: action.payload.id, remoteName: action.payload.remoteName, contactInfo: action.payload.contactInfo }\r\n ];\r\n state.newRemoteCollectionId = action.payload.id;\r\n },\r\n RCFailure(state, action) {\r\n state.RCFailure = action.payload;\r\n state.isRemoteCollectionsLoading = false;\r\n },\r\n getRemoteCollectionsSuccess(state, action) {\r\n state.remoteCollections = action.payload;\r\n state.isRemoteCollectionsLoading = false;\r\n },\r\n setCurrentRemoteCollection(state, action) {\r\n state.currentRemoteCollection = {\r\n ...state.currentRemoteCollection,\r\n ...action.payload\r\n };\r\n },\r\n resetIsRemoteCollectionsLoading(state, action) {\r\n state.isRemoteCollectionsLoading = true;\r\n },\r\n resetCurrentRemoteCollection(state, action) {\r\n state.currentRemoteCollection = null;\r\n },\r\n saveRemoteCollectionSuccess(state, action) {\r\n const index = state.remoteCollections.findIndex((item) => item.id === action.payload.id);\r\n\r\n if (index !== -1) {\r\n // Edit: Update the existing item\r\n state.remoteCollections[index] = {\r\n ...state.remoteCollections[index],\r\n id: action.payload.id,\r\n remoteName: action.payload.remoteName,\r\n contactInfo: action.payload.contactInfo\r\n };\r\n }\r\n state.currentRemoteCollection = {\r\n ...state.currentRemoteCollection,\r\n ...action.payload\r\n };\r\n },\r\n deleteRCSuccess(state, action) {\r\n state.remoteCollections = state.remoteCollections.filter((RC) => RC.id !== action.payload);\r\n state.deleteSuccess = true;\r\n },\r\n resetDeleteSuccess(state, action) {\r\n state.deleteSuccess = false;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function getRemoteCollections(enqueueSnackbar) {\r\n return async (dispatch) => {\r\n // call API to get list of all enabled remote collections\r\n const response = await axios.get(`/connectors/remote-collections`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (!response?.data?.success) {\r\n dispatch(slice.actions.RCFailure(response.data.message));\r\n enqueueSnackbar(response.data.message, { variant: 'error' });\r\n }\r\n if (response?.data?.success && response?.data.data) {\r\n dispatch(slice.actions.getRemoteCollectionsSuccess(response.data.data));\r\n }\r\n };\r\n}\r\n\r\nexport function saveRemoteCollection(enqueueSnackbar, configObj, isEdit = false) {\r\n return async (dispatch) => {\r\n // create a new remote collection\r\n if (isEdit) {\r\n const response = await axios.put(`/connectors/remote-collections/${configObj.id}`, configObj).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (!response?.data?.success) {\r\n dispatch(slice.actions.RCFailure(response.data.message));\r\n enqueueSnackbar(`Save Failed : ${response.data.message}`, { variant: 'error' });\r\n }\r\n if (response?.data?.success && response?.data?.data) {\r\n dispatch(slice.actions.saveRemoteCollectionSuccess(response.data.data));\r\n }\r\n } else {\r\n const { remoteName, contactInfo, comments } = configObj;\r\n const response = await axios.post(`/connectors/remote-collections`, { remoteName, contactInfo, comments }).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (!response?.data?.success) {\r\n dispatch(slice.actions.RCFailure(response.data.message));\r\n enqueueSnackbar(`Cloud Connect server creation Failed: ${response.data.message}`, { variant: 'error' });\r\n }\r\n // directly update remote collections\r\n if (response?.data?.success && response?.data?.data) {\r\n dispatch(slice.actions.createRCSuccess({ id: response.data.data, remoteName, contactInfo }));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function loadCurrentRemoteCollection(id = null, isEdit = false) {\r\n return async (dispatch) => {\r\n if (isEdit) {\r\n const response = await axios.get(`/connectors/remote-collections/${id}`);\r\n if (response?.data?.data) {\r\n dispatch(slice.actions.setCurrentRemoteCollection(response.data.data));\r\n }\r\n } else {\r\n const response = await axios.get(`/connectors/remote-collections/template`);\r\n if (response?.data) {\r\n dispatch(slice.actions.setCurrentRemoteCollection(response.data));\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function resetCurrentRemoteCollection() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetCurrentRemoteCollection());\r\n };\r\n}\r\n\r\nexport function resetIsRemoteCollectionsLoading() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetIsRemoteCollectionsLoading());\r\n };\r\n}\r\n\r\nexport function resetDeleteSuccess() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.resetDeleteSuccess());\r\n };\r\n}\r\n\r\nexport function deleteRemoteCollection(RCId) {\r\n return async (dispatch) => {\r\n const response = await axios.delete(`/connectors/remote-collections/${RCId}?validate=false`).catch((error) => {\r\n if (error.response) {\r\n console.log(`${error.response.status} - ${error.response.data}`);\r\n } else if (error.request) {\r\n console.log(`${error.request}`);\r\n } else {\r\n console.log(`Error - ${error.message}`);\r\n }\r\n });\r\n if (response?.data?.data) {\r\n dispatch(slice.actions.deleteRCSuccess(RCId));\r\n }\r\n };\r\n}\r\n\r\nexport const { createRCSuccess, getRemoteCollectionsSuccess, setCurrentRemoteCollection, saveRemoteCollectionSuccess, deleteRCSuccess } =\r\n slice.actions;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport moment from 'moment';\r\n\r\nexport const initialState = {\r\n scheduleType: 1,\r\n selectedMonthlyOption: 1,\r\n specificMonthlyDay: 1,\r\n relativeMonthlyWeek: 1,\r\n relativeMonthlyDay: 'Monday',\r\n weeklyDay: 'Sunday',\r\n daysOfWeek: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n hourlyInterval: 1,\r\n startTime: moment().format('HH:mm'),\r\n scheduleActive: false,\r\n countryCode: 'US',\r\n useDst: true,\r\n timeZoneGmtOffset: '-6.00'\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'dirImportSchedule',\r\n initialState,\r\n reducers: {\r\n setDirImportSchedule(state, action) {\r\n const {\r\n scheduleType,\r\n selectedMonthlyOption,\r\n specificMonthlyDay,\r\n relativeMonthlyWeek,\r\n relativeMonthlyDay,\r\n weeklyDay,\r\n daysOfWeek,\r\n hourlyInterval,\r\n startTime,\r\n scheduleActive,\r\n countryCode,\r\n useDst,\r\n timeZoneGmtOffset\r\n } = action.payload;\r\n state.scheduleType = scheduleType;\r\n state.selectedMonthlyOption = selectedMonthlyOption;\r\n state.specificMonthlyDay = specificMonthlyDay;\r\n state.relativeMonthlyWeek = relativeMonthlyWeek;\r\n state.relativeMonthlyDay = relativeMonthlyDay;\r\n state.weeklyDay = weeklyDay;\r\n state.daysOfWeek = daysOfWeek;\r\n state.hourlyInterval = hourlyInterval;\r\n state.startTime = startTime;\r\n state.scheduleActive = scheduleActive;\r\n state.countryCode = countryCode;\r\n state.useDst = useDst;\r\n state.timeZoneGmtOffset = timeZoneGmtOffset;\r\n },\r\n updateScheduleType(state, action) {\r\n state.scheduleType = action.payload;\r\n },\r\n updateMonthlyOption(state, action) {\r\n state.selectedMonthlyOption = action.payload;\r\n },\r\n updateSpecificMonthlyDay(state, action) {\r\n state.specificMonthlyDay = action.payload;\r\n },\r\n updateRelativeMonthlyWeek(state, action) {\r\n state.relativeMonthlyWeek = action.payload;\r\n },\r\n updateRelativeMonthlyDay(state, action) {\r\n state.relativeMonthlyDay = action.payload;\r\n },\r\n updateWeeklyDay(state, action) {\r\n state.weeklyDay = action.payload;\r\n },\r\n updateDaysOfWeek(state, action) {\r\n state.daysOfWeek = action.payload;\r\n },\r\n updateHourlyInterval(state, action) {\r\n state.hourlyInterval = action.payload;\r\n },\r\n updateStartTime(state, action) {\r\n state.startTime = action.payload;\r\n },\r\n updateScheduleActive(state, action) {\r\n state.scheduleActive = action.payload;\r\n },\r\n updateCountryCode(state, action) {\r\n state.countryCode = action.payload;\r\n },\r\n updateUseDst(state, action) {\r\n state.useDst = action.payload;\r\n },\r\n updateTimeZoneGmtOffset(state, action) {\r\n state.timeZoneGmtOffset = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function updateScheduleType(scheduleType) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateScheduleType(scheduleType));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateMonthlyOption(monthlyOption) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateMonthlyOption(monthlyOption));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateSpecificMonthlyDay(monthlyDay) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateSpecificMonthlyDay(monthlyDay));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateRelativeMonthlyWeek(monthlyWeek) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateRelativeMonthlyWeek(monthlyWeek));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateRelativeMonthlyDay(monthlyDay) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateRelativeMonthlyDay(monthlyDay));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateWeeklyDay(weeklyDay) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateWeeklyDay(weeklyDay));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDaysOfWeek(daysOfWeek) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDaysOfWeek(daysOfWeek));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateHourlyInterval(hourlyInterval) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateHourlyInterval(hourlyInterval));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateStartTime(startTime) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateStartTime(startTime));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateScheduleActive(active) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateScheduleActive(active));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateCountryCode(cc) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateCountryCode(cc));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateUseDst(useDst) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateUseDst(useDst));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateTimeZoneGmtOffset(gmtOffset) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateTimeZoneGmtOffset(gmtOffset));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setDirImportSchedule(config) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setDirImportSchedule(config));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetDirImportSchedule() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setDirImportSchedule({ ...initialState, startTime: moment().format('HH:mm') }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n","import { UNSAFE_NavigationContext as unsafeNavigationContext, useLocation } from 'react-router-dom';\r\nimport { useContext, useEffect, useCallback, useState } from 'react';\r\n\r\n/**\r\n * This hook provides a way to block the navigation from current location\r\n * @param {Boolean value which determines when to block navigation } when\r\n */\r\nfunction useNavigationBlocker(when) {\r\n const navigator = useContext(unsafeNavigationContext).navigator;\r\n\r\n const location = useLocation();\r\n const [showPrompt, setShowPrompt] = useState(false);\r\n const [nextLocation, setNextLocation] = useState(null);\r\n const [confirmedNavigation, setConfirmedNavigation] = useState(false);\r\n\r\n const cancelNavigation = useCallback(() => {\r\n setShowPrompt(false);\r\n }, []);\r\n\r\n const confirmNavigation = useCallback(() => {\r\n setShowPrompt(false);\r\n setConfirmedNavigation(true);\r\n }, []);\r\n\r\n const handleBlockedNavigation = useCallback(\r\n (newLocation) => {\r\n if (!confirmedNavigation && newLocation.location.pathname !== location.pathname) {\r\n setNextLocation(newLocation);\r\n setShowPrompt(true);\r\n return false;\r\n }\r\n return true;\r\n },\r\n [confirmedNavigation, location]\r\n );\r\n\r\n useEffect(() => {\r\n if (confirmedNavigation && nextLocation) {\r\n nextLocation.retry();\r\n }\r\n }, [confirmedNavigation, nextLocation]);\r\n\r\n useEffect(() => {\r\n if (!when) {\r\n return () => {};\r\n }\r\n\r\n const unblock = navigator.block((tx) => {\r\n const autoUnblockingTx = {\r\n ...tx,\r\n retry() {\r\n unblock();\r\n tx.retry();\r\n }\r\n };\r\n\r\n handleBlockedNavigation(autoUnblockingTx);\r\n });\r\n\r\n return unblock;\r\n }, [navigator, handleBlockedNavigation, when]);\r\n\r\n return [showPrompt, confirmNavigation, cancelNavigation];\r\n}\r\n\r\nexport default useNavigationBlocker;\r\n","export default __webpack_public_path__ + \"static/media/img-error-bg.0eedc187.svg\";","export default __webpack_public_path__ + \"static/media/img-error-bg-dark.420ab717.svg\";","export default __webpack_public_path__ + \"static/media/img-error-blue.60aad3ce.svg\";","export default __webpack_public_path__ + \"static/media/img-error-text.cb32513e.svg\";","export default __webpack_public_path__ + \"static/media/img-error-purple.8b0303a8.svg\";","import { Link } from 'react-router-dom';\r\n\r\n// material-ui\r\nimport { useTheme, styled } from '@mui/material/styles';\r\nimport { Button, Card, CardMedia, Grid, Typography } from '@mui/material';\r\n\r\n// project imports\r\nimport { DASHBOARD_PATH } from 'config';\r\nimport AnimateButton from 'ui-component/extended/AnimateButton';\r\nimport { gridSpacing } from 'store/constant';\r\n\r\n// assets\r\nimport { LoginRounded } from '@mui/icons-material';\r\nimport { IconDashboard } from '@tabler/icons';\r\n\r\nimport imageBackground from 'assets/images/maintenance/img-error-bg.svg';\r\nimport imageDarkBackground from 'assets/images/maintenance/img-error-bg-dark.svg';\r\nimport imageBlue from 'assets/images/maintenance/img-error-blue.svg';\r\nimport imageText from 'assets/images/maintenance/img-error-text.svg';\r\nimport imagePurple from 'assets/images/maintenance/img-error-purple.svg';\r\nimport useAuth from 'hooks/useAuth';\r\n\r\n// styles\r\nconst CardMediaWrapper = styled('div')({\r\n maxWidth: 720,\r\n margin: '0 auto',\r\n position: 'relative'\r\n});\r\n\r\nconst ErrorWrapper = styled('div')({\r\n maxWidth: 350,\r\n margin: '0 auto',\r\n textAlign: 'center'\r\n});\r\n\r\nconst ErrorCard = styled(Card)({\r\n minHeight: '100vh',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n});\r\n\r\nconst CardMediaBlock = styled('img')({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%'\r\n});\r\n\r\nconst CardMediaBlue = styled('img')({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%'\r\n});\r\n\r\nconst CardMediaPurple = styled('img')({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%'\r\n});\r\n\r\n// ==============================|| ERROR PAGE ||============================== //\r\n\r\nconst NotFound = () => {\r\n const theme = useTheme();\r\n const { isLoggedIn } = useAuth();\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 Something is wrong\r\n \r\n \r\n \r\n \r\n The page you are looking was moved, removed, renamed, or might never exist!{' '}\r\n \r\n \r\n \r\n \r\n {isLoggedIn ? (\r\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 NotFound;\r\n","import { createSlice } from '@reduxjs/toolkit';\r\nimport { axiosReportService } from 'utils/axios';\r\nimport { SIZE } from '../constant';\r\n\r\n// initial state\r\nexport const initialState = {\r\n historyData: [],\r\n historyLoading: false,\r\n error: null,\r\n hasMoreData: true,\r\n isReportFetchInprogress: false,\r\n reportData: {},\r\n isDeleteCompleted: false,\r\n isReportDeleteInprogress: false\r\n};\r\n\r\n// ==============================|| SLICE - history ||============================== //\r\nconst slice = createSlice({\r\n name: 'history',\r\n initialState,\r\n reducers: {\r\n fetchHistoryRequest(state, action) {\r\n state.historyLoading = true;\r\n if (action.payload) {\r\n state.historyData = [];\r\n state.hasMoreData = true;\r\n }\r\n },\r\n fetchHistoryFailure(state, action) {\r\n state.historyLoading = false;\r\n state.error = action.payload;\r\n },\r\n fetchHistorySuccess(state, action) {\r\n state.historyLoading = false;\r\n if (action.payload?.length < SIZE) {\r\n state.hasMoreData = false;\r\n }\r\n state.historyData = state.historyData.concat(action.payload);\r\n },\r\n setDownloadStart(state, action) {\r\n // action payload have reportId\r\n for (let i = 0; i < state.historyData.length; i += 1) {\r\n if (state.historyData[i].reportId === action.payload.reportId) {\r\n state.historyData[i].downloadStart = true;\r\n }\r\n }\r\n },\r\n setDownloadPercentage(state, action) {\r\n for (let i = 0; i < state.historyData.length; i += 1) {\r\n if (state.historyData[i].reportId === action.payload.reportId) {\r\n state.historyData[i].downloadPercentage = action.payload.percentage;\r\n }\r\n }\r\n },\r\n resetHistoryData(state, action) {\r\n state.historyData = [];\r\n },\r\n\r\n deleteReportRequest(state, action) {\r\n state.isReportDeleteInprogress = true;\r\n },\r\n deleteReportFailure(state, action) {\r\n state.isReportDeleteInprogress = false;\r\n state.isDeleteCompleted = true;\r\n },\r\n deleteReportSuccess(state, action) {\r\n state.isDeleteCompleted = true;\r\n state.historyData = action.payload;\r\n state.isReportDeleteInprogress = false;\r\n },\r\n\r\n deleteReportClear(state) {\r\n state.isDeleteCompleted = false;\r\n },\r\n fetchReportRequest(state, action) {\r\n state.isReportFetchInprogress = true;\r\n },\r\n fetchReportFailure(state, action) {\r\n state.isReportFetchInprogress = false;\r\n },\r\n fetchReportSuccess(state, action) {\r\n state.isReportFetchInprogress = false;\r\n state.reportData = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function fetchHistory(enqueueSnackbar, offset, searchText, isFromSearch, ownerIdFilter) {\r\n return async (dispatch) => {\r\n const payload = { offset, size: SIZE, q: searchText, ownerIdFilter };\r\n dispatch(slice.actions.fetchHistoryRequest(isFromSearch));\r\n\r\n try {\r\n const response = await axiosReportService.get('/reports', { params: payload });\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.fetchHistorySuccess(response.data.data));\r\n } else {\r\n dispatch(slice.actions.fetchHistoryFailure(response.data.error));\r\n enqueueSnackbar('Error in fetching data', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(slice.actions.fetchHistoryFailure(ex.response));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in fetching data', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function fetchReportById(enqueueSnackbar, reportId) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.fetchReportRequest());\r\n\r\n try {\r\n const response = await axiosReportService.get(`/reports/${reportId}`);\r\n if (response?.data?.success) {\r\n dispatch(slice.actions.fetchReportSuccess(response.data.data));\r\n } else {\r\n dispatch(slice.actions.fetchReportFailure(response.data.error));\r\n enqueueSnackbar('Error in fetching data', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(slice.actions.fetchReportFailure(ex.response));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in fetching data', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function deleteReportByIds(enqueueSnackbar, payload) {\r\n return async (dispatch, getState) => {\r\n dispatch(slice.actions.deleteReportRequest());\r\n\r\n try {\r\n const response = await axiosReportService.delete(`/reports`, { data: payload });\r\n if (response?.data?.success) {\r\n const { historyData } = getState().history;\r\n setTimeout(() => {\r\n dispatch(slice.actions.deleteReportSuccess(historyData.filter((item) => !payload.find((rm) => item.reportId === rm))));\r\n enqueueSnackbar('Report Deleted Successfully', { variant: 'info' });\r\n }, 500);\r\n } else {\r\n dispatch(slice.actions.deleteReportFailure(response.data.error));\r\n enqueueSnackbar('Error in deleting report', { variant: 'error' });\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n if (ex.response) {\r\n dispatch(slice.actions.deleteReportFailure(ex.response));\r\n }\r\n if (ex?.response?.status === 401) {\r\n enqueueSnackbar('Session expired, please login again', { variant: 'error' });\r\n } else {\r\n enqueueSnackbar('Error in deleting report', { variant: 'error' });\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function setFileDownloadStart(reportId) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setDownloadStart({ reportId }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setFileDownloadPercentage(reportId, percentage) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setDownloadPercentage({ reportId, percentage }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetHistoryData() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetHistoryData());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function deleteReportClear() {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.deleteReportClear());\r\n };\r\n}\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nconst initialState = {\r\n destinationSourceId: '',\r\n expireOption: 'None',\r\n deliveryOption: 'NeverSend',\r\n emailMessageContent: '',\r\n emailAddresses: [],\r\n importName: '',\r\n selectedDirImportProperties: [],\r\n selectedDirImportColumns: [],\r\n selectedDirImportFilters: [],\r\n selectedDirImportDefaults: [],\r\n isParamsSet: false,\r\n refreshRcData: true\r\n};\r\n\r\nconst slice = createSlice({\r\n name: 'directoryImportParameters',\r\n initialState,\r\n reducers: {\r\n setImportParameters(state, action) {\r\n const { importConfig, importProps } = action.payload;\r\n const defaultProps = importProps\r\n .map((prop) => {\r\n if (prop.uiControlType.toLowerCase() !== 'hidden' && prop.defaultValue.toLowerCase() === 'true') {\r\n return {\r\n tenantDirImportId: importConfig.tenantDirImportId,\r\n dirImportPropertyId: prop.id,\r\n propertyValue: 'true'\r\n };\r\n }\r\n return null;\r\n })\r\n .filter((prop) => prop !== null);\r\n const {\r\n destinationSourceId,\r\n expireOption,\r\n deliveryOption,\r\n emailMessageContent,\r\n emailAddresses,\r\n importName,\r\n tenantDirImportProperties,\r\n tenantDirImportFilters,\r\n tenantDirImportDefaults\r\n } = importConfig;\r\n state.destinationSourceId = destinationSourceId;\r\n state.expireOption = expireOption;\r\n state.deliveryOption = deliveryOption;\r\n state.emailMessageContent = emailMessageContent;\r\n state.emailAddresses = emailAddresses;\r\n state.importName = importName;\r\n state.selectedDirImportProperties = tenantDirImportProperties.length > 0 ? tenantDirImportProperties : defaultProps;\r\n // state.selectedDirImportColumns = tenantDirImportColumns;\r\n state.selectedDirImportDefaults = tenantDirImportDefaults;\r\n state.selectedDirImportFilters = tenantDirImportFilters;\r\n state.isParamsSet = true;\r\n // state.refreshRcData = false;\r\n },\r\n resetImportParameters(state, action) {\r\n state.destinationSourceId = '';\r\n state.expireOption = 'None';\r\n state.deliveryOption = 'NeverSend';\r\n state.emailMessageContent = '';\r\n state.emailAddresses = [];\r\n state.importName = '';\r\n state.selectedDirImportProperties = [];\r\n state.selectedDirImportColumns = [];\r\n state.selectedDirImportFilters = [];\r\n state.selectedDirImportDefaults = [];\r\n state.refreshRcData = true;\r\n },\r\n updateDestinationSourceId(state, action) {\r\n state.destinationSourceId = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateExpireOption(state, action) {\r\n state.expireOption = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateDeliveryOption(state, action) {\r\n state.deliveryOption = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateEmailMessageContent(state, action) {\r\n state.emailMessageContent = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateEmailAddresses(state, action) {\r\n state.emailAddresses = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateImportName(state, action) {\r\n state.importName = action.payload;\r\n state.refreshRcData = true;\r\n },\r\n updateSelectedDirImportProperties(state, action) {\r\n state.selectedDirImportProperties = action.payload;\r\n state.refreshRcData = true;\r\n },\r\n updateSelectedDirImportColumns(state, action) {\r\n state.selectedDirImportColumns = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateSelectedDirImportFilters(state, action) {\r\n state.selectedDirImportFilters = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n updateSelectedDirImportDefaults(state, action) {\r\n state.selectedDirImportDefaults = action.payload;\r\n state.refreshRcData = false;\r\n },\r\n setRefreshRcData(state, action) {\r\n state.refreshRcData = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport default slice.reducer;\r\n\r\nexport function setImportParametersData(importData, importProps) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.setImportParameters({ importConfig: importData, importProps }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDestinationSourceIdData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDestinationSourceId(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateExpireOptionData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateExpireOption(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDeliveryOptionData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateDeliveryOption(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateEmailMessageContentData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateEmailMessageContent(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateEmailAddressesData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateEmailAddresses(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateImportNameData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateImportName(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDirImportPropertiesData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateSelectedDirImportProperties(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDirImportColumnsData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateSelectedDirImportColumns(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDirImportFiltersData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateSelectedDirImportFilters(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function updateDirImportDefaultsData(data) {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.updateSelectedDirImportDefaults(data));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function resetDirImportParameters() {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(slice.actions.resetImportParameters());\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n}\r\n\r\nexport function setRefreshRcData(refresh) {\r\n return async (dispatch) => {\r\n dispatch(slice.actions.setRefreshRcData(refresh));\r\n };\r\n}\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nexport const initialState = {\r\n azureADTenantId: null,\r\n loading: false,\r\n queues: [],\r\n connectorLicensedQueueCount: 0\r\n};\r\n\r\nexport const CallQueueStatus = {\r\n Licensed: 'Licensed',\r\n Unlicensed: 'Unlicensed',\r\n Removed: 'Removed'\r\n};\r\n\r\n// CQSN => CallQueueStatusNumber - This is used for the internal queues logic\r\nexport const CQSN = {\r\n Licensed: 1,\r\n Unlicensed: 2,\r\n Removed: 3,\r\n Unknown: 4\r\n};\r\n\r\nconst callQueues = createSlice({\r\n name: 'callQueues',\r\n initialState,\r\n reducers: {\r\n setDataLoading(state) {\r\n state.loading = true;\r\n },\r\n resetDataLoading(state) {\r\n state.loading = false;\r\n },\r\n setConnectionInfo(state, action) {\r\n state.azureADTenantId = action.payload.azureADTenantId;\r\n state.queues = [];\r\n },\r\n loadCallQueuesSuccess(state, action) {\r\n const queues = action.payload;\r\n\r\n let licensedQueueCount = 0;\r\n // NOTE: Backend will return \"upns\" field with a list of upn strings\r\n // Need to assign that appended value to \"upn\" field\r\n queues.forEach((q) => {\r\n q.upn = q.upns && Array.isArray(q.upns) ? q.upns.join('
    ') : q.upns;\r\n q.lastActive = q.lastActive || '';\r\n if (CallQueueStatus.Licensed.localeCompare(q.status, undefined, { sensitivity: 'base' }) === 0) {\r\n q.statusNum = CQSN.Licensed;\r\n licensedQueueCount += 1;\r\n } else if (CallQueueStatus.Unlicensed.localeCompare(q.status, undefined, { sensitivity: 'base' }) === 0) {\r\n q.statusNum = CQSN.Unlicensed;\r\n } else if (CallQueueStatus.Removed.localeCompare(q.status, undefined, { sensitivity: 'base' }) === 0) {\r\n q.statusNum = CQSN.Removed;\r\n } else {\r\n q.statusNum = CQSN.Unknown;\r\n }\r\n });\r\n\r\n state.queues = queues;\r\n state.connectorLicensedQueueCount = licensedQueueCount;\r\n }\r\n }\r\n});\r\n\r\nexport default callQueues.reducer;\r\n\r\nexport const { setDataLoading, resetDataLoading, setConnectionInfo, loadCallQueuesSuccess } = callQueues.actions;\r\n","import React from 'react';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Paper, Typography } from '@mui/material';\r\n\r\n// third party\r\nimport Draggable from 'react-draggable';\r\n\r\n// draggable\r\nconst PaperComponent = (props) => (\r\n \r\n \r\n \r\n);\r\n\r\n// ===============================|| UI DIALOG - DRAGGABLE ||=============================== //\r\n\r\nconst DraggableDialog = ({\r\n dialogTitle,\r\n dialogContentText,\r\n dialogAdditionalContent,\r\n buttonLabel,\r\n open,\r\n handleClose,\r\n handleButtonClick,\r\n onCancel\r\n}) => {\r\n const theme = useTheme();\r\n\r\n return (\r\n
    \r\n \r\n {open && (\r\n <>\r\n \r\n {dialogTitle}\r\n \r\n \r\n \r\n \r\n {dialogContentText}\r\n \r\n \r\n {dialogAdditionalContent}\r\n \r\n \r\n {onCancel && (\r\n \r\n Cancel\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 DraggableDialog;\r\n","import { useState, useEffect } from 'react';\r\n\r\n// ==============================|| CONFIG - LOCAL STORAGE ||============================== //\r\n\r\nexport default function useLocalStorage(key, defaultValue) {\r\n const [value, setValue] = useState(() => {\r\n const storedValue = localStorage.getItem(key);\r\n return storedValue === null ? defaultValue : JSON.parse(storedValue);\r\n });\r\n\r\n useEffect(() => {\r\n const listener = (e) => {\r\n if (e.storageArea === localStorage && e.key === key) {\r\n setValue(e.newValue ? JSON.parse(e.newValue) : e.newValue);\r\n }\r\n };\r\n window.addEventListener('storage', listener);\r\n\r\n return () => {\r\n window.removeEventListener('storage', listener);\r\n };\r\n }, [key, defaultValue]);\r\n\r\n const setValueInLocalStorage = (newValue) => {\r\n setValue((currentValue) => {\r\n const result = typeof newValue === 'function' ? newValue(currentValue) : newValue;\r\n localStorage.setItem(key, JSON.stringify(result));\r\n return result;\r\n });\r\n };\r\n\r\n return [value, setValueInLocalStorage];\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { PieChart, Pie, Legend, Cell, ResponsiveContainer, Tooltip } from 'recharts';\r\nimport PropTypes from 'prop-types';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\nimport { Grid, Typography } from '@mui/material';\r\n\r\n// project imports\r\nimport { graphColors } from 'store/constant';\r\nimport { groupDataByOther } from 'utils/graphUtils';\r\nimport { IconCircle } from '@tabler/icons';\r\n\r\nconst othersLabel = 'others';\r\nconst CustomLegend = ({ payload, onGoBack, isExpanded, onLegendClick, showCount }) => (\r\n \r\n {isExpanded && (\r\n \r\n \r\n Previous level\r\n \r\n \r\n )}\r\n {payload.map((entry, index) => (\r\n onLegendClick(entry)}\r\n onKeyUp={() => onLegendClick(entry)}\r\n role=\"button\"\r\n tabIndex={0}\r\n xs={12}\r\n >\r\n \r\n \r\n\r\n {entry.value}\r\n {entry.value.toLowerCase() !== othersLabel && showCount && ` (${entry.Count})`}\r\n \r\n \r\n ))}\r\n \r\n);\r\n\r\nconst BasicPieChart = ({ data, widgetConfig, handleDrillDown, generateTooltip, showPointerCursor }) => {\r\n const sortedData = data.sort((a, b) => b.Count - a.Count);\r\n const theme = useTheme();\r\n const themeColors = theme.palette.mode === 'dark' ? graphColors.dark : graphColors.light;\r\n const [selected, setSelected] = useState({});\r\n\r\n const getDisplayData = (groupData) => {\r\n return groupData.filter((dataItem) => !selected[dataItem[widgetConfig.nameKey]]);\r\n };\r\n\r\n const [groupedData, setGroupedData] = useState(() => groupDataByOther(sortedData, widgetConfig.nameKey, 0));\r\n const [history, setHistory] = useState([]);\r\n\r\n const colorMap = {};\r\n groupedData.forEach((dataItm, index) => {\r\n colorMap[dataItm.name] = dataItm.fill ?? themeColors[index];\r\n });\r\n\r\n const handleLegendClick = ({ color, value }) => {\r\n setSelected({\r\n ...selected,\r\n [value]: !selected[value]\r\n });\r\n };\r\n\r\n const expandOther = (groupedData, index) => {\r\n if (groupedData[index][widgetConfig.nameKey].toLowerCase() === othersLabel) {\r\n const lastIndex = groupedData[index].index;\r\n const remainingData = sortedData.slice(lastIndex);\r\n const expandedData = groupDataByOther(remainingData, widgetConfig.nameKey, lastIndex);\r\n return [...expandedData];\r\n }\r\n return data;\r\n };\r\n\r\n const handleExpand = () => {\r\n const index = groupedData.findIndex((item) => item[widgetConfig.nameKey].toLowerCase() === othersLabel);\r\n if (index !== -1) {\r\n const newData = expandOther(groupedData, index);\r\n setHistory([...history, groupedData]);\r\n setGroupedData(newData);\r\n }\r\n };\r\n\r\n const handleSectorClick = (name, widgetConfig) => {\r\n // if xAxisField is OwnerName and not clicked on Other, stop the drill down from this level\r\n if (widgetConfig?.xAxisField?.toLowerCase() === 'ownername' && name.toLowerCase() !== othersLabel) {\r\n return;\r\n }\r\n if (name.toLowerCase() === othersLabel) {\r\n handleExpand();\r\n } else {\r\n handleDrillDown(name, widgetConfig);\r\n }\r\n };\r\n const handleGoBack = () => {\r\n if (history.length > 0) {\r\n const prevData = history[history.length - 1];\r\n setHistory(history.slice(0, -1));\r\n setGroupedData(prevData);\r\n }\r\n };\r\n\r\n const getDataKey = () => {\r\n if (widgetConfig.dataKey && widgetConfig.dataKey !== '') return widgetConfig.dataKey;\r\n return getDisplayData(groupedData)[0][widgetConfig.rankingField]\r\n ? widgetConfig.rankingField\r\n : Object.keys(getDisplayData(groupedData)[0])[1];\r\n };\r\n useEffect(() => {\r\n setGroupedData(groupDataByOther(data, widgetConfig.nameKey, 0));\r\n }, [data]);\r\n\r\n const payload = groupedData.map((entry) => ({\r\n ...entry,\r\n color: selected[entry[widgetConfig.nameKey]] ? '#CCCCCC' : colorMap[entry.name],\r\n value: entry.displayName || entry.name\r\n }));\r\n\r\n return (\r\n \r\n \r\n {getDisplayData(groupedData).length > 0 && (\r\n handleSectorClick(data.name, widgetConfig)}\r\n >\r\n {getDisplayData(groupedData).map((entry, index) => (\r\n \r\n ))}\r\n \r\n )}\r\n {generateTooltip()}\r\n {groupedData.length > 10 ? (\r\n \r\n ) : (\r\n 0}\r\n onLegendClick={handleLegendClick}\r\n showCount={widgetConfig.showCountInLegend}\r\n />\r\n }\r\n payload={payload}\r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nBasicPieChart.propTypes = {\r\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n widgetConfig: PropTypes.object,\r\n handleDrillDown: PropTypes.func,\r\n generateTooltip: PropTypes.func,\r\n showPointerCursor: PropTypes.bool\r\n};\r\n\r\nCustomLegend.propTypes = {\r\n onGoBack: PropTypes.func,\r\n isExpanded: PropTypes.bool,\r\n onLegendClick: PropTypes.func,\r\n payload: PropTypes.arrayOf(PropTypes.object)\r\n};\r\n\r\nexport default BasicPieChart;\r\n","import React, { useState } from 'react';\r\nimport { AreaChart, Area, Label, XAxis, YAxis, Legend, Tooltip, ResponsiveContainer } from 'recharts';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\n// project imports\r\nimport { formatNumbers } from 'utils/format';\r\nimport CustomTooltip from './CustomTooltip';\r\nimport { getInitialBarProps, getYAxisCaption } from 'utils/graphUtils';\r\nimport debounce from 'utils/generic';\r\nimport CustomLegend from './CustomLegend';\r\n\r\nconst BasicAreaChart = ({\r\n data,\r\n widgetConfig,\r\n colors,\r\n handleDrillDown,\r\n generateGradients,\r\n generateTooltip,\r\n generateGraphics,\r\n showPointerCursor\r\n}) => {\r\n const theme = useTheme();\r\n const themeColors = theme.palette.mode === 'dark' ? colors.dark : colors.light;\r\n // this state is used to store the hover over points on the graph to correctly drill down to the clicked point.\r\n // This needs to be done because Area onClick does not provide the clicked data point unlike Bar components\r\n const [activeHoverPoint, setActiveHoverPoint] = useState(null);\r\n // debounce the setActiveHoverPoint so that the state doesn't get updated continously on hovering over the chart\r\n const debounceSetActiveHoverPoint = debounce(setActiveHoverPoint, 300);\r\n\r\n const [areaProps, setAreaProps] = useState(getInitialBarProps(data));\r\n\r\n const handleLegendClick = (entry, event) => {\r\n event.stopPropagation();\r\n const selectedProp = entry.dataKey;\r\n setAreaProps({\r\n ...areaProps,\r\n [selectedProp]: !areaProps[entry.dataKey]\r\n });\r\n };\r\n\r\n // const generateArea = (graphData, colors, areaProps) => {\r\n // const keysArr = Object.keys(graphData[0]).slice(1);\r\n // const areaArr = [];\r\n // keysArr.forEach((item, index) => {\r\n // areaArr.push(\r\n // \r\n // );\r\n // });\r\n // return areaArr;\r\n // };\r\n\r\n const handleAreaClick = () => {\r\n const drillDownXAxis = activeHoverPoint && activeHoverPoint[0]?.payload && activeHoverPoint[0]?.payload[widgetConfig.dataKey];\r\n if (drillDownXAxis) handleDrillDown(drillDownXAxis, widgetConfig);\r\n };\r\n\r\n // const formatXAxisTick = (tickItem) => tickItem.split('-')[0];\r\n\r\n return (\r\n \r\n \r\n {generateGradients(widgetConfig.chartData, themeColors)}\r\n \r\n \r\n \r\n \r\n {generateTooltip(debounceSetActiveHoverPoint, themeColors)}\r\n } />\r\n {generateGraphics(areaProps, themeColors)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default BasicAreaChart;\r\n","import React, { useState } from 'react';\r\nimport { LineChart, XAxis, YAxis, Label, Legend, ResponsiveContainer } from 'recharts';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\n// project imports\r\nimport { getInitialBarProps } from 'utils/graphUtils';\r\nimport debounce from 'utils/generic';\r\nimport CustomLegend from './CustomLegend';\r\n\r\nconst BasicLineChart = ({ data, widgetConfig, colors, handleDrillDown, generateTooltip, generateGraphics, showPointerCursor }) => {\r\n const theme = useTheme();\r\n const themeColors = theme.palette.mode === 'dark' ? colors.dark : colors.light;\r\n // this state is used to store the hover over points on the graph to correctly drill down to the clicked data point.\r\n // This needs to be done because Line onClick does not provide the clicked data point unlike Bar components\r\n const [activeHoverPoint, setActiveHoverPoint] = useState(null);\r\n const debounceSetActiveHoverPoint = debounce(setActiveHoverPoint, 300);\r\n const [lineProps, setLineProps] = useState(getInitialBarProps(data));\r\n\r\n const handleLegendClick = (entry, event) => {\r\n event.stopPropagation();\r\n const selectedProp = entry.dataKey;\r\n setLineProps({\r\n ...lineProps,\r\n [selectedProp]: !lineProps[entry.dataKey]\r\n });\r\n };\r\n\r\n const handleLineClick = () => {\r\n const drillDownXAxis = activeHoverPoint && activeHoverPoint[0]?.payload && activeHoverPoint[0]?.payload[widgetConfig.dataKey];\r\n if (drillDownXAxis) handleDrillDown(drillDownXAxis, widgetConfig);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {generateTooltip(debounceSetActiveHoverPoint, themeColors)}\r\n } />\r\n {generateGraphics(lineProps, themeColors)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default BasicLineChart;\r\n","import React, { useState } from 'react';\r\nimport { BarChart, Label, XAxis, YAxis, Legend, ResponsiveContainer } from 'recharts';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\n// project imports\r\nimport { getInitialBarProps } from 'utils/graphUtils';\r\nimport CustomLegend from './CustomLegend';\r\n\r\nconst HorizontalStackedBarChart = ({\r\n data,\r\n widgetConfig,\r\n colors,\r\n handleDrillDown,\r\n generateTooltip,\r\n generateGraphics,\r\n showPointerCursor\r\n}) => {\r\n const theme = useTheme();\r\n const themeColors = theme.palette.mode === 'dark' ? colors.dark : colors.light;\r\n const [barProps, setBarProps] = useState(getInitialBarProps(data));\r\n\r\n const handleLegendClick = (e) => {\r\n const selectedProp = e.dataKey;\r\n setBarProps({\r\n ...barProps,\r\n [selectedProp]: !barProps[e.dataKey]\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {generateTooltip(themeColors)}\r\n } />\r\n {generateGraphics(barProps, themeColors, handleDrillDown, widgetConfig)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default HorizontalStackedBarChart;\r\n","import React, { useState } from 'react';\r\nimport { BarChart, Bar, Label, XAxis, YAxis, Legend, ResponsiveContainer } from 'recharts';\r\n\r\n// material-ui\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\n// project imports\r\nimport { getInitialBarProps } from 'utils/graphUtils';\r\nimport CustomLegend from './CustomLegend';\r\n\r\nconst SimpleBarChart = ({ data, widgetConfig, colors, handleDrillDown, generateTooltip, generateGraphics, showPointerCursor }) => {\r\n const theme = useTheme();\r\n const themeColors = theme.palette.mode === 'dark' ? colors.dark : colors.light;\r\n const [barProps, setBarProps] = useState(getInitialBarProps(data));\r\n\r\n const handleLegendClick = (entry, event) => {\r\n event.stopPropagation();\r\n const selectedProp = entry.dataKey;\r\n setBarProps({\r\n ...barProps,\r\n [selectedProp]: !barProps[entry.dataKey]\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {generateTooltip(themeColors)}\r\n } />\r\n {generateGraphics(barProps, themeColors, handleDrillDown, widgetConfig)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SimpleBarChart;\r\n","export default __webpack_public_path__ + \"static/media/noun-area-chart.a5b7d5b0.svg\";","export default __webpack_public_path__ + \"static/media/noun-area-chart-dark.10c0b2c4.svg\";","export default __webpack_public_path__ + \"static/media/noun-line-graph.8ebdd3d6.svg\";","export default __webpack_public_path__ + \"static/media/noun-line-graph-dark.a2e70ae6.svg\";","export default __webpack_public_path__ + \"static/media/noun-stacked-bar-chart.dcfd5836.svg\";","export default __webpack_public_path__ + \"static/media/noun-stacked-bar-chart-dark.0eefa256.svg\";","export default __webpack_public_path__ + \"static/media/noun-stacked-bar-chart-horizontal.7ee46de5.svg\";","export default __webpack_public_path__ + \"static/media/noun-stacked-bar-chart-horizontal-dark.c882d069.svg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#eceff1\",\"primary200\":\"#b0bec5\",\"primaryMain\":\"#607d8b\",\"primaryDark\":\"#546e7a\",\"primary800\":\"#455a64\",\"secondaryLight\":\"#e0f2f1\",\"secondary200\":\"#80cbc4\",\"secondaryMain\":\"#009688\",\"secondaryDark\":\"#00897b\",\"secondary800\":\"#00695c\",\"successLight\":\"#edf7ed\",\"success200\":\"#b6e0b3\",\"successMain\":\"#6cc067\",\"successDark\":\"#64ba5f\",\"errorLight\":\"#e48784\",\"errorMain\":\"#d9534f\",\"errorDark\":\"#d54c48\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fdf5ea\",\"warningMain\":\"#f0ad4e\",\"warningDark\":\"#ec9c3d\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#757575\",\"grey700\":\"#616161\",\"grey900\":\"#212121\",\"darkPaper\":\"#060d12\",\"darkBackground\":\"#0e1b23\",\"darkLevel1\":\"#0b161d\",\"darkLevel2\":\"#14252f\",\"darkTextTitle\":\"#e4e8f7\",\"darkTextPrimary\":\"#d5d9e9\",\"darkTextSecondary\":\"#d8ddf0\",\"darkPrimaryLight\":\"#eceff1\",\"darkPrimaryMain\":\"#78919c\",\"darkPrimaryDark\":\"#587583\",\"darkPrimary200\":\"#b0bec5\",\"darkPrimary800\":\"#44606e\",\"darkSecondaryLight\":\"#e0f2f1\",\"darkSecondaryMain\":\"#009688\",\"darkSecondaryDark\":\"#00897b\",\"darkSecondary200\":\"#80cbc4\",\"darkSecondary800\":\"#00695c\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#e4e7ec\",\"primary200\":\"#909ab0\",\"primaryMain\":\"#203461\",\"primaryDark\":\"#1c2f59\",\"primary800\":\"#132145\",\"secondaryLight\":\"#fde8ef\",\"secondary200\":\"#f6a0bd\",\"secondaryMain\":\"#ec407a\",\"secondaryDark\":\"#ea3a72\",\"secondary800\":\"#e42a5d\",\"successLight\":\"#e3f8e8\",\"success200\":\"#8be09f\",\"successMain\":\"#17c13e\",\"successDark\":\"#14bb38\",\"errorLight\":\"#e48784\",\"errorMain\":\"#d9534f\",\"errorDark\":\"#d54c48\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fdf5ea\",\"warningMain\":\"#f0ad4e\",\"warningDark\":\"#ec9c3d\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#757575\",\"grey700\":\"#616161\",\"grey900\":\"#212121\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\",\"darkPaper\":\"#030614\",\"darkBackground\":\"#0a0f23\",\"darkLevel1\":\"#070e13\",\"darkLevel2\":\"#12172f\",\"darkTextTitle\":\"#e4e8f7\",\"darkTextPrimary\":\"#d5d9e9\",\"darkTextSecondary\":\"#d8ddf0\",\"darkPrimaryLight\":\"#ecedf1\",\"darkPrimaryMain\":\"#606d88\",\"darkPrimaryDark\":\"#586580\",\"darkPrimary200\":\"#b0b6c4\",\"darkPrimary800\":\"#44506b\",\"darkSecondaryLight\":\"#fde8ef\",\"darkSecondaryMain\":\"#ec407a\",\"darkSecondaryDark\":\"#ea3a72\",\"darkSecondary200\":\"#f6a0bd\",\"darkSecondary800\":\"#e42a5d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#e3ebeb\",\"primary200\":\"#8bacad\",\"primaryMain\":\"#16595a\",\"primaryDark\":\"#135152\",\"primary800\":\"#0c3e3f\",\"secondaryLight\":\"#f8f0e5\",\"secondary200\":\"#e3bf91\",\"secondaryMain\":\"#c77e23\",\"secondaryDark\":\"#c1761f\",\"secondary800\":\"#b36115\",\"successLight\":\"#b9f6ca\",\"success200\":\"#69f0ae\",\"successMain\":\"#00e676\",\"successDark\":\"#00c853\",\"errorLight\":\"#ef9a9a\",\"errorMain\":\"#f44336\",\"errorDark\":\"#c62828\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fff8e1\",\"warningMain\":\"#ffe57f\",\"warningDark\":\"#ffc107\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#757575\",\"grey700\":\"#616161\",\"grey900\":\"#212121\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\",\"darkPaper\":\"#010f17\",\"darkBackground\":\"#010606\",\"darkLevel1\":\"#02131d\",\"darkLevel2\":\"#010f17\",\"darkTextTitle\":\"#fff\",\"darkTextPrimary\":\"#fff\",\"darkTextSecondary\":\"#8492c4\",\"darkPrimaryLight\":\"#eceff1\",\"darkPrimaryMain\":\"#1f7778\",\"darkPrimaryDark\":\"#1b6f70\",\"darkPrimary200\":\"#8fbbbc\",\"darkPrimary800\":\"#125a5b\",\"darkSecondaryLight\":\"#f8f0e5\",\"darkSecondaryMain\":\"#c77e23\",\"darkSecondaryDark\":\"#c1761f\",\"darkSecondary200\":\"#e3bf91\",\"darkSecondary800\":\"#b36115\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#e3e8e8\",\"primary200\":\"#8b9fa1\",\"primaryMain\":\"#173e43\",\"primaryDark\":\"#14383d\",\"primary800\":\"#0d282c\",\"secondaryLight\":\"#e8f6f5\",\"secondary200\":\"#9fd8d6\",\"secondaryMain\":\"#3fb0ac\",\"secondaryDark\":\"#39a9a5\",\"secondary800\":\"#299792\",\"successLight\":\"#b9f6ca\",\"success200\":\"#69f0ae\",\"successMain\":\"#00e676\",\"successDark\":\"#00c853\",\"errorLight\":\"#ef9a9a\",\"errorMain\":\"#f44336\",\"errorDark\":\"#c62828\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fff8e1\",\"warningMain\":\"#ffe57f\",\"warningDark\":\"#ffc107\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#757575\",\"grey700\":\"#616161\",\"grey900\":\"#212121\",\"darkPaper\":\"#051114\",\"darkBackground\":\"#030708\",\"darkLevel1\":\"#02131d\",\"darkLevel2\":\"#051114\",\"darkTextTitle\":\"#fff\",\"darkTextPrimary\":\"#fff\",\"darkTextSecondary\":\"#ccd2eb\",\"darkPrimaryLight\":\"#e3e8e8\",\"darkPrimaryMain\":\"#3a5b5f\",\"darkPrimaryDark\":\"#14383d\",\"darkPrimary200\":\"#8b9fa1\",\"darkPrimary800\":\"#0d282c\",\"darkSecondaryLight\":\"#e8f6f5\",\"darkSecondaryMain\":\"#3fb0ac\",\"darkSecondaryDark\":\"#39a9a5\",\"darkSecondary200\":\"#9fd8d6\",\"darkSecondary800\":\"#299792\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#e2e5e8\",\"primary200\":\"#8591a1\",\"primaryMain\":\"#0a2342\",\"primaryDark\":\"#091f3c\",\"primary800\":\"#05152b\",\"secondaryLight\":\"#e6f4f1\",\"secondary200\":\"#96d2c6\",\"secondaryMain\":\"#2ca58d\",\"secondaryDark\":\"#279d85\",\"secondary800\":\"#1b8a70\",\"successLight\":\"#b9f6ca\",\"success200\":\"#69f0ae\",\"successMain\":\"#00e676\",\"successDark\":\"#00c853\",\"errorLight\":\"#ef9a9a\",\"errorMain\":\"#f44336\",\"errorDark\":\"#c62828\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fff8e1\",\"warningMain\":\"#ffe57f\",\"warningDark\":\"#ffc107\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#757575\",\"grey700\":\"#616161\",\"grey900\":\"#212121\",\"darkPaper\":\"#030c1d\",\"darkBackground\":\"#051327\",\"darkLevel1\":\"#071a33\",\"darkLevel2\":\"#091f3c\",\"darkTextTitle\":\"#d7dcec\",\"darkTextPrimary\":\"#bdc8f0\",\"darkTextSecondary\":\"#8492c4\",\"darkPrimaryLight\":\"#e2e5e8\",\"darkPrimaryMain\":\"#54657b\",\"darkPrimaryDark\":\"#2f445e\",\"darkPrimary200\":\"#8591a1\",\"darkPrimary800\":\"#05152b\",\"darkSecondaryLight\":\"#e6f4f1\",\"darkSecondaryMain\":\"#2ca58d\",\"darkSecondaryDark\":\"#279d85\",\"darkSecondary200\":\"#96d2c6\",\"darkSecondary800\":\"#1b8a70\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"paper\":\"#fff\",\"primaryLight\":\"#e8eaf6\",\"primary200\":\"#9fa8da\",\"primaryMain\":\"#3f51b5\",\"primaryDark\":\"#3949ab\",\"primary800\":\"#283593\",\"secondaryLight\":\"#e8eaf6\",\"secondary200\":\"#9fa8da\",\"secondaryMain\":\"#3f51b5\",\"secondaryDark\":\"#3949ab\",\"secondary800\":\"#283593\",\"successLight\":\"#b9f6ca\",\"success200\":\"#69f0ae\",\"successMain\":\"#00e676\",\"successDark\":\"#00c853\",\"errorLight\":\"#ef9a9a\",\"errorMain\":\"#f44336\",\"errorDark\":\"#c62828\",\"orangeLight\":\"#fbe9e7\",\"orangeMain\":\"#ffab91\",\"orangeDark\":\"#d84315\",\"warningLight\":\"#fff8e1\",\"warningMain\":\"#ffe57f\",\"warningDark\":\"#ffc107\",\"grey50\":\"#fafafa\",\"grey100\":\"#f5f5f5\",\"grey200\":\"#eee\",\"grey300\":\"#e0e0e0\",\"grey500\":\"#9e9e9e\",\"grey600\":\"#757575\",\"grey700\":\"#616161\",\"grey900\":\"#212121\",\"darkPaper\":\"#111936\",\"darkBackground\":\"#1a223f\",\"darkLevel1\":\"#29314f\",\"darkLevel2\":\"#212946\",\"darkTextTitle\":\"#d7dcec\",\"darkTextPrimary\":\"#bdc8f0\",\"darkTextSecondary\":\"#8492c4\",\"darkPrimaryLight\":\"#eeedfd\",\"darkPrimaryMain\":\"#7267ef\",\"darkPrimaryDark\":\"#6a5fed\",\"darkPrimary200\":\"#b9b3f7\",\"darkPrimary800\":\"#554ae8\",\"darkSecondaryLight\":\"#eeedfd\",\"darkSecondaryMain\":\"#7267ef\",\"darkSecondaryDark\":\"#6a5fed\",\"darkSecondary200\":\"#b9b3f7\",\"darkSecondary800\":\"#554ae8\",\"purpleLight\":\"#ede7f7\",\"purpleMain\":\"#6329d8\",\"purpleDark\":\"#7f5bc5\"};","// action - account reducer\r\nexport const LOGIN = 'LOGIN';\r\nexport const LOGOUT = 'LOGOUT';\r\nexport const REGISTER = 'REGISTER';\r\nexport const RESET_STORE = 'RESET_STORE';\r\nexport const SET_TENANT_INFO = 'SET_TENANT_INFO';\r\nexport const SET_TENANT_CONFIG = 'SET_TENANT_CONFIG';\r\nexport const SET_FUSIONAUTH_CONFIG = 'SET_FUSIONAUTH_CONFIG';\r\nexport const SET_RECOVERY_CODES = 'SET_RECOVERY_CODES';\r\nexport const SET_MFA_VERIFICATION_INFO = 'SET_MFA_VERIFICATION_INFO';\r\nexport const SET_AUTH_INFO = 'SET_AUTH_INFO';\r\nexport const EVALUATE_FEATURES = 'EVALUATE_FEATURES';\r\nexport const SET_SUBSCRIPTION_DETAILS = 'SET_SUBSCRIPTION_DETAILS';\r\n"],"sourceRoot":""}