{"version":3,"sources":["polyfills.js","registerServiceWorker.js","components/icons/InfoIcon.tsx","viewer/components/CookieBanner/CookieBanner.tsx","viewer/components/viewer/Redirect.tsx","viewer/user-config/ConfigReducer.ts","components/helpers/UserRole.helper.ts","components/dashboard/Dashboard.tsx","components/micro-router/MicroRouter.tsx","viewer/components/StartNewProjectSection/StartNewProjectTile/StartNewProjectTileStyle.ts","viewer/components/StartNewProjectSection/StartNewProjectTile/StartNewProjectTile.tsx","components/icons/SendMailIcon.tsx","components/icons/DownloadArrowIcon.tsx","components/icons/UploadArrowIcon.tsx","components/icons/CollectorIcon.tsx","components/icons/CloudPricingIcon.tsx","components/helpers/variables.ts","viewer/components/StartNewProjectSection/StartNewProjectTypes.ts","viewer/components/StartNewProjectSection/StartNewProjectHome/StartNewProjectHomeStyle.ts","viewer/components/SelectPhoneHomeType/SelectPhoneHomeTypeStyle.ts","components/icons/PhoneHomeStorageIcon.tsx","components/icons/PhoneHomeDataIcon.tsx","viewer/components/SelectPhoneHomeType/SelectPhoneHomeType.tsx","viewer/components/StartNewProjectSection/StartNewProjectHome/StartNewProjectHome.tsx","telemetry/Telemetry.js","telemetry/ExceptionTracker.ts","viewer/api/ApiRequests.ts","viewer/api/PortalUIApi.ts","viewer/dashboard-projects/ProjectReducer.ts","viewer/store/Store.ts","components/icons/DataProtectionIcon.tsx","viewer/dashboard-projects/enum/ScanCategory.enum.ts","components/icons/FileIcon.tsx","components/icons/ServerAndCloudIcon.tsx","components/icons/StorageIcon.tsx","components/icons/WorkloadsIcon.tsx","components/icons/AngleLeftIcon.tsx","viewer/components/NewProjectSection/NewProjectLinks.tsx","viewer/components/NewProjectSection/ProjectDescription.tsx","viewer/components/NewProjectSection/NewProject.tsx","components/icons/RecentProjectsIcon.tsx","components/icons/LoadingIcon.tsx","components/icons/FolderIcon.tsx","viewer/components/RecentProjects/NoProjectFound.tsx","components/icons/HourGlassIcon.tsx","viewer/dashboard-projects/enum/ScanStatusDisplay.enum.ts","viewer/dashboard-projects/enum/ScanType.enum.ts","viewer/components/RecentProjects/ScanCategoryWrapper.tsx","components/icons/AnonymousIcon.tsx","components/icons/ArchiveIcon.tsx","components/icons/RightTickIcon.tsx","components/icons/StatusDemoIcon.tsx","components/icons/StatusErrorIcon.tsx","components/icons/StatusInProgressIcon.tsx","components/icons/StatusPublishedIcon.tsx","viewer/components/RecentProjects/StatusTags.tsx","viewer/components/RecentProjects/CircularProgressBar.tsx","viewer/components/RecentProjects/ProjectTile.tsx","viewer/components/RecentProjects/RecentProjects.tsx","viewer/components/RecentProjects/RecentProjectsSection.tsx","components/icons/YoutubeBanner.tsx","viewer/components/YoutubeBannerSection/YoutubeBannerTile.tsx","viewer/Viewer.tsx","App.tsx","index.tsx"],"names":["Number","parseInt","Promise","all","Boolean","window","location","hostname","match","InfoIcon","xmlns","viewBox","d","Layout","styled","div","Icon","Message","span","Button","button","CookieBanner","React","useState","displayCookieBanner","setDisplayCookieBanner","useEffect","localStorage","getItem","onClick","setItem","Redirect","props","assign","CONFIG_ERROR","CONFIG_SUCCESS","initialState","loaded","error","data","getConfig","fetch","credentials","loadConfigData","dispatch","then","res","json","response","payload","Data","type","catch","e","httpStatus","status","message","isUserAdmin","role","isEndUser","HeaderWrapper","Content","ToolbarWrapper","FooterWrapper","footer","LoadingPlaceholder","Dashboard","useDispatch","configData","useSelector","state","config","userInfo","navOptions","children","appVersion","id","path","pathname","strippedPath","lastIndexOf","substring","getIdFromCurrentPath","errorCode","projectId","colored","ProjectContent","a","ProjectTitle","ProjectDescription","p","StartNewProjectTile","href","link","undefined","target","showModalPopupFn","icon","title","description","SendMailIcon","width","height","transform","DownloadArrowIconIcon","UploadArrowIcon","CollectorIcon","CloudPricingIcon","fillRule","MARKETINGSITE_URL","MARKETING_URL","StartNewProjectTypes","DownloadArrowIcon","ProjectWrapper","ProjectContainer","ProjectHeading","ModalOverlay","ModalContainer","ModalHeader","ModalTitle","ModalBody","ModalColumn","ModalRow","ModalText","ModalLink","ModalDescription","PpdmModalDescription","PpddModalDescription","IconStyle","color","cursor","PhoneHomeStorageIconIcon","cx","cy","r","fill","opacity","PhoneHomeDataIcon","SelectPhoneHomePopup","style","PhoneHomeStorageIcon","StartNewProjectHome","projectTypes","setProjectTypes","showModalPopup","setShowModalPopup","projectsData","slice","unshift","push","map","project","index","ai","this","reactPlugin","ReactPlugin","reactPluginConfig","INSTRUMENTATION_KEY","APP_INSIGHTS","appInsights","ApplicationInsights","instrumentationKey","maxBatchInterval","disableFetchTracking","extensions","extensionConfig","identifier","loadAppInsights","trackException","exception","ERROR_MESSAGE","prependText","getJsonCall","url","normalizeOptions","trim","length","reject","method","headers","handleRedirect","ok","Error","statusText","deserialize","postJsonCall","body","JSON","stringify","redirected","redirectUrl","URL","redirectPath","replace","search","indexOf","toString","PREPENDTEXT","PrependBaseUrl","getProjectsJson","deSerializedResponse","PROJECT_ERROR","PROJECT_SUCCESS","loadProjects","projectsCount","rootReducer","combineReducers","action","projects","ScanCategory","DataProtectionIcon","FileIcon","ServerAndCloudIcon","StorageIcon","WorkloadsIcon","AngleLeftIcon","ViewMore","ProjectOption","NewProjectLinks","ProjectTypeDescription","prop","ProjectTypes","tabIndex","ProjectTypeDetails","NewProject","setIndex","onMouseLeave","onMouseOver","RecentProjectsIcon","LogoWrapper","LogoSVG","svg","logoColors","LoadingIcon","className","FolderIcon","NoProjectFound","NoProjectsContainer","ProjectCirecleIcon","NoProjectInfo","RequestDPACKCapture","ScanStatusDisplay","ScanType","HourGlassIcon","WorkloadLayout","HourGlassLayout","ScanCategoryWrapper","scanCategory","Server","Storage","DataProtection","File","Workloads","AnonymousIcon","ArchiveIcon","RightTickIcon","StatusDemoIcon","StatusErrorIcon","StatusInProgressIcon","StatusPublishedIcon","ProjectStatus","itemProp","VerifyOwnerWrapper","StatusTags","handleVerifyOwnerSuccess","useCallback","reload","isAnonymous","isPublic","scanType","DPACKPerformance","actionsAndStatus","isInProgress","isArchived","isDemoProject","endTime","hasLiveCollectorRuns","isError","userRole","defaultTheater","TheaterTypeIndexMapper","preferredTheater","ownershipVerified","isOwnershipVerifiedOriginal","ownerId","projectStatus","overallScanStatus","isProjectFatalFromArchive","isArchivingInProgress","isRestoreInProgress","onSuccess","statusDisplay","Complete","Processing","PendingUpload","Initializing","InQueue","Unpacking","PendingReportGeneration","CircularProgress","percentage","colors","borderColor","backgroundColor","CircularProgressBar","DateInfoSection","DateSection","DetailsSection","DateTimeSection","ProjectOwner","ProjectType","ProjectId","LinkOwnershipButtonWrapper","ScanCategoryColors","None","Container","ProjectTile","createDate","Date","createDateUtc","percentComplete","setPercentComplete","Math","abs","Projects","PercentageComplete","scanTypeFormatted","fetchData","handleOwnershipLinkedSuccess","toLocaleString","month","toUpperCase","getDate","getFullYear","ownerCompanySfdcAccountId","ownerCompanySfdcInfo","accountId","ownerCompanySfdcAccountName","accountName","projectSfdcAccountId","projectSfdcInfo","projectSfdcAccountName","opportunityId","sfdcDealId","opportunityMode","OpportunityModeIndexMapper","sfdcDealMode","dealId","isPendingUpload","projectUrl","name","createdById","createdByName","ownerName","createDateWithOffset","ProjectsContainer","RecentProjects","dashboardProject","RecentProjectsTitle","AllProjects","RecentProjectsSection","myProjects","loadProjectsData","YoutubeBanner","xmlnsXlink","clipPath","filter","stroke","strokeWidth","x","y","filterUnits","colorInterpolationFilters","floodOpacity","result","in","values","dx","dy","stdDeviation","mode","in2","patternContentUnits","xlinkHref","LeftColumn","RightColumn","YoutubeBannerTile","TopSection","Viewer","App","store","middlewares","thunkMiddleware","enhancers","applyMiddleware","composedEnhancers","composeWithDevTools","createStore","configureStore","exact","to","loadPolyfillsAsync","initialize","FullStory","orgId","ReactDOM","render","document","getElementById","LocalDashboard","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.170844f8.25.3.5.1.chunk.js","sourcesContent":["export async function loadPolyfillsAsync() {\r\n if (!Number.parseInt) {\r\n await Promise.all([\r\n import(/* webpackChunkName: \"object-is-polyfill\" */ './custom-polyfills/object-is'),\r\n import(/* webpackChunkName: \"custom-event-polyfill\" */ './custom-polyfills/custom-event')\r\n ])\r\n }\r\n return\r\n}\r\n\r\n","// In production, we register a service worker to serve assets from local cache.\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 the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\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.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\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);\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/facebookincubator/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. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\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 }\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) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\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);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n\r\n","import React from \"react\";\r\n\r\nconst InfoIcon = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default InfoIcon;","import styled from '@emotion/styled';\r\nimport React from 'react'\r\nimport InfoIcon from '../../../components/icons/InfoIcon';\r\n\r\nconst Layout = styled.div`\r\n position: fixed;\r\n bottom: 0;\r\n top: auto!important;\r\n width: 100%;\r\n z-index: 20!important;\r\n max-height: 100px;\r\n background: #57a8e6;\r\n display: flex;\r\n align-items: center;\r\n min-height: 56px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n background: #4c96ce;\r\n width: 50px;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n height: 100%;\r\n\r\n svg {\r\n width: 20px;\r\n height: 20px;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n margin-top: -10px;\r\n margin-left: -10px;\r\n }\r\n\r\n svg path {\r\n fill: #fff;\r\n }\r\n`;\r\n\r\nconst Message = styled.span`\r\n font-size: 12px;\r\n margin: 0 55px;\r\n font-weight: 600;\r\n font-family: 'open sans';\r\n color: #fff;\r\n padding-left: 20px;\r\n line-height: 22px;\r\n`;\r\n\r\nconst Button = styled.button`\r\n padding: 7px 20px;\r\n font-family: 'open sans';\r\n font-size: 12px;\r\n margin-left: 21px;\r\n background: #007db8;\r\n box-shadow: 0 2px 0 0 #005ba5;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n font-weight: 400;\r\n color: #fff;\r\n border: none;\r\n\r\n &:hover {\r\n background: #005ba5;\r\n }\r\n`;\r\n\r\nconst CookieBanner = () => {\r\n const [displayCookieBanner, setDisplayCookieBanner] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if(!window.localStorage.getItem('displayedCookieWarning')){\r\n setDisplayCookieBanner(true);\r\n }\r\n }, [])\r\n\r\n const acceptCookie = () => {\r\n window.localStorage.setItem('displayedCookieWarning', 'true');\r\n setDisplayCookieBanner(false);\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n displayCookieBanner && \r\n \r\n \r\n \r\n This site uses cookies to track your navigation.\r\n \r\n \r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport default CookieBanner;","//-----------------------------------------------------------------------------\r\n// Copyright (c) 2022 by Dell Inc.\r\n//\r\n// All rights reserved. This software may not be copied, disclosed,\r\n// transferred, or used except in accordance with a license granted\r\n// by Dell Inc. This software embodies proprietary information\r\n// and trade secrets of Dell Inc.\r\n//\r\n//-----------------------------------------------------------------------------\r\n\r\nimport React from 'react';\r\n\r\ninterface Props {\r\n errorCode: number;\r\n projectId: number;\r\n}\r\n\r\nconst Redirect = (props: Props) => {\r\n window.location.assign('/dashboard')\r\n\r\n return <>;\r\n};\r\n\r\nexport default Redirect;\r\n\r\n","import { RootState } from '../store/RootState';\r\nimport { Config } from './models/Config';\r\nimport StateError from '../store/StateError';\r\nimport ConfigState from './models/ConfigState';\r\nimport { Dispatch } from 'redux';\r\n\r\nconst CONFIG_ERROR = 'CONFIG_ERROR';\r\nconst CONFIG_SUCCESS = 'CONFIG_SUCCESS';\r\n\r\nexport function setError(payload: StateError) {\r\n return { type: CONFIG_ERROR, payload };\r\n}\r\n\r\nexport function setSuccess(payload: Config) {\r\n return { type: CONFIG_SUCCESS, payload };\r\n}\r\n\r\nconst initialState = {\r\n loaded: false,\r\n error: null,\r\n data: {} as Config,\r\n} as ConfigState;\r\n\r\nexport default function configReducer(state = initialState, action = {} as any) {\r\n switch (action.type) {\r\n case CONFIG_ERROR:\r\n return {\r\n ...state,\r\n loaded: true,\r\n error: action.payload,\r\n };\r\n case CONFIG_SUCCESS:\r\n return {\r\n ...state,\r\n loaded: true,\r\n data: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport function getUserConfig(state: RootState): ConfigState {\r\n const { config } = state;\r\n return config;\r\n}\r\n\r\nasync function getConfig() {\r\n return await fetch(`/api/GlobalInfo`, { credentials: 'same-origin' });\r\n}\r\n\r\nexport function loadConfigData() {\r\n return async function(dispatch: Dispatch) {\r\n await getConfig()\r\n .then(async res => {\r\n const response = await res.json();\r\n dispatch(setSuccess(response.Data));\r\n })\r\n .catch(e => {\r\n dispatch(\r\n setError({ httpStatus: e.status ? e.status : 401, message: 'User config data failed.' })\r\n );\r\n });\r\n };\r\n}\r\n\r\n","export const isUserAdmin = (role: string) => {\r\n return role === 'DellAdminUser' || role === 'DellUser';\r\n};\r\n\r\nexport const isTeamAdmin = (role: string) => {\r\n return role === 'ChannelPartnerTeamAdmin' || role === 'OEMTeamAdmin';\r\n};\r\n\r\nexport const isEndUser = (role: string) => {\r\n return role === 'EndUser' || role === 'OEMEndUser';\r\n};","import styled from '@emotion/styled';\r\nimport {\r\n FooterV2, HeaderV2, LoadingPlaceholderIcon, MyTeam, RegisterUser, SideNav, SupportMenuV2, UserMenuV2\r\n} from '@liveoptics/react-ui';\r\nimport React, { ReactNode, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { getIdFromCurrentPath } from '../../components/micro-router/MicroRouter';\r\nimport CookieBanner from '../../viewer/components/CookieBanner/CookieBanner';\r\nimport Redirect from '../../viewer/components/viewer/Redirect';\r\nimport { RootState } from '../../viewer/store/RootState';\r\nimport { loadConfigData } from '../../viewer/user-config/ConfigReducer';\r\nimport { isTeamAdmin, isUserAdmin } from '../helpers/UserRole.helper';\r\n\r\nconst Layout = styled.div`\r\n position: relative;\r\n height: calc(100vh - 4.8rem);\r\n font-family: 'Open Sans', Regular;\r\n`;\r\n\r\nconst HeaderWrapper = styled.div`\r\n position: fixed;\r\n width: 100%;\r\n z-index: 11;\r\n`;\r\n\r\nconst Content = styled.div`\r\n min-height: 100%;\r\n background: #f5f6fb;\r\n padding-top: 4.75rem;\r\n margin-left: 50px;\r\n\r\n @media (max-width: 700px) {\r\n padding-top: 12rem;\r\n }\r\n`;\r\n\r\nconst ToolbarWrapper = styled.div`\r\n display: flex;\r\n margin-left: 50px;\r\n z-index: -1;\r\n`;\r\n\r\nconst FooterWrapper = styled.footer`\r\n margin-left: 3rem;\r\n`;\r\n\r\nconst LoadingPlaceholder = styled.div`\r\n display: flex;\r\n height: 100vh;\r\n width: auto;\r\n background-color: #f5f6fb;\r\n align-items: center;\r\n justify-content: center;\r\n`;\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n}\r\n\r\nconst Dashboard = (props: Props) => {\r\n const dispatch = useDispatch();\r\n const configData = useSelector((state: RootState) => state).config;\r\n\r\n useEffect(() => {\r\n dispatch(loadConfigData());\r\n }, [dispatch]);\r\n\r\n if (configData && configData.loaded && !configData.error) {\r\n return (\r\n \r\n \r\n \r\n { isTeamAdmin(configData.data.userInfo.role) && }\r\n { isUserAdmin(configData.data.userInfo.role) && }\r\n {}\r\n \r\n \r\n {}\r\n \r\n \r\n {props.children}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (configData && configData.loaded && configData.error) {\r\n const id = getIdFromCurrentPath();\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Dashboard;\r\n\r\n","export function getIdFromCurrentPath(): number {\r\n const path = window.location.pathname;\r\n const strippedPath = path.lastIndexOf('/');\r\n const id = path.substring(strippedPath + 1);\r\n return Number.parseInt(id);\r\n}\r\n\r\n","import styled from '@emotion/styled';\r\n\r\nexport const ProjectContent = styled.a`\r\n display: flex;\r\n flex-direction: column;\r\n padding: 10px 20px 0px 21px;\r\n color: #566072;\r\n text-decoration: none;\r\n cursor: pointer;\r\n\r\n & svg{\r\n fill: #0076ce;\r\n }\r\n `;\r\n\r\nexport const ProjectTitle = styled.span`\r\n height: 19px;\r\n text-align: left;\r\n font: normal normal 600 14px/20px Open Sans;\r\n letter-spacing: 0.14px;\r\n color: #566072;\r\n opacity: 1;\r\n margin-top: 15px;\r\n `;\r\n\r\nexport const ProjectDescription = styled.p`\r\n font: normal normal normal 14px/21px Open Sans;\r\n height: 46px;\r\n letter-spacing: 0.28px;\r\n opacity: 1;\r\n margin-top: 10px;\r\n `;","import React from 'react';\r\nimport { Tile } from '@liveoptics/react-ui';\r\nimport { StartNewProjectType } from '../StartNewProjectType';\r\nimport { ProjectContent, ProjectTitle, ProjectDescription } from './StartNewProjectTileStyle';\r\n\r\ninterface StartNewProjectTileProps {\r\n data: StartNewProjectType;\r\n showModalPopupFn: (showModalPopup: boolean) => void;\r\n}\r\n\r\nconst StartNewProjectTile = (props: StartNewProjectTileProps) => {\r\n\r\n return(\r\n \r\n props.showModalPopupFn(true) : undefined} data-testid={props.data.id}>\r\n \r\n {props.data.title}\r\n {props.data.description}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default StartNewProjectTile;","import React from 'react';\r\n\r\nconst SendMailIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default SendMailIcon;","import React from 'react';\r\n\r\nconst DownloadArrowIconIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default DownloadArrowIconIcon;","import React from 'react';\r\n\r\nconst UploadArrowIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default UploadArrowIcon;","import React from 'react';\r\n\r\nconst CollectorIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default CollectorIcon;","import React from 'react';\r\n\r\nconst CloudPricingIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default CloudPricingIcon;","export interface CustomWindow extends Window {\r\n MARKETING_URL: string;\r\n}\r\n\r\ndeclare var window : CustomWindow;\r\n\r\nexport let MARKETINGSITE_URL = `${window.MARKETING_URL}`;\r\n","import SendMailIcon from '../../../components/icons/SendMailIcon'\r\nimport DownloadArrowIcon from '../../../components/icons/DownloadArrowIcon';\r\nimport UploadArrowIcon from '../../../components/icons/UploadArrowIcon';\r\nimport CollectorIcon from '../../../components/icons/CollectorIcon';\r\nimport CloudPricingIcon from '../../../components/icons/CloudPricingIcon';\r\nimport { MARKETINGSITE_URL } from '../../../components/helpers/variables';\r\n\r\n// Start new project types data.\r\nexport const StartNewProjectTypes = [\r\n {\r\n id: 'request-collection',\r\n title: 'Request a Collection',\r\n description: 'Get your customer started with a collection',\r\n link: '/usermanagement/requestcapture',\r\n icon: SendMailIcon\r\n },\r\n {\r\n id: 'download-collector',\r\n title: 'Download Collector',\r\n description: 'Download the software to perform a collection yourself',\r\n link: '/collector/download',\r\n icon: CollectorIcon\r\n },\r\n {\r\n id: 'upload-files',\r\n title: 'Upload Files',\r\n description: 'Upload a SIOKIT that you already have',\r\n link: '/collectorruns/Upload-Iokit',\r\n icon: UploadArrowIcon\r\n },\r\n {\r\n id: 'cloud-pricing',\r\n title: 'Cloud Pricing Calculator',\r\n description: 'Compare Cloud Pricing',\r\n link: `${MARKETINGSITE_URL}/cloud-calculator/`,\r\n icon: CloudPricingIcon\r\n },\r\n {\r\n id: 'import-phone',\r\n title: 'Import Phone Home CloudIQ Project',\r\n description: 'Import a project from phone home sources such as Cloud IQ',\r\n link: '/',\r\n icon: DownloadArrowIcon\r\n }]","import styled from '@emotion/styled';\r\n\r\nexport const LoadingPlaceholder = styled.div`\r\n display: flex;\r\n height: 100vh;\r\n width: auto;\r\n background-color: #f5f6fb;\r\n align-items: center;\r\n justify-content: center;\r\n `;\r\n\r\nexport const ProjectWrapper = styled.div`\r\n display: grid;\r\n margin-top: 19px;\r\n\r\n & div {\r\n margin-right: 20px;\r\n margin-bottom: 21px;\r\n height: 149px;\r\n :hover{\r\n background-color: #DCF0FE;\r\n }\r\n }\r\n\r\n @media only screen and (min-width: 984px){\r\n grid-template-columns: 50% 50%;\r\n }\r\n\r\n @media only screen and (min-width: 1280px){\r\n grid-template-columns: 33.33% 33.33% 33.33%;\r\n }\r\n `;\r\n\r\nexport const ProjectContainer = styled.div`\r\n diplay: flex;\r\n flex-direction: column;\r\n margin-left: 28px;\r\n margin-right: 5px;\r\n `;\r\n\r\nexport const ProjectHeading = styled.span`\r\n width: 303px;\r\n height: 46px;\r\n text-align: left;\r\n font: normal normal normal 34px/46px Open Sans;\r\n letter-spacing: 0px;\r\n color: #566072;\r\n opacity: 1;\r\n `;","import styled from '@emotion/styled';\r\n\r\nexport const ModalOverlay = styled.div`\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: rgba(86, 96, 114, 0.5);\r\n transition: background-color 0.45s ease-in; \r\n z-index: 100;\r\n`;\r\n\r\nexport const ModalContainer = styled.div`\r\n flex: 1 1 auto;\r\n opacity: 1;\r\n max-width: 829px;\r\n max-height: 500px;\r\n background: #FFFFFF;\r\n border: 1px solid #BDCAD2;\r\n transition: all 0.25s ease-in;\r\n padding: 0 0 0 0;\r\n font-family: Open Sans;\r\n`;\r\n\r\nexport const ModalHeader = styled.div`\r\n height: 70px;\r\n border-bottom: 1px solid #E4E4E4;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 0 1.5rem;\r\n`;\r\n\r\nexport const ModalTitle = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n width: 232px;\r\n height: 27px;\r\n text-align: left;\r\n font: normal normal normal 20px/28px Open Sans;\r\n letter-spacing: 0px;\r\n color: #566072;\r\n opacity: 1;\r\n`;\r\n\r\nexport const ModalBody = styled.div`\r\n display: grid;\r\n padding: 13.5px 25px 21px 25px;\r\n grid-gap: 10px;\r\n\r\n @media only screen and (min-width: 780px){\r\n grid-template-columns: 50% 50%;\r\n }\r\n`;\r\n\r\nexport const ModalColumn = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nexport const ModalRow = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n`;\r\n\r\nexport const ModalText = styled.span`\r\n margin-left: 9px;\r\n width: 199px;\r\n height: 24px;\r\n text-align: left;\r\n font: normal normal bold 14px/22px Open Sans;\r\n letter-spacing: 0px;\r\n color: #566072;\r\n opacity: 1;\r\n`;\r\n\r\nexport const ModalLink = styled.a`\r\n margin-left: 41px;\r\n text-align: left;\r\n font: normal normal 600 14px/30px Open Sans;\r\n letter-spacing: 0px;\r\n color: #0076CE;\r\n opacity: 1;\r\n text-decoration: none;\r\n`;\r\n\r\nexport const ModalDescription = styled(ModalText)`\r\n margin-bottom: 4px;\r\n margin-left: 41px;\r\n width: 333px;\r\n height: 2.875rem;\r\n font: normal normal normal 14px/21px Open Sans;\r\n letter-spacing: 0.28px;\r\n`;\r\n\r\nexport const PpdmModalDescription = styled(ModalDescription)`\r\n height: 5.750rem;\r\n`;\r\n\r\nexport const PpddModalDescription = styled(ModalDescription)`\r\n height: 4.325rem;\r\n`;\r\n\r\nexport const IconStyle = {\r\n height: \"16px\",\r\n width: \"16px\",\r\n color: \"#BDCAD2\",\r\n cursor: \"pointer\"\r\n}","import React from 'react';\r\n\r\nconst PhoneHomeStorageIconIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default PhoneHomeStorageIconIcon;","import React from 'react';\r\n\r\nconst PhoneHomeDataIcon = () => {\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 default PhoneHomeDataIcon;","import React from 'react';\r\nimport { ModalOverlay, ModalContainer, ModalHeader, ModalTitle, ModalBody, ModalColumn, ModalRow, ModalText, IconStyle, ModalLink, ModalDescription, PpdmModalDescription, PpddModalDescription } from './SelectPhoneHomeTypeStyle';\r\nimport PhoneHomeStorageIcon from '../../../components/icons/PhoneHomeStorageIcon';\r\nimport PhoneHomeDataIcon from '../../../components/icons/PhoneHomeDataIcon';\r\nimport { CloseIcon } from '@liveoptics/react-ui';\r\n\r\ninterface SelectPhoneHomePopupProps {\r\n showModalPopupFn: (showModalPopup: boolean) => void;\r\n}\r\n\r\nconst SelectPhoneHomePopup = (props: SelectPhoneHomePopupProps) => {\r\n\r\n return (\r\n \r\n \r\n \r\n Select Phone Home Type\r\n props.showModalPopupFn(false)}/>\r\n \r\n \r\n \r\n \r\n \r\n Storage\r\n \r\n SC Phone Home\r\n Import SC Phone Home data by looking up the serial number of the SC storage array.\r\n {/* Unity CloudIQ\r\n Import Unity data from Cloud IQ by looking up the serial number of the Unity array. */} \r\n \r\n \r\n <>\r\n \r\n \r\n Data Protection\r\n \r\n \r\n <> \r\n PPDM Phone Home\r\n Import Power Protect Data Manager Phone Home telemetry data by looking up the hostname and software serial number of the PPDM instance.\r\n \r\n <> \r\n PPDD Phone Home\r\n Import Power Protect Data Domain Phone Home ASUP by looking up the system serial number of the PPDD server.\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default SelectPhoneHomePopup;","import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport StartNewProjectTile from '../StartNewProjectTile/StartNewProjectTile';\r\nimport { StartNewProjectTypes } from '../StartNewProjectTypes';\r\nimport { StartNewProjectType } from '../StartNewProjectType';\r\nimport { RootState } from '../../../store/RootState';\r\nimport { loadConfigData } from '../../../user-config/ConfigReducer';\r\nimport { LoadingPlaceholderIcon } from '@liveoptics/react-ui';\r\nimport Redirect from '../../viewer/Redirect';\r\nimport { ProjectContainer, ProjectHeading, ProjectWrapper, LoadingPlaceholder } from './StartNewProjectHomeStyle';\r\nimport SelectPhoneHomePopup from '../../SelectPhoneHomeType/SelectPhoneHomeType';\r\nimport { isEndUser, isUserAdmin } from '../../../../components/helpers/UserRole.helper';\r\n\r\nconst StartNewProjectHome = () => {\r\n\r\n const [projectTypes, setProjectTypes] = useState([]);\r\n const configData = useSelector((state: RootState) => state).config;\r\n const dispatch = useDispatch();\r\n const [showModalPopup, setShowModalPopup] = useState(false);\r\n\r\n const showModalPopupFn = (showModalPopup: boolean) => {\r\n setShowModalPopup(showModalPopup);\r\n }\r\n\r\n useEffect(() => {\r\n dispatch(loadConfigData());\r\n }, [dispatch])\r\n\r\n useEffect(() => {\r\n let projectsData: StartNewProjectType[] = StartNewProjectTypes.slice(1, 4);\r\n if(!isEndUser(configData.data.userInfo.role)){\r\n projectsData.unshift(StartNewProjectTypes[0]);\r\n }\r\n if(isUserAdmin(configData.data.userInfo.role)){\r\n projectsData.push(StartNewProjectTypes[4]);\r\n }\r\n setProjectTypes(projectsData);\r\n }, [configData])\r\n\r\n if (configData && configData.loaded && !configData.error) {\r\n return(\r\n \r\n Start a New Project\r\n \r\n {\r\n projectTypes.map((project: StartNewProjectType, index: number) => {\r\n return(\r\n \r\n )\r\n })\r\n }\r\n \r\n {\r\n showModalPopup && \r\n \r\n }\r\n \r\n )\r\n }\r\n\r\n if (configData && configData.loaded && configData.error) {\r\n return ;\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default StartNewProjectHome;","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\n\r\nclass Telemetry {\r\n constructor() {\r\n this.reactPlugin = new ReactPlugin();\r\n }\r\n\r\n initialize(reactPluginConfig) {\r\n const INSTRUMENTATION_KEY = `${window.APP_INSIGHTS}`;\r\n\r\n this.appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: INSTRUMENTATION_KEY,\r\n maxBatchInterval: 0,\r\n disableFetchTracking: false,\r\n extensions: [this.reactPlugin],\r\n extensionConfig: {\r\n [this.reactPlugin.identifier]: reactPluginConfig,\r\n },\r\n },\r\n });\r\n this.appInsights.loadAppInsights();\r\n }\r\n}\r\n\r\nexport const ai = new Telemetry();\r\n\r\n","import { ai } from './Telemetry';\r\n\r\nexport const trackException = (e: Error) => {\r\n if (ai.appInsights) {\r\n ai.appInsights.trackException({ exception: e });\r\n }\r\n};\r\n\r\n","import {deserialize} from 'json-api-deserialize';\r\nimport {trackException} from '../../telemetry/ExceptionTracker';\r\n\r\nconst ERROR_MESSAGE = (prependText: string, message: string) =>\r\n `${prependText} request failed with reason: ${message}`;\r\n\r\nexport async function getJsonCall(\r\n url: string,\r\n prependText: string,\r\n normalizeOptions?: any\r\n): Promise {\r\n if (url == null || url.trim().length <= 0) {\r\n return Promise.reject({ message: 'url is invalid', httpStatus: 400 });\r\n }\r\n\r\n const response = await fetch(`${url}`, {\r\n method: 'GET',\r\n credentials: 'same-origin',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n handleRedirect(response);\r\n\r\n if (!response.ok) {\r\n trackException(new Error(ERROR_MESSAGE(prependText, response.statusText)));\r\n return Promise.reject({ message: response.statusText, httpStatus: response.status });\r\n }\r\n\r\n const json = await response.json();\r\n // normalize true - convert keys into camelcase and remove spaces\r\n return { data: deserialize(json, normalizeOptions), headers: response.headers };\r\n}\r\n\r\nexport async function postJsonCall(\r\n url: string,\r\n prependText: string,\r\n body:object\r\n): Promise {\r\n if (url == null || url.trim().length <= 0) {\r\n return Promise.reject({ message: 'url is invalid', httpStatus: 400 });\r\n }\r\n\r\n const response = await fetch(`${url}`, {\r\n method: 'POST',\r\n credentials: 'same-origin',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(body)\r\n });\r\n\r\n handleRedirect(response);\r\n\r\n if (!response.ok) {\r\n trackException(new Error(ERROR_MESSAGE(prependText, response.statusText)));\r\n return Promise.reject({ message: response.statusText, httpStatus: response.status });\r\n }\r\n return await response.json();\r\n}\r\n\r\nexport function handleRedirect(response: Response) {\r\n if (response.redirected) {\r\n var redirectUrl = new URL(response.url);\r\n let redirectPath = redirectUrl.href.replace(redirectUrl.search, '');\r\n window.location.href =\r\n redirectPath.indexOf('auth/login') > 0\r\n ? redirectPath + '?logout=inactive'\r\n : redirectUrl.toString();\r\n }\r\n}\r\n","import { getJsonCall } from './ApiRequests';\r\n\r\nconst BASEURL: string = `/api/projects`;\r\nconst PREPENDTEXT: string = 'Portal UI Api ';\r\nconst PrependBaseUrl = (url: string) => `${BASEURL}/${url}`;\r\n\r\nexport interface ApiError {\r\n message: string;\r\n httpStatus: number;\r\n}\r\n\r\nexport async function getProjectsJson(url: string): Promise {\r\n const deSerializedResponse = await getJsonCall(PrependBaseUrl(`${url}`), PREPENDTEXT);\r\n return deSerializedResponse.data;\r\n}","import { RootState } from '../store/RootState';\r\nimport StateError from '../store/StateError';\r\nimport { Dispatch } from 'redux';\r\nimport { DashboardProject } from './models/DashboardProject';\r\nimport ProjectState from './models/ProjectState';\r\nimport { getProjectsJson, ApiError } from '../api/PortalUIApi';\r\nimport { deserialize } from 'json-api-deserialize';\r\n\r\nconst PROJECT_ERROR = 'PROJECT_ERROR';\r\nconst PROJECT_SUCCESS = 'PROJECT_SUCCESS';\r\n\r\nexport function setError(payload: StateError) {\r\n return { type: PROJECT_ERROR, payload };\r\n}\r\n\r\nexport function setSuccess(payload: DashboardProject[]) {\r\n return { type: PROJECT_SUCCESS, payload };\r\n}\r\n\r\nconst initialState = {\r\n loaded: false,\r\n error: null,\r\n data: [] as DashboardProject[],\r\n} as ProjectState;\r\n\r\nexport default function projectReducer(state = initialState, action = {} as any) {\r\n switch (action.type) {\r\n case PROJECT_ERROR:\r\n return {\r\n ...state,\r\n loaded: true,\r\n error: action.payload,\r\n };\r\n case PROJECT_SUCCESS:\r\n return {\r\n ...state,\r\n loaded: true,\r\n data: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport function getDashboardProjects(state: RootState): ProjectState {\r\n const { projects } = state;\r\n return projects;\r\n}\r\n\r\nasync function loadProjects(projectsCount: number): Promise {\r\n const json = await getProjectsJson(`dashboardprojects/${projectsCount}`);\r\n return deserialize(json);\r\n}\r\n\r\nexport function loadProjectsData(projectsCount: number) {\r\n return async function(dispatch: Dispatch) {\r\n loadProjects(projectsCount)\r\n .then(data => {\r\n dispatch(setSuccess(data.data.projects.myProjects));\r\n })\r\n .catch((error: ApiError) => {\r\n dispatch(\r\n setError(error)\r\n );\r\n });\r\n };\r\n}\r\n\r\n","//-----------------------------------------------------------------------------\r\n// Copyright (c) 2022 by Dell Inc.\r\n//\r\n// All rights reserved. This software may not be copied, disclosed,\r\n// transferred, or used except in accordance with a license granted\r\n// by Dell Inc. This software embodies proprietary information\r\n// and trade secrets of Dell Inc.\r\n//\r\n//-----------------------------------------------------------------------------\r\n\r\nimport { applyMiddleware, createStore, combineReducers } from 'redux';\r\nimport thunkMiddleware from 'redux-thunk';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport configReducer from '../user-config/ConfigReducer';\r\nimport projectReducer from '../dashboard-projects/ProjectReducer';\r\n\r\nconst rootReducer = combineReducers({\r\n config: configReducer,\r\n projects: projectReducer\r\n});\r\n\r\nexport default function configureStore() {\r\n const middlewares = [thunkMiddleware];\r\n const middlewareEnhancer = applyMiddleware(...middlewares);\r\n\r\n const enhancers = [middlewareEnhancer];\r\n const composedEnhancers = composeWithDevTools(...enhancers);\r\n\r\n const store = createStore(rootReducer, composedEnhancers);\r\n\r\n return store;\r\n}\r\n\r\n","import React from 'react';\r\n\r\nconst DataProtectionIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default DataProtectionIcon;","export enum ScanCategory {\r\n None,\r\n Server,\r\n Storage,\r\n DataProtection,\r\n File,\r\n Workloads,\r\n Container\r\n}","import React from 'react';\r\n\r\nconst FileIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FileIcon;","import React from 'react';\r\n\r\nconst ServerAndCloudIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default ServerAndCloudIcon;","import React from 'react';\r\n\r\nconst StorageIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default StorageIcon;","import React from 'react';\r\n\r\nconst WorkloadsIcon = () => {\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 WorkloadsIcon;","import React from 'react';\r\n\r\nconst AngleLeftIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default AngleLeftIcon;","import styled from '@emotion/styled';\r\nimport { LoadingPlaceholderIcon } from '@liveoptics/react-ui';\r\nimport React, { useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isEndUser, isUserAdmin } from '../../../components/helpers/UserRole.helper';\r\nimport AngleLeftIcon from '../../../components/icons/AngleLeftIcon';\r\nimport CloudPricingIcon from '../../../components/icons/CloudPricingIcon';\r\nimport CollectorIcon from '../../../components/icons/CollectorIcon';\r\nimport DownloadArrowIconIcon from '../../../components/icons/DownloadArrowIcon';\r\nimport SendMailIcon from '../../../components/icons/SendMailIcon';\r\nimport UploadArrowIcon from '../../../components/icons/UploadArrowIcon';\r\nimport { RootState } from '../../store/RootState';\r\nimport { loadConfigData } from '../../user-config/ConfigReducer';\r\nimport Redirect from '../viewer/Redirect';\r\nimport { LoadingPlaceholder } from '../StartNewProjectSection/StartNewProjectHome/StartNewProjectHomeStyle';\r\nimport { MARKETINGSITE_URL } from '../../../components/helpers/variables';\r\n\r\nconst Layout = styled.div`\r\n position: relative;\r\n background-color: #fff;\r\n flex-grow: 1;\r\n box-shadow: 1px 1px 4px #0000000D;\r\n display: flex;\r\n flex-direction: column;\r\n padding: 10px 10px 10px 4px;\r\n \r\n @media (max-width: 1532px) {\r\n width: 630px;\r\n }\r\n\r\n & h3{\r\n margin: 10px 1rem;\r\n font-size: 20px;\r\n color: #566072;\r\n font: normal normal bold 20px/22px Open Sans;\r\n }\r\n\r\n & div{\r\n display: grid;\r\n\r\n @media (max-width: 1471px) {\r\n margin-top: 16px;\r\n padding-left: 10px;\r\n }\r\n\r\n @media (min-width: 634px){\r\n grid-template-columns: 50% 50%;\r\n }\r\n\r\n @media (min-width: 848px){\r\n grid-template-columns: 33.33% 33.33% 33.33%;\r\n }\r\n\r\n @media (min-width: 2000px){\r\n grid-template-columns: 25% 25% 25% 25%;\r\n }\r\n\r\n @media (min-width: 3038px){\r\n grid-template-columns: 20% 20% 20% 20% 20%;\r\n }\r\n }\r\n`;\r\n\r\nconst ViewMore = styled.a`\r\n text-decoration: none;\r\n color: #0076CE;\r\n line-height: 19px;\r\n position: absolute;\r\n right: 25px;\r\n bottom: 18px;\r\n font: normal normal 600 16px/19px Open Sans;\r\n letter-spacing: 0.16px;\r\n\r\n & svg{\r\n margin-left: 5px;\r\n }\r\n\r\n &:hover, &:focus{\r\n text-decoration: underline;\r\n text-decoration-color:#9ad3fd;\r\n text-decoration-thickness: 3px;\r\n text-underline-offset: 5px;\r\n }\r\n \r\n &:active {\r\n color: #57a8e6;\r\n text-decoration: underline;\r\n text-decoration-color:#9ad3fd;\r\n text-decoration-thickness: 3px;\r\n text-underline-offset: 5px;\r\n }\r\n\r\n @media (max-width: 1490px) {\r\n bottom: 32px;\r\n }\r\n\r\n @media (max-width: 1431px) {\r\n bottom: 26px;\r\n }\r\n\r\n @media (max-width: 1291px) {\r\n bottom: 60px;\r\n }\r\n\r\n @media (max-width: 1262px) {\r\n bottom: 40px;\r\n }\r\n\r\n @media (max-width: 822px) {\r\n bottom: 10px;\r\n }\r\n\r\n @media (max-width: 776px) {\r\n bottom: 20px;\r\n }\r\n`;\r\n\r\nconst ProjectOption = styled.a`\r\n margin: 1rem;\r\n width: 223px;\r\n height: 50px;\r\n display: flex;\r\n padding: 5px;\r\n align-items: center;\r\n text-decoration: none;\r\n color: #566072;\r\n cursor: pointer;\r\n letter-spacing: 0.14px;\r\n border-left: ${ props => '9px solid' + props.color };\r\n\r\n &:hover{\r\n background-color: #DCF0FE;\r\n box-shadow: 0px 1px 4px #0000000D;\r\n }\r\n\r\n & svg{\r\n margin-right: 5px;\r\n fill: ${ props => props.color };\r\n }\r\n\r\n & div{\r\n flex-wrap: wrap;\r\n width: 160px;\r\n margin: 0;\r\n color: #566072;\r\n font: 14px;\r\n line-height: 20px;\r\n display: flex;\r\n align-items: center;\r\n font: normal normal normal 14px/20px Open Sans;\r\n }\r\n\r\n @media (max-width: 1488px) {\r\n margin: 5px;\r\n width: 205px;\r\n }\r\n\r\n @media (max-width: 400px) {\r\n width: 170px !important;\r\n margin: 10px;\r\n }\r\n`;\r\n\r\ninterface NewProjectLinksProps {\r\n showModalPopupFn: (showModalPopup: boolean) => void;\r\n}\r\n\r\nconst NewProjectLinks = ( {showModalPopupFn}: NewProjectLinksProps ) => {\r\n const configData = useSelector((state: RootState) => state).config;\r\n const dispatch = useDispatch();\r\n \r\n useEffect(() => {\r\n dispatch(loadConfigData());\r\n }, [dispatch]);\r\n\r\n if(configData && configData.loaded && !configData.error){\r\n return (\r\n \r\n

Start a New Project

\r\n
\r\n {!isEndUser(configData.data.userInfo.role) &&
Request a Collection
}\r\n
Download Collector
\r\n
Upload Files
\r\n
Cloud Pricing Calculator
\r\n {isUserAdmin(configData.data.userInfo.role) && showModalPopupFn(true)} color='#00A4CA' id=\"phone-home-link\" style={{'width': '215px'}}>
Import Phone Home CloudIQ Project
}\r\n
\r\n View More \r\n
)\r\n }\r\n\r\n if (configData && configData.loaded && configData.error) {\r\n return ;\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default NewProjectLinks;","import styled from '@emotion/styled';\r\nimport React from 'react'\r\n\r\nconst Layout = styled.div`\r\n flex-grow: 1;\r\n background-color: #fff;\r\n box-shadow: 1px 1px 4px #0000000D;\r\n padding: 20px;\r\n flex-direction: column;\r\n color: #566072;\r\n\r\n & h3 {\r\n margin: 0 0 10px 0;\r\n font: normal normal bold 20px/22px Open Sans;\r\n }\r\n\r\n & ul{\r\n margin: 3px 0;\r\n font: normal normal normal 14px/21px Open Sans;\r\n }\r\n\r\n & p{\r\n font: normal normal normal 14px/21px Open Sans;\r\n }\r\n`;\r\n\r\nconst ProjectTypeDescription = ( prop: any ) => {\r\n return (\r\n \r\n

{prop.type}

\r\n {prop.description} \r\n
)\r\n}\r\n\r\nexport default ProjectTypeDescription;","import styled from '@emotion/styled';\r\nimport React, { useState } from 'react';\r\nimport DataProtectionIcon from '../../../components/icons/DataProtectionIcon';\r\nimport FileIcon from '../../../components/icons/FileIcon';\r\nimport ServerAndCloudIcon from '../../../components/icons/ServerAndCloudIcon';\r\nimport StorageIcon from '../../../components/icons/StorageIcon';\r\nimport WorkloadsIcon from '../../../components/icons/WorkloadsIcon';\r\nimport NewProjectLinks from './NewProjectLinks';\r\nimport ProjectTypeDescription from './ProjectDescription';\r\n\r\nconst Layout = styled.div`\r\n flex-grow:1;\r\n text-align: left;\r\n letter-spacing: 0.4px;\r\n z-index: 1;\r\n\r\n & div{\r\n display: flex;\r\n height: 100%;\r\n }\r\n\r\n @media (max-width: 1281px) {\r\n margin-bottom: 1rem;\r\n width: auto;\r\n height: 250px;\r\n }\r\n \r\n @media (max-width: 774px) {\r\n height: 300px;\r\n }\r\n\r\n @media (max-width: 633px) {\r\n height: 400px;\r\n }\r\n`;\r\n\r\nconst ProjectTypes = styled.div`\r\n min-width: 45px;\r\n display: flex;\r\n flex-direction: column;\r\n Justify-content: start;\r\n\r\n & div{\r\n width: 100%;\r\n display: flex;\r\n Justify-content: center;\r\n align-items: center;\r\n padding: 5px;\r\n\r\n & div{\r\n height: 35px;\r\n width: 35px;\r\n background-color: #fff;\r\n border-radius: 50%;\r\n box-shadow: 0px 0px 2px #0000001A;\r\n }\r\n }\r\n\r\n & div: nth-child(${prop => prop.tabIndex}){\r\n background-color: #fff;\r\n box-shadow: 0px 0px 2px #0000001A;\r\n\r\n & div{\r\n box-shadow: none;\r\n }\r\n }\r\n\r\n & svg{\r\n height: 23px;\r\n width: 23px;\r\n }\r\n \r\n`;\r\n\r\nconst ProjectTypeDetails = {\r\n projects: [\r\n {type:\"Server and Cloud\", description:\r\n <>\r\n
    \r\n
  • \r\n Optical Prime records inventory, configuration, and performance data of\r\n physical or virtual servers, desktop and hypervisors, for Windows, Linux, VMware\r\n vCenter, and other hypervisor frameworks.\r\n
  • \r\n
  • \r\n RAPID Discovery scans your network looking for devices (servers, laptops,\r\n switches, printers, storage arrays, etc.) allowing you to perform deeper scan that\r\n grab inventory and configuration information.\r\n
  • \r\n
  • \r\n Also AWS, Azure, Nutanix, and Kubernetes\r\n
  • \r\n
\r\n \r\n },\r\n {type:\"Workloads\", description:

Generate summaries of SQL and Oracle databases, in addition to capacities and critical and performance metrics.

},\r\n {type:\"Storage\", description:

Live Optics supports a list of storage array vendors and models and provides a detailed breakdown at the hardware appliance level of configuration and performance.

},\r\n {type:\"Data Protection\", description:

Live Optics supports a list of DPS applications and appliances to produce insights into the platform-specific backup and protection cycles as well as protected capacity.

},\r\n {type:\"File\", description:

Dossier walks your file shares for either Windows CIFS/SMB shares or Unix NFS shares, and characterizes storage growth, file types and potentials for archiving, compression, or deduplication.

},\r\n ]\r\n};\r\n\r\ninterface NewProjectProps {\r\n showModalPopupFn: (showModalPopup: boolean) => void;\r\n}\r\n\r\nconst NewProject = ( {showModalPopupFn}: NewProjectProps ) => {\r\n\r\n const [index, setIndex] = useState(0);\r\n\r\n return (\r\n \r\n
setIndex(0)}>\r\n \r\n
setIndex(1)} >
\r\n
setIndex(2)} >
\r\n
setIndex(3)} >
\r\n
setIndex(4)} >
\r\n
setIndex(5)} >
\r\n
\r\n { index > 0 ?\r\n \r\n : \r\n }\r\n
\r\n
)\r\n}\r\n\r\nexport default NewProject;","import React from 'react';\r\nconst RecentProjectsIcon = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default RecentProjectsIcon;","import React from 'react';\r\nimport styled from '@emotion/styled';\r\n\r\nconst LogoWrapper = styled.div`\r\n position: relative;\r\n width: 80px;\r\n height: 80px;\r\n`;\r\n\r\nconst LogoSVG = styled.svg`\r\n position: absolute;\r\n width: 80px;\r\n height: 80px;\r\n &.l-1 {\r\n animation: rotating 7200ms linear infinite;\r\n transform-origin: 50% 50%;\r\n }\r\n\r\n &.l-2 {\r\n animation: rotating 7200ms linear reverse infinite;\r\n transform-origin: 50% 50%;\r\n }\r\n @keyframes rotating {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n`;\r\n\r\nconst logoColors = {\r\n orange: '#FAA819',\r\n green: '#7ABA43',\r\n blue: '#4794D0',\r\n grey: '#cecece',\r\n};\r\n\r\nconst LoadingIcon = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoadingIcon;\r\n","import React from 'react';\r\n\r\nconst FolderIcon = () => {\r\n return(\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default FolderIcon;","import styled from '@emotion/styled';\r\nimport React from 'react';\r\nimport FolderIcon from '../../../components/icons/FolderIcon';\r\nimport ConfigState from '../../user-config/models/ConfigState';\r\n\r\ninterface NoProjectFoundProps {\r\n configData: ConfigState;\r\n}\r\n\r\nconst NoProjectFound = (props: NoProjectFoundProps) => {\r\n \r\n const NoProjectsContainer = styled.div`\r\n max-width: 600px;\r\n margin: 50px auto 0 auto;\r\n padding-bottom: 20px;\r\n `\r\n\r\n const ProjectCirecleIcon = styled.div`\r\n position: relative;\r\n display: inline-block;\r\n width: 180px;\r\n height: 180px;\r\n background: #fff;\r\n border-radius: 100%;\r\n vertical-align: middle;\r\n svg {\r\n max-width: 125px;\r\n max-height: 125px;\r\n position: absolute;\r\n top: 40px;\r\n left: 35px;\r\n path {\r\n fill: #c4cfde;\r\n }\r\n }\r\n `\r\n const NoProjectInfo = styled.div`\r\n display: inline-block;\r\n margin-left: 25px;\r\n color: #9fb2cb;\r\n vertical-align: middle;\r\n font-family: 'Open Sans';\r\n font-weight: 400;\r\n h3 {\r\n font-size: 23px;\r\n font-weight: 400;\r\n }\r\n ul {\r\n margin-left: 5px;\r\n padding-left: 0;\r\n }\r\n ul li {\r\n font-size: 14px;\r\n margin-left: 20px;\r\n padding: 2px 0;\r\n &:first-of-type {\r\n list-style: none;\r\n margin-left: 0;\r\n }\r\n a {\r\n color: #9fb2cb;\r\n text-decoration: underline;\r\n &:hover {\r\n color: #9fb2cb;\r\n text-decoration: underline;\r\n }\r\n }\r\n }\r\n `\r\n\r\n return (\r\n \r\n \r\n \r\n

You currently have no projects

\r\n
    \r\n
  • Projects will appear here once:
  • \r\n
  • Someone shares a project with you
  • \r\n {\r\n props.configData.loaded && !props.configData.data.navOptions.RequestDPACKCapture &&\r\n
  • You run the collector
  • \r\n }\r\n {\r\n props.configData.loaded && props.configData.data.navOptions.RequestDPACKCapture &&\r\n
  • Your customer runs your collector
  • \r\n }\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default NoProjectFound;","import React from 'react';\r\n\r\nconst HourGlassIcon = () => {\r\n return(\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default HourGlassIcon;","export enum ScanStatusDisplay {\r\n None,\r\n PendingUpload,\r\n Unpacking,\r\n InQueue,\r\n Processing,\r\n Complete,\r\n Error,\r\n Initializing,\r\n PendingReportGeneration\r\n}","export enum ScanType {\r\n None,\r\n DPACKPerformance,\r\n VMAX,\r\n Clariion_VNX,\r\n XTremIO,\r\n Unity,\r\n Avamar,\r\n Networker,\r\n DataDomain,\r\n NetBackup,\r\n DPACKF,\r\n Squeeze,\r\n Unknown,\r\n Commvault,\r\n NetApp,\r\n TSM,\r\n Isilon,\r\n Veeam,\r\n VMAX_3,\r\n ThreePar,\r\n Pure,\r\n Hitachi,\r\n IBM_Storwize,\r\n IBM_XIV,\r\n SQL_Server,\r\n Oracle,\r\n SAP,\r\n PowerStore,\r\n Cohesity,\r\n Rubrik,\r\n Docker,\r\n Kubernetes,\r\n GoogleCloud,\r\n Azure,\r\n Nutanix,\r\n AWS,\r\n PowerProtect,\r\n Compellent,\r\n Networker_3,\r\n NetBackup_2,\r\n FileCollect,\r\n RVTools,\r\n RapidDiscovery\r\n}","import styled from \"@emotion/styled\";\r\nimport React from \"react\";\r\nimport DataProtectionIcon from \"../../../components/icons/DataProtectionIcon\";\r\nimport FileIcon from \"../../../components/icons/FileIcon\";\r\nimport HourGlassIcon from \"../../../components/icons/HourGlassIcon\";\r\nimport ServerAndCloudIcon from \"../../../components/icons/ServerAndCloudIcon\";\r\nimport StorageIcon from \"../../../components/icons/StorageIcon\";\r\nimport WorkloadsIcon from \"../../../components/icons/WorkloadsIcon\";\r\nimport { ScanCategory } from \"../../dashboard-projects/enum/ScanCategory.enum\";\r\n \r\ninterface IProps {\r\n scanCategory: ScanCategory\r\n}\r\n\r\nconst Layout = styled.div`\r\n width: 47px;\r\n height: 47px;\r\n border-radius: 50%;\r\n background-color: ${prop => prop.color};\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n svg{\r\n width: 33px;\r\n height: 31px;\r\n }\r\n`;\r\n\r\nconst WorkloadLayout = styled(Layout)`\r\n align-items: normal;\r\n\r\n svg{\r\n margin-top: 6px;\r\n }\r\n`;\r\n\r\nconst HourGlassLayout = styled(Layout)`\r\n svg{\r\n width: 19px;\r\n height: 27px;\r\n }\r\n`;\r\n\r\nconst ScanCategoryWrapper = ({scanCategory}:IProps) => {\r\n if(scanCategory === ScanCategory.Server){\r\n return \r\n }else if(scanCategory === ScanCategory.Storage){\r\n return \r\n }else if(scanCategory === ScanCategory.DataProtection){\r\n return \r\n }else if(scanCategory === ScanCategory.File){\r\n return \r\n }else if(scanCategory === ScanCategory.Workloads){\r\n return \r\n }else{\r\n return \r\n }\r\n}\r\n\r\nexport default ScanCategoryWrapper;","import React from \"react\";\r\n\r\nconst AnonymousIcon = () =>{\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default AnonymousIcon;","import React from \"react\";\r\n\r\nconst ArchiveIcon = () =>{\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ArchiveIcon;","import React from \"react\";\r\n\r\nconst RightTickIcon = () =>{\r\n return(\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default RightTickIcon;","import React from \"react\";\r\n\r\nconst StatusDemoIcon = () =>{\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default StatusDemoIcon;","import React from \"react\";\r\n\r\nconst StatusErrorIcon = () =>{\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default StatusErrorIcon;","import React from \"react\";\r\n\r\nconst StatusInProgressIcon = () =>{\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default StatusInProgressIcon;","import React from \"react\";\r\n\r\nconst StatusPublishedIcon = () =>{\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default StatusPublishedIcon;","import styled from \"@emotion/styled\";\r\nimport React, { useCallback } from \"react\";\r\nimport AnonymousIcon from \"../../../components/icons/AnonymousIcon\";\r\nimport ArchiveIcon from \"../../../components/icons/ArchiveIcon\";\r\nimport RightTickIcon from \"../../../components/icons/RightTickIcon\";\r\nimport StatusDemoIcon from \"../../../components/icons/StatusDemoIcon\";\r\nimport StatusErrorIcon from \"../../../components/icons/StatusErrorIcon\";\r\nimport StatusInProgressIcon from \"../../../components/icons/StatusInProgressIcon\";\r\nimport StatusPublishedIcon from \"../../../components/icons/StatusPublishedIcon\";\r\nimport { TheaterTypeIndexMapper, VerifyOwnerButton } from '@liveoptics/project.ownership.react-ui';\r\nimport { DashboardProject } from \"../../dashboard-projects/models/DashboardProject\";\r\nimport { ScanStatusDisplay } from \"../../dashboard-projects/enum/ScanStatusDisplay.enum\";\r\nimport { ScanType } from \"../../dashboard-projects/enum/ScanType.enum\";\r\nimport ConfigState from \"../../user-config/models/ConfigState\";\r\n\r\nconst Layout = styled.div`\r\n position: absolute;\r\n margin-top: 11rem;\r\n display: flex;\r\n flex-wrap: wrap;\r\n\r\n & svg {\r\n margin-bottom: 10px;\r\n }\r\n`;\r\n\r\nconst ProjectStatus = styled.span`\r\n font: normal normal normal 14px/22px Open Sans;\r\n color: ${props => props.color};\r\n background-color: ${props => props.itemProp};\r\n border-radius: 15px;\r\n height: 30px;\r\n padding: 7px 15px 7px 12px;\r\n margin-right: 10px;\r\n margin-bottom: 10px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n & svg {\r\n margin-bottom: 0;\r\n height: 16px;\r\n width: 16px;\r\n }\r\n`;\r\n\r\nconst VerifyOwnerWrapper = styled.div`\r\n & button {\r\n height: 1.875rem;\r\n\r\n & svg {\r\n align-self: baseline;\r\n }\r\n }\r\n`;\r\n\r\ninterface StatusTagsProps {\r\n project: DashboardProject;\r\n configData: ConfigState;\r\n}\r\n\r\nconst StatusTags = (props: StatusTagsProps) => {\r\n\r\n const handleVerifyOwnerSuccess = useCallback(() => {\r\n window.location.reload();\r\n }, []);\r\n \r\n if( props.project.isAnonymous && !props.project.isPublic )\r\n {\r\n return(\r\n Anonymous\r\n )\r\n }else if(props.project.scanType === ScanType.DPACKPerformance){\r\n return(\r\n { props.project.actionsAndStatus.isInProgress && In Progress}\r\n { props.project.isPublic && Published}\r\n { props.project.isArchived && Archived}\r\n { props.project.isDemoProject && Demo}\r\n { ( props.project.endTime != null ) && !( props.project.actionsAndStatus.isInProgress && props.project.actionsAndStatus.hasLiveCollectorRuns ) && Complete}\r\n { props.project.actionsAndStatus.isError && Error}\r\n \r\n \r\n \r\n )\r\n }else{\r\n return(\r\n { props.project.statusDisplay == ScanStatusDisplay.Complete && Complete}\r\n { props.project.statusDisplay == ScanStatusDisplay.Processing && Processing}\r\n { props.project.statusDisplay == ScanStatusDisplay.Error && Error}\r\n { props.project.statusDisplay == ScanStatusDisplay.PendingUpload && Pending Upload}\r\n { props.project.statusDisplay == ScanStatusDisplay.Initializing && Initializing}\r\n { props.project.statusDisplay == ScanStatusDisplay.InQueue && In Queue}\r\n { props.project.statusDisplay == ScanStatusDisplay.Unpacking && Unpacking}\r\n { props.project.statusDisplay == ScanStatusDisplay.PendingReportGeneration && Pending Report Generation}\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default StatusTags;","import styled from \"@emotion/styled\";\r\nimport React from \"react\";\r\n\r\nconst CircularProgress = styled.div`\r\n //width:54px;\r\n height: 47px;\r\n .progressCircle {\r\n //background-color: ivory;\r\n position: relative;\r\n width: 47px;\r\n height: 47px;\r\n transform: rotate(-90deg);\r\n\r\n circle {\r\n width: 100%;\r\n height: 100%;\r\n fill: none;\r\n stroke: #EEEEEE;\r\n stroke-width: 4;\r\n /* stroke-linecap: round; */\r\n }\r\n\r\n circle:last-of-type {\r\n stroke-dasharray: 132px;\r\n stroke-dashoffset: calc(132px - (132px * ${(prop: CircularProgressBarProps) => prop.percentage}) / 100);\r\n stroke: ${(prop: CircularProgressBarProps) => prop.colors.borderColor};\r\n transition: stroke-dashoffset 2s;\r\n }\r\n circle:first-of-type {\r\n fill: ${(prop: CircularProgressBarProps) => prop.colors.backgroundColor};\r\n }\r\n }\r\n\r\n .number {\r\n color:${(prop: CircularProgressBarProps) => prop.colors.borderColor};\r\n position: relative;\r\n top: -99.5%;\r\n text-align: center;\r\n }\r\n\r\n .number h3 {\r\n //font-weight: 100;\r\n //font-size: 1rem;\r\n font: normal normal bold 12px/22px Open Sans;\r\n letter-spacing: 0.24px;\r\n }\r\n\r\n .number h3 span {\r\n font-size: 0.5rem;\r\n }\r\n`;\r\n\r\ninterface CircularProgressBarProps {\r\n percentage: number|undefined;\r\n colors:{borderColor:string, backgroundColor:string}\r\n}\r\n\r\n\r\nconst CircularProgressBar = (props: CircularProgressBarProps) => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n

\r\n {props.percentage}%\r\n

\r\n
\r\n
\r\n)}\r\n\r\nexport default CircularProgressBar;","import styled from \"@emotion/styled\";\r\nimport React, {useCallback, useEffect, useState} from \"react\";\r\nimport { DashboardProject } from \"../../dashboard-projects/models/DashboardProject\";\r\nimport { ScanCategory } from \"../../dashboard-projects/enum/ScanCategory.enum\";\r\nimport ScanCategoryWrapper from \"./ScanCategoryWrapper\";\r\nimport StatusTags from \"./StatusTags\";\r\nimport CircularProgressBar from \"./CircularProgressBar\";\r\nimport {postJsonCall} from \"../../api/ApiRequests\";\r\nimport { LinkOwnershipButton, OpportunityModeIndexMapper, TheaterTypeIndexMapper } from '@liveoptics/project.ownership.react-ui';\r\nimport ConfigState from \"../../user-config/models/ConfigState\";\r\n\r\nconst Layout = styled.div`\r\n height: 259px;\r\n background-color: #ddd;\r\n display: flex;\r\n box-shadow: 0px 1px 4px #0000000D;\r\n margin-bottom: 40px;\r\n margin-left: 20px;\r\n flex-grow: 1;\r\n\r\n @media (max-width: 440px) {\r\n height: 320px;\r\n }\r\n`;\r\n\r\nconst DateInfoSection = styled.div`\r\n width: 58px;\r\n background-color: #fff;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n padding: 15px 5px 30px 5px;\r\n border-right: 1px solid #eee;\r\n`;\r\n\r\nconst DateSection = styled.div`\r\n width: 38px;\r\n height: 73px;\r\n text-align: center;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n color: ${prop => prop.color};\r\n position: absolute;\r\n margin-top: 4.757rem;\r\n font: normal normal bold 16px/17px Open Sans;\r\n\r\n & span{\r\n font: normal normal bold 31px/17px Open Sans;\r\n margin: 5px 0;\r\n }\r\n`;\r\n\r\nconst DetailsSection = styled.div`\r\n background-color: #fff;\r\n padding: 12px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n position: relative;\r\n\r\n svg{\r\n font: normal normal normal 14px/22px Open Sans;\r\n margin-right: 5px;\r\n }\r\n`;\r\n\r\nconst DateTimeSection = styled.span`\r\n color: #566072;\r\n font: normal normal normal 14px/22px Open Sans;\r\n position: absolute;\r\n margin-top: 7.188rem;\r\n`;\r\n\r\nconst ProjectOwner = styled.span`\r\n color: #566072;\r\n font: normal normal normal 14px/22px Open Sans;\r\n position: absolute;\r\n margin-top: 5.1rem;\r\n`;\r\n\r\nconst ProjectType = styled.span`\r\n font: normal normal normal 12px/22px Open Sans;\r\n color: #848484;\r\n margin-bottom: 5px;\r\n`;\r\n\r\nconst ProjectTitle = styled.a`\r\n color: #0076CE;\r\n font: normal normal 600 16px/20px Open Sans;\r\n text-decoration: none;\r\n cursor: pointer;\r\n width: fit-content;\r\n\r\n &:hover, &:focus{ \r\n text-decoration: underline;\r\n text-decoration-color:#9ad3fd;\r\n text-decoration-thickness: 3px;\r\n text-underline-offset: 5px;\r\n }\r\n \r\n &:active {\r\n color: #57a8e6;\r\n text-decoration: underline;\r\n text-decoration-color:#9ad3fd;\r\n text-decoration-thickness: 3px;\r\n text-underline-offset: 5px;\r\n }\r\n`;\r\n\r\nconst ProjectId = styled.span`\r\n font: normal normal normal 14px/22px Open Sans;\r\n color: #848484;\r\n position: absolute;\r\n right: 15px;\r\n bottom: 15px;\r\n`;\r\n\r\nconst LinkOwnershipButtonWrapper = styled.div`\r\n position: absolute;\r\n margin-top: 11rem;\r\n`;\r\n\r\n const ScanCategoryColors: Record = {\r\n [ScanCategory.None]: \"#848484\",\r\n [ScanCategory.Server]: \"#4694ce\",\r\n [ScanCategory.Storage]: \"#ffa800\",\r\n [ScanCategory.DataProtection]: \"#d9427d\",\r\n [ScanCategory.File]: \"#27c595\",\r\n [ScanCategory.Workloads]: \"#864999\",\r\n [ScanCategory.Container]: \"\",\r\n}\r\n\r\ninterface ProjectTileProps {\r\n project: DashboardProject;\r\n configData: ConfigState;\r\n}\r\n\r\nconst ProjectTile = (props: ProjectTileProps) => {\r\n\r\n const createDate = new Date(props.project.createDateUtc);\r\n const url: string = `/api/projects/search`;\r\n const PREPENDTEXT: string = 'Portal UI Api ';\r\n const [percentComplete, setPercentComplete] = useState(0)\r\n const progressBarColor ={\r\n 'Optical Prime' : {borderColor:'#4694CE', backgroundColor:'#DCF0FE'},\r\n 'SQL Server': {borderColor:'#864999', backgroundColor:'#E1D6EA'}\r\n }\r\n\r\n useEffect(() => {\r\n\r\n async function fetchData() {\r\n const response = await postJsonCall(url, PREPENDTEXT,{\r\n ProjectId: props.project.id\r\n });\r\n setPercentComplete(Math.abs(response.Data.Projects[0].PercentageComplete))\r\n\r\n }\r\n if((props.project.scanTypeFormatted === 'Optical Prime' || props.project.scanTypeFormatted === 'SQL Server') &&\r\n (props.project.actionsAndStatus.isInProgress && props.project.actionsAndStatus.hasLiveCollectorRuns) &&\r\n percentComplete !== 100) fetchData();\r\n\r\n }, [])\r\n\r\n const handleOwnershipLinkedSuccess = useCallback(() => {\r\n window.location.reload();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n {\r\n (props.project.scanTypeFormatted === 'Optical Prime' || props.project.scanTypeFormatted === 'SQL Server') &&\r\n percentComplete !==100 &&\r\n ( props.project.actionsAndStatus.isInProgress && props.project.actionsAndStatus.hasLiveCollectorRuns ) ?\r\n :\r\n \r\n }\r\n {createDate.toLocaleString('default', { month: 'long' }).substring(0, 3).toUpperCase()} {createDate.getDate()} {createDate.getFullYear()}\r\n \r\n \r\n \r\n \r\n \r\n { props.project.isPendingUpload ? \"Uploading Project\" : props.project.scanTypeFormatted} \r\n {props.project.name} \r\n { props.project.createdById > 0 && {props.project.createdByName }, { props.project.ownerName }}\r\n {props.project.createDateWithOffset}\r\n \r\n Project ID: {props.project.id}\r\n \r\n );\r\n}\r\n\r\nexport default ProjectTile;","import styled from '@emotion/styled';\r\nimport React from 'react';\r\nimport LoadingIcon from '../../../components/icons/LoadingIcon';\r\nimport { DashboardProject } from '../../dashboard-projects/models/DashboardProject';\r\nimport ProjectState from '../../dashboard-projects/models/ProjectState';\r\nimport ConfigState from '../../user-config/models/ConfigState';\r\nimport NoProjectFound from './NoProjectFound';\r\nimport ProjectTile from './ProjectTile';\r\n\r\ninterface RecentProjectsProps {\r\n projectsData: ProjectState;\r\n configData: ConfigState;\r\n}\r\n\r\nconst ProjectsContainer = styled.div`\r\n margin: 1rem 0 1rem -1rem;\r\n display: grid;\r\n\r\n @media only screen and (min-width: 984px){\r\n grid-template-columns: 50% 50%;\r\n }\r\n\r\n @media only screen and (min-width: 1280px){\r\n grid-template-columns: 33.33% 33.33% 33.33%;\r\n }\r\n `;\r\n\r\nconst LoadingPlaceholder = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n min-height: 250px;\r\n width: 100%;\r\n `;\r\n\r\nconst RecentProjects = (props: RecentProjectsProps) => {\r\n\r\n if(props.projectsData && props.projectsData.loaded && !props.projectsData.error){\r\n if(props.projectsData.data.length > 0){\r\n let data = props.projectsData.data;\r\n return (\r\n \r\n {data.map((dashboardProject: DashboardProject) => {\r\n return (\r\n \r\n )\r\n })}\r\n )\r\n }\r\n else{\r\n return \r\n }\r\n }\r\n else if (props.projectsData && props.projectsData.loaded && props.projectsData.error){\r\n return (\r\n \r\n Failed to load projects.\r\n )\r\n }\r\n else {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default RecentProjects;","import styled from '@emotion/styled';\r\nimport React, { useEffect } from 'react'\r\nimport AngleLeftIcon from '../../../components/icons/AngleLeftIcon';\r\nimport RecentProjectsIcon from '../../../components/icons/RecentProjectsIcon';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { RootState } from '../../store/RootState';\r\nimport { loadProjectsData } from '../../dashboard-projects/ProjectReducer';\r\nimport { loadConfigData } from '../../user-config/ConfigReducer';\r\nimport RecentProjects from './RecentProjects';\r\n\r\nconst Layout = styled.div`\r\n flex-grow: 1;\r\n padding: 1rem 0 0 0;\r\n font: normal normal bold 20px/22px Open Sans;\r\n`;\r\n\r\nconst RecentProjectsTitle = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n border-bottom: 1px solid #ddd;\r\n\r\n & div{\r\n width: 220px;\r\n padding: 10px 20px 10px 0;\r\n display: flex;\r\n justify-content: space-around;\r\n align-items: center;\r\n font: normal normal bold 20px/22px Open Sans;\r\n color: #566072;\r\n }\r\n\r\n @media (max-width: 430px) {\r\n flex-direction: column;\r\n }\r\n`;\r\n\r\nconst AllProjects = styled.a`\r\n font: normal normal normal 16px/19px Open Sans;\r\n width: 145px;\r\n height: 45px;\r\n display: flex;\r\n padding: 10px 20px;\r\n justify-content: space-around;\r\n align-items: center;\r\n border-radius: 3px;\r\n color: #fff;\r\n text-decoration: none;\r\n background-color: #0076CE;\r\n box-shadow: 0px 3px 7px #00000040;\r\n\r\n &:hover{\r\n background-color: #57A8E6;\r\n }\r\n\r\n &:focus{\r\n background-color: #0076CE;\r\n border: 2px solid #57A8E6;\r\n }\r\n\r\n &:active{\r\n background-color: #006AA1;\r\n box-shadow: none;\r\n border: none;\r\n }\r\n\r\n @media (max-width: 430px) {\r\n width: 80%;\r\n justify-content: space-between;\r\n margin-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst RecentProjectsSection = () => {\r\n\r\n const projectsCount: number = 6;\r\n\r\n const dispatch = useDispatch();\r\n const projectsData = useSelector((state: RootState) => state).projects;\r\n const configData = useSelector((state: RootState) => state).config;\r\n\r\n useEffect(() => {\r\n dispatch(loadProjectsData(projectsCount));\r\n dispatch(loadConfigData());\r\n }, [dispatch])\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n Recent Projects\r\n
\r\n \r\n All Projects \r\n \r\n \r\n
\r\n \r\n
)\r\n}\r\n\r\nexport default RecentProjectsSection;","import React from 'react';\r\n\r\nconst YoutubeBanner = () => {\r\n return (\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n};\r\nexport default YoutubeBanner;\r\n","import styled from '@emotion/styled';\r\nimport React from 'react'\r\nimport YoutubeBanner from \"../../../components/icons/YoutubeBanner\";\r\n\r\nconst Layout = styled.div`\r\n position: relative;\r\n margin-left: 20px;\r\n background-color: #fff;\r\n box-shadow: 0px 1px 4px #0000000D;\r\n z-index: 100;\r\n opacity: 1;\r\n\r\n @media (max-width: 1281px) {\r\n height: 230px;\r\n width: auto;\r\n }\r\n\r\n @media (max-width: 515px) {\r\n height: auto;\r\n }\r\n`;\r\n\r\nconst Button = styled.a`\r\n position: absolute;\r\n bottom: 20px;\r\n padding: 12px 29px;\r\n text-decoration: none;\r\n background: #FFFFFF 0 0 no-repeat padding-box;\r\n border: 2px solid #7AB800;\r\n border-radius: 3px;\r\n opacity: 1;\r\n text-align: center;\r\n font: normal normal normal 14px/12px Open Sans;\r\n letter-spacing: 0.14px;\r\n color: #7AB800;\r\n`;\r\n\r\nconst Container = styled.div`\r\n display: grid;\r\n grid-template-columns: 53.7% 44.7%;\r\n column-gap: 1.6%;\r\n height: 100%;\r\n`;\r\n\r\nconst LeftColumn = styled.div`\r\n display: grid;\r\n grid-template-rows: auto 1fr;\r\n position: relative;\r\n padding: 16px 0 20px 20px;\r\n color: #566072;\r\n letter-spacing: 0.14px;\r\n \r\n & .text-heading {\r\n text-align: left;\r\n font: normal normal bold 20px/22px Open Sans;\r\n line-height: 26px;\r\n margin-bottom: 8px;\r\n }\r\n \r\n & .text-body{\r\n font: normal normal normal 14px Open Sans;\r\n line-height: 20px;\r\n }\r\n`;\r\n\r\nconst RightColumn = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: end;\r\n`;\r\n\r\nconst YoutubeBannerTile = () => {\r\n return (\r\n \r\n \r\n \r\n
\r\n
Support Video Library
\r\n
\r\n Find tutorials, instructional guides and other support videos to help you make\r\n the most of your Live Optics infrastructure planning software.\r\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 YoutubeBannerTile;\r\n","import styled from \"@emotion/styled\";\r\nimport React from \"react\";\r\nimport NewProject from \"./components/NewProjectSection/NewProject\";\r\nimport RecentProjectsSection from \"./components/RecentProjects/RecentProjectsSection\";\r\nimport YoutubeBannerTile from \"./components/YoutubeBannerSection/YoutubeBannerTile\";\r\nimport SelectPhoneHomePopup from \"./components/SelectPhoneHomeType/SelectPhoneHomeType\";\r\n\r\nconst Layout = styled.div`\r\n margin: 1rem 1.56rem 0 1.68rem;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n flex-grow: 1;\r\n font-family: Open Sans;\r\n`;\r\n\r\nconst TopSection = styled.div`\r\n height: 260px;\r\n display: grid;\r\n padding: 1rem 0;\r\n z-index: 2;\r\n grid-template-columns: 58.33% 41.66%;\r\n\r\n @media (max-width: 1291px) {\r\n height: 330px;\r\n }\r\n\r\n @media (max-width: 1281px) {\r\n flex-direction: column;\r\n height: auto;\r\n display: flex;\r\n }\r\n\r\n @media (max-width: 560px) {\r\n height: 50rem;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n`;\r\n\r\nconst Viewer = () => {\r\n\r\n const [ showModalPopup, setShowModalPopup ] = React.useState(false);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n { showModalPopup && }\r\n );\r\n}\r\n\r\nexport default Viewer;\r\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport { BrowserRouter, Redirect, Route, Switch } from 'react-router-dom';\r\nimport Dashboard from './components/dashboard/Dashboard';\r\nimport StartNewProjectHome from './viewer/components/StartNewProjectSection/StartNewProjectHome/StartNewProjectHome';\r\nimport configureStore from './viewer/store/Store';\r\nimport Viewer from './viewer/Viewer';\r\n\r\nconst App = () => {\r\n const store = configureStore();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport { loadPolyfillsAsync } from './polyfills';\r\nimport * as serviceWorker from './registerServiceWorker';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport 'sanitize.css';\r\nimport App from './App';\r\nimport { ai } from './telemetry/Telemetry';\r\nimport * as FullStory from '@fullstory/browser';\r\n\r\nloadPolyfillsAsync().then(async () => {\r\n if (process.env.NODE_ENV === 'production') {\r\n ai.initialize();\r\n FullStory.init({ orgId: 'TFF4Z' });\r\n ReactDOM.render(, document.getElementById('root'));\r\n }\r\n\r\n if (process.env.NODE_ENV === 'development') {\r\n const LocalDashboard = await import('./local-dashboard/LoginScreen').then((c) => c.default);\r\n const loginResponse = await fetch(`/api/GlobalInfo`, { credentials: 'same-origin' });\r\n if (loginResponse.redirected) {\r\n ReactDOM.render(, document.getElementById('root'));\r\n } else {\r\n // debug - When set to true, enables FullStory debug messages; defaults to false.\r\n // devMode - Set to true if you want to deactivate FullStory in your development environment. \r\n // FullStory.init({ orgId: 'TFF4Z', debug: true })\r\n ReactDOM.render(, document.getElementById('root'));\r\n }\r\n }\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: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n\r\n"],"sourceRoot":""}