{"version":3,"sources":["app/modules/reports/report-embedded-state/index.ts","app/modules/reports/report-embedded-state/report-embedded.query.ts","app/modules/reports/report-embedded-state/report-embedded.service.ts","service-worker-registration.ts","app/configuration/configFile/development.ts","app/configuration/configFile/test.ts","app/configuration/configFile/prod.ts","app/configuration/configFile/index.ts","app/configuration/configFile/local.ts","app/configuration/configFile/uat.ts","app/configuration/msal/index.ts","app/modules/authentication/providers/authentication.provider.ts","app/modules/authentication/state/authentication.store.ts","app/modules/authentication/state/authentication.query.ts","app/modules/authentication/state/authentication.service.ts","app/modules/authentication/components/authentication.component.tsx","app/modules/shared/components/nested.list.component.tsx","app/assets/eq_expert_logo.svg","app/modules/account/components/accountInfo.hooks.tsx","app/modules/account/components/index.tsx","app/modules/shared/components/navbar/index.tsx","app/modules/shared/state/ui.store.ts","app/modules/features/state/features.store.ts","app/modules/shared/models/menuItemsSection.ts","app/modules/features/state/features.query.ts","app/modules/features/state/features.service.ts","app/modules/shared/mappers/index.ts","app/modules/authorization/state/authorization.constants.ts","app/modules/reports/workspaces-list-state/workspaces-list.store.ts","app/modules/reports/workspaces-list-state/workspaces-list.query.ts","app/modules/authorization/state/authorization.query.ts","app/modules/reports/workspaces-list-state/workspaces-list.service.ts","app/modules/shared/state/userSettings/userSettings.store.ts","app/modules/shared/state/userSettings/userSettings.query.ts","app/modules/shared/state/userSettings/userSettings.service.ts","app/modules/shared/state/ui.query.ts","app/modules/shared/state/ui.service.ts","app/modules/shared/components/fullscreen/index.tsx","app/modules/reports/components/report.component.tsx","app/views/reports.view.tsx","app/modules/fileUpload/state/file-upload.store.ts","app/modules/fileUpload/state/file-upload.query.ts","app/modules/fileUpload/state/file-upload.service.ts","app/modules/fileUpload/components/file-upload.component.tsx","app/views/file-upload.view.tsx","app/modules/shared/components/snackbar.tsx","app/modules/contact/components/contact.options.tsx","app/modules/contact/components/index.tsx","app/modules/shared/components/unauthorized.component.tsx","app/views/unauthorized.view.tsx","app/views/contact.view.tsx","app/modules/shared/routing/protected.route.tsx","app/modules/dashboard/components/favoriteReports/index.tsx","app/views/welcome.view.tsx","app/modules/pwa/components/addToHomeScreen/addToHomeScreen.hooks.tsx","app/modules/pwa/components/addToHomeScreen/addToHomeScreen.component.tsx","app/assets/ios_share_icon.png","app/views/protected.routes.view.tsx","app/themes/eq.theme.ts","app/configuration/baseUrl/index.ts","app/configuration/interceptors/index.ts","app/configuration/interceptors/base-url.interceptor.ts","app/configuration/interceptors/content-type.interceptor.ts","app/configuration/interceptors/authorization.interceptor.ts","app/configuration/interceptors/error-handler.interceptor.ts","app/configuration/index.ts","app/app.component.tsx","app/views/authentication.failed.view.tsx","index.tsx","app/modules/reports/report-embedded-state/report-embedded.store.ts"],"names":["reportEmbeddedQuery","store","embeddingDetails$","select","state","embedDetails","QueryEntity","reportEmbeddedStore","ReportEmbeddedService","workspaceId","reportId","this","setLoading","axios","get","then","response","update","data","embedDefaultConfig","catch","x","console","log","finally","type","tokenType","models","TokenType","Embed","reportEmbeddedService","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","error","baseUrl","msalConfig","auth","authority","clientId","authenticationParameters","scopes","options","loginType","LoginType","Redirect","pwa","cookieExpiration","currentConfig","local","development","test","prod","uat","defaultConfig","redirectUri","origin","validateAuthority","cache","cacheLocation","storeAuthStateInCookie","defaultOptions","Popup","tokenRefreshUri","msal","_","merge","authProvider","MsalAuthProvider","authStore","StoreConfig","name","isAuthenticated","accountInfo","Store","authQuery","authenticationPassed$","BehaviorSubject","accountInfo$","subscribe","getValue","Query","authService","AuthenticationComponent","props","provider","forceLogin","authenticationState","AuthenticationState","Authenticated","userAuthenticationPassed","authenticationPassedComponent","Unauthenticated","userAuthenticationFailed","authenticationFailedComponent","InProgress","LinearProgress","useStyles","makeStyles","theme","createStyles","root","width","maxWidth","backgroundColor","palette","background","paper","nested","paddingLeft","spacing","groupItemHeader","NestedList","items","listSectionItems","listSectionTitle","drawerClose","setReportAsFavorite","classes","React","useState","open","setOpen","history","useHistory","buildListedItems","List","component","disablePadding","map","reportMenuItem","ListItem","button","className","onClick","push","redirectUrl","ListItemIcon","Icon","logo","ListItemText","primary","title","Checkbox","icon","checkedIcon","checked","isFavorite","onChange","e","id","stopPropagation","element","target","handleFavoriteClick","aria-labelledby","subheader","ListSubheader","Collapse","in","timeout","unmountOnExit","isGroup","groupedMenuItem","childrenItems","useJWTDecoder","jwtObject","setJwtObject","lastLoggedInDate","setLastLoggedInDate","useEffect","jwtCookieMatch","document","cookie","jwt","jwtDecoded","jwt_decode","authTimeInMs","auth_time","Date","AccountInfoComponent","anchorEl","setAnchorEl","undefined","setAccountInfo","accountInfoSubscription","unsubscribe","account","Button","aria-describedby","size","event","currentTarget","color","AccountBoxOutlined","Popover","onClose","anchorOrigin","vertical","horizontal","transformOrigin","Container","style","textAlign","toLocaleString","variant","logout","drawerWidth","display","appBar","transition","transitions","create","easing","sharp","duration","leavingScreen","height","margin","marginLeft","cursor","appBarShift","easeOut","enteringScreen","menuButton","marginRight","hide","drawer","flexShrink","drawerPaper","drawerHeader","alignItems","padding","mixins","toolbar","justifyContent","content","flexGrow","contentShift","Navbar","useTheme","handleDrawerClose","CssBaseline","AppBar","position","clsx","Toolbar","IconButton","aria-label","edge","src","alt","Grid","justify","container","Drawer","anchor","direction","Divider","isLoading","menuItemsSections","menuItemSection","length","displaySectionHeader","sectionChildItem","children","uiStore","snackBar","severity","message","MenuSections","featuresStore","features","isUserAuthorized","featuresQuery","featuresList$","fetchFeatures","AuthorizedActions","reportMenuItemLogo","mapWorkspaceModelToGroupedMenuItems","workspace","reportSettings","reports","report","opt","mapReportModelToMenuItem","AuthorizedActionsRoutes","ALLOW_FILE_UPLOAD","workspacesStore","workspaces","workspacesQuery","workspacesList$","authorizationQuery","fetchWorkspacesWithReports","isUserAuthorizedToAnyAction$","combineLatest","pipe","some","y","isLoadingAuthorizedActions$","selectLoading","authorizedActions$","feature","mappedFeature","actionId","route","getActionRoute","userSettingsStore","userSettingsQuery","reportSettings$","userSettingsService","fetchReportSettings","reduce","reportsMap","put","headers","newState","uiQuery","securedResources","Reports","favoriteReports$","section","groupedMenuItems","filter","securedActions","SecureActions","dashboardAction","of","UnsecureActions","Array","notSecuredActions","snackbar$","isMenuLoading$","menuItems$","uiService","FullScreenComponent","isFullScreenActive","setIsFullScreenActive","containerRef","useRef","isIos","platform","current","onfullscreenchange","fullscreenElement","isAndroid","ref","domElement","requestFullscreen","ReportComponent","embeddingDetails","setEmbeddingDetails","setIsLoading","setReport","isReportLoadingSubscription","reportEmbeddedSubscription","a","setAccessToken","accessToken","refresh","fetchEmbeddingDetails","eventHandlers","Map","detail","Fragment","embedConfig","cssClassName","queryParams","useParams","initialState","file","inProgress","uploadProgress","completed","fileUploadStore","fileUploadQuery","fileUploadService","allowedFileExtensions","currentState","getSaSUploadToken","destinationUrl","BlockBlobClient","uploadData","onProgress","progressEvent","progress","loadedBytes","isInProgress","uploadCompleted","fileName","fileSize","FileUploadComponent","uploadState","setUploadState","sub","openSnackbar","onFormSubmitHandler","useCallback","preventDefault","startUpload","onChangeHandler","Object","values","files","selectFileToUpload","onSubmit","join","accept","hidden","disabled","Box","mt","value","FileUploadView","SnackbarComponent","setState","snackbarSubscription","handleClose","reason","closeSnackbar","Snackbar","autoHideDuration","Alert","contactOptions","text","ContactOptions","ContactUs","Unauthorized","displayContactUs","setIsUserAuthorized","isUserAuthorizedSubscription","to","ContactView","ProtectedRoute","isLoadingActions","setIsLoadingActions","actions","action","toString","isLoadingActionsSubscription","path","render","FavoriteReportsComponent","setReports","item","Card","CardContent","fontSize","gray","Typography","marginTop","WelcomeView","usePwa","isPwaAvailable","setIsPwaAvailable","appInstalled","setAppInstalled","pwaPromptEvent","setPwaPromptEvent","userAgent","toLowerCase","isInStandaloneMode","standalone","useMobileDetector","useExpirationCookie","isModalInExpiry","setExpiryCookie","getInstalledRelatedApps","addEventListener","showPwaPrompt","prompt","userChoice","expirationSeconds","expirationDate","setSeconds","getSeconds","toUTCString","AddToHomeScreen","showModal","setShowModal","Close","ProtectedRoutesView","menuItems","setMenuItems","menuItemsSubscription","exact","ReportsView","UnauthorizedView","createMuiTheme","main","secondary","contrastText","typography","overrides","MuiButton","interceptors","request","use","baseURL","Promise","reject","jwtIdToken","errorMessage","configureInterceptors","AppComponent","ThemeProvider","eqTheme","loginRedirect","ReactDOM","StrictMode","getElementById","URL","process","href","fetch","contentType","status","indexOf","ready","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration","EntityStore"],"mappings":"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","file":"static/js/main.513c997a.chunk.js","sourcesContent":["export * from './report-embedded.model';\r\nexport * from './report-embedded.query';\r\nexport * from './report-embedded.service';\r\nexport type { ReportEmbeddedState } from './report-embedded.store';\r\nexport { ReportEmbeddedStore } from './report-embedded.store';\r\n","import { QueryEntity } from '@datorama/akita';\r\nimport { ReportEmbeddedStore, ReportEmbeddedState, reportEmbeddedStore } from './report-embedded.store';\r\n\r\nexport class ReportEmbeddedQuery extends QueryEntity {\r\n embeddingDetails$ = this.select(state => state.embedDetails);\r\n\r\n constructor(protected store: ReportEmbeddedStore) {\r\n super(store);\r\n }\r\n\r\n}\r\n\r\nexport const reportEmbeddedQuery = new ReportEmbeddedQuery(reportEmbeddedStore);\r\n","import axios from 'axios';\r\nimport { IEmbedConfigurationBase } from 'embed';\r\nimport { IEmbedConfiguration, models } from 'powerbi-client';\r\nimport { ReportEmbeddedStore, reportEmbeddedStore } from './report-embedded.store';\r\n\r\nexport class ReportEmbeddedService {\r\n\r\n constructor(private reportEmbeddedStore: ReportEmbeddedStore) {\r\n }\r\n\r\n fetchEmbeddingDetails(workspaceId: string, reportId: string) {\r\n this.reportEmbeddedStore.setLoading(true);\r\n axios.get(`/reports/${workspaceId}/${reportId}`)\r\n .then((response) => {\r\n this.reportEmbeddedStore.update({ embedDetails: { ...response.data, ...embedDefaultConfig } });\r\n }).catch(x => {\r\n console.log(x);\r\n }).finally(() => {\r\n this.reportEmbeddedStore.setLoading(false);\r\n })\r\n }\r\n}\r\n\r\nconst embedDefaultConfig: IEmbedConfigurationBase = {\r\n type: 'report',\r\n tokenType: models.TokenType.Embed\r\n}\r\n\r\nexport const reportEmbeddedService = new ReportEmbeddedService(reportEmbeddedStore);\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://cra.link/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\n type Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n };\r\n \r\n export function register(config?: Config) {\r\n //if (process.env.REACT_APP_ENVIRONMENT === 'production' && 'serviceWorker' in navigator) {\r\n if ('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 ' +\r\n 'worker. To learn more, visit https://cra.link/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\n function registerValidSW(swUrl: string, config?: 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 ' +\r\n 'tabs for this page are closed. See https://cra.link/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\n function checkValidServiceWorker(swUrl: string, config?: 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 (\r\n response.status === 404 ||\r\n (contentType != null && contentType.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, 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\n export 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 }","import { AuthenticationParameters, Configuration } from 'msal';\r\nimport { IMsalAuthProviderConfig, LoginType } from 'react-aad-msal';\r\n\r\nconst baseUrl = 'https://eqmiasswebapi.azurewebsites.net/';\r\n\r\n// Msal Configurations\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n authority: 'https://HazellCarrDev.b2clogin.com/HazellCarrDev.onmicrosoft.com/B2C_1_powerbiembeddedlogin/',\r\n clientId: '06a5ba80-683d-4e41-81b5-3c99be08cff8',\r\n },\r\n};\r\n\r\n// Authentication Parameters\r\nconst authenticationParameters: AuthenticationParameters = {\r\n scopes: [\r\n 'openid',\r\n 'https://HazellCarrDev.onmicrosoft.com/06a5ba80-683d-4e41-81b5-3c99be08cff8/renderreport',\r\n 'https://HazellCarrDev.onmicrosoft.com/06a5ba80-683d-4e41-81b5-3c99be08cff8/user_impersonation'\r\n ]\r\n}\r\n\r\n// Options\r\nconst options: IMsalAuthProviderConfig = {\r\n loginType: LoginType.Redirect,\r\n};\r\n\r\nconst pwa = {\r\n cookieExpiration: 14 * 24 * 60 * 60, //seconds\r\n}\r\n\r\nconst config = {\r\n baseUrl,\r\n msalConfig,\r\n authenticationParameters,\r\n options,\r\n pwa,\r\n}\r\n\r\nexport default config;","import { AuthenticationParameters, Configuration } from 'msal';\r\nimport { IMsalAuthProviderConfig, LoginType } from 'react-aad-msal';\r\n\r\nconst baseUrl = 'https://eqmiasswebapi.azurewebsites.net/';\r\n\r\n// Msal Configurations\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n authority: 'https://HazellCarrDev.b2clogin.com/HazellCarrDev.onmicrosoft.com/B2C_1_powerbiembeddedlogin/',\r\n clientId: '06a5ba80-683d-4e41-81b5-3c99be08cff8',\r\n },\r\n};\r\n\r\n// Authentication Parameters\r\nconst authenticationParameters: AuthenticationParameters = {\r\n scopes: [\r\n 'openid',\r\n 'https://HazellCarrDev.onmicrosoft.com/06a5ba80-683d-4e41-81b5-3c99be08cff8/renderreport',\r\n 'https://HazellCarrDev.onmicrosoft.com/06a5ba80-683d-4e41-81b5-3c99be08cff8/user_impersonation'\r\n ]\r\n}\r\n\r\n// Options\r\nconst options: IMsalAuthProviderConfig = {\r\n loginType: LoginType.Redirect,\r\n};\r\n\r\nconst pwa = {\r\n cookieExpiration: 14 * 24 * 60 * 60, //seconds\r\n}\r\n\r\nconst config = {\r\n baseUrl,\r\n msalConfig,\r\n authenticationParameters,\r\n options,\r\n pwa,\r\n}\r\n\r\nexport default config;","import { AuthenticationParameters, Configuration } from 'msal';\r\nimport { IMsalAuthProviderConfig, LoginType } from 'react-aad-msal';\r\n\r\nconst baseUrl = 'https://eqcis-webapi-prod-uksouth001.azurewebsites.net';\r\n\r\n// Msal Configurations\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n authority: 'https://eqinsightsonline.b2clogin.com/eqinsightsonline.onmicrosoft.com/B2C_1_powerbiembeddedlogin/',\r\n clientId: '75eeba9b-c75c-4375-95f6-ddc3552e8601',\r\n },\r\n};\r\n\r\n// Authentication Parameters\r\nconst authenticationParameters: AuthenticationParameters = {\r\n scopes: [\r\n 'openid',\r\n 'https://eqinsightsonline.onmicrosoft.com/75eeba9b-c75c-4375-95f6-ddc3552e8601/renderreport',\r\n 'https://eqinsightsonline.onmicrosoft.com/75eeba9b-c75c-4375-95f6-ddc3552e8601/user_impersonation'\r\n ]\r\n}\r\n\r\n// Options\r\nconst options: IMsalAuthProviderConfig = {\r\n loginType: LoginType.Redirect,\r\n};\r\n\r\nconst pwa = {\r\n cookieExpiration: 14 * 24 * 60 * 60, //seconds\r\n}\r\n\r\nconst config = {\r\n baseUrl,\r\n msalConfig,\r\n authenticationParameters,\r\n options,\r\n pwa,\r\n}\r\n\r\nexport default config;","import development from \"./development\";\r\nimport test from \"../configFile/test\";\r\nimport prod from \"../configFile/prod\";\r\nimport local from \"../configFile/local\";\r\nimport uat from \"../configFile/uat\";\r\n\r\nconst envKey: string = process.env.REACT_APP_ENVIRONMENT || 'local';\r\n\r\nconst allConfigs: { [key: string]: any } = { local, development, test, prod, uat };\r\n\r\nconst currentConfig = allConfigs[envKey];\r\n\r\nexport default currentConfig;","import { AuthenticationParameters, Configuration } from 'msal';\r\nimport { IMsalAuthProviderConfig, LoginType } from 'react-aad-msal';\r\n\r\nconst baseUrl = 'https://localhost:44342/';\r\n\r\n// Msal Configurations\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n authority: 'https://HazellCarrDev.b2clogin.com/HazellCarrDev.onmicrosoft.com/B2C_1_powerbiembeddedlogin/',\r\n clientId: '06a5ba80-683d-4e41-81b5-3c99be08cff8',\r\n },\r\n};\r\n\r\n// Authentication Parameters\r\nconst authenticationParameters: AuthenticationParameters = {\r\n scopes: [\r\n 'openid',\r\n 'https://HazellCarrDev.onmicrosoft.com/06a5ba80-683d-4e41-81b5-3c99be08cff8/renderreport',\r\n 'https://HazellCarrDev.onmicrosoft.com/06a5ba80-683d-4e41-81b5-3c99be08cff8/user_impersonation'\r\n ]\r\n}\r\n\r\n// Options\r\nconst options: IMsalAuthProviderConfig = {\r\n loginType: LoginType.Redirect,\r\n};\r\n\r\nconst pwa = {\r\n cookieExpiration: 14 * 24 * 60 * 60, //seconds\r\n}\r\n\r\nconst config = {\r\n baseUrl,\r\n msalConfig,\r\n authenticationParameters,\r\n options,\r\n pwa,\r\n}\r\n\r\nexport default config;","import { AuthenticationParameters, Configuration } from 'msal';\r\nimport { IMsalAuthProviderConfig, LoginType } from 'react-aad-msal';\r\n\r\nconst baseUrl = 'https://eqcis-webapi-non-prod-uksouth001.azurewebsites.net/';\r\n\r\n// Msal Configurations\r\nconst msalConfig: Configuration = {\r\n auth: {\r\n authority: 'https://eqcisnonprod.b2clogin.com/eqcisnonprod.onmicrosoft.com/B2C_1_powerbiembeddedlogin/',\r\n clientId: '4bec9fef-dc43-4fc8-8e0c-30afe1ca9345',\r\n },\r\n};\r\n\r\n// Authentication Parameters\r\nconst authenticationParameters: AuthenticationParameters = {\r\n scopes: [\r\n 'openid',\r\n 'https://eqcisnonprod.onmicrosoft.com/4bec9fef-dc43-4fc8-8e0c-30afe1ca9345/renderreport',\r\n 'https://eqcisnonprod.onmicrosoft.com/4bec9fef-dc43-4fc8-8e0c-30afe1ca9345/user_impersonation'\r\n ]\r\n}\r\n\r\n// Options\r\nconst options: IMsalAuthProviderConfig = {\r\n loginType: LoginType.Redirect,\r\n};\r\n\r\nconst pwa = {\r\n cookieExpiration: 14 * 24 * 60 * 60, //seconds\r\n}\r\n\r\nconst config = {\r\n baseUrl,\r\n msalConfig,\r\n authenticationParameters,\r\n options,\r\n pwa,\r\n}\r\n\r\nexport default config;","import config from '../configFile';\r\nimport { AuthenticationParameters, Configuration } from 'msal';\r\nimport { IMsalAuthProviderConfig, LoginType } from 'react-aad-msal';\r\nimport _ from 'lodash';\r\n\r\n\r\n// Msal Configurations\r\nconst defaultConfig: Configuration = {\r\n auth: {\r\n clientId: '',\r\n redirectUri: window.location.origin,\r\n validateAuthority: false,\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\",\r\n storeAuthStateInCookie: true\r\n }\r\n};\r\n\r\n// Authentication Parameters\r\nconst defaultAuthenticationParameters: AuthenticationParameters = {\r\n}\r\n\r\n// Options\r\nconst defaultOptions: IMsalAuthProviderConfig = {\r\n loginType: LoginType.Popup,\r\n tokenRefreshUri: window.location.origin\r\n}\r\n\r\nconst msal = {\r\n config: _.merge(defaultConfig, config.msalConfig),\r\n authenticationParameters: _.merge(defaultAuthenticationParameters, config.authenticationParameters),\r\n options: _.merge(defaultOptions, config.options)\r\n}\r\n\r\nexport default msal;","import { MsalAuthProvider } from 'react-aad-msal';\r\nimport msal from '../../../configuration/msal';\r\n\r\nexport const authProvider = new MsalAuthProvider(msal.config, msal.authenticationParameters, msal.options)","import { Store, StoreConfig } from '@datorama/akita';\r\nimport AccountInfo from '../models/account.info';\r\n\r\n\r\nexport interface AuthState {\r\n isAuthenticated: boolean;\r\n accountInfo: AccountInfo\r\n}\r\n\r\nexport function createInitialState(): AuthState {\r\n return {\r\n isAuthenticated: false,\r\n accountInfo: {}\r\n };\r\n}\r\n\r\n@StoreConfig({ name: 'auth' })\r\nexport class AuthStore extends Store {\r\n\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n\r\n}\r\n\r\nexport const authStore = new AuthStore();\r\n","import { Query } from '@datorama/akita';\r\nimport { AuthStore, AuthState, authStore } from './authentication.store';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nexport class AuthQuery extends Query {\r\n\r\n authenticationPassed$ = new BehaviorSubject(false);\r\n accountInfo$ = new BehaviorSubject(this.accountInfo);\r\n\r\n get accountInfo() {\r\n return this.getValue().accountInfo;\r\n }\r\n\r\n constructor(protected store: AuthStore) {\r\n super(store);\r\n\r\n this.select(state => state.accountInfo).subscribe(this.accountInfo$);\r\n this.select(state => state.isAuthenticated).subscribe(this.authenticationPassed$);\r\n }\r\n\r\n}\r\n\r\nexport const authQuery = new AuthQuery(authStore);\r\n","import AccountInfo from '../models/account.info';\r\nimport { AuthStore, authStore } from './authentication.store';\r\n\r\n\r\nexport class AuthService {\r\n\r\n constructor(private authStore: AuthStore) {\r\n }\r\n\r\n userAuthenticationPassed(accountInfo: AccountInfo) {\r\n this.authStore.update({ isAuthenticated: true, accountInfo: accountInfo });\r\n }\r\n\r\n userAuthenticationFailed() {\r\n this.authStore.update({ isAuthenticated: false });\r\n }\r\n\r\n}\r\n\r\nexport const authService = new AuthService(authStore);\r\n","import { LinearProgress } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { AzureAD, AuthenticationState } from 'react-aad-msal';\r\nimport AccountInfo from \"../models/account.info\";\r\nimport { authProvider } from \"../providers/authentication.provider\";\r\nimport { authService } from '../state';\r\n\r\nexport default function AuthenticationComponent(props: { authenticationPassedComponent: JSX.Element, authenticationFailedComponent: JSX.Element }) {\r\n return (\r\n {\r\n ({ authenticationState, accountInfo }: { authenticationState: AuthenticationState; accountInfo: AccountInfo }) => {\r\n switch (authenticationState) {\r\n case AuthenticationState.Authenticated:\r\n authService.userAuthenticationPassed(accountInfo);\r\n return (\r\n <>\r\n {props.authenticationPassedComponent}\r\n \r\n );\r\n case AuthenticationState.Unauthenticated:\r\n {\r\n authService.userAuthenticationFailed();\r\n return (\r\n <>\r\n {props.authenticationFailedComponent}\r\n \r\n );\r\n }\r\n case AuthenticationState.InProgress:\r\n return ();\r\n }\r\n }\r\n }\r\n );\r\n}","import React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Checkbox, Icon } from '@material-ui/core';\r\nimport StarIcon from '@material-ui/icons/Star';\r\nimport StarBorderIcon from '@material-ui/icons/StarBorder';\r\nimport ReportMenuItem from '../models/reportMenuItem';\r\nimport {GroupedMenuItems} from \"../models/groupedMenuItems\";\r\nimport {AvailableMenuItems} from \"../models/availableMenuItems\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n nested: {\r\n paddingLeft: theme.spacing(4),\r\n },\r\n groupItemHeader: {\r\n backgroundColor: '#efefef',\r\n },\r\n }),\r\n);\r\n\r\ntype NestedListPropsType = {\r\n listSectionTitle: string,\r\n listSectionItems: Array,\r\n drawerClose: () => void,\r\n setReportAsFavorite: (id: string, isFavorite: boolean) => void,\r\n};\r\n\r\nexport default function NestedList({\r\n listSectionItems,\r\n listSectionTitle,\r\n drawerClose,\r\n setReportAsFavorite\r\n}: NestedListPropsType) {\r\n const classes = useStyles();\r\n const [open, setOpen] = React.useState(false);\r\n const history = useHistory();\r\n\r\n const handleClick = () => {\r\n setOpen(!open);\r\n };\r\n\r\n const handleFavoriteClick = (e: React.ChangeEvent, id: string) => {\r\n e.stopPropagation();\r\n\r\n const element = e.target as HTMLInputElement;\r\n setReportAsFavorite(id, element.checked);\r\n };\r\n\r\n const buildGroupedItems = (items: Array>) => (\r\n \r\n { items.map((groupedMenuItem) => (\r\n
\r\n \r\n \r\n \r\n {groupedMenuItem.childrenItems && buildListedItems(groupedMenuItem.childrenItems)}\r\n
\r\n ))\r\n }\r\n
\r\n )\r\n\r\n const buildListedItems = (items: Array) => (\r\n \r\n { items.map((reportMenuItem) => (\r\n {\r\n history.push(reportMenuItem.redirectUrl);\r\n drawerClose();\r\n }}>\r\n \r\n {reportMenuItem.logo}\r\n \r\n \r\n {(reportMenuItem) ? (}\r\n checkedIcon={}\r\n checked={(reportMenuItem as ReportMenuItem).isFavorite}\r\n onChange={(e) => handleFavoriteClick(e, reportMenuItem.id)}\r\n onClick={(e) => { e.stopPropagation(); }}\r\n />) : null}\r\n \r\n ))\r\n }\r\n \r\n );\r\n\r\n return (\r\n }\r\n className={classes.root}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {open ? : }\r\n \r\n \r\n {\r\n (listSectionItems[0] && (listSectionItems[0] as GroupedMenuItems).isGroup)\r\n ? buildGroupedItems(listSectionItems as Array>)\r\n : buildListedItems(listSectionItems as Array)\r\n }\r\n\r\n \r\n \r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/eq_expert_logo.06e7b8e6.svg\";","import jwt_decode from 'jwt-decode'\r\nimport { useEffect, useState } from \"react\";\r\n\r\ntype JWTType = {\r\n auth_time: string;\r\n}\r\n\r\nconst useJWTDecoder = () => {\r\n const [jwtObject, setJwtObject] = useState(null);\r\n const [lastLoggedInDate, setLastLoggedInDate] = useState(null);\r\n\r\n useEffect(() => {\r\n const jwtCookieMatch = document.cookie.match('(^|;)\\\\s*msal\\\\.[^.]+\\\\.idtoken\\\\s*=\\\\s*([^;]+)');\r\n\r\n if (!jwtCookieMatch) return;\r\n\r\n const jwt = jwtCookieMatch[2];\r\n\r\n try {\r\n const jwtDecoded = jwt_decode(jwt);\r\n setJwtObject(jwtDecoded);\r\n } catch (e) {\r\n console.log(\"Malformed JWT detected!\", e);\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (!jwtObject) {\r\n setLastLoggedInDate(null);\r\n return;\r\n }\r\n\r\n const authTimeInMs = +jwtObject.auth_time * 1000;\r\n setLastLoggedInDate(new Date(authTimeInMs));\r\n }, [jwtObject])\r\n\r\n\r\n return {\r\n lastLoggedInDate,\r\n };\r\n};\r\n\r\nexport default useJWTDecoder;","import React, { useEffect, useState } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport { AccountBoxOutlined } from '@material-ui/icons';\r\nimport { Container, Popover } from '@material-ui/core';\r\nimport AccountInfo from '../../authentication/models/account.info';\r\nimport { authQuery } from '../../authentication/state';\r\nimport { authProvider } from '../../authentication/providers/authentication.provider';\r\nimport useJWTDecoder from \"./accountInfo.hooks\";\r\n\r\nconst AccountInfoComponent = () => {\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const { lastLoggedInDate } = useJWTDecoder();\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? 'simple-popover' : undefined;\r\n const [accountInfo, setAccountInfo] = useState({})\r\n\r\n useEffect(() => {\r\n const accountInfoSubscription = authQuery.accountInfo$.subscribe(x => setAccountInfo(x));\r\n\r\n return () => {\r\n accountInfoSubscription.unsubscribe();\r\n }\r\n }, []);\r\n\r\n return !accountInfo.account ? null : (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n

Welcome, {accountInfo.account.name}

\r\n
Last logged in: {lastLoggedInDate?.toLocaleString()}
\r\n \r\n Logout\r\n \r\n
\r\n \r\n \r\n )\r\n}\r\n\r\nexport default AccountInfoComponent;","import React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport clsx from 'clsx';\r\nimport { makeStyles, useTheme, Theme, createStyles } from '@material-ui/core/styles';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport List from '@material-ui/core/List';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport { Grid, Icon, LinearProgress } from '@material-ui/core';\r\nimport NestedList from '../nested.list.component';\r\nimport { MenuItemsSection } from '../../models/menuItemsSection';\r\nimport logo from '../../../../assets/eq_expert_logo.svg';\r\nimport AccountInfo from '../../../account/components';\r\n\r\nimport './index.css';\r\n\r\nconst drawerWidth = 240;\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n },\r\n appBar: {\r\n transition: theme.transitions.create(['margin', 'width'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n background: '#fff'\r\n },\r\n logo: {\r\n height: \"57px\",\r\n margin: '4px',\r\n marginLeft: \"-12px\",\r\n cursor: 'pointer'\r\n },\r\n appBarShift: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginLeft: drawerWidth,\r\n transition: theme.transitions.create(['margin', 'width'], {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n drawerPaper: {\r\n width: drawerWidth,\r\n },\r\n drawerHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n justifyContent: 'flex-end',\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n })\r\n\r\n },\r\n contentShift: {\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n marginLeft: 0,\r\n },\r\n }),\r\n);\r\n\r\nexport default function Navbar(props: {\r\n children: JSX.Element,\r\n menuItemsSections: Array,\r\n isLoading: boolean,\r\n setReportAsFavorite: (id: string, isFavorite: boolean) => void,\r\n}) {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const [open, setOpen] = React.useState(false);\r\n const history = useHistory();\r\n\r\n // useEffect(() => {\r\n // return history.listen((location) => {\r\n // //setOpen(false);\r\n // })\r\n // }, [history])\r\n\r\n const handleDrawerOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleDrawerClose = () => {\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 \"Failed history.push('/')}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {theme.direction === 'ltr' ? : }\r\n \r\n
\r\n \r\n {props.isLoading ?
\r\n

Loading available PowerBI resources

\r\n \r\n
:\r\n \r\n {\r\n props.menuItemsSections.map(menuItemSection => {\r\n if (menuItemSection.childrenItems && menuItemSection.childrenItems.length > 0 && menuItemSection.displaySectionHeader)\r\n return \r\n else\r\n return menuItemSection.childrenItems?.map(sectionChildItem => {\r\n return {\r\n history.push(sectionChildItem.redirectUrl);\r\n handleDrawerClose();\r\n }}>\r\n {sectionChildItem.logo}\r\n \r\n \r\n })\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","import { Store, StoreConfig } from '@datorama/akita';\r\nimport { Color } from '@material-ui/lab';\r\n\r\nexport type SnackBarState = {\r\n open: boolean,\r\n severity: Color,\r\n message: string | null\r\n}\r\n\r\nexport interface UiState {\r\n snackBar: SnackBarState\r\n}\r\n\r\nfunction createInitialState(): UiState {\r\n return {\r\n snackBar: {\r\n open: false,\r\n severity: 'success',\r\n message: null\r\n }\r\n };\r\n}\r\n\r\n@StoreConfig({ name: 'ui' })\r\nexport class UiStore extends Store {\r\n\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n\r\n}\r\n\r\nexport const uiStore = new UiStore();\r\n","import { Store, StoreConfig } from '@datorama/akita';\r\n\r\nexport interface FeatureState {\r\n features: Array;\r\n isUserAuthorized: boolean;\r\n}\r\n\r\nexport function createInitialState(): FeatureState {\r\n return {\r\n features: [],\r\n isUserAuthorized: true\r\n };\r\n}\r\n\r\n@StoreConfig({ name: 'features' })\r\nexport class FeaturesStore extends Store {\r\n\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n\r\n}\r\n\r\nexport const featuresStore = new FeaturesStore();\r\n","import {AvailableMenuItems} from \"./availableMenuItems\";\r\n\r\nexport enum MenuSections {\r\n Reports,\r\n SecureActions,\r\n UnsecureActions,\r\n}\r\n\r\nexport interface MenuItemsSection {\r\n id: MenuSections,\r\n title: string;\r\n logo?: string;\r\n childrenItems?: Array;\r\n displaySectionHeader?: boolean;\r\n}","import { Query } from '@datorama/akita';\r\nimport { FeatureState, FeaturesStore, featuresStore } from './features.store';\r\n\r\nexport class FeaturesQuery extends Query {\r\n featuresList$ = this.select(state => state.features);\r\n isUserAuthorized = this.select(state => state.isUserAuthorized);\r\n \r\n constructor(protected store: FeaturesStore) {\r\n super(store);\r\n }\r\n\r\n}\r\n\r\nexport const featuresQuery = new FeaturesQuery(featuresStore);\r\n","import { featuresStore, FeaturesStore } from \"./features.store\";\r\nimport { authQuery } from '../../authentication/state';\r\nimport axios from \"axios\";\r\n\r\nexport class FeaturesService {\r\n\r\n constructor(private featuresStore: FeaturesStore) {\r\n authQuery.authenticationPassed$.subscribe(isAuthenticated => {\r\n if (isAuthenticated) {\r\n this.fetchFeatures();\r\n }\r\n });\r\n }\r\n\r\n fetchFeatures() {\r\n this.featuresStore.setLoading(true);\r\n\r\n axios.get>(`/features`).then((response) => {\r\n const isUserAuthorized = !response.data || response.data.length > 0;\r\n this.featuresStore.update({ features: response.data, isUserAuthorized });\r\n }).catch(x => {\r\n console.log(x);\r\n }).finally(() => {\r\n this.featuresStore.setLoading(false);\r\n })\r\n }\r\n}\r\n\r\nexport const featuresService = new FeaturesService(featuresStore);","import { ReportModel } from \"../../reports/reports-list-state/reports-list.model\";\r\nimport ReportMenuItem from \"../models/reportMenuItem\";\r\nimport {WorkspaceModel} from \"../../reports/workspaces-list-state/workspaces-list.model\";\r\nimport {GroupedMenuItems} from \"../models/groupedMenuItems\";\r\nimport {UserSettingsState} from \"../state/userSettings\";\r\n\r\nconst reportMenuItemLogo = 'storage_outlined';\r\n\r\nexport const mapReportModelToMenuItem = (report: ReportModel, opt: { isFavorite: boolean, workspaceId: string }): ReportMenuItem => ({\r\n id: report.id,\r\n title: report.name,\r\n logo: reportMenuItemLogo,\r\n redirectUrl: `/reports/${opt.workspaceId}/${report.id}`,\r\n isFavorite: opt?.isFavorite || false\r\n});\r\n\r\nexport const mapWorkspaceModelToGroupedMenuItems = (workspace: WorkspaceModel, reportSettings: UserSettingsState['reports']): GroupedMenuItems => ({\r\n isGroup: true,\r\n id: workspace.id,\r\n title: workspace.name,\r\n logo: reportMenuItemLogo,\r\n redirectUrl: '',\r\n childrenItems: workspace.reports.map(report => mapReportModelToMenuItem(report, {...reportSettings[report.id], workspaceId: workspace.id}))\r\n});","export enum AuthorizedActions {\r\n ALLOW_FILE_UPLOAD\r\n}\r\n\r\nexport const AuthorizedActionsRoutes: { [key: string]: string } = {\r\n [AuthorizedActions[AuthorizedActions.ALLOW_FILE_UPLOAD]]: '/fileUpload'\r\n}","import { Store, StoreConfig } from '@datorama/akita';\r\nimport { WorkspaceModel } from \"./workspaces-list.model\";\r\n\r\nexport interface WorkspacesState {\r\n workspaces: Array;\r\n isUserAuthorized: boolean;\r\n}\r\n\r\nexport function createInitialState(): WorkspacesState {\r\n return {\r\n workspaces: [],\r\n isUserAuthorized: true\r\n };\r\n}\r\n\r\n@StoreConfig({ name: 'workspaces' })\r\nexport class WorkspacesStore extends Store {\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n}\r\n\r\nexport const workspacesStore = new WorkspacesStore();\r\n","import { Query } from '@datorama/akita';\r\nimport { WorkspacesState, workspacesStore, WorkspacesStore } from './workspaces-list.store';\r\n\r\nexport class WorkspacesQuery extends Query {\r\n workspacesList$ = this.select(state => state.workspaces);\r\n isUserAuthorized = this.select(state => state.isUserAuthorized);\r\n\r\n constructor(protected store: WorkspacesStore) {\r\n super(store);\r\n }\r\n\r\n}\r\n\r\nexport const workspacesQuery = new WorkspacesQuery(workspacesStore);\r\n","import { combineLatest } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { featuresQuery } from '../../features/state';\r\nimport { AuthorizedActions, AuthorizedActionsRoutes } from './authorization.constants';\r\nimport {workspacesQuery} from \"../../reports/workspaces-list-state\";\r\n\r\n\r\nexport class AuthorizationQuery {\r\n\r\n isUserAuthorizedToAnyAction$ = combineLatest([workspacesQuery.isUserAuthorized, featuresQuery.isUserAuthorized])\r\n .pipe(map(x => {\r\n return x.some(y => y)\r\n }));\r\n\r\n isLoadingAuthorizedActions$ = featuresQuery.selectLoading();\r\n\r\n authorizedActions$ = featuresQuery.featuresList$.pipe(map(features => {\r\n return features.map(feature => {\r\n const mappedFeature = feature as unknown as AuthorizedActions;\r\n return { actionId: mappedFeature, route: this.getActionRoute(mappedFeature) };\r\n })\r\n }))\r\n\r\n\r\n\r\n getActionRoute(actionId: AuthorizedActions) {\r\n return AuthorizedActionsRoutes[actionId]\r\n }\r\n\r\n}\r\n\r\nexport const authorizationQuery = new AuthorizationQuery();\r\n","import { WorkspaceModel } from './workspaces-list.model';\r\nimport { authQuery } from '../../authentication/state';\r\nimport axios from 'axios';\r\nimport { workspacesStore, WorkspacesStore } from \"./workspaces-list.store\";\r\n\r\nexport class WorkspacesService {\r\n constructor(private workspacesStore: WorkspacesStore) {\r\n authQuery.authenticationPassed$.subscribe(isAuthenticated => {\r\n if (isAuthenticated) this.fetchWorkspacesWithReports();\r\n });\r\n }\r\n\r\n fetchWorkspacesWithReports() {\r\n this.workspacesStore.setLoading(true);\r\n\r\n axios.get>(`/reports`).then((response) => {\r\n const isUserAuthorized = !response.data || response.data.length > 0;\r\n this.workspacesStore.update({ workspaces: response.data, isUserAuthorized });\r\n }).catch(x => {\r\n console.log(x);\r\n }).finally(() => {\r\n this.workspacesStore.setLoading(false);\r\n })\r\n }\r\n}\r\n\r\nexport const workspacesService = new WorkspacesService(workspacesStore);\r\n","import { Store, StoreConfig } from '@datorama/akita';\r\n\r\nexport type ReportUserSettings = {\r\n reportId: string,\r\n isFavorite: boolean\r\n}\r\n\r\nexport interface UserSettingsState {\r\n reports: { [key: string]: ReportUserSettings; };\r\n}\r\n\r\nfunction createInitialState(): UserSettingsState {\r\n return {\r\n reports: {}\r\n };\r\n}\r\n\r\n@StoreConfig({ name: 'userSettings' })\r\nexport class UserSettingsStore extends Store {\r\n\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n\r\n}\r\n\r\nexport const userSettingsStore = new UserSettingsStore();\r\n","import { Query } from '@datorama/akita';\r\nimport { UserSettingsState, UserSettingsStore, userSettingsStore } from './userSettings.store';\r\n\r\nexport class UserSettingsQuery extends Query {\r\n reportSettings$ = this.select(state => state.reports);\r\n \r\n constructor(protected store: UserSettingsStore) {\r\n super(store);\r\n }\r\n\r\n}\r\n\r\nexport const userSettingsQuery = new UserSettingsQuery(userSettingsStore);","import { authQuery } from '../../../authentication/state';\r\nimport axios from \"axios\";\r\nimport { ReportUserSettings, userSettingsStore, UserSettingsStore } from \"./userSettings.store\";\r\n\r\nexport class UserSettingsService {\r\n\r\n constructor(private userSettingsStore: UserSettingsStore) {\r\n authQuery.authenticationPassed$.subscribe(isAuthenticated => {\r\n if (isAuthenticated) {\r\n this.fetchReportSettings();\r\n }\r\n });\r\n }\r\n\r\n fetchReportSettings() {\r\n this.userSettingsStore.setLoading(true);\r\n axios.get>(`/userSettings/reports`).then((response) => {\r\n const reports = response.data.reduce<{ [key: string]: ReportUserSettings }>((reportsMap, report) => {\r\n reportsMap[report.reportId] = report;\r\n return reportsMap;\r\n }, {});\r\n this.userSettingsStore.update({ reports });\r\n }).catch(x => {\r\n console.log(x);\r\n }).finally(() => {\r\n this.userSettingsStore.setLoading(false);\r\n })\r\n }\r\n\r\n setReportAsFavorite(reportId: string, isFavorite: boolean) {\r\n axios.put(`/userSettings/reports/${reportId}/favorite`, { isFavorite }, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n }\r\n }).then((response) => {\r\n var newState = { ...this.userSettingsStore.getValue().reports, [reportId]: response.data };\r\n this.userSettingsStore.update({ reports: newState });\r\n }).catch(x => {\r\n console.log(x);\r\n }).finally(() => {\r\n this.userSettingsStore.setLoading(false);\r\n });\r\n }\r\n}\r\n\r\nexport const userSettingsService = new UserSettingsService(userSettingsStore);","import { Query } from '@datorama/akita';\r\nimport { UiStore, UiState, uiStore } from './ui.store';\r\nimport { combineLatest } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { featuresQuery } from '../../features/state';\r\nimport { of } from 'rxjs';\r\nimport MenuItem from '../models/menuItem';\r\nimport ReportMenuItem from '../models/reportMenuItem';\r\nimport { MenuItemsSection, MenuSections } from '../models/menuItemsSection';\r\nimport { mapWorkspaceModelToGroupedMenuItems} from '../mappers';\r\nimport { authorizationQuery, AuthorizedActions } from '../../authorization/state';\r\nimport { userSettingsQuery } from './userSettings';\r\nimport { workspacesQuery } from \"../../reports/workspaces-list-state\";\r\n\r\nexport class UiQuery extends Query {\r\n private securedResources = combineLatest([workspacesQuery.workspacesList$, userSettingsQuery.reportSettings$])\r\n .pipe(\r\n map(([workspaces, reportSettings]) => {\r\n return {\r\n id: MenuSections.Reports,\r\n title: 'Reports',\r\n logo: 'publish_icon',\r\n displaySectionHeader: true,\r\n childrenItems: workspaces.map(workspace => mapWorkspaceModelToGroupedMenuItems(workspace, reportSettings))\r\n }\r\n })\r\n );\r\n\r\n public favoriteReports$ = this.securedResources.pipe(\r\n map(section => section.childrenItems.reduce(\r\n (reports: Array, groupedMenuItems) => [\r\n ...reports,\r\n ...(groupedMenuItems.childrenItems || [])\r\n .filter(report => report.isFavorite)]\r\n , [])\r\n ));\r\n\r\n private securedActions = featuresQuery.featuresList$.pipe(\r\n map(features => ({\r\n id: MenuSections.SecureActions,\r\n title: MenuSections[MenuSections.SecureActions],\r\n displaySectionHeader: false,\r\n childrenItems: [...features.map(y => ({\r\n id: y,\r\n title: 'File upload',\r\n logo: 'publish_icon',\r\n redirectUrl: authorizationQuery.getActionRoute(y as unknown as AuthorizedActions)\r\n }))]\r\n })));\r\n\r\n private dashboardAction = of({\r\n id: MenuSections.UnsecureActions,\r\n title: MenuSections[MenuSections.UnsecureActions],\r\n displaySectionHeader: false,\r\n childrenItems: new Array(\r\n { id: 'DASHBOARD', title: 'Dashboard', logo: 'apps', redirectUrl: '/' })\r\n }\r\n );\r\n\r\n private notSecuredActions = of({\r\n id: MenuSections.UnsecureActions,\r\n title: MenuSections[MenuSections.UnsecureActions],\r\n displaySectionHeader: false,\r\n childrenItems: new Array(\r\n { id: 'CONTACT_US', title: 'Contact', logo: 'mail_outline', redirectUrl: '/contact' })\r\n })\r\n\r\n snackbar$ = this.select(state => (state.snackBar));\r\n\r\n isMenuLoading$ = combineLatest([userSettingsQuery.selectLoading(), workspacesQuery.selectLoading(), featuresQuery.selectLoading()])\r\n .pipe(map(x => x.some(y => y)));\r\n\r\n menuItems$ = combineLatest([this.dashboardAction, this.securedResources, this.securedActions, this.notSecuredActions]);\r\n\r\n constructor(protected store: UiStore) {\r\n super(store);\r\n }\r\n\r\n}\r\n\r\nexport const uiQuery = new UiQuery(uiStore);\r\n","import { Color } from '@material-ui/lab';\r\nimport { UiStore, uiStore } from './ui.store';\r\n\r\nexport class UiService {\r\n\r\n constructor(private uiStore: UiStore) {\r\n }\r\n\r\n openSnackbar(message: string, severity: Color) {\r\n uiStore.update({\r\n snackBar: {\r\n open: true,\r\n severity,\r\n message\r\n }\r\n });\r\n }\r\n\r\n closeSnackbar() {\r\n uiStore.update({\r\n snackBar: {\r\n open: false,\r\n severity: 'success',\r\n message: null\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport const uiService = new UiService(uiStore);\r\n","import { Button } from \"@material-ui/core\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory } from 'react-router-dom';\r\nimport './index.css'\r\n\r\nconst FullScreenComponent = (props: { children: JSX.Element }) => {\r\n\r\n const [isFullScreenActive, setIsFullScreenActive] = useState(false);\r\n const containerRef = useRef(null);\r\n const history = useHistory();\r\n const isIos = /iPad|iPhone|iPod/.test(navigator.platform);\r\n\r\n useEffect(() => {\r\n if (containerRef.current) {\r\n const domElement = containerRef.current;\r\n domElement.onfullscreenchange = (e) => {\r\n setIsFullScreenActive(!!document.fullscreenElement);\r\n const isAndroid = /android/i.test(navigator.platform);\r\n\r\n if (!!document.fullscreenElement && isAndroid) {\r\n history.push(history.location);\r\n }\r\n }\r\n }\r\n }, []);\r\n\r\n const enterFullScreen = () => {\r\n const domElement = containerRef.current;\r\n\r\n if (isIos) return setIsFullScreenActive(true);\r\n if (!domElement) return;\r\n\r\n domElement?.requestFullscreen()\r\n .then(() => {\r\n setIsFullScreenActive(true);\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n { isFullScreenActive && isIos &&\r\n \r\n }\r\n { !isFullScreenActive && \r\n \r\n Full screen mode\r\n \r\n }\r\n
\r\n { props.children}\r\n
\r\n )\r\n}\r\n\r\nexport default FullScreenComponent;","import React, { useEffect, useState } from \"react\";\r\nimport { PowerBIEmbed } from 'powerbi-client-react';\r\nimport { IEmbedConfiguration } from \"powerbi-client\";\r\nimport { reportEmbeddedQuery, reportEmbeddedService } from \"../report-embedded-state\";\r\nimport { LinearProgress } from \"@material-ui/core\";\r\nimport FullScreenComponent from '../../shared/components/fullscreen';\r\n\r\nconst ReportComponent = (props: { workspaceId: string, reportId: string }) => {\r\n\r\n const [embeddingDetails, setEmbeddingDetails] = useState({});\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [report, setReport] = useState(null);\r\n\r\n useEffect(() => {\r\n const isReportLoadingSubscription = reportEmbeddedQuery.selectLoading().subscribe(x => setIsLoading(x));\r\n const reportEmbeddedSubscription = reportEmbeddedQuery.embeddingDetails$.subscribe(async (config) => {\r\n setEmbeddingDetails(config);\r\n if (report) {\r\n await report.setAccessToken(config.accessToken);\r\n await report.refresh();\r\n }\r\n });\r\n\r\n reportEmbeddedService.fetchEmbeddingDetails(props.workspaceId, props.reportId);\r\n\r\n return () => {\r\n isReportLoadingSubscription.unsubscribe();\r\n reportEmbeddedSubscription.unsubscribe();\r\n }\r\n }, [props.workspaceId, props.reportId, report]);\r\n\r\n const onReportLoadedHandler = (_: any, report: any) => {\r\n setReport(report);\r\n };\r\n\r\n const onErrorHandler = (event: any) => {\r\n const hasTokenExpired = event.detail?.message === \"TokenExpired\";\r\n if (hasTokenExpired) {\r\n reportEmbeddedService.fetchEmbeddingDetails(props.workspaceId, props.reportId);\r\n }\r\n }\r\n\r\n const eventHandlers =\r\n new Map([\r\n ['loaded', onReportLoadedHandler],\r\n ['error', onErrorHandler],\r\n ]);\r\n\r\n return (\r\n \r\n {isLoading && }\r\n {embeddingDetails.accessToken && \r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport default ReportComponent;","import React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ReportComponent from '../modules/reports/components/report.component';\r\n\r\nexport default () => {\r\n const queryParams = useParams() as { workspaceId: string, reportId: string };\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { EntityState, Store, StoreConfig } from '@datorama/akita';\r\nimport { FileUpload } from './file-upload.model';\r\n\r\nexport interface FileUploadState {\r\n file: File | null,\r\n inProgress: boolean;\r\n completed: boolean;\r\n uploadProgress: number;\r\n}\r\n\r\nconst initialState = {\r\n file: null,\r\n inProgress: false,\r\n uploadProgress: 0,\r\n completed: false,\r\n};\r\n\r\n@StoreConfig({\r\n name: 'fileUpload'\r\n})\r\nexport class FileUploadStore extends Store {\r\n\r\n constructor() {\r\n super(initialState);\r\n }\r\n\r\n}\r\n\r\nexport const fileUploadStore = new FileUploadStore();\r\n","import { Query } from '@datorama/akita';\r\nimport { FileUploadStore, FileUploadState, fileUploadStore } from './file-upload.store';\r\n\r\nexport class FileUploadQuery extends Query {\r\n constructor(protected store: FileUploadStore) {\r\n super(store);\r\n }\r\n\r\n}\r\n\r\nexport const fileUploadQuery = new FileUploadQuery(fileUploadStore);\r\n","import axios from 'axios'\r\nimport { BlockBlobClient } from '@azure/storage-blob';\r\nimport { TransferProgressEvent } from '@azure/core-http';\r\nimport { fileUploadStore } from './file-upload.store';\r\n\r\nexport class FileUploadService {\r\n public allowedFileExtensions = [\".txt\", \".csv\", \".tsv\"];\r\n\r\n selectFileToUpload(file: File | null) {\r\n fileUploadStore.update({\r\n file,\r\n inProgress: false,\r\n completed: false,\r\n uploadProgress: 0,\r\n })\r\n }\r\n\r\n isInProgress(inProgress: boolean) {\r\n fileUploadStore.update({\r\n inProgress\r\n });\r\n }\r\n\r\n uploadCompleted() {\r\n fileUploadStore.update({\r\n completed: true\r\n })\r\n }\r\n\r\n startUpload() {\r\n fileUploadStore.update({\r\n inProgress: true,\r\n uploadProgress: 0,\r\n })\r\n\r\n const currentState = fileUploadStore.getValue();\r\n\r\n this.getSaSUploadToken(currentState.file?.name!, currentState.file?.size!)\r\n .then(response => {\r\n const { destinationUrl } = response.data;\r\n\r\n const blobClient = new BlockBlobClient(destinationUrl);\r\n blobClient.uploadData(currentState.file!, {\r\n onProgress: (progressEvent: TransferProgressEvent) => {\r\n const progress = (progressEvent.loadedBytes / currentState.file?.size!) * 100;\r\n fileUploadStore.update({\r\n uploadProgress: progress\r\n });\r\n },\r\n })\r\n .then(() => {\r\n this.isInProgress(false);\r\n this.uploadCompleted();\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n });\r\n }\r\n\r\n getSaSUploadToken(fileName: string, fileSize: number) {\r\n return axios.get(`/fileupload/sas?fileName=${fileName}&fileSize=${fileSize}`);\r\n }\r\n}\r\n\r\nexport const fileUploadService = new FileUploadService();\r\n","import React, {FormEvent, ChangeEvent, useEffect, useState, useCallback} from \"react\";\r\nimport LinearProgressWithLabel from '@material-ui/core/LinearProgress';\r\nimport Button from '@material-ui/core/Button';\r\nimport Box from '@material-ui/core/Box';\r\nimport { fileUploadQuery, fileUploadService, FileUploadState } from '../state';\r\nimport { uiService } from '../../shared/state/';\r\n\r\nconst FileUploadComponent = () => {\r\n const [uploadState, setUploadState] = useState();\r\n\r\n useEffect(() => {\r\n const sub = fileUploadQuery\r\n .select()\r\n .subscribe((state) => setUploadState(state));\r\n\r\n return () => {\r\n sub.unsubscribe();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (uploadState?.completed) uiService.openSnackbar('File upload completed', 'success');\r\n }, [uploadState?.completed]);\r\n\r\n const onFormSubmitHandler = useCallback((event: FormEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n fileUploadService.startUpload();\r\n }, []);\r\n\r\n const onChangeHandler = useCallback((event: ChangeEvent) => {\r\n const [file] = Object.values(event.currentTarget.files!);\r\n fileUploadService.selectFileToUpload(file);\r\n }, []);\r\n\r\n return (\r\n <>\r\n
\r\n
Accepted file formats: {fileUploadService.allowedFileExtensions.join(', ')}
\r\n \r\n Choose file\r\n \r\n \r\n

{uploadState?.file\r\n ? \r\n : \"Please select file to upload\"}\r\n

\r\n Upload\r\n \r\n { (uploadState?.inProgress || uploadState?.completed)\r\n && }\r\n \r\n )\r\n}\r\n\r\nexport default FileUploadComponent;","import React from \"react\";\r\nimport FileUploadComponent from '../modules/fileUpload/components/file-upload.component';\r\n\r\nconst FileUploadView = () => {\r\n return (\r\n <>\r\n

File Upload

\r\n \r\n \r\n );\r\n}\r\n\r\nexport default FileUploadView;","import React, { useEffect, useState } from 'react';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport { uiQuery } from '../state/ui.query';\r\nimport { uiService } from '../state/ui.service';\r\nimport { Alert } from '@material-ui/lab';\r\nimport { SnackBarState } from '../state/ui.store';\r\n\r\nexport default function SnackbarComponent() {\r\n const [state, setState] = useState({\r\n open: false,\r\n severity: 'success',\r\n message: null\r\n });\r\n\r\n useEffect(() => {\r\n const snackbarSubscription = uiQuery.snackbar$.subscribe(x => setState(x));\r\n\r\n return () => {\r\n snackbarSubscription.unsubscribe();\r\n }\r\n }, []);\r\n\r\n const handleClose = (event: React.SyntheticEvent | React.MouseEvent, reason?: string) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n uiService.closeSnackbar();\r\n };\r\n\r\n return (\r\n
\r\n \r\n {state.message}\r\n \r\n
\r\n )\r\n}","import React from \"react\";\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport { Icon } from \"@material-ui/core\";\r\n\r\nconst contactOptions = [\r\n { icon: 'mail_outline', text: 'eqchartersupport@equiniti.com' },\r\n { icon: 'phone', text: '0333 207 5968' },\r\n { icon: 'query_builder', text: 'Mon – Fri 9-5:30 excluding weekends and bank holidays' },\r\n];\r\n\r\nexport default function ContactOptions() {\r\n return (\r\n \r\n {contactOptions.map(x => {\r\n return (\r\n \r\n {x.icon}\r\n \r\n \r\n )\r\n })}\r\n \r\n );\r\n}","import React from \"react\";\r\nimport Popover from '@material-ui/core/Popover';\r\nimport Button from '@material-ui/core/Button';\r\nimport ContactOptions from './contact.options';\r\n\r\n\r\nexport default function ContactUs() {\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? 'simple-popover' : undefined;\r\n return (
\r\n \r\n \r\n \r\n \r\n
);\r\n}","import React from \"react\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport ContactUs from '../../contact/components';\r\n\r\nexport default function Unauthorized(props: { text: string, displayContactUs: boolean }) {\r\n return (
\r\n {props.text} {props.displayContactUs && } \r\n
);\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport ContactUs from '../modules/contact/components';\r\nimport { authorizationQuery } from '../modules/authorization/state/'\r\nimport { Redirect } from \"react-router-dom\";\r\nimport UnauthorizedComponent from '../modules/shared/components/unauthorized.component';\r\n\r\nexport default function Unauthorized() {\r\n const [isUserAuthorized, setIsUserAuthorized] = useState(false);\r\n\r\n useEffect(() => {\r\n const isUserAuthorizedSubscription = authorizationQuery.isUserAuthorizedToAnyAction$.subscribe(x => setIsUserAuthorized(x));\r\n\r\n return () => {\r\n isUserAuthorizedSubscription.unsubscribe();\r\n }\r\n }, []);\r\n\r\n return (
\r\n {isUserAuthorized && }\r\n \r\n
);\r\n}","import React from \"react\";\r\nimport ContactOptions from \"../modules/contact/components/contact.options\";\r\n\r\nexport default function ContactView() {\r\n return (\r\n

Contact us

\r\n \r\n
\r\n );\r\n}","import React, { ComponentType, ReactNode, useEffect, useState } from \"react\";\r\nimport { Route } from \"react-router-dom\";\r\nimport { authorizationQuery } from '../../authorization/state';\r\nimport { AuthorizedActions, AuthorizedActionsRoutes } from '../../authorization/state';\r\nimport UnauthorizedComponent from '../../shared/components/unauthorized.component';\r\n\r\nfunction ProtectedRoute(props: {\r\n component: ReactNode,\r\n actionId: AuthorizedActions\r\n}) {\r\n const [isUserAuthorized, setIsUserAuthorized] = useState(true);\r\n const [isLoadingActions, setIsLoadingActions] = useState(true);\r\n\r\n const route = AuthorizedActionsRoutes[AuthorizedActions[props.actionId]];\r\n\r\n useEffect(() => {\r\n const isUserAuthorizedSubscription = authorizationQuery.authorizedActions$.subscribe(actions => {\r\n setIsUserAuthorized(actions.some(action => {\r\n return action.actionId.toString() === AuthorizedActions[props.actionId]\r\n }));\r\n });\r\n\r\n const isLoadingActionsSubscription = authorizationQuery.isLoadingAuthorizedActions$.subscribe(x=> setIsLoadingActions(x));\r\n\r\n return () => {\r\n isUserAuthorizedSubscription.unsubscribe();\r\n isLoadingActionsSubscription.unsubscribe();\r\n }\r\n }, []);\r\n\r\n return (\r\n isUserAuthorized || isLoadingActions ? props.component : }\r\n />\r\n );\r\n\r\n}\r\n\r\nexport default ProtectedRoute;","import React, { useEffect, useState } from \"react\";\r\nimport { uiQuery } from \"../../../shared/state\";\r\nimport Grid from '@material-ui/core/Grid';\r\nimport ReportMenuItem from \"../../../shared/models/reportMenuItem\";\r\nimport { Card, CardContent, Typography } from '@material-ui/core';\r\nimport { useHistory } from 'react-router-dom';\r\nimport AssessmentRoundedIcon from '@material-ui/icons/AssessmentRounded';\r\nimport gray from '@material-ui/core/colors/grey';\r\n\r\nexport default function FavoriteReportsComponent() {\r\n const [reports, setReports] = useState([]);\r\n const history = useHistory();\r\n useEffect(() => {\r\n const accountInfoSubscription = uiQuery.favoriteReports$.subscribe(x => setReports(x));\r\n return () => {\r\n accountInfoSubscription.unsubscribe();\r\n }\r\n }, []);\r\n\r\n if (reports.length < 1) {\r\n return null;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n {reports.map(x => (\r\n \r\n history.push(x.redirectUrl)}>\r\n \r\n \r\n \r\n \r\n {x.title}\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n
);\r\n}","import React from \"react\";\r\nimport FavoriteReportsComponent from '../modules/dashboard/components/favoriteReports';\r\n\r\nexport default function WelcomeView() {\r\n return (

Welcome to EQ Insights Online

\r\n \r\n
);\r\n}","import { useCallback, useEffect, useState } from \"react\";\r\nimport config from '../../../../configuration/configFile/index';\r\n\r\ntype PwaPromptEvent = Event & {\r\n prompt: () => void,\r\n userChoice: Promise\r\n}\r\n\r\nconst useMobileDetector = () => {\r\n const isIos = /ipad|iphone|ipod/.test(window.navigator.userAgent.toLowerCase());\r\n const isInStandaloneMode = !!(window.navigator as any)?.standalone;\r\n\r\n return { isIos, isInStandaloneMode };\r\n};\r\n\r\nconst usePwa = () => {\r\n const [isPwaAvailable, setIsPwaAvailable] = useState(false);\r\n const [appInstalled, setAppInstalled] = useState(false);\r\n const [pwaPromptEvent, setPwaPromptEvent] = useState(null);\r\n const { isIos, isInStandaloneMode } = useMobileDetector();\r\n const { isModalInExpiry, setExpiryCookie } = useExpirationCookie(config?.pwa?.cookieExpiration || 14*24*60*60);\r\n\r\n useEffect(() => {\r\n if ((navigator as any)?.getInstalledRelatedApps){\r\n (async () => {\r\n const apps = await (navigator as any).getInstalledRelatedApps();\r\n if (apps.length > 0) setAppInstalled(true);\r\n })();\r\n }\r\n\r\n window.addEventListener('appinstalled', () => {\r\n setAppInstalled(true);\r\n });\r\n\r\n window.addEventListener('beforeinstallprompt', (e:Event) => {\r\n // Prevent the mini-infobar from appearing on mobile\r\n e.preventDefault();\r\n // Save event to call it in custom popup.\r\n setPwaPromptEvent(e as PwaPromptEvent);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (isIos) {\r\n return setIsPwaAvailable(!isModalInExpiry && !isInStandaloneMode);\r\n }\r\n setIsPwaAvailable(!isModalInExpiry && !appInstalled && !!pwaPromptEvent && !isInStandaloneMode);\r\n }, [isModalInExpiry, pwaPromptEvent, isInStandaloneMode, appInstalled, isIos]);\r\n\r\n const showPwaPrompt = useCallback(() => {\r\n if (!pwaPromptEvent) return;\r\n\r\n pwaPromptEvent.prompt();\r\n pwaPromptEvent.userChoice.then(() => setPwaPromptEvent(null));\r\n }, [ pwaPromptEvent ])\r\n\r\n return {\r\n isIos,\r\n isInStandaloneMode,\r\n setExpiryCookie,\r\n isPwaAvailable,\r\n showPwaPrompt,\r\n }\r\n};\r\n\r\nconst useExpirationCookie = (expirationSeconds: number) => {\r\n const isModalInExpiry = !!document.cookie.match('(^|;)\\\\s*addToHomeScreenExpiration\\\\s*=\\\\s*([^;]+)');\r\n const setExpiryCookie = () => {\r\n const expirationDate = new Date();\r\n expirationDate.setSeconds(expirationDate.getSeconds() + expirationSeconds);\r\n document.cookie = `addToHomeScreenExpiration=true; expires=${expirationDate.toUTCString()}; path=/`;\r\n }\r\n\r\n return { isModalInExpiry, setExpiryCookie }\r\n};\r\n\r\nexport {\r\n useExpirationCookie,\r\n usePwa,\r\n useMobileDetector\r\n}","import Button from '@material-ui/core/Button';\r\nimport { Close } from \"@material-ui/icons\";\r\nimport logo from '../../../../assets/eq_expert_logo.svg';\r\nimport IosShareIcon from '../../../../assets/ios_share_icon.png'\r\nimport './addToHomeScreen.css'\r\nimport { useState} from \"react\";\r\nimport { usePwa} from \"./addToHomeScreen.hooks\";\r\n\r\nconst AddToHomeScreen = () => {\r\n const { isPwaAvailable, isIos, setExpiryCookie, showPwaPrompt } = usePwa();\r\n const [showModal, setShowModal] = useState(true);\r\n\r\n return (!isPwaAvailable || !showModal) ? null : (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n EQ Insights Online\r\n

\r\n {window.location.hostname}\r\n {isIos &&\r\n \r\n To add this web app to home screen: tap ios share icon and then Add to Home Screen\r\n \r\n }\r\n
\r\n {\r\n setExpiryCookie();\r\n setShowModal(false);\r\n }}\r\n >\r\n \r\n \r\n
\r\n {!isIos &&\r\n
\r\n \r\n ADD TO HOME SCREEN\r\n \r\n
\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default AddToHomeScreen;","export default \"data:image/png;base64,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\"","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n BrowserRouter as Router,\r\n Redirect,\r\n Route,\r\n Switch,\r\n} from \"react-router-dom\";\r\nimport Navbar from '../modules/shared/components/navbar';\r\nimport { uiQuery } from '../modules/shared/state';\r\nimport { userSettingsService } from '../modules/shared/state/userSettings';\r\nimport ReportsView from './reports.view';\r\nimport FileUploadView from './file-upload.view';\r\nimport Snackbar from '../modules/shared/components/snackbar';\r\nimport UnauthorizedView from \"./unauthorized.view\";\r\nimport ContactView from \"./contact.view\";\r\nimport { MenuItemsSection } from \"../modules/shared/models/menuItemsSection\";\r\nimport { authorizationQuery } from '../modules/authorization/state';\r\nimport ProtectedRoute from '../modules/shared/routing/protected.route';\r\nimport { AuthorizedActions } from '../modules/authorization/state';\r\nimport WelcomeView from \"./welcome.view\";\r\nimport { AddToHomeScreen } from \"../modules/pwa/components\";\r\n\r\n\r\nexport function ProtectedRoutesView() {\r\n\r\n const [menuItems, setMenuItems] = useState(new Array());\r\n const [isUserAuthorized, setIsUserAuthorized] = useState(true);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n uiQuery.isMenuLoading$.subscribe(x => setIsLoading(x));\r\n\r\n const isUserAuthorizedSubscription = authorizationQuery.isUserAuthorizedToAnyAction$.subscribe(x => setIsUserAuthorized(x));\r\n\r\n const menuItemsSubscription = uiQuery.menuItems$.subscribe(x => setMenuItems(x));\r\n\r\n return () => {\r\n menuItemsSubscription.unsubscribe();\r\n isUserAuthorizedSubscription.unsubscribe();\r\n }\r\n }, []);\r\n\r\n const setReportAsFavorite = (id: string, isFavorite: boolean) => {\r\n userSettingsService.setReportAsFavorite(id, isFavorite);\r\n }\r\n\r\n return (\r\n \r\n \r\n <>\r\n {!isUserAuthorized && }\r\n \r\n \r\n \r\n \r\n \r\n

Dashboards

} />\r\n \r\n } />\r\n

Page not found

} />\r\n
\r\n \r\n
\r\n
);\r\n}\r\n\r\n\r\n","import { createMuiTheme } from '@material-ui/core/styles'\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: { main: '#DE0001' },\r\n secondary: { main: '#343534', contrastText: 'white' }\r\n },\r\n typography: {\r\n \"fontFamily\": `\"Avenir\", \"Calibri\", Candara, Segoe, \"Segoe UI\", Optima, Arial, sans-serif`,\r\n },\r\n overrides: {\r\n MuiButton: {\r\n root: {\r\n margin: '5px 0'\r\n }\r\n }\r\n }\r\n})\r\nexport default theme;","import config from '../configFile';\r\nexport default config.baseUrl;\r\n","import { configureBaseUrl } from \"./base-url.interceptor\";\r\nimport { configureContentTypeJson } from \"./content-type.interceptor\";\r\nimport { configureBearerToken } from \"./authorization.interceptor\";\r\nimport { configureErrorHandler } from './error-handler.interceptor';\r\n\r\nexport const configure = () => {\r\n configureBaseUrl();\r\n configureContentTypeJson();\r\n configureBearerToken();\r\n configureErrorHandler();\r\n}","import axios from 'axios';\r\nimport baseUrl from '../baseUrl';\r\n\r\nexport const configureBaseUrl = () => {\r\n axios.interceptors.request.use(config => {\r\n config.baseURL = baseUrl;\r\n return config;\r\n }, error => {\r\n Promise.reject(error)\r\n })\r\n}","import axios from 'axios';\r\n\r\nexport const configureContentTypeJson = () => {\r\n axios.interceptors.request.use(config => {\r\n config.headers['Content-Type'] = 'application/json';\r\n return config;\r\n }, error => {\r\n Promise.reject(error)\r\n })\r\n}","import axios from 'axios';\r\nimport { authQuery } from '../../modules/authentication/state';\r\n\r\nexport const configureBearerToken: Function = () => {\r\n axios.interceptors.request.use(config => {\r\n //todo authQuery.accountInfo if null\r\n config.headers['Authorization'] = `Bearer ${authQuery.accountInfo.jwtIdToken}`;\r\n return config;\r\n }, error => {\r\n Promise.reject(error)\r\n })\r\n}","import axios from 'axios';\r\nimport { uiService } from '../../modules/shared/state/ui.service';\r\nexport const configureErrorHandler = () => {\r\n axios.interceptors.response.use(response => (response)\r\n , error => {\r\n let errorMessage = 'Unexpected error, contact system administrator.';\r\n if (error.response) {\r\n errorMessage = error.response.data.message;\r\n } else if (error.request) {\r\n errorMessage = 'Communication with web server failed, contact system administrator.'\r\n } else {\r\n errorMessage = 'Unexpected error, contact system administrator.';\r\n }\r\n uiService.openSnackbar(errorMessage, 'error');\r\n return Promise.reject(error);\r\n })\r\n}","import { configure as configureInterceptors } from './interceptors'\r\nexport const configure = () => {\r\n configureInterceptors();\r\n}","import React from \"react\";\r\nimport AuthComponent from \"./modules/authentication/components/authentication.component\";\r\nimport { AuthenticationFailedView, ProtectedRoutesView } from './views'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport eqTheme from './themes/eq.theme';\r\nimport { configure } from './configuration';\r\nconfigure();\r\n\r\nconst AppComponent = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default AppComponent;\r\n\r\n","import { Button } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { authProvider } from '../modules/authentication/providers/authentication.provider';\r\n\r\nexport function AuthenticationFailedView() {\r\n return (\r\n <>\r\n

Authentication failed

\r\n authProvider.loginRedirect()}\r\n component='label'\r\n color='secondary'>\r\n Try again\r\n \r\n \r\n );\r\n}","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport * as serviceWorkerRegistration from './service-worker-registration';\r\nimport AppComponent from './app/app.component';\r\nimport './index.css';\r\n\r\nReactDOM.render(\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://cra.link/PWA\r\nserviceWorkerRegistration.register();","import { EntityState, EntityStore, StoreConfig } from '@datorama/akita';\r\nimport { ReportEmbedded } from './report-embedded.model';\r\n\r\nexport interface ReportEmbeddedState extends EntityState { }\r\n\r\nexport function createInitialState(): ReportEmbeddedState {\r\n return {\r\n embedDetails: {},\r\n };\r\n}\r\n\r\n@StoreConfig({\r\n name: 'report-embedded'\r\n})\r\nexport class ReportEmbeddedStore extends EntityStore {\r\n constructor() {\r\n super(createInitialState());\r\n }\r\n}\r\n\r\nexport const reportEmbeddedStore = new ReportEmbeddedStore();\r\n"],"sourceRoot":""}