{"version":3,"sources":["app/store/store.config.ts","app/store/store.types.ts","app/store/actions/todoCrud.actions.ts","app/store/actions/todoList.actions.ts","app/store/actions/adminPage/extensionsMetadataList.actions.ts","app/store/actions/adminPage/extensionMetadataCrud.actions.ts","app/store/actions/dashboardVisuals/dashboardvisualsConfig.action.ts","app/store/actions/dashboardVisuals/savedashboardVisualsConfig.action.ts","core/store/actions/app.actions.ts","core/store/actions/userProfile.actions.ts","core/store/actions/extensions.actions.ts","app/App.config.ts","core/utils/utils.ts","core/utils/pbitokenhelper.ts","core/store/reducers/app.reducer.ts","core/store/reducers/userProfile.reducer.ts","core/store/reducers/extensions.reducer.ts","core/store/selectors/app.selectors.ts","core/store/selectors/userProfile.selectors.ts","core/store/selectors/extensions.selectors.ts","core/store/store.types.ts","app/store/reducers/todoList.reducer.ts","app/store/reducers/todoCrud.reducer.ts","app/store/reducers/adminPage/extensionMetadataList.reducer.ts","app/store/reducers/adminPage/extensionMetadataCrud.reducer.ts","app/store/reducers/adminPage/extensionMetadataJsonUpload.reducer.ts","app/store/reducers/dashboardVisuals/dashboardvisualsconfig.reducer.ts","app/store/reducers/dashboardVisuals/saveDashboardVisualsConfig.reducer.ts","app/store/reducers/reducers.ts","app/store/selectors/todoCrud.selectors.ts","app/store/selectors/todoList.selectors.ts","app/store/selectors/adminPage/extensionMetadata.selectors.ts","app/store/selectors/adminPage/extensionMetadataCrud.selectors.ts","app/store/selectors/dashboardVisuals/dashboardvisualsconfig.selector.ts","app/store/selectors/dashboardVisuals/saveDashboardVisualsConfig.selector.ts","core/provider/AppBaseProvider.tsx","app/App.messages.ts","core/provider/AppSettingsProvider.tsx","core/provider/AppServiceProvider.tsx","app/components/footer/AppFooter.messages.ts","app/components/footer/AppFooter.styles.ts","app/components/footer/AppFooter.types.ts","app/components/footer/AppFooter.tsx","app/components/header/AppHeader.messages.ts","app/components/sample/Sample.styles.ts","app/components/sample/Sample.messages.tsx","app/components/sample/DonutChartExample.tsx","app/App.types.ts","app/components/sample/HelpExample.tsx","app/components/sample/ModalBasicExample.tsx","app/components/sample/Notification.ts","app/components/sample/ProfilePanelExample.tsx","app/components/sample/SettingsExample.tsx","app/components/sample/TableExample.tsx","app/components/sample/HomeContent.tsx","app/components/sample/DashboardContent.tsx","app/components/header/AppHeader.tsx","app/components/leftNav/AppLeftNav.messages.ts","app/App.navigation.messages.ts","app/components/leftNav/AppLeftNav.config.ts","app/App.navigation.ts","app/components/leftNav/AppLeftNav.tsx","app/components/settings/Settings.messages.tsx","app/components/settings/Settings.tsx","core/components/shell/Shell.styles.ts","core/components/shell/Shell.messages.ts","app/pages/adminPage/AdminPage.messages.ts","app/pages/adminPage/AdminPage.styles.ts","app/App.styles.ts","core/components/shared/loadingindicator.tsx","app/pages/adminPage/jsonTextModal/JsonTextModal.styles.ts","app/pages/adminPage/jsonTextModal/JsonTextModal.messages.ts","app/pages/adminPage/jsonTextModal/JsonTextModal.tsx","app/pages/adminPage/AdminPage.tsx","app/pages/dashboard/Dashboard.messages.ts","app/pages/dashboard/Dashboard.styles.ts","app/pages/dashboard/Dashboard.tsx","app/pages/home/Home.messages.ts","app/pages/home/Home.styles.ts","app/pages/home/Home.tsx","app/pages/notFound/NotFound.messages.ts","app/pages/notFound/NotFound.styles.ts","app/pages/notFound/NotFound.tsx","app/pages/todolist/ToDoList.messages.ts","app/pages/todolist/ToDoList.styles.ts","app/pages/todolist/UpdateToDo.tsx","app/pages/todolist/ToDoList.tsx","app/pages/signin/Signin.messages.ts","app/pages/signin/Signin.styles.ts","app/pages/signin/Signin.tsx","app/pages/reportsvisualsconfig/reportvisualsconfig.styles.ts","app/pages/reportsvisualsconfig/reportvisualsconfigComponent.tsx","core/components/shell/Graph.Config.ts","core/components/shell/Shell.tsx","core/components/dashboardEdit/DashboardEdit.styles.ts","core/components/dashboardEdit/DashboardEdit.message.ts","core/components/dashboardEdit/DashboardEdit.tsx","core/components/extension/Extension.messages.ts","core/components/extension/Extension.tsx","core/components/extension/Extension.config.ts","core/components/shared/error/PageError.styles.ts","core/components/shared/error/PageError.messages.ts","core/components/shared/error/PageError.tsx","core/components/shared/busyIndicator/BusyIndicator.tsx","core/components/tileList/TileList.styles.ts","core/components/tileList/TileList.tsx","app/App.routes.tsx","app/App.tsx","core/utils/AppInsights.js","index.tsx"],"names":["middlewares","thunk","FETCH_TODO_LIST_BEGIN","FETCH_TODO_LIST_SUCCESS","FETCH_TODO_LIST_FAILURE","CRUD_TODO_LIST_BEGIN","CRUD_TODO_LIST_SUCCESS","CRUD_TODO_LIST_FAILURE","FETCH_EXTENSIONMETADATA_LIST_BEGIN","FETCH_EXTENSIONMETADATA_LIST_SUCCESS","FETCH_EXTENSIONMETADATA_LIST_FAILURE","CRUD_EXTENSIONMETADATA_LIST_BEGIN","CRUD_EXTENSIONMETADATA_LIST_SUCCESS","CRUD_EXTENSIONMETADATA_LIST_FAILURE","EXTENSION_METADATA_JSON_UPLOAD_BEGIN","EXTENSION_METADATA_JSON_UPLOAD_SUCCESS","EXTENSION_METADATA_JSON_UPLOAD_FAILURE","FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN","FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS","FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE","SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN","SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS","SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE","crudToDoListBegin","type","crudToDoListSuccess","payload","crudToDoListError","error","fetchToDoList","httpClient","appConfig","async","dispatch","resource","apiConfig","url","concat","baseUrl","request","response","get","data","processTodos","err","todos","forEach","item","parts","title","split","length","state","fetchExtensionMetadataList","registrationConfig","apiEndpoint","trackPromise","processExtensionMetadataList","extensionList","postExtensionMetadata","extensionMetadataList","processExtensionMetadataSubmitList","post","extensionMetadataJsonUpload","jsonFileName","jsonText","fileName","json","toLowerCase","fetchDashboardVisualsConfig","visuals","v","v1","key","Key","name","Name","description","Description","component","Component","active","Active","attributes","getAttrivutes","push","ParseResponse","a","Attributes","Type","reportId","ReportId","embedURL","EmbedURL","accessToken","AccessToken","visualName","VisualName","pageName","PageName","visualTitle","VisualTitle","tags","Tags","saveDashboardVisualsConfig","visualsConfig","saveVisualsObj","reportVisuals","console","log","setCurrentTheme","currentTheme","SET_CURRENT_THEME","setCurrentLocale","SET_CURRENT_LOCALE","setInDashboardEditMode","inDashboardEditMode","SET_IN_DASHBOARD_EDIT_MODE","setDevLogIn","isDevLoggedIn","SET_IS_DEV_LOG_IN","fetchUserProfileSuccess","FETCH_USER_PROFILE_SUCCESS","emptyData","routes","extensions","catalogue","fetchExtensionsRegistration","testExtensions","appInsights","forceLoad","getState","extensionsRegistration","processExtensionsRegistration","FETCH_EXTENSIONS_REGISTRATION_SUCCESS","FETCH_EXTENSIONS_REGISTRATION_FAILURE","trackException","exception","Error","res","result","group","i","items","j","extension","find","ext","pages","page","tiles","tile","testExtension","enableSideLoading","value","files","appName","authConfig","clientId","process","authority","telemetryConfig","instrumentationKey","logPayload","UTPConfig","EnvironmentName","ServiceOffering","ServiceLine","Service","ComponentName","ComponentId","extensionConfig","RING","isMockData","botConfig","hostAppId","scriptUrl","globalSearchConfig","guidedTourConfig","ocvFeedbackConfig","appId","sdkUrl","notificaitonConfig","themeConfig","theme","loginOnStartup","enableUserSettingsApi","languageConfig","locales","navScrollBarWidth","getThemeByName","DarkTheme","DefaultTheme","pbitoken","GetPBIToken","authClient","useContext","ServiceContext","reduxDispatch","useDispatch","pbiAccessToken","useSelector","getPBIAccessToken","tokenRefreshTime","Date","now","expiresBy","acquireToken","then","token","newtoken","SET_PBI_ACCESS_TOKEN","setPBIAccessToken","generatePBIAccessToken","ex","storageLocale","localStorage","getItem","defaultLocale","navigator","language","storageThemeName","defaultThemeComponent","document","body","style","background","palette","white","initialAppState","locale","currentAppState","isReady","currentGuidedTourRunStatus","currentTestExtensoins","mockData","isDevLogIn","localeData","userProfileInitialState","userProfile","userPreference","tilesOrder","isLoading","initalExtensionsRegistration","extensionsRegistrationInitialState","appState","app","getCurrentTheme","createSelector","getIsDevLogIn","getCurrentAppState","getInDashboardEditMode","getCurrentLocale","userProfileState","getUserDashboardTiles","getUserProfileLoadingStatus","extensionsRegistrationState","getExtensionsRegistration","getExtensionsLoadingStatus","getExtensionsError","getReportExtensionTiles","reportExtn","reportTiles","filter","e","SET_CURRENT_APP_STATE","SET_IS_MOCK_DATA","SET_LOCALE_DATA","SET_CURRENT_TEST_EXTENSIONS","FETCH_EXTENSIONS_REGISTRATION_BEGIN","FETCH_USER_PROFILE_BEGIN","FETCH_USER_PROFILE_FAILURE","SET_USER_PROFILE_BEGIN","SET_USER_PROFILE_SUCCESS","SET_USER_PROFILE_ERROR","todoListInitialState","todoList","todoCrudInitialState","extensionMetadataListInitialState","extensionMetadataCrudInitialState","extensionMetadataJsonUploadInitialState","dashboardVisualsConfigInitialState","DashboardVisualsConfig","dashboardVisualsConfigSaveInitialState","reducers","combineReducers","arguments","undefined","action","newLocaleData","slice","payloadItem","isNew","index","todoCrud","extensionMetadataCrud","dashboardVisualsConfig","dashboardVisualsConfigSave","todoCrudState","todoListState","getToDoList","getToDoListLoadingStatus","getToDoListError","extensionMetadataListState","getExtensionMetadataList","getExtensionMetadataListLoadingStatus","getExtensionMetadataListError","extensionMetadataCrudState","getExtensionMetadataCrudLoadingStatus","getExtensionMetadataCrudError","extensionMetadataJsonUploadState","getExtensionMetadataJsonUploadLoadingStatus","getExtensionMetadataJsonUploadError","dashboardVisualsConfigState","getdashboardVisualsConfig","dashboardVisualsConfigSaveState","getdashboardVisualsConfigSaveLoadingStatus","history","createHistory","store","createStore","applyMiddleware","initializeBot","script","createElement","src","head","appendChild","initializeOcv","Window","window","OfficeBrowserFeedback","initOptions","stylesUrl","intlUrl","environment","primaryColour","secondaryColour","onError","bugForm","d","s","id","js","fjs","getElementsByTagName","getElementById","parentNode","insertBefore","startMultiFeedback_AllOptional","launchOptions","telemetryGroup","sourceContext","multiFeedback","catch","AppBaseProvider","props","useLoginOnStartup","_jsx","Provider","children","Router","addLocaleData","localeEn","localeDe","localeFr","localeHu","localeJa","localeIt","localeKo","localePl","localeRu","localeTr","localeZhCn","localeZhTw","localeEs","localeAr","localeBg","localeEl","localeId","localePt","localeRo","localeSr","localeTh","localeVi","localeHe","localeUk","messages","messagesDe","messagesFr","messagesHu","es","messagesEs","it","messagesIt","ja","messagesJa","ko","messagesKo","pl","messagesPl","ru","messagesRu","tr","messageTr","messagesZhCn","messagesZhTw","ar","messagesAr","bg","messagesBg","el","messagesEl","messagesId","pt","messagesPt","ro","messagesRo","sr","messagesSr","th","messagesTh","vi","messagesVi","he","messagesHe","uk","messagesUk","AppSettingsProvider","withRouter","currentLocale","currentLocaleRef","useRef","useEffect","addEventListener","ExtensionEventTypes","LOCALE_CHANGED","handleLocaleChange","THEME_CHANGED","handleThemeChange","DASHBOARD_EDIT_ACTION_SAVE","handleDashboardTileSave","removeEventListener","detail","selectedTheme","createTheme","loadTheme","renderMain","current","msg","IntlProvider","ThemeProvider","telemetryClient","TelemetryClient","defaultProperties","MSALV2Client","auth","redirectUri","location","origin","HttpClient","graphClient","GraphClient","reducerRegistry","ReducerRegistry","storeResult","StoreBuilder","configureLogger","configureSaga","build","AppServiceProvider","withStore","Shell","defineMessages","footerText","defaultMessage","getStyles","container","padding","backgroundColor","overflow","height","message","fontFamily","color","black","fontSize","margin","getClassNames","classNamesFunction","classes","injectIntl","ApplicationContext","intl","showFooter","className","Stack","Text","nowrap","formatMessage","retakeTour","retakeTourAriaLabel","localization","localizationAriaLabel","chatBot","financeSupportBotAriaLabel","feedback","profile","expandMenu","commandBarAriaLabel","globalSearch","globalSearchPlaceHolderText","helpSettingsTitle","helpSettingsBackButton","helpSettingsBackButtonAriaLabel","settingsNotificationsTitle","settingsSettingsTitle","settingsSettingsPrimaryButton","settingsSettingsPrimaryButtonAriaLabel","settingsSettingsSecondaryButton","settingsSettingsSecondaryButtonAriaLabel","privacyStatement","support","businessSupport","root","headingMain","marginLeft","purchaseOrderTileContainer","width","slimPurchaseOrderTileContainer","marginTop","aboutroot","maxWidth","helpPageTile","helpPageSubTile","helpPageSearchPlaceHolder","helpPageLinkAccessToken","helpPageLinkModalBasic","helpPageLinkDonutChart","helpPageLinkTable","settingsPageLinkGeneral","settingsPageLinkNotifications","settingsPageLinkSounds","settingsPageLinkFavorites","settingsPageLinkAccessibility","settingsPageLinkFabricComponent","about1","about2","about3","featureTitle","advanceFeatureTitle","feature1","feature2","feature3","feature4","feature5","feature6","feature7","feature8","feature9","feature10","feature11","feature12","feature13","feature14","feature15","dashboard1","dashboard2","DonutChartExample","cardConfig","cardTitle","minHeight","minWidth","handleGraphClick","alert","handleExpandClick","_jsxs","MsxCard","cardFrameContent","loading","onExpandClick","MsxDonutChart","selectedIndex","chartData","total","currency","slimLayout","HTTP_STATUS_NOT_FOUND","AppRoutePath","HelpSampleLinkStyles","mergeStyleSets","helpSampleLink","display","FontSizes","size14","fontWeight","FontWeights","semibold","handleNavigation","routePath","pathname","SearchBox","placeholder","onSearch","newValue","onFocus","onBlur","onChange","Link","href","onClick","dragOptions","moveMenuItemText","closeMenuItemText","menu","ContextualMenu","cancelIcon","iconName","ModalBasicExample","isModalOpen","setTrue","showModal","setFalse","hideModal","useBoolean","isDraggable","toggle","toggleIsDraggable","titleId","useId","Toggle","styles","toggleStyles","label","inlineLabel","checked","DefaultButton","text","Modal","titleAriaId","isOpen","onDismiss","isBlocking","containerClassName","contentStyles","main","header","IconButton","iconButtonStyles","iconProps","ariaLabel","getTheme","flexFlow","alignItems","fonts","xxLarge","flex","borderTop","themePrimary","neutralPrimary","overflowY","selectors","p","marginBottom","marginRight","rootHovered","neutralDark","initialNotifications","itemKey","displayStatus","status","timeDelivered","moment","add","messageBodyText","subjectIcon","subjectHeader","senderName","actionRequiredText","actionRequiredLink","senderImageUrl","eventTimeBlock","eventLocation","SettingsStyles","ProfilePanelSampleStyles","mergeStyles","ExtendedTypography","size14Semibold","HyperlinkColors","hyperlink","hyperlinkHoverPressed","rootPressed","icon","iconHovered","iconPressed","ActionButton","settingsIcon","ringerIcon","Volume2Icon","FavoriteStarIcon","TouchIcon","TableExample","columns","fieldName","onRender","row","quantity","headerClassName","rows","lineId","exportCsvProps","canExportCsv","csvFilename","csvHeaders","csvTelemetryProps","supplierId","currentCompanyCode","exportButtonLabel","Table","tableTitle","HomeContent","DashboardContent","AppHeader","context","React","newNotifications","setNewNotifications","useState","notificationItems","setNotificationItems","showDismissAllBool","setShowDismissAllBool","dismissOpenedPanel","setDismissOpenedPanel","user","useUser","isUserLoggedIn","isAppReady","AttentionTextStyles","attentionText","telemetryHook","trackMetric","metric","customProperties","trackEvent","event","trackTrace","trace","handleDismissPanel","getSettingsBody","Settings","onDismissPanel","getSearchSettings","_","onClear","disabled","getFarItems","iconOnly","OpenFDA","open","focus","ICM_Sev","obj","renderFullHeader","_user$name","_user$email","fullName","emailAddress","email","CoherenceHeader","headerLabel","appNameSettings","searchSettings","farRightSettings","additionalItems","settingsSettings","titleText","panelSize","CoherencePanelSize","medium","profileSettings","imageUrl","logOutLink","onLogOut","logOut","onDismissOpenedPanel","home","externalLinksGroupTitle","leftNav_84d99b33_14df_4b75_b244_5410e153ebfa","leftNav_0a7c9ffa_6e3b_4986_9539_9335e5e3d217","leftNav_cb1bbd4f_2763_4048_af0a_97e82391be17","leftNav_566bc8d3_3195_406b_b603_10a660b759ee","leftNav_37663ce7_32e5_44cd_85b7_29a83ca1cdc4","leftNav_d5932e50_3cfb_4886_8490_9b099d180324","leftNav_f167191b_cb15_40fd_ae15_74ba8b16c5d9","leftNav_662873ce_09cd_4728_8527_242b32749601","leftNav_d2dabc9b_ae9a_4c8f_a41a_7cccdfaca805","leftNav_cb1bbd4f_2763_4048_af0a_97e92391be17","leftNav_8b0d2bc8_d724_450a_8541_8ac91627e850","dashboard","adminPage","todolist","getConfig","extensionsPages","navLinkGroups","getMenuItems","extraLeftNavLinks","getExtraLeftNavMenuItems","groupTitleAttributes","links","isSelected","protocol","host","getNavObjectForPage","routeKey","x","navObj","getlocaleText","defaultValue","newKey","replace","descriptor","authorized","subPage","navMenuLinks","menuItems","getLeftNavMenuItems","showNavigation","y","AppLeftNav","extensionsRegistrationClient","ExtensionsRegistrationClient","renderLeftNav","extensionRoutes","getRoutes","getExtensions","layoutConfig","CoherenceNav","groups","onNavCollapsed","isNavCollapsed","settingsPanelAriaLable","generalTabTile","languageTabTile","extensionsTabTile","themeSelectionTile","languageSelectionTile","languageSelectionSubTile","applyButtonText","discardButtonText","themeLightText","themeDarkText","selectedLanguageItem","setSelectedLanguageItem","selectedThemeName","setSelectedThemeName","stackTokens","childrenGap","stackStyles","languageItems","getDisplayLocales","Object","keys","idx","handleLanguageChange","setItem","ev","option","newTheme","newEvent","CustomEvent","dispatchEvent","handleApplyButonClick","handleDiscardButtonClick","renderGeneralTab","choiceStyles","options","tokens","ChoiceGroup","defaultSelectedKey","renderLanguageTab","shouldDisableSave","PivotItem","headerText","Label","variant","Dropdown","selectedKey","dropdown","horizontal","Pivot","headerButtonProps","outline","loadingUserProfile","loadingExtensionRegistraton","pageTile","noDataFound","success","scrollablePaneStyles","position","top","bottom","right","_shellStyles","scrollablePaneCollapsed","left","scrollablePaneExpand","getScrollBarWidth","scrollDiv","setAttribute","contentDiv","offsetWidth","clientWidth","removeChild","rootDiv","paddingRight","paddingLeft","dividerLine","rowGap","mainPanelCollapsed","mainPanelExpand","LoadingIndicator","promiseInProgress","usePromiseTracker","opacity","zIndex","Loader","gapStackTokens","modalTitle","JsonTextModal","isJSONValid","setIsJSONValid","useAppInsightsContext","setJson","jsonTextFieldAttr","setJsonTextFieldAttr","borderColor","borderWidth","fileNameText","setFileNameText","extensionMetadataJsonUploadLoadingStatus","extensionMetadataJsonUploadError","hidden","onModalDismiss","multiLineTextFieldStyle","fieldGroup","onJSONChange","trim","ValidateJSON","JSON","parse","onFilenameChange","onUploadButtonClick","grow","verticalAlign","Item","TextField","ScrollablePane","multiline","autoAdjustHeight","PrimaryButton","GridColumnConfig","editable","dataType","isResizable","includeColumnInExport","includeColumnInSearch","applyColumnFilter","inputType","EditControlType","MultilineTextField","DropDown","dropdownValues","AdminPage","extensionMetadataListLoadingError","extensionMetadataCrudLoadingStatus","setItems","jsonTextModalDialogObj","setJsonTextModalDialogObj","visible","fetchExtensionsList","onGridSave","_grid_row_operation_","Operation","None","onUploadClick","indexOf","toast","POSITION","TOP_CENTER","renderDataLoadingErrorComponent","PageError","ToastContainer","linkSize","PivotLinkSize","large","EditableGrid","enableSave","layoutMode","DetailsListLayoutMode","justified","selectionMode","SelectionMode","multiple","enableRowEdit","enableRowEditCancel","enableCellEdit","enableTextFieldEditMode","enableTextFieldEditModeCancel","enableGridRowsDelete","enableUnsavedEditIndicator","enableGridReset","enableRowAddWithValues","enable","enableRowsCounterInPanel","enableSingleClickCellEdit","Dashboard","extensionsError","DashboardEdit","loadingData","tileContainer","Home","TileList","isEdit","pageDescription","homePage","homeLink","textDecoration","NotFound","allowExtensions","to","colId","colTitle","colOwner","colTask","addNewButtonText","addTaskTitle","editTaskTitle","updateFormSubmitButtonText","modalCloseTitle","exportToCSV","actionButtonLink","deleteButtonLink","UpdateToDo","toDo","setTitle","owner","handleSubmitClick","newToDo","onSubmitClick","onTitleChange","required","ToDoList","toDoListLoadingStatus","toDoListLoadingError","tasks","setTasks","showDetails","setShowDetails","currentToDo","setCurrentToDo","tasksRef","handleAddToDoClick","handleDeleteClick","todo","deleteToDo","delete","newTodos","closeDetails","renderToDoId","todoDeleteLinkId","TooltipHost","content","tooltipProps","onKeyDown","keyCode","renderToDoTitle","handleToDoIdClick","editToDo","newTodo","patch","addToDo","renderDetails","MsxModal","MsxModalHeight","Max","closeButtonTooltipText","renderBodyComponent","subTitle","getStartedButtonText","learnButtonText","learnLink","Signin","handleGetStartedButonClick","login","horizontalAlign","Image","alt","target","controlClass","Embedcontainer","searchStyles","submitStyles","gridStyle","border","dropdownStyles","dropdownItemsWrapper","maxHeight","stackTokens2","teachingBubbleVisible","toggleTeachingBubbleVisible","ReportsList","setReportsList","WSsList","setWSsList","AppsList","setAppsList","WSnAppsList","setWSnAppsList","SelectedWSId","setSelectedWSId","SelectedReport","setSelectedReport","setAccessToken","accessToken1","setAccessToken1","setreportId","setembedURL","loadReport","setloadReport","reportvisualsList","setreportvisualsList","selectedvisualsList","setselectedvisualsList","savedVisualsList","saveDashboardVisualsConfigLoadingStatus","loadedReport","setLoadedReport","gridItemSelection","setgridItemSelection","selectionDetails","setSelectionDetails","selectedItems","setSelectedItems","selectedIndices","setSelectedIndices","_selection","Selection","onSelectionChanged","count","getSelectedCount","getSelection","getSelectedIndices","_getSelectionDetails","setcolumns","isSorted","isSortedDescending","sortAscendingAriaLabel","sortDescendingAriaLabel","gridColumns","setGridColumns","Picker","pickerOptions","pickerTags","minCharLimitForSuggestions","tagsLimit","reportConfig","setReportConfig","embedUrl","tokenType","models","TokenType","Aad","settings","panes","filters","expanded","bookmarks","BackgroundType","Default","fetchPBIAccessToken","apiEndPoint","fetch","method","headers","fetchWSforUserSuccess","fetchWSforUser","fetchAppsforUser","fetchReportsforWS","loadWSnApps","toString","savedVisuals","visual","isActive","loadSavedVisual","eventHandlersMap","Map","fetchReportsforUserSuccess","errorReportsCallBack","ResponseList","map","sort","o1","o2","toUpperCase","fetchAppsforUserSuccess","errorAppsCallBack","unshift","itemType","DropdownMenuItemType","Divider","Header","item1","onWSorAppSelectionChange","onReportSelectionChange","loadVisuals","getPages","getVisuals","sortedVisuals","compare","b","addVisuals","newselectedVisualsList","getVisualObject","saveSubmitVisuals","newselectedVisualsLstSave","getReportVisualObject","report","config","getTags","t","Fabric","multiSelect","_Fragment","verticalFill","PowerBIEmbed","embedConfig","eventHandlers","cssClassName","getEmbeddedComponent","embeddedReport","DetailsList","setKey","selection","fixedColumns","selectionPreservedOnEmptyClick","ariaLabelForSelectionColumn","ariaLabelForSelectAllCheckbox","checkButtonAriaLabel","checkboxVisibility","CheckboxVisibility","always","Separator","enableColumnEdit","enableBulkEdit","enableExport","enableColumnFilters","onGridSelectionChange","GraphConfig","Scopes","userDashboardTiles","userProfileLoadingStatus","extensionsLoadingStatus","showFabricComponent","setShowFabricComponent","isStartupError","activateStartupError","dismissStartupError","startupError","setStartupError","setIsUserLoggedIn","setIsNavCollapsed","loadStartupData","handleResize","isLoggedIn","gClient","Client","init","authProvider","done","api","query","selectedG","g","loadStartupDataAfterAuthorization","hasStartupDataLoaded","Promise","resolve","reject","fetchUserProfile","themeName","stringify","handleHeaderButtonAccess","ms","setTimeout","showFeedback","querySelector","handleFabricVisibilityChange","isVisible","handleNavCollapsed","isCollapsed","getExtensionsPages","getThemeCustomizations","DarkCustomizations","CoherenceCustomizations","renderApp","themeCustomizations","Customizer","onFabricVisibilityChanged","dispatchUpdateLocaleAction","BrowserRouter","tabIndex","BusyIndicator","onRenderRoutes","Switch","Route","exact","path","role","newAppState","contextValue","paddingTop","idPrefix","dataLoadingText","dashboardHeadingText","revertToDefaultButtonText","addNewCardButtonText","cancelEditButtonText","editDashboardButtonText","doneEditingButtonText","addnewCardHeadingText","addNewCardFooterAddButtonText","addNewCardFooterCancelButtonText","tileExtensions","getExtensionsTiles","displayTiles","dashboardComponentMessage","handleSaveChanges","handleBeginChanges","handleCancelChanges","SortableItem","SortableElement","_ref","SortableList","SortableContainer","_ref2","wrap","renderBody","cursor","onSortEnd","_ref3","oldIndex","newIndex","axis","useDragHandle","distance","getTiles","Extension","componentKey","isDashboard","MsxDashboard","onRenderBody","onBeginChanges","onCancelChanges","onSaveChanges","subHeading","assign","IsMockData","API_ENDPOINT","INVOICE_API_ENDPOINT","USERPROFILE_API_ENDPOINT","USERMANAGEMENT_API_ENDPOINT","INVOICE_RESOURCE_ID","INVOICE_RESOURCE_ID_MSA","OCP_APIM_SUBSCRIPTION_KEY","msgBarVisible","setMsgBarVisible","handleRouteNavigation","route","handleLaunchFeedback","extensionKey","handleLaunchChatBot","renderExtension","attributes0","currentTile","getTileAttributes","MsxExtension","onNavigateToRoute","onLaunchChatBot","onLaunchFeedback","renderRequestOtherAccess","accessDetailsArr","MsgBarList","elem","primaryMessage","sGGroupAlias","underline","linkMessage","MessageBar","dismissButtonAriaLabel","accessDetails","contentContainer","flexDirection","errorInfo","details","retryButton","detailsList","listStyle","retryText","handleRetry","reload","renderErrorContent","alignSelf","Spinner","ariaLive","labelPosition","tileAttributes","findIndex","MsxTileList","Routes","extensonPages","render","App","renderRoutes","browserHistory","createBrowserHistory","basename","reactPlugin","ReactPlugin","ApplicationInsights","connectionString","identifier","loadAppInsights","initializeIcons","ReactDOM","AppInsightsContext"],"mappings":"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","file":"static/js/main.5ec79157.chunk.js","sourcesContent":["import { createStore, applyMiddleware } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { logger } from 'redux-logger';\r\nimport { Middleware } from 'redux';\r\nimport { reducers } from '.';\r\n\r\nconst middlewares: Middleware[] = [thunk];\r\n\r\nif (process.env.NODE_ENV === `development`) {\r\n middlewares.push(logger);\r\n}\r\n\r\nexport const configureStore = () => {\r\n let store = createStore(reducers, applyMiddleware(...middlewares));\r\n return { store };\r\n};\r\n\r\n","import { IToDo } from '../models';\r\nimport { AxiosError } from 'axios';\r\nimport { ReduxExtensionsRegistrationState, ReduxUserProfileState, ReduxAppState } from '../../core/store'\r\nimport { IExtensionMetadata } from '../models/IExtensionMetadata';\r\nimport { IReportVisualProperties } from '../models/IReportVisualProperties'\r\n\r\nexport interface ReduxExtensionMetadataState {\r\n extensionMetadataList: IExtensionMetadata[];\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxExtensionMetadataCrudState {\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxExtensionMetadataJsonUploadState {\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxToDoListState {\r\n todoList: IToDo[];\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxToDoCrudState {\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxDashboardVisualsConfigState {\r\n DashboardVisualsConfig: IReportVisualProperties[];\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxDashboardVisualsConfigSaveState{\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxRootState {\r\n app: ReduxAppState;\r\n extensionsRegistration: ReduxExtensionsRegistrationState;\r\n userProfile: ReduxUserProfileState;\r\n todoList: ReduxToDoListState;\r\n todoCrud: ReduxToDoCrudState;\r\n dashboardVisualsConfig: ReduxDashboardVisualsConfigState;\r\n dashboardVisualsConfigSave: ReduxDashboardVisualsConfigSaveState;\r\n extensionMetadataList: ReduxExtensionMetadataState;\r\n extensionMetadataCrud: ReduxExtensionMetadataCrudState;\r\n extensionMetadataJsonUpload: ReduxExtensionMetadataJsonUploadState;\r\n}\r\n\r\nexport const FETCH_TODO_LIST_BEGIN = 'FETCH_TODO_LIST_BEGIN';\r\nexport const FETCH_TODO_LIST_SUCCESS = 'FETCH_TODO_LIST_SUCCESS';\r\nexport const FETCH_TODO_LIST_FAILURE = 'FETCH_TODO_LIST_FAILURE';\r\n\r\nexport const CRUD_TODO_LIST_BEGIN = 'CRUD_TODO_LIST_BEGIN';\r\nexport const CRUD_TODO_LIST_SUCCESS = 'CRUD_TODO_LIST_SUCCESS';\r\nexport const CRUD_TODO_LIST_FAILURE = 'CRUD_TODO_LIST_FAILURE';\r\n\r\nexport const FETCH_EXTENSIONMETADATA_LIST_BEGIN = 'FETCH_EXTENSIONMETADATA_LIST_BEGIN';\r\nexport const FETCH_EXTENSIONMETADATA_LIST_SUCCESS = 'FETCH_EXTENSIONMETADATA_LIST_SUCCESS';\r\nexport const FETCH_EXTENSIONMETADATA_LIST_FAILURE = 'FETCH_EXTENSIONMETADATA_LIST_FAILURE';\r\n\r\nexport const CRUD_EXTENSIONMETADATA_LIST_BEGIN = 'CRUD_EXTENSIONMETADATA_LIST_BEGIN';\r\nexport const CRUD_EXTENSIONMETADATA_LIST_SUCCESS = 'CRUD_EXTENSIONMETADATA_LIST_SUCCESS';\r\nexport const CRUD_EXTENSIONMETADATA_LIST_FAILURE = 'CRUD_EXTENSIONMETADATA_LIST_FAILURE';\r\n\r\nexport const EXTENSION_METADATA_JSON_UPLOAD_BEGIN = 'EXTENSION_METADATA_JSON_UPLOAD_BEGIN';\r\nexport const EXTENSION_METADATA_JSON_UPLOAD_SUCCESS = 'EXTENSION_METADATA_JSON_UPLOAD_SUCCESS';\r\nexport const EXTENSION_METADATA_JSON_UPLOAD_FAILURE = 'EXTENSION_METADATA_JSON_UPLOAD_FAILURE';\r\n\r\nexport const FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN = 'FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN';\r\nexport const FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS = 'FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS';\r\nexport const FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE = 'FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE';\r\n\r\nexport const SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN = 'SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN';\r\nexport const SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS = 'SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS';\r\nexport const SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE = 'SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE';\r\n\r\n","\r\nimport { AxiosError } from 'axios';\r\nimport { IHttpClient, IHttpClientRequest, IPortalConfig } from '@msx/platform-services';\r\nimport { IToDo } from '../../models';\r\nimport {\r\n CRUD_TODO_LIST_BEGIN,\r\n CRUD_TODO_LIST_SUCCESS,\r\n CRUD_TODO_LIST_FAILURE,\r\n} from '..';\r\n\r\n\r\nexport const crudToDoListBegin = () => ({\r\n type: CRUD_TODO_LIST_BEGIN\r\n});\r\n\r\nexport const crudToDoListSuccess = (payload: IToDo) => ({\r\n type: CRUD_TODO_LIST_SUCCESS,\r\n payload: payload\r\n});\r\n\r\nexport const crudToDoListError = (error: AxiosError) => ({\r\n type: CRUD_TODO_LIST_FAILURE,\r\n payload: error\r\n});\r\n\r\n\r\nexport const addToDo = (httpClient: IHttpClient, todo: IToDo, appConfig:IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(crudToDoListBegin());\r\n try {\r\n const url = `${appConfig.apiConfig.baseUrl}TodoList`;\r\n const newTodo = {\r\n ...todo,\r\n title: todo.title + '|' + todo.state\r\n }\r\n const request: IHttpClientRequest = {\r\n resource: appConfig.apiConfig.resource,\r\n data: newTodo,\r\n };\r\n const response: any = await httpClient.post(url, request);\r\n dispatch(crudToDoListSuccess(response.data ? response.data : null));\r\n } catch (err) {\r\n dispatch(crudToDoListError(err));\r\n }\r\n }\r\n}\r\n\r\nexport const editToDo = (httpClient: IHttpClient, todo: IToDo, appConfig:IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(crudToDoListBegin());\r\n try {\r\n const url = `${appConfig.apiConfig.baseUrl}TodoList/${todo.id}`;\r\n const newTodo = {\r\n ...todo,\r\n title: todo.title + '|' + todo.state\r\n }\r\n const request: IHttpClientRequest = {\r\n resource: appConfig.apiConfig.resource,\r\n data: newTodo,\r\n };\r\n const response: any = await httpClient.patch(url, request);\r\n dispatch(crudToDoListSuccess(response.data ? response.data : null));\r\n } catch (err) {\r\n dispatch(crudToDoListError(err));\r\n }\r\n }\r\n}\r\n\r\nexport const deleteToDo = (httpClient: IHttpClient, todo: IToDo, appConfig:IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(crudToDoListBegin());\r\n try {\r\n const url = `${appConfig.apiConfig.baseUrl}TodoList/${todo.id}`;\r\n const request: IHttpClientRequest = {\r\n resource: appConfig.apiConfig.resource,\r\n };\r\n const response: any = await httpClient.delete(url, request);\r\n dispatch(crudToDoListSuccess(response.data ? response.data : null));\r\n } catch (err) {\r\n dispatch(crudToDoListError(err));\r\n }\r\n }\r\n}\r\n","import { AxiosError } from 'axios';\r\nimport { Dispatch } from 'redux';\r\nimport { IHttpClient, IHttpClientRequest, IPortalConfig } from '@msx/platform-services';\r\nimport { IToDo } from '../../models';\r\nimport {\r\n FETCH_TODO_LIST_BEGIN,\r\n FETCH_TODO_LIST_SUCCESS,\r\n FETCH_TODO_LIST_FAILURE,\r\n} from '..';\r\n\r\nexport const fetchToDoListBegin = () => ({\r\n type: FETCH_TODO_LIST_BEGIN\r\n});\r\n\r\nexport const fetchToDoListSuccess = (payload: IToDo[]) => ({\r\n type: FETCH_TODO_LIST_SUCCESS,\r\n payload: payload\r\n});\r\n\r\nexport const fetchToDoListError = (error: AxiosError) => ({\r\n type: FETCH_TODO_LIST_FAILURE,\r\n payload: error\r\n});\r\n\r\nexport const fetchToDoList = (httpClient: IHttpClient, appConfig:IPortalConfig) => {\r\n return async (dispatch: Dispatch) => {\r\n dispatch(fetchToDoListBegin());\r\n try {\r\n const resource = appConfig.apiConfig.resource;\r\n const url = `${appConfig.apiConfig.baseUrl}TodoList`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n };\r\n const response: any = await httpClient.get(url, request);\r\n dispatch(fetchToDoListSuccess(response.data ? processTodos(response.data) : null));\r\n } catch (err) {\r\n dispatch(fetchToDoListError(err));\r\n }\r\n }\r\n}\r\n\r\nconst processTodos = (todos) => {\r\n todos.forEach((item) => {\r\n const parts = item.title.split('|');\r\n item.title = parts[0];\r\n if (parts.length > 0) {\r\n item.state = parts[1];\r\n }\r\n });\r\n return todos;\r\n}","import { AxiosError } from 'axios';\r\nimport { Dispatch } from 'redux';\r\nimport { IHttpClient, IHttpClientRequest, IPortalConfig } from '@msx/platform-services';\r\nimport {\r\n FETCH_EXTENSIONMETADATA_LIST_BEGIN,\r\n FETCH_EXTENSIONMETADATA_LIST_SUCCESS,\r\n FETCH_EXTENSIONMETADATA_LIST_FAILURE,\r\n} from '../..';\r\nimport { IExtensionMetadata } from '../../../models/IExtensionMetadata';\r\nimport { trackPromise } from 'react-promise-tracker';\r\n\r\nexport const fetchExtensionMetadataListBegin = () => ({\r\n type: FETCH_EXTENSIONMETADATA_LIST_BEGIN\r\n});\r\n\r\nexport const fetchExtensionMetadataListSuccess = (payload: IExtensionMetadata[]) => ({\r\n type: FETCH_EXTENSIONMETADATA_LIST_SUCCESS,\r\n payload: payload\r\n});\r\n\r\nexport const fetchExtensionMetadataListError = (error: AxiosError) => ({\r\n type: FETCH_EXTENSIONMETADATA_LIST_FAILURE,\r\n payload: error\r\n});\r\n\r\nexport const fetchExtensionMetadataList = (httpClient: IHttpClient, appConfig:IPortalConfig) => {\r\n return async (dispatch: Dispatch) => {\r\n dispatch(fetchExtensionMetadataListBegin());\r\n try {\r\n const resource = appConfig.registrationConfig.resource;\r\n const url = `${appConfig.registrationConfig.apiEndpoint}/List`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n };\r\n const response: any = await trackPromise(httpClient.get(url, request));\r\n dispatch(fetchExtensionMetadataListSuccess(response.data ? processExtensionMetadataList(response.data) : null));\r\n } catch (err) {\r\n dispatch(fetchExtensionMetadataListError(err));\r\n }\r\n }\r\n}\r\n\r\nconst processExtensionMetadataList = (extensionList) => {\r\n extensionList.forEach((item) => {\r\n if(typeof item['isActive'] == \"boolean\"){\r\n switch(item['isActive']){\r\n case true:\r\n item['isActive'] = \"True\"\r\n break;\r\n case false:\r\n item['isActive'] = \"False\"\r\n break;\r\n }\r\n }\r\n });\r\n return extensionList;\r\n}","\r\nimport { AxiosError } from 'axios';\r\nimport { IHttpClient, IHttpClientRequest, IPortalConfig } from '@msx/platform-services';\r\nimport { IExtensionMetadata } from '../../../models/IExtensionMetadata';\r\nimport { \r\n CRUD_EXTENSIONMETADATA_LIST_BEGIN, \r\n CRUD_EXTENSIONMETADATA_LIST_FAILURE, \r\n CRUD_EXTENSIONMETADATA_LIST_SUCCESS,\r\n EXTENSION_METADATA_JSON_UPLOAD_BEGIN,\r\n EXTENSION_METADATA_JSON_UPLOAD_SUCCESS,\r\n EXTENSION_METADATA_JSON_UPLOAD_FAILURE \r\n} from '../..';\r\nimport { trackPromise } from 'react-promise-tracker';\r\n\r\n\r\nexport const crudExtensionMetadataListBegin = () => ({\r\n type: CRUD_EXTENSIONMETADATA_LIST_BEGIN\r\n});\r\n\r\nexport const crudExtensionMetadataListSuccess = (payload: IExtensionMetadata) => ({\r\n type: CRUD_EXTENSIONMETADATA_LIST_SUCCESS,\r\n payload: payload\r\n});\r\n\r\nexport const crudExtensionMetadataListError = (error: AxiosError) => ({\r\n type: CRUD_EXTENSIONMETADATA_LIST_FAILURE,\r\n payload: error\r\n});\r\n\r\nexport const extensionMetadataJsonUploadBegin = () => ({\r\n type: EXTENSION_METADATA_JSON_UPLOAD_BEGIN\r\n});\r\n\r\nexport const extensionMetadataJsonUploadSuccess = (payload: IExtensionMetadata) => ({\r\n type: EXTENSION_METADATA_JSON_UPLOAD_SUCCESS,\r\n payload: payload\r\n});\r\n \r\nexport const extensionMetadataJsonUploadError = (error: AxiosError) => ({\r\n type: EXTENSION_METADATA_JSON_UPLOAD_FAILURE,\r\n payload: error\r\n});\r\n\r\nexport const postExtensionMetadata = (httpClient: IHttpClient, extensionMetadataList: IExtensionMetadata[], appConfig:IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(crudExtensionMetadataListBegin());\r\n try {\r\n const resource = appConfig.registrationConfig.resource;\r\n const url = `${appConfig.registrationConfig.apiEndpoint}`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n data: processExtensionMetadataSubmitList(extensionMetadataList)\r\n };\r\n const response: any = await trackPromise(httpClient.post(url, request));\r\n dispatch(crudExtensionMetadataListSuccess(response.data ? response.data : null));\r\n } catch (err) {\r\n dispatch(crudExtensionMetadataListError(err));\r\n }\r\n \r\n }\r\n}\r\n\r\nexport const extensionMetadataJsonUpload = (httpClient: IHttpClient, jsonFileName: string, jsonText: string, appConfig:IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(extensionMetadataJsonUploadBegin());\r\n try {\r\n const resource = appConfig.registrationConfig.resource;\r\n const url = `${appConfig.registrationConfig.apiEndpoint}/Json`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n data: { fileName: jsonFileName, json: jsonText }\r\n };\r\n const response: any = await trackPromise(httpClient.post(url, request));\r\n dispatch(extensionMetadataJsonUploadSuccess(response.data ? response.data : null));\r\n } catch (err) {\r\n dispatch(extensionMetadataJsonUploadError(err));\r\n }\r\n }\r\n}\r\n\r\nconst processExtensionMetadataSubmitList = (extensionList) => {\r\n extensionList.forEach((item) => {\r\n if(typeof item['isActive'] != \"boolean\"){\r\n item['isActive'] = (item['isActive'].toLowerCase() == \"true\")\r\n }\r\n });\r\n return extensionList;\r\n}","\r\nimport { AxiosError } from 'axios';\r\nimport { IHttpClient, IHttpClientRequest, IPortalConfig } from '@msx/platform-services';\r\nimport { IReportVisualProperties } from '../../../models/IReportVisualProperties'\r\nimport {\r\n FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN,\r\n FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS,\r\n FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE,\r\n} from '../..';\r\nimport { trackPromise } from 'react-promise-tracker';\r\n\r\nexport const fetchDashboardVisualsConfigBegin = () => ({\r\n type: FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN\r\n});\r\n\r\nexport const fetchDashboardVisualsConfigSuccess = (payload: IReportVisualProperties[]) => ({\r\n type: FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS,\r\n payload: payload\r\n});\r\n\r\nexport const fetchDashboardVisualsConfigError = (error: AxiosError) => ({\r\n type: FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE,\r\n payload: error\r\n});\r\n\r\n\r\nexport const fetchDashboardVisualsConfig = (httpClient: IHttpClient, appConfig: IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(fetchDashboardVisualsConfigBegin());\r\n try {\r\n //let data = LoadMockData(); \r\n //dispatch(fetchDashboardVisualsConfigSuccess(data));\r\n const resource = appConfig.registrationConfig.resource;\r\n const url = `${appConfig.apiConfig.baseUrl}UserPreference`;\r\n const request: IHttpClientRequest = {\r\n resource: resource\r\n };\r\n const response: any = await trackPromise(httpClient.get(url, request));\r\n dispatch(fetchDashboardVisualsConfigSuccess(response.data ? ParseResponse(response.data) : null));\r\n } catch (err) {\r\n dispatch(fetchDashboardVisualsConfigError(err));\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction ParseResponse(data: any) {\r\n let visuals: IReportVisualProperties[] = [];\r\n if (data) {\r\n data.forEach(v => {\r\n let v1: IReportVisualProperties = {\r\n key: v.Key,\r\n name: v.Name,\r\n description: v.Description,\r\n component: v.Component,\r\n active: v.Active,\r\n attributes: getAttrivutes(v)\r\n };\r\n\r\n visuals.push(v1);\r\n });\r\n }\r\n return visuals;\r\n}\r\n\r\nfunction getAttrivutes(data) {\r\n let a: any;\r\n if (data.Attributes) {\r\n a = {\r\n type: data.Attributes.Type,\r\n reportId: data.Attributes.ReportId,\r\n embedURL: data.Attributes.EmbedURL,\r\n accessToken: data.Attributes.AccessToken,\r\n visualName: data.Attributes.VisualName,\r\n pageName: data.Attributes.PageName,\r\n visualTitle: data.Attributes.VisualTitle,\r\n tags: data.Attributes.Tags\r\n }\r\n }\r\n else {\r\n a = {\r\n type: \"\",\r\n reportId: \"\",\r\n embedURL: \"\",\r\n accessToken: \"\",\r\n visualName: \"\",\r\n pageName: \"\",\r\n visualTitle: \"\",\r\n tags: []\r\n };\r\n }\r\n return a;\r\n}\r\n\r\n","\r\nimport { AxiosError } from 'axios';\r\nimport { IHttpClient, IHttpClientRequest, IPortalConfig } from '@msx/platform-services';\r\nimport { IReportVisualProperties } from '../../../models/IReportVisualProperties';\r\nimport { \r\n SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN, \r\n SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS, \r\n SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE,\r\n} from '../..';\r\nimport { trackPromise } from 'react-promise-tracker';\r\n\r\nexport const saveDashboardVisualsConfigBegin = () => ({\r\ntype: SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN\r\n});\r\n\r\nexport const saveDashboardVisualsConfigSuccess = (payload: IReportVisualProperties) => ({\r\n type: SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS,\r\n payload: payload\r\n});\r\n\r\nexport const saveDashboardVisualsConfigError = (error: AxiosError) => ({\r\n type: SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE,\r\n payload: error\r\n});\r\n\r\nexport const saveDashboardVisualsConfig = (httpClient: IHttpClient, visualsConfig: IReportVisualProperties[], appConfig:IPortalConfig) => {\r\n return async (dispatch: any) => {\r\n dispatch(saveDashboardVisualsConfigBegin());\r\n let saveVisualsObj : any = {\r\n reportVisuals : visualsConfig\r\n }\r\n try {\r\n const resource = appConfig.registrationConfig.resource;\r\n //const url = `${appConfig.registrationConfig.apiEndpoint}`;\r\n const url = `${appConfig.apiConfig.baseUrl}UserPreference`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n data: saveVisualsObj\r\n };\r\n console.log(request);\r\n const response: any = await trackPromise(httpClient.post(url, request));\r\n dispatch(saveDashboardVisualsConfigSuccess(response.data ? response.data : null));\r\n } catch (err) {\r\n dispatch(saveDashboardVisualsConfigError(err));\r\n }\r\n \r\n }\r\n}\r\n","import { IAppState, IKeyValueItem } from '@msx/platform-services'\r\nimport {\r\n SET_CURRENT_THEME,\r\n SET_CURRENT_APP_STATE,\r\n SET_CURRENT_LOCALE,\r\n SET_IS_MOCK_DATA,\r\n SET_LOCALE_DATA,\r\n SET_IN_DASHBOARD_EDIT_MODE,\r\n SET_CURRENT_TEST_EXTENSIONS,\r\n SET_IS_DEV_LOG_IN,\r\n SET_PBI_ACCESS_TOKEN,\r\n ReduxPBITokenState\r\n} from '..';\r\n\r\nexport const setPBIAccessToken = (pbiAccessToken : ReduxPBITokenState) => ({\r\n type : SET_PBI_ACCESS_TOKEN,\r\n payload : pbiAccessToken\r\n});\r\n\r\nexport const setCurrentTheme = (currentTheme: any) => ({\r\n type: SET_CURRENT_THEME,\r\n payload: currentTheme\r\n});\r\n\r\nexport const setMockData = (mockData: boolean) => ({\r\n type: SET_IS_MOCK_DATA,\r\n payload: mockData\r\n});\r\n\r\nexport const setCurrentTestExtensions = (extensions: IKeyValueItem[]) => ({\r\n type: SET_CURRENT_TEST_EXTENSIONS,\r\n payload: extensions\r\n});\r\n\r\nexport const setLocaleData = (data: IKeyValueItem[]) => ({\r\n type: SET_LOCALE_DATA,\r\n payload: data\r\n});\r\n\r\nexport const setCurrentAppState = (currentAppState: IAppState) => ({\r\n type: SET_CURRENT_APP_STATE,\r\n payload: currentAppState\r\n});\r\n\r\n\r\nexport const setCurrentLocale = (payload: any) => ({\r\n type: SET_CURRENT_LOCALE,\r\n payload: payload\r\n});\r\n\r\nexport const setInDashboardEditMode = (inDashboardEditMode: boolean) => {\r\n return {\r\n type: SET_IN_DASHBOARD_EDIT_MODE,\r\n payload: inDashboardEditMode\r\n }\r\n}\r\n\r\nexport const setDevLogIn = (isDevLoggedIn: boolean) => ({\r\n type: SET_IS_DEV_LOG_IN,\r\n payload: isDevLoggedIn\r\n});","import { AxiosError } from 'axios';\r\nimport {\r\n FETCH_USER_PROFILE_BEGIN,\r\n FETCH_USER_PROFILE_SUCCESS,\r\n FETCH_USER_PROFILE_FAILURE,\r\n SET_USER_PROFILE_BEGIN,\r\n SET_USER_PROFILE_SUCCESS,\r\n SET_USER_PROFILE_ERROR,\r\n} from '..';\r\nimport { IPortalConfig, IHttpClient, IHttpClientRequest } from '@msx/platform-services';\r\nimport { IUserProfile } from '../../models';\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\n\r\n\r\nexport const fetchUserProfileBegin = () => ({\r\n type: FETCH_USER_PROFILE_BEGIN,\r\n});\r\n\r\nexport const fetchUserProfileSuccess = (payload: IUserProfile) => ({\r\n type: FETCH_USER_PROFILE_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const fetchUserProfileError = (error: AxiosError | string) => ({\r\n type: FETCH_USER_PROFILE_FAILURE,\r\n payload: error,\r\n});\r\n\r\nexport const setUserProfileBegin = () => ({\r\n type: SET_USER_PROFILE_BEGIN,\r\n});\r\n\r\nexport const setUserProfileSuccess = (payload: IUserProfile) => ({\r\n type: SET_USER_PROFILE_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const setUserProfileError = (error: AxiosError) => ({\r\n type: SET_USER_PROFILE_ERROR,\r\n payload: error,\r\n});\r\n\r\nexport const fetchUserProfile = async (httpClient: IHttpClient, appConfig:IPortalConfig, appInsights: ReactPlugin) => {\r\n return new Promise(async function (resolve, reject) {\r\n try {\r\n // TODO: replace the above url with actual API endpoint\r\n // follow the below example \r\n // const url = `${appConfig.apiConfig.baseUrl}userProfile`;\r\n // const url = '/data/userProfile.json';\r\n const resource = appConfig.apiConfig.resource;\r\n const url = `${appConfig.apiConfig.baseUrl}userProfile`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n };\r\n const response: any = await httpClient.get(url, request);\r\n resolve(response.data ? response.data : {});\r\n } catch (err) {\r\n reject(err);\r\n appInsights.trackException({exception: new Error(err)});\r\n }\r\n })\r\n}\r\n\r\nexport const updateUserProfile = (httpClient: IHttpClient, userProfile: IUserProfile, appConfig:IPortalConfig, appInsights: ReactPlugin) => {\r\n return async (dispatch: any) => {\r\n dispatch(setUserProfileBegin());\r\n try {\r\n alert('TODO: updateUserProfile')\r\n //const resource = appConfig.apiConfig.todoApiResource ; \r\n // const url = `${appConfig.apiConfig.userProfileApiBaseUrl}`;\r\n // const request: IHttpClientRequest = {\r\n // resource: resource,\r\n // data: userProfile,\r\n // };\r\n // const response: any = await httpClient.post(url, request);\r\n const resource = appConfig.apiConfig.resource;\r\n const url = `${appConfig.apiConfig.baseUrl}userProfile`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n data: userProfile\r\n };\r\n const response: any = await (httpClient.post(url, request));\r\n dispatch(setUserProfileSuccess(userProfile));\r\n } catch (err) {\r\n dispatch(setUserProfileError(err));\r\n appInsights.trackException({exception: new Error(err)});\r\n }\r\n }\r\n}\r\n","import { AxiosError, AxiosResponse } from 'axios';\r\nimport {\r\n FETCH_EXTENSIONS_REGISTRATION_BEGIN,\r\n FETCH_EXTENSIONS_REGISTRATION_SUCCESS,\r\n FETCH_EXTENSIONS_REGISTRATION_FAILURE,\r\n} from '..';\r\nimport {\r\n IHttpClient,\r\n IHttpClientRequest,\r\n IExtensionsRegistration,\r\n IAppExtension,\r\n IKeyValueItem,\r\n IPortalConfig\r\n} from '@msx/platform-services';\r\nimport { trackPromise } from 'react-promise-tracker';\r\n\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\n\r\nconst emptyData = {\r\n routes: [],\r\n extensions: [],\r\n catalogue: [],\r\n};\r\n\r\nexport const fetchExtensionsRegistrationBegin = () => ({\r\n type: FETCH_EXTENSIONS_REGISTRATION_BEGIN,\r\n});\r\n\r\nexport const fetchExtensionsRegistrationSuccess = (payload: IExtensionsRegistration) => ({\r\n type: FETCH_EXTENSIONS_REGISTRATION_SUCCESS,\r\n payload: payload,\r\n});\r\n\r\nexport const fetchExtensionsRegistrationError = (error: AxiosError) => ({\r\n type: FETCH_EXTENSIONS_REGISTRATION_FAILURE,\r\n payload: error,\r\n});\r\n\r\n\r\n// export const fetchExtensionsRegistration = (httpClient: IHttpClient, testExtensions: IKeyValueItem[], appConfig: IPortalConfig) => {\r\n// return async (dispatch: any, getState: any) => {\r\n// debugger;\r\n// if (\r\n// getState().extensionsRegistration &&\r\n// getState().extensionsRegistration.extensionsRegistration.extensions.length > 0\r\n// ) {\r\n// return getState().extensionsRegistration.extensionsRegistration;\r\n// }\r\n\r\n// try {\r\n// // const resource = appConfig.registrationConfig.resource;\r\n// const url = `${appConfig.registrationConfig.apiEndpoint}`;\r\n// // const request: IHttpClientRequest = {\r\n// // resource: resource,\r\n// // };\r\n// //const response: any = await httpClient.get(url, request);\r\n// //const data = processExtensionsRegistration(response, testExtensions);\r\n// axios.get(url)\r\n// .then((res)=>{\r\n// console.log('res');\r\n// console.log(res);\r\n// dispatch(fetchExtensionsRegistrationSuccess(res.data));\r\n// }).catch((err)=>{\r\n// dispatch(fetchExtensionsRegistrationError(err));\r\n// })\r\n// //dispatch(fetchExtensionsRegistrationSuccess(data));\r\n// } catch (err) {\r\n// // dispatch(fetchExtensionsRegistrationError(err));\r\n// }\r\n// };\r\n// };\r\n\r\nexport const fetchExtensionsRegistration = (httpClient: IHttpClient, testExtensions: IKeyValueItem[], appConfig: IPortalConfig, appInsights: ReactPlugin, forceLoad: boolean) => {\r\n return async (dispatch: any, getState: any) => {\r\n if (\r\n !forceLoad &&\r\n getState().extensionsRegistration &&\r\n getState().extensionsRegistration.extensionsRegistration.extensions.length > 0\r\n ) {\r\n return getState().extensionsRegistration.extensionsRegistration;\r\n }\r\n\r\n try {\r\n const resource = appConfig.registrationConfig.resource;\r\n const url = `${appConfig.registrationConfig.apiEndpoint}`;\r\n const request: IHttpClientRequest = {\r\n resource: resource,\r\n };\r\n const response: any = await trackPromise(httpClient.get(url, request));\r\n const data = processExtensionsRegistration(response, testExtensions);\r\n dispatch(fetchExtensionsRegistrationSuccess(data));\r\n } catch (err) {\r\n dispatch(fetchExtensionsRegistrationError(err));\r\n appInsights.trackException({exception: new Error(err)});\r\n }\r\n };\r\n};\r\n\r\nconst processExtensionsRegistration = (res: AxiosResponse, testExtensions: IKeyValueItem[]) => {\r\n if (!res.data) return emptyData;\r\n const result = res.data as IExtensionsRegistration;\r\n\r\n // enable/disable extension based on catalogue settings\r\n const catalogue = result.catalogue;\r\n\r\n if (catalogue.length > 0) {\r\n catalogue.forEach((group, i) => {\r\n group.items.forEach((item, j) => {\r\n const extension = result.extensions.find((ext) => ext.key === item.key);\r\n if (extension) {\r\n const active = item.active;\r\n extension.active = active;\r\n extension.pages.forEach((page) => {\r\n page.active = active;\r\n });\r\n extension.tiles.forEach((tile) => {\r\n tile.active = active;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n // enable side loading support\r\n testExtensions.forEach((testExtension) => {\r\n const extension = result.extensions.find((item) => item.key === testExtension.key);\r\n if (extension) {\r\n enableSideLoading(extension, testExtension.value);\r\n }\r\n });\r\n return result;\r\n};\r\n\r\nconst enableSideLoading = (extension: IAppExtension, url: string) => {\r\n extension.active = true;\r\n extension.files.forEach((item) => {\r\n item.url = url;\r\n if (!item.log) {\r\n item.active = false;\r\n }\r\n });\r\n extension.pages.forEach((item) => {\r\n item.active = true;\r\n });\r\n extension.tiles.forEach((item) => {\r\n item.active = true;\r\n });\r\n};\r\n","import { IAppConfig } from \"./App.types\";\r\n\r\nexport const appConfig: IAppConfig = {\r\n appName: 'OneTrade',\r\n authConfig: {\r\n clientId: process.env.REACT_APP_AD_CLIENT_ID,\r\n authority: process.env.REACT_APP_AD_AUTHORITY,\r\n },\r\n apiConfig: {\r\n baseUrl: process.env.REACT_APP_API_BASE_URL,\r\n resource: process.env.REACT_APP_API_RESOURCE,\r\n },\r\n telemetryConfig: {\r\n instrumentationKey: process.env.REACT_APP_INSTRUMENTATION_KEY,\r\n logPayload: true,\r\n },\r\n UTPConfig: {\r\n EnvironmentName: 'Non-Production',\r\n ServiceOffering: 'Example Service Offering',\r\n ServiceLine: 'Example Service Line',\r\n Service: 'Example Service',\r\n ComponentName: 'Example Component',\r\n ComponentId: 'Example Id',\r\n },\r\n extensionConfig: {\r\n RING: 1,\r\n },\r\n isMockData: true,\r\n registrationConfig: { \r\n apiEndpoint: process.env.REACT_APP_EXTENSION_API_ENDPOINT,\r\n resource: process.env.REACT_APP_EXTENSION_API_RESOURCE,\r\n active: true,\r\n },\r\n botConfig: {\r\n hostAppId: process.env.REACT_APP_BOT_HOST_APP_ID,\r\n scriptUrl: process.env.REACT_APP_BOT_SCRIPT_URL,\r\n active: true,\r\n },\r\n globalSearchConfig: {\r\n active: true,\r\n },\r\n guidedTourConfig: {\r\n active: false,\r\n },\r\n ocvFeedbackConfig: {\r\n appId: 2250,\r\n sdkUrl: 'https://extensionassets-test.azureedge.net/assets/officebrowserfeedback/',\r\n active: true,\r\n },\r\n notificaitonConfig: {\r\n active: true,\r\n },\r\n themeConfig: {\r\n theme: 'default',\r\n active: true,\r\n },\r\n loginOnStartup: false,\r\n enableUserSettingsApi: true,\r\n languageConfig: {\r\n active: true,\r\n locales: {\r\n \"en\": \"English - EN \",\r\n \"de\": \"Deutsch - de\",\r\n \"fr\": \"Français - fr\",\r\n \"hu\": \"Magyar - hu\",\r\n \"it\": \"Italiano - it\",\r\n \"pl\": \"Polski - pl\",\r\n \"ru\": \"Русский - ru\",\r\n \"es\": \"Español - es\",\r\n \"tr\": \"Türkçe - tr\",\r\n \"zh-CN\": \"简体中文 - zh-CN\",\r\n \"zh-TW\": \"繁體中文 - zh-TW\",\r\n \"ja\": \"日本語 - ja\",\r\n \"ko\": \"한국어 - ko\",\r\n \"ar\": \"عربى - ar\",\r\n \"bg\": \"български - bg\",\r\n \"el\": \"Ελληνικά - el\",\r\n \"id\": \"Bahasa Indonesia - id\",\r\n \"pt\": \"Português - pt\",\r\n \"ro\": \"Română - ro\",\r\n \"sr\": \"Српски - sr\",\r\n \"th\": \"ไทย - th\",\r\n \"vi\": \"Tiếng Việt - vi\",\r\n \"he\": \"עִברִית - he\",\r\n \"uk\": \"Український - uk\"\r\n },\r\n },\r\n}","import { DefaultTheme, DarkTheme } from '@msx/react-ui-component';\r\nimport { IAppTheme } from '@msx/platform-services';\r\nimport { appConfig } from '../../app/App.config';\r\n\r\nlet navScrollBarWidth = 0;\r\n\r\nexport const getScrollBarWidth = () => {\r\n if (navScrollBarWidth !== 0) {\r\n return navScrollBarWidth;\r\n }\r\n // Get the browser scrollbar width because they're all different\r\n var scrollDiv = document.createElement('div');\r\n scrollDiv.setAttribute('style', 'width: 100px;height: 100px;overflow: scroll;position: absolute;top: -999px;');\r\n var contentDiv = document.createElement('p');\r\n contentDiv.setAttribute('style', 'width: 100px;height: 200px;');\r\n scrollDiv.appendChild(contentDiv);\r\n document.body.appendChild(scrollDiv);\r\n navScrollBarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n document.body.removeChild(scrollDiv);\r\n return navScrollBarWidth;\r\n}\r\n\r\n\r\nexport const getThemeByName = (name: string): IAppTheme => {\r\n const theme = name === 'dark' ? DarkTheme : DefaultTheme;\r\n return theme;\r\n}\r\n\r\nexport const initializeBot = () => {\r\n if (appConfig.botConfig.active) {\r\n const script = document.createElement(\"script\");\r\n script.src = appConfig.botConfig.scriptUrl;\r\n document.head.appendChild(script);\r\n }\r\n}\r\n\r\nexport const initializeOcv = () => {\r\n if (!appConfig.ocvFeedbackConfig.active)\r\n return;\r\n\r\n const Window = window as any;\r\n\r\n Window.OfficeBrowserFeedback = window.OfficeBrowserFeedback || {};\r\n Window.OfficeBrowserFeedback.initOptions = {\r\n appId: appConfig.ocvFeedbackConfig.appId, // Replace by your own app id\r\n stylesUrl: `${appConfig.ocvFeedbackConfig.sdkUrl}styles/officebrowserfeedback.css`, // Replace by where you have hosted the .css\r\n intlUrl: `${appConfig.ocvFeedbackConfig.sdkUrl}intl/`, // Replace by where you have hosted the intl files.\r\n environment: 0, // 0 - Prod, 1 - Int\r\n primaryColour: \"#008272\", // Replace by a colour which goes with your website.\r\n secondaryColour: \"#004B50\",// Replace by a colour which goes with your website.\r\n onError: function onError(err) { console.log(\"OfficeBrowserFeedback SDK encountered error: \" + err); }, // (optional) Callback which gets executed when SDK errors\r\n bugForm: false, // (optional) false by default\r\n };\r\n\r\n (function (d, s, id) {\r\n var js, fjs = d.getElementsByTagName(s)[0];\r\n if (d.getElementById(id)) { return; }\r\n js = d.createElement(s); js.id = id;\r\n js.src = `${appConfig.ocvFeedbackConfig.sdkUrl}scripts/officebrowserfeedback.js`;\r\n fjs.parentNode.insertBefore(js, fjs);\r\n }(document, 'script', 'officebrowserfeedback-jssdk'));\r\n\r\n Window.startMultiFeedback_AllOptional = function startMultiFeedback_AllOptional() {\r\n var launchOptions = {\r\n telemetryGroup: {\r\n sourceContext: appConfig.appName,\r\n }\r\n };\r\n handlePromise(Window.OfficeBrowserFeedback.multiFeedback(launchOptions));\r\n };\r\n\r\n}\r\n\r\nfunction handlePromise(promise) {\r\n promise\r\n .then(\r\n function onFulfilled() { console.log('handlePromise succeeded'); }\r\n )\r\n .catch(\r\n function onRejected(err) { console.log('handlePromise failed with error: ' + err); }\r\n );\r\n}\r\n\r\n","import React, { useContext, useState, useEffect } from 'react';\r\nimport { ServiceContext } from '@msx/platform-services';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { setPBIAccessToken, getPBIAccessToken, ReduxPBITokenState } from '../store';\r\n\r\nlet pbitoken: string;\r\n\r\nexport function GetPBIToken() {\r\n const { authClient } = useContext(ServiceContext);\r\n const reduxDispatch = useDispatch();\r\n try {\r\n const pbiAccessToken = useSelector(getPBIAccessToken);\r\n if (pbiAccessToken) {\r\n const tokenRefreshTime = new Date(Date.now() + 10 * 60000);\r\n if (pbiAccessToken.expiresBy <= tokenRefreshTime) {\r\n generatePBIAccessToken();\r\n return pbitoken;\r\n }\r\n else {\r\n console.log('use token from store');\r\n pbitoken = pbiAccessToken.token;\r\n return pbitoken;\r\n }\r\n }\r\n }\r\n catch (ex) {\r\n\r\n }\r\n\r\n async function generatePBIAccessToken() {\r\n console.log('generate new token');\r\n await authClient.acquireToken(process.env.REACT_APP_PBI_RESOURCE_ID)\r\n .then(async token => {\r\n pbitoken = token;\r\n let newtoken: ReduxPBITokenState = {\r\n token: token,\r\n expiresBy: new Date(Date.now() + 60 * 60000)\r\n };\r\n reduxDispatch(setPBIAccessToken(newtoken))\r\n return pbitoken;\r\n })\r\n\r\n }\r\n\r\n}\r\n","import { IAppState } from '@msx/platform-services'\r\nimport {\r\n SET_CURRENT_THEME,\r\n SET_CURRENT_APP_STATE,\r\n SET_LOCALE_DATA,\r\n SET_CURRENT_LOCALE,\r\n ReduxAppState,\r\n SET_IS_MOCK_DATA,\r\n SET_IN_DASHBOARD_EDIT_MODE,\r\n SET_CURRENT_TEST_EXTENSIONS,\r\n SET_IS_DEV_LOG_IN,\r\n SET_PBI_ACCESS_TOKEN,\r\n ReduxPBITokenState\r\n} from \"..\";\r\nimport { getThemeByName } from '../../utils'\r\n\r\nexport const defaultAppState: IAppState = {\r\n isReady: true,\r\n}\r\nconst storageLocale = localStorage.getItem('locale');\r\nconst defaultLocale = storageLocale ? storageLocale : navigator.language.split(/[-_]/)[0];\r\n\r\nconst storageThemeName = localStorage.getItem('theme');\r\nconst defaultThemeName = storageThemeName ? storageThemeName : 'default';\r\nconst defaultThemeComponent = getThemeByName(defaultThemeName);\r\ndocument.body.style.background = defaultThemeComponent.palette.white;\r\nconst defaultPBIAccesstoken : ReduxPBITokenState = {\r\n token :'',\r\n expiresBy : new Date(Date.now())\r\n } \r\n\r\nconst initialAppState: ReduxAppState = {\r\n locale: defaultLocale,\r\n currentTheme: defaultThemeComponent,\r\n currentAppState: defaultAppState,\r\n currentGuidedTourRunStatus: false,\r\n inDashboardEditMode: false,\r\n currentTestExtensoins: [],\r\n mockData: true,\r\n isDevLogIn: false,\r\n localeData: [],\r\n pbiAccessToken: defaultPBIAccesstoken\r\n};\r\n\r\nexport const app = (state: ReduxAppState = initialAppState, action: any) => {\r\n switch (action.type) {\r\n case SET_CURRENT_THEME:\r\n return {\r\n ...state,\r\n currentTheme: action.payload\r\n };\r\n case SET_IS_MOCK_DATA:\r\n return {\r\n ...state,\r\n mockData: action.payload\r\n };\r\n case SET_IS_DEV_LOG_IN:\r\n return {\r\n ...state,\r\n isDevLogIn: action.payload\r\n };\r\n case SET_LOCALE_DATA:\r\n const newLocaleData = state.localeData.slice();\r\n const payloadItems = action.payload;\r\n payloadItems.forEach((payloadItem) => {\r\n let isNew = true;\r\n newLocaleData.forEach((item, index) => {\r\n if (item.key === payloadItem.key) {\r\n item.value = payloadItem.value;\r\n isNew = false;\r\n }\r\n });\r\n if (isNew) newLocaleData.push(payloadItem);\r\n });\r\n return {\r\n ...state,\r\n localeData: newLocaleData\r\n };\r\n case SET_CURRENT_APP_STATE:\r\n return {\r\n ...state,\r\n currentAppState: action.payload\r\n };\r\n case SET_CURRENT_LOCALE:\r\n return {\r\n ...state,\r\n locale: action.payload\r\n };\r\n case SET_CURRENT_TEST_EXTENSIONS:\r\n return {\r\n ...state,\r\n currentTestExtensoins: action.payload\r\n };\r\n case SET_IN_DASHBOARD_EDIT_MODE:\r\n return {\r\n ...state,\r\n inDashboardEditMode: action.payload\r\n };\r\n case SET_PBI_ACCESS_TOKEN:\r\n return {\r\n ...state,\r\n pbiAccessToken: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n FETCH_USER_PROFILE_BEGIN,\r\n FETCH_USER_PROFILE_SUCCESS,\r\n FETCH_USER_PROFILE_FAILURE,\r\n SET_USER_PROFILE_BEGIN,\r\n SET_USER_PROFILE_SUCCESS,\r\n SET_USER_PROFILE_ERROR,\r\n ReduxUserProfileState,\r\n} from '..';\r\n\r\nconst userProfileInitialState: ReduxUserProfileState = {\r\n userProfile: {\r\n userPreference: {\r\n tilesOrder: [],\r\n locale: navigator.language.split(/[-_]/)[0],\r\n theme: 'default',\r\n }\r\n },\r\n isLoading: true,\r\n error: null\r\n}\r\n\r\nexport const userProfile = (\r\n state: ReduxUserProfileState = userProfileInitialState,\r\n action: any\r\n) => {\r\n switch (action.type) {\r\n case FETCH_USER_PROFILE_BEGIN:\r\n return {\r\n ...state,\r\n userProfile: null,\r\n isLoading: true,\r\n error: null\r\n };\r\n case FETCH_USER_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n userProfile: action.payload,\r\n isLoading: false,\r\n };\r\n case FETCH_USER_PROFILE_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n case SET_USER_PROFILE_BEGIN:\r\n return {\r\n ...state\r\n };\r\n\r\n case SET_USER_PROFILE_SUCCESS:\r\n return {\r\n ...state,\r\n userProfile: action.payload\r\n };\r\n case SET_USER_PROFILE_ERROR:\r\n return {\r\n ...state,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AnyAction } from 'redux';\r\nimport { IExtensionsRegistration } from '@msx/platform-services';\r\n\r\nimport {\r\n FETCH_EXTENSIONS_REGISTRATION_BEGIN,\r\n FETCH_EXTENSIONS_REGISTRATION_SUCCESS,\r\n FETCH_EXTENSIONS_REGISTRATION_FAILURE,\r\n ReduxExtensionsRegistrationState,\r\n} from \"..\";\r\n\r\nconst initalExtensionsRegistration: IExtensionsRegistration = {\r\n extensions: [],\r\n routes: []\r\n}\r\n\r\nconst extensionsRegistrationInitialState: ReduxExtensionsRegistrationState = {\r\n extensionsRegistration: initalExtensionsRegistration,\r\n isLoading: false,\r\n error: null,\r\n};\r\n\r\nexport const extensionsRegistration = (\r\n state: ReduxExtensionsRegistrationState = extensionsRegistrationInitialState,\r\n action: AnyAction\r\n) => {\r\n switch (action.type) {\r\n case FETCH_EXTENSIONS_REGISTRATION_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n extensionsRegistration: initalExtensionsRegistration\r\n };\r\n case FETCH_EXTENSIONS_REGISTRATION_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n extensionsRegistration: action.payload\r\n };\r\n case FETCH_EXTENSIONS_REGISTRATION_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxAppState, ReduxPBITokenState } from '..';\r\nimport { ReduxRootState } from '../../../app/store';\r\nimport { IKeyValueItem, IAppTheme, IAppState } from '@msx/platform-services'\r\n\r\nconst appState = (state: ReduxRootState): ReduxAppState => state.app;\r\n\r\nexport const getCurrentTheme = createSelector(\r\n appState,\r\n (appState: ReduxAppState): IAppTheme => appState.currentTheme\r\n);\r\n\r\nexport const getMockData = createSelector(\r\n appState,\r\n (appState: ReduxAppState): boolean => appState.mockData\r\n);\r\n\r\nexport const getIsDevLogIn = createSelector(\r\n appState,\r\n (appState: ReduxAppState): boolean => appState.isDevLogIn\r\n);\r\n\r\nexport const getCurrentTestExtensions = createSelector(\r\n appState,\r\n (appState: ReduxAppState): IKeyValueItem[] => appState.currentTestExtensoins\r\n);\r\n\r\nexport const getCurrentAppState = createSelector(\r\n appState,\r\n (appState: ReduxAppState): IAppState => appState.currentAppState\r\n);\r\n\r\nexport const getTourRunStatus = createSelector(\r\n appState,\r\n (appState: ReduxAppState): boolean => appState.currentGuidedTourRunStatus\r\n);\r\n\r\nexport const getInDashboardEditMode = createSelector(\r\n appState,\r\n (appState: ReduxAppState): boolean => appState.inDashboardEditMode\r\n)\r\n\r\nexport const getCurrentLocale = createSelector(\r\n appState,\r\n (appState: ReduxAppState): string => appState.locale\r\n)\r\n\r\nexport const getLocaleData = createSelector(\r\n appState,\r\n (appState: ReduxAppState): IKeyValueItem[] => appState.localeData\r\n);\r\n\r\nexport const getPBIAccessToken = createSelector(\r\n appState,\r\n (appState: ReduxAppState): ReduxPBITokenState => appState.pbiAccessToken\r\n);\r\n\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxUserProfileState } from '..';\r\nimport { ReduxRootState } from '../../../app/store';\r\nimport { IUserProfile } from '../../models';\r\nimport { AxiosError } from 'axios';\r\nimport { ReactText } from 'react';\r\nimport { IDashboardTile } from '@msx/platform-services';\r\n\r\nconst userProfileState = (state: ReduxRootState): ReduxUserProfileState => state.userProfile;\r\n\r\nexport interface TilesOrder {\r\n id: ReactText;\r\n isVisible: boolean;\r\n}\r\n\r\nexport const getUserProfile = createSelector(\r\n userProfileState,\r\n (userProfileState: ReduxUserProfileState): IUserProfile => userProfileState.userProfile\r\n);\r\n\r\nexport const getUserDashboardTiles = createSelector(\r\n userProfileState,\r\n (userProfileState: ReduxUserProfileState): IDashboardTile[] => (\r\n userProfileState.userProfile && userProfileState.userProfile.userPreference\r\n ? userProfileState.userProfile.userPreference.tilesOrder\r\n : []\r\n )\r\n);\r\n\r\nexport const getUserProfileLoadingStatus = createSelector(\r\n userProfileState,\r\n (userProfileState: ReduxUserProfileState): boolean => userProfileState.isLoading\r\n);\r\n\r\nexport const getUserProfileError = createSelector(\r\n userProfileState,\r\n (userProfileState: ReduxUserProfileState): AxiosError => userProfileState.error\r\n);\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxExtensionsRegistrationState, IExtensionsAttributes } from '..';\r\nimport { ReduxRootState } from '../../../app/store';\r\nimport { IExtensionsRegistration, IAppExtension, IAppExtensionTile } from '@msx/platform-services';\r\nimport { AxiosError } from 'axios';\r\n\r\nconst extensionsRegistrationState = (state: ReduxRootState): ReduxExtensionsRegistrationState => state.extensionsRegistration;\r\n\r\nexport const getExtensionsRegistration = createSelector(\r\n extensionsRegistrationState,\r\n (extensionsRegistrationState: ReduxExtensionsRegistrationState): IExtensionsRegistration => extensionsRegistrationState.extensionsRegistration\r\n);\r\n\r\nexport const getExtensionsLoadingStatus = createSelector(\r\n extensionsRegistrationState,\r\n (extensionsRegistrationState: ReduxExtensionsRegistrationState): boolean => extensionsRegistrationState.isLoading\r\n);\r\n\r\nexport const getExtensionsError = createSelector(\r\n extensionsRegistrationState,\r\n (extensionsRegistrationState: ReduxExtensionsRegistrationState): AxiosError => extensionsRegistrationState.error\r\n);\r\n\r\nexport const getExtnAttributes = createSelector(\r\n extensionsRegistrationState,\r\n (extensionsRegistrationState, key) => key,\r\n (extensionsRegistrationState, key): IExtensionsAttributes => {\r\n let attributes: IExtensionsAttributes;\r\n attributes = extensionsRegistrationState.extensionsRegistration.extensions[0].tiles[0]['attributes'] as IExtensionsAttributes;\r\n return attributes;\r\n });\r\n\r\nexport const getReportExtensionTiles = createSelector(\r\n extensionsRegistrationState,\r\n (extensionsRegistrationState: ReduxExtensionsRegistrationState): IAppExtensionTile[] => {\r\n let reportExtn: IAppExtension;\r\n let reportTiles: IAppExtensionTile[];\r\n reportExtn = extensionsRegistrationState.extensionsRegistration.extensions.filter(e => e.name === 'TradeReports')[0];\r\n if (reportExtn) {\r\n reportTiles = reportExtn.tiles;\r\n }\r\n return reportTiles;\r\n }\r\n);\r\n\r\n","import { IUserProfile } from '../models';\r\nimport { AxiosError } from 'axios';\r\nimport {\r\n IAppState,\r\n IAppTheme,\r\n IExtensionsRegistration,\r\n IKeyValueItem\r\n} from '@msx/platform-services'\r\n\r\nexport interface ReduxCommonState {\r\n isLoading: string[];\r\n error: Error;\r\n}\r\n\r\nexport interface ReduxAppState {\r\n locale: string;\r\n currentTheme: IAppTheme;\r\n currentAppState: IAppState;\r\n currentGuidedTourRunStatus: boolean;\r\n inDashboardEditMode: boolean;\r\n currentTestExtensoins: IKeyValueItem[];\r\n mockData: boolean;\r\n isDevLogIn: boolean;\r\n localeData: IKeyValueItem[];\r\n pbiAccessToken : ReduxPBITokenState;\r\n}\r\n\r\nexport interface ReduxExtensionsRegistrationState {\r\n extensionsRegistration: IExtensionsRegistration;\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxUserProfileState {\r\n userProfile: IUserProfile;\r\n isLoading: boolean;\r\n error: AxiosError;\r\n}\r\n\r\nexport interface ReduxPBITokenState{\r\n token : string;\r\n expiresBy : Date; \r\n}\r\n\r\nexport interface IExtensionsAttributes {\r\n type : string;\r\n reportId?: string;\r\n datasetIds? : string;\r\n embedURL : string;\r\n accessToken : string;\r\n visualName? : string;\r\n pageName? : string;\r\n visualTitle : string;\r\n tags : string[];\r\n}\r\n\r\nexport const SET_PBI_ACCESS_TOKEN = 'SET_PBI_ACCESS_TOKEN';\r\n\r\nexport const SET_CURRENT_LOCALE = 'SET_CURRENT_LOCALE';\r\nexport const SET_CURRENT_THEME = 'SET_CURRENT_THEME';\r\nexport const SET_CURRENT_APP_STATE = 'SET_CURRENT_APP_STATE';\r\nexport const SET_IS_MOCK_DATA = 'SET_IS_MOCK_DATA';\r\nexport const SET_LOCALE_DATA = 'SET_LOCALE_DATA';\r\nexport const SET_CURRENT_TEST_EXTENSIONS = 'SET_CURRENT_TEST_EXTENSIONS';\r\nexport const SET_IN_DASHBOARD_EDIT_MODE = \"SET_IN_DASHBOARD_EDIT_MODE\";\r\nexport const SET_IS_DEV_LOG_IN = 'SET_IS_DEV_LOG_IN';\r\n\r\nexport const FETCH_EXTENSIONS_REGISTRATION_BEGIN = 'FETCH_EXTENSIONS_REGISTRATION_BEGIN';\r\nexport const FETCH_EXTENSIONS_REGISTRATION_SUCCESS = 'FETCH_EXTENSIONS_REGISTRATION_SUCCESS';\r\nexport const FETCH_EXTENSIONS_REGISTRATION_FAILURE = 'FETCH_EXTENSIONS_REGISTRATION_FAILURE';\r\n\r\nexport const FETCH_USER_PROFILE_BEGIN = 'FETCH_USER_PROFILE_BEGIN';\r\nexport const FETCH_USER_PROFILE_SUCCESS = 'FETCH_USER_PROFILE_SUCCESS';\r\nexport const FETCH_USER_PROFILE_FAILURE = 'FETCH_USER_PROFILE_FAILURE';\r\n\r\nexport const SET_USER_PROFILE_BEGIN = 'SET_USER_PROFILE_BEGIN';\r\nexport const SET_USER_PROFILE_SUCCESS = 'SET_USER_PROFILE_SUCCESS';\r\nexport const SET_USER_PROFILE_ERROR = 'SET_USER_PROFILE_ERROR';\r\n\r\n","import { AnyAction } from 'redux';\r\nimport {\r\n FETCH_TODO_LIST_BEGIN,\r\n FETCH_TODO_LIST_SUCCESS,\r\n FETCH_TODO_LIST_FAILURE,\r\n ReduxToDoListState\r\n} from '..';\r\n\r\nconst todoListInitialState: ReduxToDoListState = {\r\n todoList: null,\r\n isLoading: true,\r\n error: null,\r\n};\r\n\r\nexport default function todoListReducer(\r\n state: ReduxToDoListState = todoListInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case FETCH_TODO_LIST_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n todoList: null\r\n };\r\n case FETCH_TODO_LIST_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n todoList: action.payload\r\n };\r\n case FETCH_TODO_LIST_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AnyAction } from 'redux';\r\nimport {\r\n CRUD_TODO_LIST_BEGIN,\r\n CRUD_TODO_LIST_SUCCESS,\r\n CRUD_TODO_LIST_FAILURE,\r\n ReduxToDoCrudState\r\n} from '..';\r\n\r\n\r\nconst todoCrudInitialState: ReduxToDoCrudState = {\r\n isLoading: true,\r\n error: null,\r\n};\r\n\r\nexport default function todoCrudReducer(\r\n state: ReduxToDoCrudState = todoCrudInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case CRUD_TODO_LIST_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n };\r\n case CRUD_TODO_LIST_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n };\r\n case CRUD_TODO_LIST_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AnyAction } from 'redux';\r\nimport {\r\n FETCH_EXTENSIONMETADATA_LIST_BEGIN,\r\n FETCH_EXTENSIONMETADATA_LIST_SUCCESS,\r\n FETCH_EXTENSIONMETADATA_LIST_FAILURE,\r\n ReduxExtensionMetadataState\r\n} from '../..';\r\n\r\nconst extensionMetadataListInitialState: ReduxExtensionMetadataState = {\r\n extensionMetadataList: null,\r\n isLoading: true,\r\n error: null,\r\n};\r\n\r\nexport default function extensionMetadataListReducer(\r\n state: ReduxExtensionMetadataState = extensionMetadataListInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case FETCH_EXTENSIONMETADATA_LIST_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n extensionMetadataList: null\r\n };\r\n case FETCH_EXTENSIONMETADATA_LIST_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n extensionMetadataList: action.payload\r\n };\r\n case FETCH_EXTENSIONMETADATA_LIST_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AnyAction } from 'redux';\r\nimport {\r\n CRUD_EXTENSIONMETADATA_LIST_BEGIN,\r\n CRUD_EXTENSIONMETADATA_LIST_SUCCESS,\r\n CRUD_EXTENSIONMETADATA_LIST_FAILURE,\r\n ReduxExtensionMetadataCrudState\r\n} from '../..';\r\n\r\n\r\nconst extensionMetadataCrudInitialState: ReduxExtensionMetadataCrudState = {\r\n isLoading: true,\r\n error: null,\r\n};\r\n\r\nexport default function extensionMetadataCrudReducer(\r\n state: ReduxExtensionMetadataCrudState = extensionMetadataCrudInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case CRUD_EXTENSIONMETADATA_LIST_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n };\r\n case CRUD_EXTENSIONMETADATA_LIST_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n };\r\n case CRUD_EXTENSIONMETADATA_LIST_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AnyAction } from 'redux';\r\nimport {\r\n EXTENSION_METADATA_JSON_UPLOAD_SUCCESS,\r\n EXTENSION_METADATA_JSON_UPLOAD_BEGIN,\r\n EXTENSION_METADATA_JSON_UPLOAD_FAILURE,\r\n ReduxExtensionMetadataJsonUploadState\r\n} from '../..';\r\n\r\nconst extensionMetadataJsonUploadInitialState: ReduxExtensionMetadataJsonUploadState = {\r\n isLoading: true,\r\n error: null,\r\n};\r\n \r\nexport default function extensionMetadataJsonUploadReducer(\r\n state: ReduxExtensionMetadataJsonUploadState = extensionMetadataJsonUploadInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case EXTENSION_METADATA_JSON_UPLOAD_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n };\r\n case EXTENSION_METADATA_JSON_UPLOAD_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n };\r\n case EXTENSION_METADATA_JSON_UPLOAD_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}","import { AnyAction } from 'redux';\r\nimport {\r\n FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN,\r\n FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS,\r\n FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE,\r\n ReduxDashboardVisualsConfigState\r\n} from '../..';\r\n\r\nconst dashboardVisualsConfigInitialState: ReduxDashboardVisualsConfigState = {\r\n DashboardVisualsConfig: null,\r\n isLoading: true,\r\n error: null,\r\n};\r\n\r\nexport default function dashboardVisualsConfigReducer(\r\n state: ReduxDashboardVisualsConfigState = dashboardVisualsConfigInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case FETCH_DASHBOARD_VISUALS_CONFIG_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n DashboardVisualsConfig: null\r\n };\r\n case FETCH_DASHBOARD_VISUALS_CONFIG_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n DashboardVisualsConfig: action.payload\r\n };\r\n case FETCH_DASHBOARD_VISUALS_CONFIG_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AnyAction } from 'redux';\r\nimport {\r\n SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN,\r\n SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS,\r\n SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE,\r\n ReduxDashboardVisualsConfigSaveState\r\n} from '../..';\r\n \r\n\r\nconst dashboardVisualsConfigSaveInitialState: ReduxDashboardVisualsConfigSaveState = {\r\n isLoading: true,\r\n error: null,\r\n};\r\n\r\nexport default function dashboardVisualsConfigSaveReducer(\r\n state: ReduxDashboardVisualsConfigSaveState = dashboardVisualsConfigSaveInitialState,\r\n action: AnyAction\r\n) {\r\n switch (action.type) {\r\n case SAVE_DASHBOARD_VISUALS_CONFIG_BEGIN:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n error: null,\r\n };\r\n case SAVE_DASHBOARD_VISUALS_CONFIG_SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n };\r\n case SAVE_DASHBOARD_VISUALS_CONFIG_FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n error: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { combineReducers } from 'redux';\r\nimport { app, userProfile, extensionsRegistration } from '../../../core/store';\r\nimport todoList from './todoList.reducer';\r\nimport todoCrud from './todoCrud.reducer';\r\nimport extensionMetadataList from './adminPage/extensionMetadataList.reducer';\r\nimport extensionMetadataCrud from './adminPage/extensionMetadataCrud.reducer';\r\nimport extensionMetadataJsonUpload from './adminPage/extensionMetadataJsonUpload.reducer';\r\nimport dashboardVisualsConfig from './dashboardVisuals/dashboardvisualsconfig.reducer';\r\nimport dashboardVisualsConfigSave from './dashboardVisuals/saveDashboardVisualsConfig.reducer';\r\n\r\nexport const reducers = combineReducers({\r\n app,\r\n extensionsRegistration,\r\n userProfile,\r\n todoList,\r\n todoCrud,\r\n extensionMetadataList,\r\n extensionMetadataCrud,\r\n extensionMetadataJsonUpload,\r\n dashboardVisualsConfig,\r\n dashboardVisualsConfigSave\r\n});\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxRootState, ReduxToDoCrudState, } from '..';\r\nimport { AxiosError } from 'axios';\r\n\r\nconst todoCrudState = (state: ReduxRootState): ReduxToDoCrudState => state.todoCrud;\r\n\r\nexport const getToDoCrudLoadingStatus = createSelector(\r\n todoCrudState,\r\n (todoCrudState: ReduxToDoCrudState): boolean => todoCrudState.isLoading\r\n);\r\n\r\nexport const getToDoCrudError = createSelector(\r\n todoCrudState,\r\n (todoCrudState: ReduxToDoCrudState): AxiosError => todoCrudState.error\r\n);\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxRootState, ReduxToDoListState, } from '..';\r\nimport { IToDo } from '../../models';\r\nimport { AxiosError } from 'axios';\r\n\r\nconst todoListState = (state: ReduxRootState): ReduxToDoListState => state.todoList;\r\n\r\nexport const getToDoList = createSelector(\r\n todoListState,\r\n (todoListState: ReduxToDoListState): IToDo[] => todoListState.todoList\r\n);\r\n\r\nexport const getToDoListLoadingStatus = createSelector(\r\n todoListState,\r\n (todoListState: ReduxToDoListState): boolean => todoListState.isLoading\r\n);\r\n\r\nexport const getToDoListError = createSelector(\r\n todoListState,\r\n (todoListState: ReduxToDoListState): AxiosError => todoListState.error\r\n);\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxRootState, ReduxExtensionMetadataState, } from '../..';\r\nimport { IExtensionMetadata } from '../../../models/IExtensionMetadata';\r\nimport { AxiosError } from 'axios';\r\n\r\nconst extensionMetadataListState = (state: ReduxRootState): ReduxExtensionMetadataState => state.extensionMetadataList;\r\n\r\nexport const getExtensionMetadataList = createSelector(\r\n extensionMetadataListState,\r\n (extensionMetadataListState: ReduxExtensionMetadataState): IExtensionMetadata[] => extensionMetadataListState.extensionMetadataList\r\n);\r\n\r\nexport const getExtensionMetadataListLoadingStatus = createSelector(\r\n extensionMetadataListState,\r\n (extensionMetadataListState: ReduxExtensionMetadataState): boolean => extensionMetadataListState.isLoading\r\n);\r\n\r\nexport const getExtensionMetadataListError = createSelector(\r\n extensionMetadataListState,\r\n (extensionMetadataListState: ReduxExtensionMetadataState): AxiosError => extensionMetadataListState.error\r\n);\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxRootState, ReduxExtensionMetadataCrudState, ReduxExtensionMetadataJsonUploadState, } from '../..';\r\nimport { AxiosError } from 'axios';\r\n\r\nconst extensionMetadataCrudState = (state: ReduxRootState): ReduxExtensionMetadataCrudState => state.extensionMetadataCrud;\r\n\r\nexport const getExtensionMetadataCrudLoadingStatus = createSelector(\r\n extensionMetadataCrudState,\r\n (extensionMetadataCrudState: ReduxExtensionMetadataCrudState): boolean => extensionMetadataCrudState.isLoading\r\n);\r\n\r\nexport const getExtensionMetadataCrudError = createSelector(\r\n extensionMetadataCrudState,\r\n (extensionMetadataCrudState: ReduxExtensionMetadataCrudState): AxiosError => extensionMetadataCrudState.error\r\n);\r\n\r\n\r\n\r\nconst extensionMetadataJsonUploadState = (state: ReduxRootState): ReduxExtensionMetadataJsonUploadState => state.extensionMetadataJsonUpload;\r\n\r\nexport const getExtensionMetadataJsonUploadLoadingStatus = createSelector(\r\n extensionMetadataJsonUploadState,\r\n (extensionMetadataJsonUploadState: ReduxExtensionMetadataJsonUploadState): boolean => extensionMetadataJsonUploadState.isLoading\r\n);\r\n\r\nexport const getExtensionMetadataJsonUploadError = createSelector(\r\n extensionMetadataJsonUploadState,\r\n (extensionMetadataJsonUploadState: ReduxExtensionMetadataJsonUploadState): AxiosError => extensionMetadataJsonUploadState.error\r\n);\r\n\r\n","import { createSelector } from 'reselect';\r\nimport { ReduxRootState, ReduxDashboardVisualsConfigState } from '../..';\r\nimport { AxiosError } from 'axios';\r\nimport { IReportVisualProperties } from '../../../models/IReportVisualProperties'\r\n\r\nconst dashboardVisualsConfigState = (state: ReduxRootState): ReduxDashboardVisualsConfigState => state.dashboardVisualsConfig;\r\n\r\nexport const getdashboardVisualsConfig = createSelector(\r\n dashboardVisualsConfigState,\r\n (dashboardVisualsConfigState: ReduxDashboardVisualsConfigState): IReportVisualProperties[] => dashboardVisualsConfigState.DashboardVisualsConfig\r\n );\r\n \r\n export const getdashboardVisualsConfigLoadingStatus = createSelector(\r\n dashboardVisualsConfigState,\r\n (dashboardVisualsConfigState: ReduxDashboardVisualsConfigState): boolean => dashboardVisualsConfigState.isLoading\r\n );\r\n \r\n export const getdashboardVisualsConfigError = createSelector(\r\n dashboardVisualsConfigState,\r\n (dashboardVisualsConfigState: ReduxDashboardVisualsConfigState): AxiosError => dashboardVisualsConfigState.error\r\n );\r\n ","import { createSelector } from 'reselect';\r\nimport { ReduxRootState, ReduxDashboardVisualsConfigSaveState } from '../..';\r\nimport { AxiosError } from 'axios';\r\nimport { IReportVisualProperties } from '../../../models/IReportVisualProperties'\r\n\r\nconst dashboardVisualsConfigSaveState = (state: ReduxRootState): ReduxDashboardVisualsConfigSaveState => state.dashboardVisualsConfigSave;\r\n\r\n export const getdashboardVisualsConfigSaveLoadingStatus = createSelector(\r\n dashboardVisualsConfigSaveState,\r\n (dashboardVisualsConfigSaveState: ReduxDashboardVisualsConfigSaveState): boolean => dashboardVisualsConfigSaveState.isLoading\r\n );\r\n \r\n export const getdashboardVisualsConfigSaveError = createSelector(\r\n dashboardVisualsConfigSaveState,\r\n (dashboardVisualsConfigSaveState: ReduxDashboardVisualsConfigSaveState): AxiosError => dashboardVisualsConfigSaveState.error\r\n );\r\n ","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport { Router } from 'react-router';\r\nimport * as createHistory from \"history\";\r\nimport { useLoginOnStartup } from '@msx/platform-services';\r\nimport { configureStore } from '../../app/store';\r\nimport { appConfig } from '../../app/App.config';\r\nimport { initializeBot, initializeOcv } from '../utils'\r\n\r\nconst history = createHistory.createBrowserHistory();\r\nlet { store } = configureStore()\r\n\r\ninitializeBot();\r\ninitializeOcv();\r\n\r\nexport const AppBaseProvider: (React.FC) = props => {\r\n\r\n useLoginOnStartup(appConfig.loginOnStartup);\r\n\r\n return (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n );\r\n}\r\n","import { addLocaleData } from \"react-intl\";\r\nimport { IMessageTranslationMap } from '@msx/platform-services';\r\n\r\nimport localeEn from 'react-intl/locale-data/en';\r\nimport localeEs from 'react-intl/locale-data/es';\r\nimport localeDe from 'react-intl/locale-data/de';\r\nimport localeFr from 'react-intl/locale-data/fr';\r\nimport localeHu from 'react-intl/locale-data/hu';\r\nimport localeIt from 'react-intl/locale-data/it';\r\nimport localeJa from 'react-intl/locale-data/ja';\r\nimport localeKo from 'react-intl/locale-data/ko';\r\nimport localePl from 'react-intl/locale-data/pl';\r\nimport localeRu from 'react-intl/locale-data/ru';\r\nimport localeTr from 'react-intl/locale-data/tr';\r\nimport localeZhCn from 'react-intl/locale-data/zh';\r\nimport localeZhTw from 'react-intl/locale-data/zh';\r\nimport localeAr from 'react-intl/locale-data/ar'; //arabic\r\nimport localeBg from 'react-intl/locale-data/bg'; //bulgarian\r\nimport localeEl from 'react-intl/locale-data/el'; //greek\r\nimport localeId from 'react-intl/locale-data/id'; //indonesian\r\nimport localePt from 'react-intl/locale-data/pt'; //portuguese\r\nimport localeRo from 'react-intl/locale-data/ro'; //Romanian\r\nimport localeSr from 'react-intl/locale-data/sr'; //Serbian\r\nimport localeTh from 'react-intl/locale-data/th'; //Thai\r\nimport localeVi from 'react-intl/locale-data/vi'; // Vietnamese\r\nimport localeHe from 'react-intl/locale-data/he'; //hebrew\r\nimport localeUk from 'react-intl/locale-data/uk'; //Ukrainian\r\n\r\nimport messagesDe from '../translations/locales/de.json';\r\nimport messagesFr from '../translations/locales/fr.json';\r\nimport messagesHu from '../translations/locales/hu.json';\r\nimport messagesEs from '../translations/locales/es.json';\r\nimport messagesIt from '../translations/locales/it.json';\r\nimport messagesJa from '../translations/locales/ja.json';\r\nimport messagesKo from '../translations/locales/ko.json';\r\nimport messagesPl from '../translations/locales/pl.json';\r\nimport messagesRu from '../translations/locales/ru.json';\r\nimport messageTr from '../translations/locales/tr.json';\r\nimport messagesZhCn from '../translations/locales/zh-CN.json';\r\nimport messagesZhTw from '../translations/locales/zh-TW.json';\r\nimport messagesAr from '../translations/locales/ar.json'; //arabic\r\nimport messagesBg from '../translations/locales/bg.json'; //bulgrian\r\nimport messagesEl from '../translations/locales/el.json'; //greek\r\nimport messagesId from '../translations/locales/id.json'; //indonesian\r\nimport messagesPt from '../translations/locales/pt.json'; //portuguese\r\nimport messagesRo from '../translations/locales/ro.json'; //Romanian\r\nimport messagesSr from '../translations/locales/sr.json'; //Serbian\r\nimport messagesTh from '../translations/locales/th.json'; //Thai\r\nimport messagesVi from '../translations/locales/vi.json'; // Vietnamese\r\nimport messagesHe from '../translations/locales/he.json'; //hebrew\r\nimport messagesUk from '../translations/locales/uk.json'; //Ukrainian\r\n\r\n\r\n\r\naddLocaleData([\r\n ...localeEn,\r\n ...localeDe,\r\n ...localeFr,\r\n ...localeHu,\r\n ...localeJa,\r\n ...localeIt,\r\n ...localeKo,\r\n ...localePl,\r\n ...localeRu,\r\n ...localeTr,\r\n ...localeZhCn,\r\n ...localeZhTw,\r\n ...localeEs,\r\n ...localeAr, \r\n ...localeBg, \r\n ...localeEl, \r\n ...localeId, \r\n ...localePt, \r\n ...localeRo,\r\n ...localeSr, \r\n ...localeTh, \r\n ...localeVi, \r\n ...localeHe, \r\n ...localeUk\r\n]);\r\n\r\nexport const messages: IMessageTranslationMap = {\r\n 'en': null,\r\n 'de': messagesDe,\r\n 'fr': messagesFr,\r\n 'hu': messagesHu,\r\n es: messagesEs,\r\n it: messagesIt,\r\n ja: messagesJa,\r\n ko: messagesKo,\r\n pl: messagesPl,\r\n ru: messagesRu,\r\n tr: messageTr,\r\n 'zh-CN': messagesZhCn,\r\n 'zh-TW': messagesZhTw,\r\n ar: messagesAr,\r\n bg: messagesBg,\r\n el: messagesEl,\r\n id: messagesId,\r\n pt: messagesPt,\r\n ro: messagesRo,\r\n sr: messagesSr,\r\n th: messagesTh,\r\n vi: messagesVi,\r\n he: messagesHe,\r\n uk: messagesUk,\r\n};\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { IntlProvider } from \"react-intl\";\r\nimport { ExtensionEventTypes } from '@msx/platform-services';\r\nimport { getCurrentLocale, getCurrentTheme } from '../store';\r\nimport { messages } from '../../app/App.messages';\r\nimport { createTheme } from \"@fluentui/react\";\r\nimport { ThemeProvider } from \"@fluentui/react-theme-provider\";\r\nimport { loadTheme } from 'office-ui-fabric-react/lib/Styling';\r\nimport { appConfig } from '../../app/App.config';\r\n\r\nconst AppSettings: React.FC = props => {\r\n const currentLocale = useSelector(getCurrentLocale);\r\n const currentLocaleRef = useRef(currentLocale);\r\n const currentTheme = useSelector(getCurrentTheme);\r\n\r\n useEffect(() => {\r\n //MOUNT\r\n window.addEventListener(ExtensionEventTypes.LOCALE_CHANGED, e => handleLocaleChange(e));\r\n window.addEventListener(ExtensionEventTypes.THEME_CHANGED, e => handleThemeChange(e));\r\n window.addEventListener(ExtensionEventTypes.DASHBOARD_EDIT_ACTION_SAVE, e => handleDashboardTileSave(e));\r\n\r\n //UNMOUNT\r\n return () => {\r\n window.removeEventListener(ExtensionEventTypes.LOCALE_CHANGED, handleLocaleChange);\r\n window.removeEventListener(ExtensionEventTypes.THEME_CHANGED, handleThemeChange);\r\n window.removeEventListener(ExtensionEventTypes.DASHBOARD_EDIT_ACTION_SAVE, handleDashboardTileSave);\r\n }\r\n\r\n }, [])\r\n\r\n const handleLocaleChange = (e: any): void => {\r\n if (!appConfig.enableUserSettingsApi) {\r\n return;\r\n }\r\n if (!e.detail) return;\r\n const data = e.detail;\r\n if (!data) return;\r\n const locale = data.locale;\r\n console.log('handleLocaleChange: Call API to save user preferences -> language ', locale);\r\n // NOTE: Call API here to save user preferences -> language\r\n // use httpClient instance to call the API\r\n }\r\n\r\n const handleThemeChange = (e: any): void => {\r\n if (!appConfig.enableUserSettingsApi) {\r\n return;\r\n }\r\n if (!e.detail) return;\r\n const data = e.detail;\r\n if (!data) return;\r\n const theme = data.theme;\r\n const selectedTheme = createTheme(theme);\r\n loadTheme(selectedTheme);\r\n console.log('handleThemeChange: Call API here to save user preferences -> theme', theme.name);\r\n // NOTE: Call API here to save user preferences -> theme\r\n // use httpClient instance to call the API\r\n }\r\n\r\n const handleDashboardTileSave = (e: any): void => {\r\n if (!appConfig.enableUserSettingsApi) {\r\n return;\r\n }\r\n if (!e.detail) return;\r\n const data = e.detail;\r\n if (!data) return;\r\n const tiles = data.tiles;\r\n console.log('handleDashboardTileSave: Call API here to save user preferences -> tilesOrder', tiles);\r\n // NOTE: Call API here to save user preferences -> tilesOrder\r\n // use httpClient instance to call the API\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n currentLocaleRef.current = currentLocale;\r\n const msg = messages[currentLocale];\r\n const selectedTheme = createTheme(currentTheme);\r\n return (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n );\r\n }\r\n return renderMain();\r\n\r\n}\r\n\r\nexport const AppSettingsProvider = withRouter(AppSettings);\r\n\r\n","import {\r\n IAuthClient,\r\n ITelemetryClient,\r\n IGraphClient,\r\n IHttpClient,\r\n withStore,\r\n MSALClient,\r\n MSALV2Client,\r\n} from '@msx/platform-services';\r\nimport {\r\n ADALClient,\r\n TelemetryClient,\r\n HttpClient,\r\n GraphClient,\r\n ReducerRegistry,\r\n StoreBuilder,\r\n} from '@msx/platform-services';\r\nimport { Shell } from '@msx/platform-services';\r\nimport { appConfig } from '../../app/App.config';\r\n\r\nconst telemetryClient: ITelemetryClient = new TelemetryClient(\r\n {\r\n instrumentationKey: appConfig.telemetryConfig.instrumentationKey,\r\n UTPConfig: appConfig.UTPConfig,\r\n defaultProperties: {\r\n appName: appConfig.appName,\r\n },\r\n\r\n });\r\n\r\n//--------------------\r\n// ADAL http client\r\n//--------------------\r\n// const authClient: IAuthClient = new ADALClient(\r\n// {\r\n// clientId: appConfig.authConfig.clientId,\r\n// redirectUri: window.location.origin\r\n// },\r\n// telemetryClient\r\n// );\r\n\r\n//--------------------\r\n// MSAL http client\r\n//--------------------\r\nconst authClient = new MSALV2Client(\r\n {\r\n auth: {\r\n clientId: appConfig.authConfig.clientId,\r\n redirectUri: window.location.origin,\r\n authority: appConfig.authConfig.authority\r\n },\r\n },\r\n telemetryClient\r\n);\r\n\r\n// --------------------\r\n// MSALV2 http client\r\n// --------------------\r\n// const authClient = new MSALV2Client(\r\n// {\r\n// auth: {\r\n// clientId: appConfig.authConfig.clientId,\r\n// redirectUri: window.location.origin,\r\n// //authority: appConfig.authConfig.authority\r\n// },\r\n// },\r\n// telemetryClient\r\n// );\r\n\r\nconst httpClient: IHttpClient = new HttpClient(\r\n telemetryClient,\r\n authClient,\r\n { logPayload: appConfig.telemetryConfig.logPayload }\r\n);\r\nconst graphClient: IGraphClient = new GraphClient(httpClient);\r\n\r\nconst initialAppState = {};\r\nconst isDevelopment = process.env.NODE_ENV === 'development' || true;\r\nconst reducerRegistry = new ReducerRegistry();\r\nconst storeResult = new StoreBuilder(reducerRegistry, initialAppState)\r\n .configureLogger(isDevelopment)\r\n .configureSaga({\r\n authClient,\r\n telemetryClient,\r\n httpClient,\r\n graphClient,\r\n })\r\n .build();\r\n\r\nexport const AppServiceProvider = withStore(storeResult)(Shell);\r\n","import { defineMessages } from \"react-intl\";\r\n\r\nexport const messages = defineMessages({\r\n footerText: {\r\n id: 'footer.text',\r\n defaultMessage: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel',\r\n },\r\n});\r\n","import { IStyle } from 'office-ui-fabric-react/lib/Styling';\r\nimport { IAppTheme } from '@msx/platform-services';\r\nimport { FOOTER_HEIGHT } from './AppFooter.types';\r\n\r\ninterface IAppFooterStyles {\r\n container: IStyle;\r\n message: IStyle;\r\n}\r\n\r\n\r\nexport const getStyles = (theme: IAppTheme): IAppFooterStyles => {\r\n return {\r\n container: {\r\n padding: '5px 15px',\r\n backgroundColor: `${theme.palette.white}`,\r\n overflow: 'hidden',\r\n height: `${FOOTER_HEIGHT}px`,\r\n },\r\n message: {\r\n fontFamily: \"Segoe UI\",\r\n color: `${theme.palette.black}`,\r\n fontSize: \"11px\",\r\n margin: \"0\",\r\n }\r\n }\r\n};\r\n\r\n\r\n","\r\n\r\nimport { InjectedIntlProps } from 'react-intl';\r\n\r\nexport const FOOTER_HEIGHT = 30;\r\n\r\nexport interface FooterProps extends InjectedIntlProps { \r\n //todo: if any\r\n}\r\n","import React, { useContext } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { injectIntl } from 'react-intl';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { Stack } from 'office-ui-fabric-react/lib/Stack';\r\nimport { Text } from 'office-ui-fabric-react/lib/Text';\r\nimport { getCurrentTheme } from '../../../core/store';\r\nimport { messages } from './AppFooter.messages';\r\nimport { getStyles } from './AppFooter.styles';\r\nimport { FooterProps } from './AppFooter.types';\r\nimport { ApplicationContext } from '@msx/platform-services';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nconst AppFooterComponent: React.FC = props => {\r\n const { appState } = useContext(ApplicationContext);\r\n const { intl } = props;\r\n const theme = useSelector(getCurrentTheme);\r\n classes = getClassNames(getStyles, theme);\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (!appState.appConfig.showFooter) return null;\r\n return (\r\n
\r\n \r\n \r\n {intl.formatMessage(messages.footerText)}\r\n \r\n \r\n
\r\n );\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const AppFooter = injectIntl(AppFooterComponent);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n retakeTour: {\r\n id: 'header.retakeTour',\r\n defaultMessage: 'Guided tour',\r\n },\r\n retakeTourAriaLabel: {\r\n id: 'header.retakeTourAriaLabel',\r\n defaultMessage: 'retake guided tour',\r\n },\r\n localization: {\r\n id: 'header.localization',\r\n defaultMessage: 'Language menu',\r\n },\r\n localizationAriaLabel: {\r\n id: 'header.localizationAriaLabel',\r\n defaultMessage: 'change Language menu',\r\n },\r\n chatBot: {\r\n id: 'header.chatBot',\r\n defaultMessage: 'Timmy Trade bot',\r\n },\r\n financeSupportBotAriaLabel: {\r\n id: 'header.financeSupportBotAriaLabel',\r\n defaultMessage: 'Timmy Trade bot (opens a new window)',\r\n },\r\n feedback: {\r\n id: 'header.feedback',\r\n defaultMessage: 'Feedback',\r\n },\r\n profile: {\r\n id: 'header.profile',\r\n defaultMessage: 'Profile menu',\r\n },\r\n expandMenu: {\r\n id: 'header.expandMenu',\r\n defaultMessage: 'expanded',\r\n },\r\n commandBarAriaLabel: {\r\n id: 'header.commandBarAriaLabel',\r\n defaultMessage: 'Main header, please use the left and right arrow keys to navigate between items',\r\n },\r\n globalSearch: {\r\n id: 'header.globalSearch',\r\n defaultMessage: 'Global Search',\r\n },\r\n globalSearchPlaceHolderText: {\r\n id: 'header.globalSearchPlaceHolderText',\r\n defaultMessage: 'Search',\r\n },\r\n helpSettingsTitle: {\r\n id: 'header.helpSettingsTitle',\r\n defaultMessage: 'Help',\r\n },\r\n helpSettingsBackButton: {\r\n id: 'header.helpSettingsBackButton',\r\n defaultMessage: 'Help Panel Back Button',\r\n },\r\n helpSettingsBackButtonAriaLabel: {\r\n id: 'header.helpSettingsBackButtonAriaLabel',\r\n defaultMessage: 'Help Panel Back Button for multiple level content navigation',\r\n },\r\n settingsNotificationsTitle: {\r\n id: 'header.settingsNotificationsTitle',\r\n defaultMessage: 'Notifications',\r\n },\r\n settingsSettingsTitle: {\r\n id: 'header.settingsSettingsTitle',\r\n defaultMessage: 'Settings',\r\n },\r\n settingsSettingsPrimaryButton: {\r\n id: 'header.settingsSettingsPrimaryButton',\r\n defaultMessage: 'Save',\r\n },\r\n settingsSettingsPrimaryButtonAriaLabel: {\r\n id: 'header.settingsSettingsPrimaryButtonAriaLabel',\r\n defaultMessage: 'Save Settings',\r\n },\r\n settingsSettingsSecondaryButton: {\r\n id: 'header.settingsSettingsSecondaryButton',\r\n defaultMessage: 'Cancel',\r\n },\r\n settingsSettingsSecondaryButtonAriaLabel: {\r\n id: 'header.settingsSettingsSecondaryButtonAriaLabel',\r\n defaultMessage: 'Cancel current Settings',\r\n },\r\n privacyStatement: {\r\n id: 'header.privacyStatement',\r\n defaultMessage: 'MS Data Privacy Notice'\r\n },\r\n support: {\r\n id: 'header.support',\r\n defaultMessage: 'Create a Technical Support Ticket'\r\n },\r\n businessSupport: {\r\n id: 'header.businessSupport',\r\n defaultMessage: 'Create a Business Support Ticket - OneTrade Incident'\r\n }\r\n});\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n root: {\r\n padding: '20px',\r\n },\r\n headingMain: {\r\n marginLeft: '20px',\r\n },\r\n purchaseOrderTileContainer: {\r\n width: '375px',\r\n height: '230px'\r\n },\r\n slimPurchaseOrderTileContainer: {\r\n marginTop: '40px',\r\n },\r\n aboutroot: {\r\n maxWidth: '1024px',\r\n },\r\n }\r\n};\r\n\r\n\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n helpPageTile: {\r\n id: 'helpPage.Title',\r\n defaultMessage: 'Help'\r\n },\r\n helpPageSubTile: {\r\n id: 'helpPage.helpPageSubTile',\r\n defaultMessage: 'Featured help'\r\n },\r\n helpPageSearchPlaceHolder: {\r\n id: 'helpPage.helpPageSearchPlaceHolder',\r\n defaultMessage: 'Search help'\r\n },\r\n helpPageLinkAccessToken: {\r\n id: 'helpPage.helpPageLinkAccessToken',\r\n defaultMessage: 'Acquire an access token'\r\n },\r\n helpPageLinkModalBasic: {\r\n id: 'helpPage.helpPageLinkModalBasic',\r\n defaultMessage: 'Modal'\r\n },\r\n helpPageLinkDonutChart: {\r\n id: 'helpPage.helpPageLinkDonutChart',\r\n defaultMessage: 'MSX Donut Chart'\r\n },\r\n helpPageLinkTable: {\r\n id: 'helpPage.helpPageLinkTable',\r\n defaultMessage: 'MSX Table'\r\n },\r\n settingsPageLinkGeneral: {\r\n id: 'helpPage.settingsPageLinkGeneral',\r\n defaultMessage: 'General'\r\n },\r\n settingsPageLinkNotifications: {\r\n id: 'helpPage.settingsPageLinkNotifications',\r\n defaultMessage: 'Notifications'\r\n },\r\n settingsPageLinkSounds: {\r\n id: 'helpPage.settingsPageLinkSounds',\r\n defaultMessage: 'Sounds'\r\n },\r\n settingsPageLinkFavorites: {\r\n id: 'helpPage.settingsPageLinkFavorites',\r\n defaultMessage: 'Favorites'\r\n },\r\n settingsPageLinkAccessibility: {\r\n id: 'helpPage.settingsPageLinkAccessibility',\r\n defaultMessage: 'Accessibility'\r\n },\r\n settingsPageLinkFabricComponent: {\r\n id: 'helpPage.settingsPageLinkFabricComponent',\r\n defaultMessage: 'show fabric components'\r\n },\r\n about1: {\r\n id: 'helpPage.about1',\r\n defaultMessage: \"This portal is based on a UI composition system whose primary design goal is to enable the integration of UI built by several teams into a single, robust single-page web application.\",\r\n },\r\n about2: {\r\n id: 'helpPage.about2',\r\n defaultMessage: \"With this system, a team develops a UI extension to plug into and extend the UI of the portal. Teams develop and refine UI iteratively and can choose a deployment cadence that suits their team schedule and their customer needs. They can safely link their UI with another UI constructed by other teams, resulting in a portal application that (to the portal end user) appears to have been built by a single team. Any bug in a team's UI has only a local impact on that team's UI and does not impact the availability/reliability of the larger portal UX or that of any other UI extension.\",\r\n },\r\n about3: {\r\n id: 'helpPage.about3',\r\n defaultMessage: \"The portal platform allows extensions that are built as web component. For any queries please reach out to MSX framework team.\",\r\n },\r\n featureTitle: {\r\n id: 'helpPage.featureTitle',\r\n defaultMessage: \"What features are available in this framework?\",\r\n },\r\n advanceFeatureTitle: {\r\n id: 'helpPage.advanceFeatureTitle',\r\n defaultMessage: \"Advanced features\",\r\n },\r\n feature1: {\r\n id: 'helpPage.feature1',\r\n defaultMessage: \"Authentication service (ADAL, MSAL, MSAL v2)\",\r\n },\r\n feature2: {\r\n id: 'helpPage.feature2',\r\n defaultMessage: \"Telemetry client\",\r\n },\r\n feature3: {\r\n id: 'helpPage.feature3',\r\n defaultMessage: \"http client\",\r\n },\r\n feature4: {\r\n id: 'helpPage.feature4',\r\n defaultMessage: \"Internationalization with React-Intl\",\r\n },\r\n feature5: {\r\n id: 'helpPage.feature5',\r\n defaultMessage: \"React Router (page navigation)\",\r\n },\r\n feature6: {\r\n id: 'helpPage.feature6',\r\n defaultMessage: \"React hook\",\r\n },\r\n feature7: {\r\n id: 'helpPage.feature7',\r\n defaultMessage: \"Fluent UI controls\",\r\n },\r\n feature8: {\r\n id: 'helpPage.feature8',\r\n defaultMessage: \"CSEO Coherence Controls (Left Navigation, Header)\",\r\n },\r\n feature9: {\r\n id: 'helpPage.feature9',\r\n defaultMessage: \"OCV integration\",\r\n },\r\n feature10: {\r\n id: 'helpPage.feature10',\r\n defaultMessage: \"State management with Redux\",\r\n },\r\n feature11: {\r\n id: 'helpPage.feature11',\r\n defaultMessage: \"Finance BOT integration\",\r\n },\r\n feature12: {\r\n id: 'helpPage.feature12',\r\n defaultMessage: \"UX Theme integration\",\r\n },\r\n feature13: {\r\n id: 'helpPage.feature13',\r\n defaultMessage: \"Dashboard customization\",\r\n },\r\n feature14: {\r\n id: 'helpPage.feature14',\r\n defaultMessage: \"Portal extension builder\",\r\n },\r\n feature15: {\r\n id: 'helpPage.feature15',\r\n defaultMessage: \"Onboard new portal extension developed by different teams\",\r\n },\r\n dashboard1: {\r\n id: 'helpPage.dashboard1',\r\n defaultMessage: \"Dashboards are a focused and organized view of your business features in the portal. Use dashboards as a workspace where you can quickly launch tasks for day-to-day operations and monitor the success of business. Build custom dashboards based on projects, tasks, or user roles, for example.\",\r\n },\r\n dashboard2: {\r\n id: 'helpPage.dashboard2',\r\n defaultMessage: \"MSX portal provides a default dashboard in the home page as a starting point. You can customize dashboards here. Please ensure that administrator has enabled require extension tiles for your project.\",\r\n },\r\n\r\n});\r\n\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { MsxCard, MsxDonutChart } from '@msx/react-ui-component'\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { getStyles } from './Sample.styles'\r\nimport { ApplicationContext } from '@msx/platform-services'\r\nimport { messages } from './Sample.messages';\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //if: any\r\n}\r\n\r\ntype Props = OwnProps & RouteComponentProps;\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nconst DonutChart: (React.FC) = (props) => {\r\n const { intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const cardConfig = {\r\n cardTitle: 'Purchase Order (tile layout)',\r\n minHeight: '230px',\r\n minWidth: '375px',\r\n }\r\n\r\n const getPoChartData = () => {\r\n return ([\r\n {\r\n name: \"Paid\",\r\n value: 9800000,\r\n color: \"rgb(92, 46, 145)\",\r\n },\r\n {\r\n name: \"Not Paid\",\r\n value: 9800000,\r\n color: \"rgb(49, 209, 219)\",\r\n },\r\n ]);\r\n }\r\n const handleGraphClick = (filter) => {\r\n alert('you have selected filter: ' + filter);\r\n }\r\n\r\n const handleExpandClick = () => {\r\n alert('you clicked on expand buttton');\r\n }\r\n\r\n const renderCard = () => {\r\n return \r\n }\r\n const renderSlimCard = () => {\r\n return \r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n
\r\n

{intl.formatMessage(messages.helpPageLinkDonutChart)}

\r\n
\r\n \r\n {renderCard()}\r\n \r\n
\r\n
\r\n

Purchase Order (row layout)

\r\n {renderSlimCard()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\n\r\nexport const DonutChartExample = withRouter(injectIntl(DonutChart));\r\n\r\n","import {IPortalConfig} from '@msx/platform-services'\r\nexport const HTTP_STATUS_NOT_FOUND = 404;\r\n\r\nexport interface IAppConfig extends IPortalConfig {\r\n}\r\n\r\nexport const AppRoutePath = {\r\n AdminPage: '/AdminPage',\r\n Dashboard: '/Dashboard',\r\n Profile: '/Profile',\r\n ToDoList: '/ToDoList',\r\n ModalBasicExample: '/ModalBasicExample',\r\n DonutChartExample: '/DonutChartExample',\r\n TableExample: '/TableExample',\r\n}\r\n\r\n","import React, { useEffect } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport {\r\n IStyle, Link, mergeStyleSets,\r\n SearchBox, FontWeights\r\n} from 'office-ui-fabric-react';\r\nimport { FontSizes } from '@cseo/styles';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { messages } from './Sample.messages';\r\nimport { AppRoutePath } from '../../../app/App.types';\r\n\r\nexport const HelpSampleLinkStyles = mergeStyleSets(\r\n {\r\n helpSampleLink: {\r\n margin: '8px 0',\r\n display: 'block',\r\n fontSize: FontSizes.size14,\r\n fontWeight: FontWeights.semibold\r\n } as IStyle\r\n }\r\n);\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n isAppReady: boolean;\r\n}\r\n\r\ntype Props = OwnProps & RouteComponentProps;\r\n\r\nconst Help: (React.FC) = (props) => {\r\n const { history, intl } = props;\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const handleNavigation = (routePath: string) => {\r\n history.push({ pathname: `${routePath}` });\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n
\r\n console.log('value is ' + newValue)}\r\n onFocus={() => console.log('onFocus called')}\r\n onBlur={() => console.log('onBlur called')}\r\n onChange={() => console.log('onChange called')}\r\n />\r\n\r\n

{intl.formatMessage(messages.helpPageSubTile)}

\r\n handleNavigation(AppRoutePath.ModalBasicExample)} className={HelpSampleLinkStyles.helpSampleLink}>\r\n {intl.formatMessage(messages.helpPageLinkModalBasic)}\r\n \r\n handleNavigation(AppRoutePath.DonutChartExample)} className={HelpSampleLinkStyles.helpSampleLink}>\r\n {intl.formatMessage(messages.helpPageLinkDonutChart)}\r\n \r\n handleNavigation(AppRoutePath.TableExample)} className={HelpSampleLinkStyles.helpSampleLink}>\r\n {intl.formatMessage(messages.helpPageLinkTable)}\r\n \r\n
\r\n\r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\nexport const HelpExample = withRouter(injectIntl(Help));\r\n\r\n","import * as React from 'react';\r\nimport { useId, useBoolean } from '@uifabric/react-hooks';\r\nimport {\r\n getTheme,\r\n mergeStyleSets,\r\n FontWeights,\r\n ContextualMenu,\r\n Toggle,\r\n DefaultButton,\r\n Modal,\r\n IDragOptions,\r\n IconButton,\r\n IIconProps,\r\n} from 'office-ui-fabric-react';\r\n\r\nconst dragOptions: IDragOptions = {\r\n moveMenuItemText: 'Move',\r\n closeMenuItemText: 'Close',\r\n menu: ContextualMenu,\r\n};\r\nconst cancelIcon: IIconProps = { iconName: 'Cancel' };\r\n\r\nconst getModalStyle = () => {\r\n return {\r\n main: {\r\n //backgroundColor: DarkTheme.palette.neutralLighter,\r\n },\r\n }\r\n};\r\n\r\nexport const ModalBasicExample: React.FunctionComponent = () => {\r\n const [isModalOpen, { setTrue: showModal, setFalse: hideModal }] = useBoolean(false);\r\n const [isDraggable, { toggle: toggleIsDraggable }] = useBoolean(false);\r\n\r\n // Use useId() to ensure that the IDs are unique on the page.\r\n // (It's also okay to use plain strings and manually ensure uniqueness.)\r\n const titleId = useId('title');\r\n\r\n return (\r\n
\r\n

Modal

\r\n \r\n \r\n \r\n
\r\n Lorem Ipsum\r\n \r\n
\r\n
\r\n

\r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lorem nulla, malesuada ut sagittis sit\r\n amet, vulputate in leo. Maecenas vulputate congue sapien eu tincidunt. Etiam eu sem turpis. Fusce tempor\r\n sagittis nunc, ut interdum ipsum vestibulum non. Proin dolor elit, aliquam eget tincidunt non, vestibulum ut\r\n turpis. In hac habitasse platea dictumst. In a odio eget enim porttitor maximus. Aliquam nulla nibh,\r\n ullamcorper aliquam placerat eu, viverra et dui. Phasellus ex lectus, maximus in mollis ac, luctus vel eros.\r\n Vivamus ultrices, turpis sed malesuada gravida, eros ipsum venenatis elit, et volutpat eros dui et ante.\r\n Quisque ultricies mi nec leo ultricies mollis. Vivamus egestas volutpat lacinia. Quisque pharetra eleifend\r\n efficitur.\r\n

\r\n

\r\n Mauris at nunc eget lectus lobortis facilisis et eget magna. Vestibulum venenatis augue sapien, rhoncus\r\n faucibus magna semper eget. Proin rutrum libero sagittis sapien aliquet auctor. Suspendisse tristique a\r\n magna at facilisis. Duis rhoncus feugiat magna in rutrum. Suspendisse semper, dolor et vestibulum lacinia,\r\n nunc felis malesuada ex, nec hendrerit justo ex et massa. Quisque quis mollis nulla. Nam commodo est ornare,\r\n rhoncus odio eu, pharetra tellus. Nunc sed velit mi.\r\n

\r\n

\r\n Sed condimentum ultricies turpis convallis pharetra. Sed sagittis quam pharetra luctus porttitor. Cras vel\r\n consequat lectus. Sed nec fringilla urna, a aliquet libero. Aenean sed nisl purus. Vivamus vulputate felis\r\n et odio efficitur suscipit. Ut volutpat dictum lectus, ac rutrum massa accumsan at. Sed pharetra auctor\r\n finibus. In augue libero, commodo vitae nisi non, sagittis convallis ante. Phasellus malesuada eleifend\r\n mollis. Curabitur ultricies leo ac metus venenatis elementum.\r\n

\r\n

\r\n Aenean egestas quam ut erat commodo blandit. Mauris ante nisl, pellentesque sed venenatis nec, aliquet sit\r\n amet enim. Praesent vitae diam non diam aliquet tristique non ut arcu. Pellentesque et ultrices eros. Fusce\r\n diam metus, mattis eu luctus nec, facilisis vel erat. Nam a lacus quis tellus gravida euismod. Nulla sed sem\r\n eget tortor cursus interdum. Sed vehicula tristique ultricies. Aenean libero purus, mollis quis massa quis,\r\n eleifend dictum massa. Fusce eu sapien sit amet odio lacinia placerat. Mauris varius risus sed aliquet\r\n cursus. Aenean lectus magna, tincidunt sit amet sodales a, volutpat ac leo. Morbi nisl sapien, tincidunt sit\r\n amet mauris quis, sollicitudin auctor est.\r\n

\r\n

\r\n Nam id mi justo. Nam vehicula vulputate augue, ac pretium enim rutrum ultricies. Sed aliquet accumsan\r\n varius. Quisque ac auctor ligula. Fusce fringilla, odio et dignissim iaculis, est lacus ultrices risus,\r\n vitae condimentum enim urna eu nunc. In risus est, mattis non suscipit at, mattis ut ante. Maecenas\r\n consectetur urna vel erat maximus, non molestie massa consequat. Duis a feugiat nibh. Sed a hendrerit diam,\r\n a mattis est. In augue dolor, faucibus vel metus at, convallis rhoncus dui.\r\n

\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst theme = getTheme();\r\nconst contentStyles = mergeStyleSets({\r\n container: {\r\n display: 'flex',\r\n flexFlow: 'column nowrap',\r\n alignItems: 'stretch',\r\n },\r\n header: [\r\n theme.fonts.xxLarge,\r\n {\r\n flex: '1 1 auto',\r\n borderTop: `4px solid ${theme.palette.themePrimary}`,\r\n color: theme.palette.neutralPrimary,\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontWeight: FontWeights.semibold,\r\n padding: '12px 12px 14px 24px',\r\n },\r\n ],\r\n body: {\r\n flex: '4 4 auto',\r\n padding: '0 24px 24px 24px',\r\n overflowY: 'hidden',\r\n selectors: {\r\n p: { margin: '14px 0' },\r\n 'p:first-child': { marginTop: 0 },\r\n 'p:last-child': { marginBottom: 0 },\r\n },\r\n },\r\n});\r\nconst toggleStyles = { root: { marginBottom: '20px' } };\r\nconst iconButtonStyles = {\r\n root: {\r\n color: theme.palette.neutralPrimary,\r\n marginLeft: 'auto',\r\n marginTop: '4px',\r\n marginRight: '2px',\r\n },\r\n rootHovered: {\r\n color: theme.palette.neutralDark,\r\n },\r\n};\r\n","import moment from 'moment';\r\nimport { NotificationListItem } from '@cseo/controls';\r\n\r\nexport const initialNotifications: NotificationListItem[] = [\r\n {\r\n itemKey: '1',\r\n displayStatus: 'new',\r\n status: 'unread',\r\n timeDelivered: moment().add(-1, 'hours'),\r\n messageBodyText: 'Need help! Have time to review my updates before the review',\r\n subjectIcon: 'Mail',\r\n subjectHeader: 'Lorem ipsum 1',\r\n senderName: 'Coulson D\\'Avanzo',\r\n actionRequiredText: 'Requested action',\r\n actionRequiredLink: 'http://www.bing.com'\r\n },\r\n {\r\n itemKey: '2',\r\n displayStatus: 'new',\r\n status: 'unread',\r\n timeDelivered: moment().add(-117, 'minutes'),\r\n messageBodyText: 'Can you take a look at my designs before the review',\r\n subjectIcon: 'Mail',\r\n subjectHeader: 'Lorem ipsum 2',\r\n senderName: 'Joe Cool',\r\n senderImageUrl: 'https://pbs.twimg.com/profile_images/497043545505947648/ESngUXG0.jpeg'\r\n },\r\n {\r\n itemKey: '3',\r\n displayStatus: 'new',\r\n status: 'unread',\r\n timeDelivered: moment().add(-120, 'minutes'),\r\n subjectIcon: 'Money',\r\n subjectHeader: 'Lorem ipsum 2',\r\n senderName: 'Abc ZZZZ',\r\n actionRequiredText: 'Requested action',\r\n actionRequiredLink: 'http://www.bing.com'\r\n },\r\n {\r\n itemKey: '4',\r\n displayStatus: 'new',\r\n status: 'unread',\r\n timeDelivered: moment().add(-22, 'hours'),\r\n messageBodyText: 'The quick brown fox jumps over the lazy dog',\r\n subjectIcon: 'MapPin',\r\n subjectHeader: 'Lorem ipsum 3',\r\n actionRequiredText: 'Requested action',\r\n actionRequiredLink: 'http://www.bing.com'\r\n },\r\n {\r\n itemKey: '5',\r\n displayStatus: 'old',\r\n status: 'unread',\r\n timeDelivered: moment().add(-31, 'hours'),\r\n subjectIcon: 'Mail',\r\n subjectHeader: 'Lorem ipsum 4',\r\n eventTimeBlock: '09:00 AM - 01:00 PM',\r\n eventLocation: 'Millennium C / 24',\r\n actionRequiredText: 'Requested action',\r\n actionRequiredLink: 'http://www.bing.com'\r\n },\r\n {\r\n itemKey: '6',\r\n displayStatus: 'new',\r\n status: 'unread',\r\n timeDelivered: moment('9/10/19'),\r\n messageBodyText: 'The quick brown fox jumps over the lazy dog',\r\n subjectIcon: 'Mail',\r\n subjectHeader: 'Lorem ipsum 3'\r\n }\r\n];","import React from 'react';\r\nimport {\r\n IStyle, mergeStyleSets, ActionButton, IIconProps,\r\n mergeStyles\r\n} from 'office-ui-fabric-react';\r\nimport { ExtendedTypography, HyperlinkColors } from '@cseo/styles';\r\n\r\n\r\nconst SettingsStyles = mergeStyleSets({\r\n root: {\r\n marginLeft: '-10px',\r\n marginRight: '-10px'\r\n } as IStyle,\r\n toggle: {\r\n marginTop: '3px',\r\n marginLeft: '10px'\r\n } as IStyle\r\n});\r\n\r\nexport const ProfilePanelSampleStyles = {\r\n root: [\r\n mergeStyles(ExtendedTypography.size14Semibold),\r\n {\r\n color: HyperlinkColors.hyperlink\r\n }\r\n ],\r\n rootHovered: [\r\n mergeStyles(ExtendedTypography.size14Semibold),\r\n {\r\n color: HyperlinkColors.hyperlinkHoverPressed\r\n }\r\n ],\r\n rootPressed: [\r\n mergeStyles(ExtendedTypography.size14Semibold),\r\n {\r\n color: HyperlinkColors.hyperlinkHoverPressed\r\n }\r\n ],\r\n icon: [\r\n mergeStyles(ExtendedTypography.size14Semibold),\r\n {\r\n color: HyperlinkColors.hyperlink\r\n }\r\n ],\r\n iconHovered: [\r\n mergeStyles(ExtendedTypography.size14Semibold),\r\n {\r\n color: HyperlinkColors.hyperlinkHoverPressed\r\n }\r\n ],\r\n iconPressed: [\r\n mergeStyles(ExtendedTypography.size14Semibold),\r\n {\r\n color: HyperlinkColors.hyperlinkHoverPressed\r\n }\r\n ]\r\n};\r\n\r\nconst settingsIcon: IIconProps = { iconName: 'Settings' };\r\nconst TouchIcon: IIconProps = { iconName: 'Touch' };\r\n\r\nexport const ProfilePanelExample: JSX.Element = (\r\n
\r\n \r\n General\r\n \r\n
\r\n \r\n Accessibility\r\n \r\n
\r\n);","import React, { useEffect } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { injectIntl } from 'react-intl';\r\nimport {\r\n IStyle, mergeStyleSets, ActionButton,\r\n IIconProps, Toggle\r\n} from 'office-ui-fabric-react';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { messages } from './Sample.messages';\r\nimport { IAppTheme } from '@msx/platform-services';\r\n\r\n\r\nconst SettingsStyles = mergeStyleSets({\r\n root: {\r\n marginLeft: '-10px',\r\n marginRight: '-10px'\r\n } as IStyle,\r\n toggle: {\r\n marginTop: '3px',\r\n marginLeft: '10px'\r\n } as IStyle\r\n});\r\n\r\n\r\nconst settingsIcon: IIconProps = { iconName: 'Settings' };\r\n\r\nconst ringerIcon: IIconProps = { iconName: 'Ringer' };\r\n\r\nconst Volume2Icon: IIconProps = { iconName: 'Volume2' };\r\n\r\nconst FavoriteStarIcon: IIconProps = { iconName: 'FavoriteStar' };\r\n\r\nconst TouchIcon: IIconProps = { iconName: 'Touch' };\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n isAppReady: boolean;\r\n theme: IAppTheme;\r\n}\r\n\r\ntype SettingsProps = OwnProps & RouteComponentProps;\r\n\r\nconst Settings: (React.FC) = (props) => {\r\n const { intl } = props;\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n
\r\n \r\n {intl.formatMessage(messages.settingsPageLinkGeneral)}\r\n \r\n
\r\n \r\n {intl.formatMessage(messages.settingsPageLinkNotifications)}\r\n \r\n
\r\n \r\n {intl.formatMessage(messages.settingsPageLinkSounds)}\r\n \r\n
\r\n \r\n {intl.formatMessage(messages.settingsPageLinkFavorites)}\r\n \r\n
\r\n \r\n {intl.formatMessage(messages.settingsPageLinkAccessibility)}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\nexport const SettingsExample = withRouter(injectIntl(Settings));\r\n\r\n\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Table } from '@msx/react-ui-component'\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { getStyles } from './Sample.styles'\r\nimport { ApplicationContext } from '@msx/platform-services'\r\nimport { messages } from './Sample.messages';\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any\r\n}\r\n\r\ntype Props = OwnProps & RouteComponentProps;\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nconst TestTable: (React.FC) = (props) => {\r\n const { intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n const columns = [\r\n {\r\n key: 'lineId',\r\n fieldName: 'lineId',\r\n name: 'Line \\n Items',\r\n },\r\n {\r\n key: 'description',\r\n fieldName: 'description',\r\n name: 'Microsoft \\n Doc number',\r\n minWidth: 200,\r\n maxWidth: 250,\r\n },\r\n {\r\n key: 'quantity',\r\n fieldName: 'quantity',\r\n name: 'Item \\n Quantity',\r\n onRender: (row) => {\r\n return (\r\n (row.quantity) ?\r\n
{row.quantity}
:
\r\n )\r\n },\r\n headerClassName: 'number-column-large-heading',\r\n minWidth: 75,\r\n maxWidth: 100,\r\n },\r\n ];\r\n\r\n const rows = [\r\n {\r\n lineId: '1',\r\n description: 'description 1',\r\n quantity: 100,\r\n },\r\n {\r\n lineId: '2',\r\n description: 'description 2',\r\n quantity: 200,\r\n },\r\n {\r\n lineId: '3',\r\n description: 'description 3',\r\n quantity: 300,\r\n },\r\n {\r\n lineId: '4',\r\n description: 'description 1',\r\n quantity: 100,\r\n },\r\n {\r\n lineId: '5',\r\n description: 'description 2',\r\n quantity: 200,\r\n },\r\n {\r\n lineId: '6',\r\n description: 'description 3',\r\n quantity: 300,\r\n },\r\n {\r\n lineId: '7',\r\n description: 'description 1',\r\n quantity: 100,\r\n },\r\n {\r\n lineId: '8',\r\n description: 'description 2',\r\n quantity: 200,\r\n },\r\n {\r\n lineId: '9',\r\n description: 'description 3',\r\n quantity: 300,\r\n },\r\n {\r\n lineId: '10',\r\n description: 'description 1',\r\n quantity: 100,\r\n },\r\n {\r\n lineId: '11',\r\n description: 'description 2',\r\n quantity: 200,\r\n },\r\n {\r\n lineId: '12',\r\n description: 'description 3',\r\n quantity: 300,\r\n },\r\n ]\r\n const csvHeaders = [\r\n { label: 'Sl No', key: 'lineId' },\r\n { label: 'Item description', key: 'description' },\r\n { label: 'quantity', key: 'quantity' },\r\n ];\r\n\r\n const csvTelemetryProps = {\r\n supplierId: 'S001',\r\n currentCompanyCode: 'C001',\r\n url: window.location.href\r\n }\r\n const exportCsvProps = {\r\n canExportCsv: true,\r\n csvFilename: 'Payments.csv',\r\n csvHeaders: csvHeaders,\r\n csvTelemetryProps: csvTelemetryProps,\r\n id: 'PaymentExportToCsv',\r\n exportButtonLabel: 'Export to CSV'\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n
\r\n

{intl.formatMessage(messages.helpPageLinkTable)}

\r\n \r\n
\r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\n\r\nexport const TableExample = withRouter(injectIntl(TestTable));\r\n\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { getStyles } from './Sample.styles'\r\nimport { ApplicationContext } from '@msx/platform-services'\r\nimport { messages } from './Sample.messages';\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any\r\n}\r\n\r\ntype Props = OwnProps & RouteComponentProps;\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nconst HomeContentComponent: (React.FC) = (props) => {\r\n const { intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n //const tileExtensions = extensionsRegistrationClient.getExtensionsTiles();\r\n\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (appState.appConfig.registrationConfig.active) return null;\r\n return (\r\n
\r\n

\r\n {intl.formatMessage(messages.about1)}\r\n

\r\n

\r\n {intl.formatMessage(messages.about2)}\r\n

\r\n

\r\n {intl.formatMessage(messages.about3)}\r\n

\r\n

{intl.formatMessage(messages.featureTitle)}

\r\n
    \r\n
  1. {intl.formatMessage(messages.feature1)}
  2. \r\n
  3. {intl.formatMessage(messages.feature2)}
  4. \r\n
  5. {intl.formatMessage(messages.feature3)}
  6. \r\n
  7. {intl.formatMessage(messages.feature4)}
  8. \r\n
  9. {intl.formatMessage(messages.feature5)}
  10. \r\n
  11. {intl.formatMessage(messages.feature6)}
  12. \r\n
  13. {intl.formatMessage(messages.feature7)}
  14. \r\n
  15. {intl.formatMessage(messages.feature8)}
  16. \r\n
  17. {intl.formatMessage(messages.feature9)}
  18. \r\n
  19. {intl.formatMessage(messages.feature10)}
  20. \r\n
\r\n

{intl.formatMessage(messages.advanceFeatureTitle)}

\r\n
    \r\n
  1. {intl.formatMessage(messages.feature11)}
  2. \r\n
  3. {intl.formatMessage(messages.feature12)}
  4. \r\n
  5. {intl.formatMessage(messages.feature13)}
  6. \r\n
  7. {intl.formatMessage(messages.feature14)}
  8. \r\n
  9. {intl.formatMessage(messages.feature15)}
  10. \r\n\r\n
\r\n
\r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\n\r\nexport const HomeContent = withRouter(injectIntl(HomeContentComponent));\r\n\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { getStyles } from './Sample.styles'\r\nimport { ApplicationContext } from '@msx/platform-services'\r\nimport { messages } from './Sample.messages';\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any\r\n}\r\n\r\ntype Props = OwnProps & RouteComponentProps;\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nconst DashboardContentComponent: (React.FC) = (props) => {\r\n const { intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n //const tileExtensions = extensionsRegistrationClient.getExtensionsTiles();\r\n\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (appState.appConfig.registrationConfig.active) return null;\r\n //if (tileExtensions.length > 0) return null;\r\n return (\r\n
\r\n

\r\n {intl.formatMessage(messages.dashboard1)}\r\n

\r\n

\r\n {intl.formatMessage(messages.dashboard2)}\r\n

\r\n
\r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\n\r\nexport const DashboardContent = withRouter(injectIntl(DashboardContentComponent));\r\n\r\n","\r\nimport React, { useEffect, useState, useContext } from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { IStyle, Link, mergeStyleSets } from 'office-ui-fabric-react';\r\nimport { ICommandBarItemProps } from 'office-ui-fabric-react/lib/CommandBar';\r\nimport { CoherenceHeader, NotificationListItem, CoherencePanelSize } from '@cseo/controls';\r\nimport { ServiceContext, useUser, ApplicationContext } from '@msx/platform-services';\r\nimport { messages } from './AppHeader.messages';\r\nimport { HeaderProps } from './AppHeader.types';\r\nimport { HelpExample, initialNotifications } from '../sample';\r\nimport { Settings } from '..'\r\n\r\nconst AppHeaderComponent: (React.FC) = (props) => {\r\n const { appState } = useContext(ApplicationContext);\r\n const context = React.useContext(ServiceContext)\r\n const [newNotifications, setNewNotifications] = useState(3);\r\n const [notificationItems, setNotificationItems] = useState(initialNotifications);\r\n const [showDismissAllBool, setShowDismissAllBool] = useState(false);\r\n const [dismissOpenedPanel, setDismissOpenedPanel] = useState(undefined);\r\n const user = useUser();\r\n const { intl, isUserLoggedIn, appName, isAppReady } = props;\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const AttentionTextStyles = mergeStyleSets({\r\n attentionText: {\r\n minWidth: '240px'\r\n } as IStyle\r\n });\r\n\r\n const handleOpenNotificationItem = (itemKey: string) => {\r\n console.log('Open notification ' + itemKey);\r\n }\r\n\r\n const handleDismissMultipleNotification = (id: string[]): void => {\r\n setShowDismissAllBool(true);\r\n console.log('Dismiss notification ' + id);\r\n }\r\n\r\n const handleUpdateNotificationItem = (itemKey: string, dStatus: NotificationListItem['displayStatus'], rStatus?: NotificationListItem['status']) => {\r\n let list = [...notificationItems];\r\n list.forEach((item) => {\r\n if (item.itemKey === itemKey) {\r\n item.displayStatus = dStatus;\r\n if (rStatus) {\r\n item.status = rStatus;\r\n }\r\n }\r\n });\r\n setNotificationItems(list);\r\n }\r\n\r\n const updateNotificationItemDisplayStatus = (): void => {\r\n // Placeholder for code that updates displayStatus to 'old' for all items listed in the id string array\r\n console.log('Mark notification(s) as old');\r\n\r\n // Setting to -1 to see badge disappear when notification panel opens\r\n setNewNotifications(-1);\r\n }\r\n\r\n const dismissAllNotificationMessage: any = (\r\n
\r\n
All notifications have been dismissed
\r\n setShowDismissAllBool(false)}>Undo\r\n
\r\n );\r\n\r\n const handleSignOut = () => {\r\n context.authClient.logOut();\r\n }\r\n\r\n const telemetryHook = {\r\n trackMetric: function (metric, customProperties?: { [key: string]: unknown }) {\r\n // Placeholder\r\n },\r\n trackException: function (exception) {\r\n // Placeholder\r\n },\r\n trackEvent: function (event, customProperties?: { [key: string]: unknown }) {\r\n // Placeholder\r\n },\r\n trackTrace: function (trace, customProperties?: { [key: string]: unknown }) {\r\n // Placeholder\r\n }\r\n };\r\n\r\n const getHelpBody = () => {\r\n return \r\n }\r\n const handleDismissPanel = () => {\r\n setDismissOpenedPanel(true);\r\n }\r\n\r\n const getSettingsBody = () => {\r\n return \r\n }\r\n\r\n const getNotificationSettings = () => {\r\n if (!appState.appConfig.notificaitonConfig.active) {\r\n return null;\r\n }\r\n const item = {\r\n titleText: intl.formatMessage(messages.settingsNotificationsTitle),\r\n isUndoDismissAllVisible: showDismissAllBool,\r\n items: notificationItems,\r\n newNotifications: newNotifications,\r\n onDismissMultiple: handleDismissMultipleNotification,\r\n onPanelOpened: updateNotificationItemDisplayStatus,\r\n onUndoDismissAll: dismissAllNotificationMessage,\r\n openItem: handleOpenNotificationItem,\r\n updateItem: handleUpdateNotificationItem,\r\n telemetryHook: telemetryHook\r\n };\r\n return item;\r\n }\r\n\r\n const getSearchSettings = () => {\r\n if (!appState.appConfig.globalSearchConfig.active) {\r\n return null;\r\n }\r\n const item = {\r\n onChange: () => undefined,\r\n onSearch: (_: string) => undefined,\r\n onClear: () => undefined,\r\n disabled: false,\r\n placeholder: intl.formatMessage(messages.globalSearchPlaceHolderText)\r\n };\r\n return item;\r\n }\r\n\r\n\r\n const getFarItems = (): ICommandBarItemProps[] => {\r\n let items = [\r\n {\r\n key: 'chatBot',\r\n id: 'header-chat-bot',\r\n text: intl.formatMessage(messages.chatBot),\r\n ariaLabel: intl.formatMessage(messages.financeSupportBotAriaLabel),\r\n iconOnly: true,\r\n iconProps: {\r\n iconName: 'Robot',\r\n },\r\n onClick: () => {\r\n (window as any).OpenFDA(\"hostappid=\" + appState.appConfig.botConfig.hostAppId);\r\n }\r\n },\r\n {\r\n key: 'gudedTour',\r\n id: 'header-guided-tour',\r\n text: intl.formatMessage(messages.retakeTour),\r\n ariaLabel: intl.formatMessage(messages.retakeTourAriaLabel),\r\n iconOnly: true,\r\n iconProps: {\r\n iconName: 'ReadingMode',\r\n },\r\n onClick: () => {\r\n console.log('Guided tour button clicked')\r\n }\r\n },\r\n {\r\n key: 'privacyStatement',\r\n id: 'header-privacy-statement',\r\n text: intl.formatMessage(messages.privacyStatement),\r\n ariaLabel: intl.formatMessage(messages.privacyStatement),\r\n iconOnly: true,\r\n iconProps: {\r\n iconName: 'ReportLock',\r\n },\r\n onClick: () => {\r\n window.open('http://go.microsoft.com/fwlink/?LinkId=518021', '_blank').focus();\r\n }\r\n },\r\n {\r\n key: 'Support',\r\n id: 'header-support',\r\n text: intl.formatMessage(messages.support),\r\n ariaLabel: intl.formatMessage(messages.support),\r\n iconOnly: true,\r\n iconProps: {\r\n iconName: 'Telemarketer',\r\n },\r\n onClick: () => {\r\n var ICM_Sev = 4;\r\n if (process.env.REACT_APP_ENV === `production`) {\r\n ICM_Sev = 3\r\n }\r\n window.open(`mailto:ImpExp-DRI@microsoft.com?subject=%23ICM${ICM_Sev} | Critical Support Request from OneTrade Portal`)\r\n }\r\n },\r\n {\r\n key: 'BusinessSupport',\r\n id: 'header-businessSupport',\r\n text: intl.formatMessage(messages.businessSupport),\r\n ariaLabel: intl.formatMessage(messages.businessSupport),\r\n iconOnly: true,\r\n iconProps: {\r\n iconName: 'Teamwork',\r\n },\r\n onClick: () => {\r\n window.open('https://onetrade.powerappsportals.com/', '_blank').focus();\r\n }\r\n }\r\n ];\r\n if (!isAppReady || !isUserLoggedIn) {\r\n const newItems = items.filter(function (obj) {\r\n return obj.key !== 'chatBot' && obj.key !== 'gudedTour';\r\n });\r\n return newItems;\r\n }\r\n if (!appState.appConfig.botConfig.active) {\r\n items = items.filter(function (obj) {\r\n return obj.key !== 'chatBot';\r\n });\r\n }\r\n if (!appState.appConfig.guidedTourConfig.active) {\r\n items = items.filter(function (obj) {\r\n return obj.key !== 'gudedTour';\r\n });\r\n }\r\n return items;\r\n }\r\n\r\n const renderFullHeader = (): JSX.Element => {\r\n const fullName = user?.name ?? 'username';\r\n const emailAddress = user?.email ?? 'useremail';\r\n return {\r\n // console.log('Help Panel Back Button clicked');\r\n // }\r\n // },\r\n // body: getHelpBody(),\r\n // telemetryHook: telemetryHook\r\n // },\r\n profileSettings: {\r\n fullName: fullName,\r\n emailAddress: emailAddress,\r\n imageUrl: '',\r\n logOutLink: '#',\r\n onLogOut: () => handleSignOut(),\r\n //onRenderFooter: () => { return Privacy Notice },\r\n //body: Placeholder to customize body\r\n telemetryHook: telemetryHook\r\n }\r\n }}\r\n dismissOpenedPanel={dismissOpenedPanel}\r\n onDismissOpenedPanel={() => {\r\n setDismissOpenedPanel(undefined);\r\n }}\r\n telemetryHook={telemetryHook}\r\n />\r\n }\r\n\r\n const renderInitialHeader = (): JSX.Element => {\r\n return \r\n }\r\n\r\n const renderNotLoggedInHeader = (): JSX.Element => {\r\n return \r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (!isAppReady)\r\n return renderInitialHeader();\r\n if (!isUserLoggedIn)\r\n return renderNotLoggedInHeader();\r\n\r\n return renderFullHeader();\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\n\r\nexport const AppHeader = injectIntl(AppHeaderComponent);\r\n","import { defineMessages } from \"react-intl\";\r\n\r\nexport const messages = defineMessages({\r\n home: {\r\n id: 'leftNavMenu.home',\r\n defaultMessage: 'Home'\r\n },\r\n externalLinksGroupTitle: {\r\n id: 'leftNavExtra.group.title',\r\n defaultMessage: 'Explore more'\r\n },\r\n leftNav_84d99b33_14df_4b75_b244_5410e153ebfa: {\r\n id: 'leftNav_84d99b33_14df_4b75_b244_5410e153ebfa',\r\n defaultMessage: 'Payments',\r\n },\r\n leftNav_0a7c9ffa_6e3b_4986_9539_9335e5e3d217: {\r\n id: 'leftNav_0a7c9ffa_6e3b_4986_9539_9335e5e3d217',\r\n defaultMessage: 'Purchase Order Monthly Projections',\r\n },\r\n leftNav_cb1bbd4f_2763_4048_af0a_97e82391be17: {\r\n id: 'leftNav_cb1bbd4f_2763_4048_af0a_97e82391be17',\r\n defaultMessage: 'Supplier Profile',\r\n },\r\n leftNav_566bc8d3_3195_406b_b603_10a660b759ee: {\r\n id: 'leftNav_566bc8d3_3195_406b_b603_10a660b759ee',\r\n defaultMessage: 'Call Center Invoice',\r\n },\r\n leftNav_37663ce7_32e5_44cd_85b7_29a83ca1cdc4: {\r\n id: 'leftNav_37663ce7_32e5_44cd_85b7_29a83ca1cdc4',\r\n defaultMessage: 'Purchase Orders',\r\n },\r\n leftNav_d5932e50_3cfb_4886_8490_9b099d180324: {\r\n id: 'leftNav_d5932e50_3cfb_4886_8490_9b099d180324',\r\n defaultMessage: 'Tickets',\r\n },\r\n leftNav_f167191b_cb15_40fd_ae15_74ba8b16c5d9: {\r\n id: 'leftNav_f167191b_cb15_40fd_ae15_74ba8b16c5d9',\r\n defaultMessage: 'Invoices',\r\n },\r\n leftNav_662873ce_09cd_4728_8527_242b32749601: {\r\n id: 'leftNav_662873ce_09cd_4728_8527_242b32749601',\r\n defaultMessage: 'Recycling',\r\n },\r\n leftNav_d2dabc9b_ae9a_4c8f_a41a_7cccdfaca805: {\r\n id: 'leftNav_d2dabc9b_ae9a_4c8f_a41a_7cccdfaca805',\r\n defaultMessage: 'User Management',\r\n },\r\n leftNav_cb1bbd4f_2763_4048_af0a_97e92391be17: {\r\n id: 'leftNav_cb1bbd4f_2763_4048_af0a_97e92391be17',\r\n defaultMessage: 'Supplier Profile',\r\n },\r\n leftNav_8b0d2bc8_d724_450a_8541_8ac91627e850: {\r\n id: 'leftNav_8b0d2bc8_d724_450a_8541_8ac91627e850',\r\n defaultMessage: 'Sourcing Events',\r\n },\r\n});\r\n","import { defineMessages } from \"react-intl\";\r\n\r\nexport const messages = defineMessages({\r\n home: {\r\n id: 'app.navigation.home',\r\n defaultMessage: 'Home'\r\n },\r\n dashboard: {\r\n id: 'app.navigation.dashboard',\r\n defaultMessage: 'My Dashboard'\r\n },\r\n adminPage: {\r\n id: 'app.navigation.adminPage',\r\n defaultMessage: 'Admin Page'\r\n },\r\n profile: {\r\n id: 'app.navigation.profile',\r\n defaultMessage: 'Profile'\r\n },\r\n todolist: {\r\n id: 'app.navigation.todolist',\r\n defaultMessage: 'To Do'\r\n },\r\n});\r\n\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { messages } from './AppLeftNav.messages';\r\nimport { IAppExtension, IAppExtensionPage, IAppRoute } from '@msx/platform-services';\r\nimport {getLeftNavMenuItems} from '../../App.navigation';\r\nimport { getExtraLeftNavMenuItems } from '../../App.navigation';\r\nimport { IAppExtensionPageExtended } from './IAppExtensionPageExtended';\r\nimport { IAppExtensionExtended } from './IAppExtensionExtended';\r\n\r\n\r\nexport const getConfig = (intl: InjectedIntl, isAppReady: boolean,\r\n history: any, extensionsPages: IAppExtensionPageExtended[],\r\n isUserLoggedIn: boolean,\r\n routes: IAppRoute[],\r\n isDevLogIn: boolean,\r\n extensions:IAppExtensionExtended[]) => {\r\n\r\n if (!isAppReady)\r\n return []\r\n\r\n const navLinkGroups = getMenuItems(intl, isAppReady, history, extensionsPages, isUserLoggedIn, routes, isDevLogIn, extensions);\r\n \r\n //creating external links\r\n const extraLeftNavLinks = getExtraLeftNavMenuItems(intl, history);\r\n extraLeftNavLinks.links.forEach((links) => {\r\n navLinkGroups[1].links.push({\r\n name: links.name,\r\n key: links.key,\r\n ariaLabel: links.ariaLabel,\r\n icon: links.icon,\r\n onClick: links.url ? () => {\r\n window.open(links.url, '_blank')\r\n } : null,\r\n links: links.links,\r\n isSelected: window.location.href === window.location.protocol + '//' + window.location.host + `` ? true : false\r\n })\r\n });\r\n\r\n\r\n return navLinkGroups\r\n\r\n};\r\n\r\nconst getMenuItems = (intl: InjectedIntl, isAppReady: boolean, history: any,\r\n extensionsPages: IAppExtensionPage[], isUserLoggedIn: boolean, routes: IAppRoute[], isDevLogIn: boolean,\r\n extensions:IAppExtensionExtended[]) => {\r\n if (!isAppReady)\r\n return []\r\n\r\n const getlocaleText = (key: string, defaultValue: string) => {\r\n let result = defaultValue;\r\n const newKey = 'leftNav_' + key.replace(/-/g, '_');\r\n const descriptor = messages[newKey];\r\n if (descriptor) result = intl.formatMessage(descriptor);\r\n return result;\r\n };\r\n\r\n const getNavObjectForPage = (page : IAppExtensionPageExtended, extension : IAppExtensionExtended) : any => {\r\n if(page.routeKey && !page.routePath && routes.filter(x => x.key == page.routeKey).length > 0){\r\n page.routePath = routes.filter(x => x.key == page.routeKey)[0].routePath;\r\n }\r\n const navObj : any = {};\r\n navObj.name = getlocaleText(page.key, page.description);\r\n navObj.key = page.key;\r\n navObj.ariaLabel = page.description;\r\n navObj.icon = extension.authorized ? page.icon : 'BlockedSiteSolid12';\r\n navObj.onClick = () => {\r\n return page.routePath?history.push({ pathname: `/${page.routePath}` }):null;\r\n };\r\n navObj.isSelected = window.location.href ===\r\n window.location.protocol +\r\n '//' +\r\n window.location.host +\r\n `${page.routePath}`\r\n ? true\r\n : false;\r\n\r\n if(page.pages && page.pages.length > 0){\r\n navObj.links = [];\r\n page.pages.forEach((subPage) => {\r\n navObj.links.push(getNavObjectForPage(subPage, extension));\r\n })\r\n }\r\n return navObj;\r\n }\r\n\r\n const navMenuLinks =\r\n [\r\n // creating first left navigation menu group\r\n // to display all app pages links\r\n {\r\n key: 'left_nav_menu',\r\n groupTitleAttributes: {\r\n id: 'left_nav_group_menu',\r\n },\r\n links: [\r\n ],\r\n },\r\n // creating second left navigation menu group\r\n // to display all external pages links\r\n // to change any external links open AppLeftNavExtraLinks.ts\r\n {\r\n key: 'left_nav_external_links',\r\n name: intl.formatMessage(messages.externalLinksGroupTitle),\r\n groupTitleAttributes: {\r\n id: 'left_nav_group_external_links',\r\n },\r\n links: [\r\n ],\r\n },\r\n ];\r\n // creating home page links\r\n navMenuLinks[0].links.push(\r\n {\r\n name: intl.formatMessage(messages.home),\r\n key: 'left_nav_menu_home',\r\n ariaLabel: intl.formatMessage(messages.home),\r\n icon: 'Home',\r\n onClick: () => {\r\n history.push('/');\r\n },\r\n isSelected:\r\n window.location.href === window.location.protocol + '//' + window.location.host + '/' ? true : false,\r\n },\r\n );\r\n\r\n // creating page links for logged in user only\r\n if (isUserLoggedIn) {\r\n const menuItems = getLeftNavMenuItems(intl, history, isDevLogIn);\r\n menuItems.forEach((item) => navMenuLinks[0].links.push(item));\r\n\r\n }\r\n\r\n\r\n extensionsPages.forEach((page) => {\r\n if (page.showNavigation)\r\n {\r\n var ext = extensions.filter(x => x.pages.filter(y => y.key == page.key).length > 0);\r\n navMenuLinks[0].links.push(getNavObjectForPage(page as IAppExtensionPageExtended, ext.length > 0 ? ext[0] : null));\r\n }\r\n });\r\n \r\n return navMenuLinks;\r\n\r\n};\r\n\r\n\r\n","import { InjectedIntl } from 'react-intl';\r\nimport { useSelector } from 'react-redux';\r\nimport { getIsDevLogIn } from '../core/store';\r\nimport { messages } from './App.navigation.messages';\r\nimport { AppRoutePath } from './App.types';\r\n\r\nexport const getLeftNavMenuItems = (intl: InjectedIntl, history: any, isDevLogIn: boolean) => {\r\n const items = [\r\n ];\r\n\r\n if(isDevLogIn){\r\n items.push({\r\n name: intl.formatMessage(messages.adminPage),\r\n key: 'left_nav_menu_adminPage',\r\n ariaLabel: intl.formatMessage(messages.adminPage),\r\n icon: 'Admin',\r\n onClick: () => {\r\n history.push(AppRoutePath.AdminPage);\r\n },\r\n isSelected:\r\n window.location.href === window.location.protocol + '//' + window.location.host + AppRoutePath.AdminPage ? true : false,\r\n });\r\n }\r\n \r\n return items;\r\n\r\n}\r\n\r\nexport const getExtraLeftNavMenuItems = (intl: InjectedIntl, history: any) => {\r\n\r\n const items =\r\n {\r\n key: \"group2\",\r\n name: \"External apps links\",\r\n groupTitleAttributes: {\r\n id: \"nav_group_2\"\r\n },\r\n links: [\r\n {\r\n name: \"Screening\",\r\n key: \"leftNavScreening\",\r\n ariaLabel: \"Screening\",\r\n icon: \"WaffleOffice365\",\r\n url: null,\r\n links: [\r\n {\r\n name: \"Bridger\",\r\n key: \"leftNavBridger\",\r\n ariaLabel: \"Bridger\",\r\n // onClick: () => {\r\n // window.open(\"https://chessuiprod.trafficmanager.net/XgAuth/\", '_blank')\r\n // }\r\n onClick: () => {\r\n history.push(AppRoutePath.Dashboard);\r\n },\r\n isSelected:\r\n window.location.href === window.location.protocol + '//' + window.location.host + AppRoutePath.Dashboard ? true : false,\r\n },\r\n {\r\n name: \"BIS\",\r\n key: \"leftNavBIS\",\r\n ariaLabel: \"BIS\",\r\n onClick: () => {\r\n window.open(\"https://sapprd15ms.redmond.corp.microsoft.com/sap/bc/ui2/flp?sap-client=300&sap-language=EN\", '_blank')\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n name: \"Import Export\",\r\n key: \"leftNavImportExport\",\r\n ariaLabel: \"Import Export\",\r\n icon: \"WaffleOffice365\",\r\n url: null,\r\n links: [\r\n {\r\n name: \"India Imports\",\r\n key: \"leftNavIndiaImports\",\r\n ariaLabel: \"India Imports\",\r\n onClick: () => {\r\n window.open(\"https://tradeexperience.trafficmanager.net/\", '_blank')\r\n }\r\n },\r\n {\r\n name: \"Trade BI Reports\",\r\n key: \"leftNavTradeBIReports\",\r\n ariaLabel: \"Trade BI Reports\",\r\n onClick: () => {\r\n window.open(\"https://msit.powerbi.com/groups/me/apps/6f600dfa-208e-4023-908d-a6112896c0d5\", '_blank')\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n name: \"Others\",\r\n key: \"leftNavTradeNet\",\r\n ariaLabel: \"Trade Hub\",\r\n icon: \"WaffleOffice365\",\r\n url: null,\r\n links: [\r\n {\r\n name: \"Trade Hub\",\r\n key: \"leftNavTradeNet\",\r\n ariaLabel: \"Trade Hub\",\r\n onClick: () => {\r\n window.open(\"https://microsoft.sharepoint.com/teams/OneTrade\", '_blank')\r\n }\r\n },\r\n ]\r\n }\r\n ]\r\n };\r\n return items;\r\n}\r\n","import React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { getConfig } from './AppLeftNav.config';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { CoherenceNav } from '@cseo/controls';\r\nimport { LeftNavProps } from './AppLeftNav.types';\r\nimport { IAppExtensionPageExtended } from './IAppExtensionPageExtended';\r\nimport { useSelector } from 'react-redux';\r\nimport { getExtensionsRegistration, getIsDevLogIn } from '../../../core/store';\r\nimport { ExtensionsRegistrationClient } from '@msx/platform-services';\r\nimport { IAppExtensionExtended } from './IAppExtensionExtended';\r\n\r\ntype Props = LeftNavProps & RouteComponentProps;\r\n\r\nconst AppLeftNavComponent: React.FC = (props) => {\r\n const { history } = props;\r\n\r\n const extensionsRegistration = useSelector(getExtensionsRegistration);\r\n const extensionsRegistrationClient = new ExtensionsRegistrationClient(extensionsRegistration);\r\n const isDevLogIn = useSelector(getIsDevLogIn);\r\n\r\n const telemetryHook = {\r\n trackMetric: function (metric, customProperties?: { [key: string]: unknown }): void {\r\n console.log('telemetryHook.trackMetric')\r\n },\r\n trackException: function (exception): void {\r\n console.log('trackException.trackException')\r\n },\r\n trackEvent: function (event, customProperties?: { [key: string]: unknown }): void {\r\n console.log('trackEvent.trackEvent')\r\n },\r\n trackTrace: function (trace, customProperties?: { [key: string]: unknown }): void {\r\n console.log('trackTrace.trackTrace')\r\n },\r\n };\r\n\r\n const renderLeftNav = () => {\r\n const { intl, isAppReady, extensionsPages, isUserLoggedIn } = props;\r\n var extensionRoutes = extensionsRegistrationClient.getRoutes();\r\n var extensions = extensionsRegistrationClient.getExtensions();\r\n let layoutConfig = getConfig(intl, isAppReady, history, extensionsPages as IAppExtensionPageExtended[], isUserLoggedIn, extensionRoutes, isDevLogIn, extensions as IAppExtensionExtended[]);\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (props.isNavCollapsed)\r\n return renderLeftNav();\r\n\r\n return renderLeftNav();\r\n }\r\n\r\n return renderMain();\r\n}\r\n\r\nexport const AppLeftNav = withRouter(injectIntl(AppLeftNavComponent));\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n settingsPanelAriaLable: {\r\n id: 'settingsPanel.settingsPanelAriaLable',\r\n defaultMessage: 'Portal settings'\r\n },\r\n generalTabTile: {\r\n id: 'settingsPanel.generalTabTile',\r\n defaultMessage: 'General'\r\n },\r\n languageTabTile: {\r\n id: 'settingsPanel.languageTabTile',\r\n defaultMessage: 'Language'\r\n },\r\n extensionsTabTile: {\r\n id: 'settingsPanel.extensionsTabTile',\r\n defaultMessage: 'Extensions'\r\n },\r\n themeSelectionTile: {\r\n id: 'settingsPanel.themeSelectionTile',\r\n defaultMessage: 'Choose a theme'\r\n },\r\n languageSelectionTile: {\r\n id: 'settingsPanel.languageSelectionTile',\r\n defaultMessage: 'Language'\r\n },\r\n languageSelectionSubTile: {\r\n id: 'settingsPanel.languageSelectionSubTile',\r\n defaultMessage: 'Choose the language displayed in the portal.'\r\n },\r\n applyButtonText: {\r\n id: 'settingsPanel.applyButtonText',\r\n defaultMessage: 'Apply'\r\n },\r\n discardButtonText: {\r\n id: 'settingsPanel.discardButtonText',\r\n defaultMessage: 'Discard'\r\n },\r\n themeLightText: {\r\n id: 'settingsPanel.themeLightText',\r\n defaultMessage: 'Light'\r\n },\r\n themeDarkText: {\r\n id: 'settingsPanel.themeDarkText',\r\n defaultMessage: 'Dark'\r\n },\r\n\r\n});\r\n\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { injectIntl } from 'react-intl';\r\nimport { InjectedIntlProps } from 'react-intl';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Label, ILabelStyles } from 'office-ui-fabric-react/lib/Label';\r\nimport { Pivot, PivotItem } from 'office-ui-fabric-react/lib/Pivot';\r\nimport { IStyleSet } from 'office-ui-fabric-react/lib/Styling';\r\nimport { Dropdown, IDropdownOption, IDropdownStyles } from 'office-ui-fabric-react/lib/Dropdown';\r\nimport { Stack, IStackTokens, IStackStyles } from 'office-ui-fabric-react/lib/Stack';\r\nimport { Text } from 'office-ui-fabric-react/lib/Text';\r\nimport { DefaultButton } from 'office-ui-fabric-react';\r\nimport { ChoiceGroup, IChoiceGroupOption } from 'office-ui-fabric-react/lib/ChoiceGroup';\r\nimport { ApplicationContext } from '@msx/platform-services'\r\nimport { messages } from './Settings.messages';\r\nimport { ExtensionEventTypes } from '@msx/platform-services';\r\nimport {\r\n getCurrentTheme,\r\n setCurrentTheme,\r\n getCurrentLocale,\r\n setCurrentLocale,\r\n} from '../../../core/store';\r\n\r\nimport { getThemeByName } from '../../../core/utils'\r\n\r\ninterface OwnProps {\r\n onDismissPanel: () => void;\r\n}\r\n\r\ntype Props = OwnProps & InjectedIntlProps & RouteComponentProps;\r\n\r\nconst SettingsComponent: (React.FC) = (props) => {\r\n const { intl } = props;\r\n const currentTheme = useSelector(getCurrentTheme);\r\n const currentLocale = useSelector(getCurrentLocale);\r\n const { appState } = useContext(ApplicationContext);\r\n const [selectedLanguageItem, setSelectedLanguageItem] = React.useState();\r\n const [selectedThemeName, setSelectedThemeName] = React.useState(currentTheme.name);\r\n const reduxDispatch = useDispatch();\r\n const stackTokens = { childrenGap: 20 };\r\n const stackStyles: Partial = { root: { marginTop: 20 } };\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const getDisplayLocales = () => {\r\n let result = [];\r\n if (!appState.appConfig.languageConfig.active) {\r\n return result;\r\n }\r\n const locales = appState.appConfig.languageConfig.locales;\r\n Object.keys(locales).forEach(function (key, idx) {\r\n result.push(\r\n {\r\n key: key,\r\n text: locales[key]\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n const languageItems = getDisplayLocales();\r\n\r\n const handleLanguageChange = (event: React.FormEvent, item: IDropdownOption): void => {\r\n setSelectedLanguageItem(item);\r\n localStorage.setItem('locale', item.key as string);\r\n\r\n };\r\n\r\n const handleThemeChange = (ev?: React.FormEvent, option?: IChoiceGroupOption): void => {\r\n setSelectedThemeName(option.key);\r\n const newTheme = getThemeByName(option.key);\r\n reduxDispatch(setCurrentTheme(newTheme));\r\n localStorage.setItem('theme', option.key);\r\n document.body.style.background = newTheme.palette.white;\r\n if (appState.appConfig.enableUserSettingsApi) {\r\n const newEvent = new CustomEvent(ExtensionEventTypes.THEME_CHANGED, { detail: { theme: newTheme } });\r\n window.dispatchEvent(newEvent);\r\n }\r\n\r\n };\r\n\r\n const handleApplyButonClick = () => {\r\n if (appState.appConfig.enableUserSettingsApi) {\r\n const newEvent = new CustomEvent(ExtensionEventTypes.LOCALE_CHANGED, { detail: { locale: selectedLanguageItem.key } });\r\n window.dispatchEvent(newEvent);\r\n }\r\n reduxDispatch(setCurrentLocale(selectedLanguageItem.key));\r\n }\r\n\r\n const handleDiscardButtonClick = () => {\r\n setSelectedLanguageItem(undefined);\r\n }\r\n\r\n const renderGeneralTab = () => {\r\n if (!appState.appConfig.themeConfig.active) {\r\n return null;\r\n }\r\n const choiceStyles = { root: { marginRight: '20px' } };\r\n\r\n const options: IChoiceGroupOption[] = [\r\n { key: 'default', text: intl.formatMessage(messages.themeLightText), iconProps: { iconName: 'ReadingMode' }, styles: choiceStyles, },\r\n { key: 'dark', text: intl.formatMessage(messages.themeDarkText), iconProps: { iconName: 'ReadingModeSolid' }, styles: choiceStyles, },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const renderLanguageTab = () => {\r\n if (!appState.appConfig.languageConfig.active) {\r\n return null;\r\n }\r\n const dropdownStyles: Partial = { dropdown: { marginTop: 5 } };\r\n const labelTitleStyles: Partial> = {\r\n root: { padding: 0 },\r\n };\r\n\r\n const stackButtonsTokens: IStackTokens = { childrenGap: 10 };\r\n const shouldDisableSave = (selectedLanguageItem && currentLocale !== selectedLanguageItem.key) ? false : true;\r\n return (\r\n \r\n \r\n \r\n \r\n {intl.formatMessage(messages.languageSelectionSubTile)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n \r\n \r\n {renderGeneralTab()}\r\n \r\n {renderLanguageTab()}\r\n \r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\nexport const Settings = withRouter(injectIntl(SettingsComponent));\r\n\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\nimport { IStyle } from 'office-ui-fabric-react';\r\n\r\nexport interface IAppStyles {\r\n root: IStyle;\r\n main: IStyle;\r\n}\r\n\r\nexport const getStyles = (theme: IAppTheme): IAppStyles => {\r\n return {\r\n root: {\r\n },\r\n main: {\r\n outline: 'none',\r\n },\r\n }\r\n};\r\n\r\n\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n loadingUserProfile: {\r\n id: 'app.loadingUserProfile',\r\n defaultMessage: 'Loading user profile...',\r\n },\r\n loadingExtensionRegistraton: {\r\n id: 'app.loadingExtensionRegistraton',\r\n defaultMessage: 'Loading registration config...',\r\n },\r\n});\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n pageTile: {\r\n id: 'adminPage.title',\r\n defaultMessage: 'Admin Page'\r\n },\r\n noDataFound: {\r\n id: 'adminPage.noDataFound',\r\n defaultMessage: 'Currently, there are no extensions availiable.',\r\n },\r\n success: {\r\n id: 'jsonTextModal.success',\r\n defaultMessage: 'Json Upload Success'\r\n },\r\n error: {\r\n id: 'jsonTextModal.error',\r\n defaultMessage: 'Json Upload Error'\r\n }\r\n});\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n headingMain: {\r\n margin: '0',\r\n },\r\n };\r\n};\r\n","import { IStyle, mergeStyleSets } from 'office-ui-fabric-react';\r\n//import { getScrollBarWidth, navCollapsedWidth } from '@m365-admin/admin-controls';\r\nimport { getScrollBarWidth } from '../core/utils';\r\n\r\nconst navCollapsedWidth = 48;\r\n\r\nconst scrollablePaneStyles = {\r\n position: 'fixed',\r\n top: 48,\r\n bottom: 0,\r\n right: 0\r\n};\r\n\r\nexport const _shellStyles = mergeStyleSets({\r\n scrollablePaneCollapsed: {\r\n ...scrollablePaneStyles,\r\n left: navCollapsedWidth // navCollapsedWidth + getScrollBarWidth() + 10\r\n } as IStyle,\r\n scrollablePaneExpand: {\r\n ...scrollablePaneStyles,\r\n left: 228 + getScrollBarWidth() + 10\r\n } as IStyle,\r\n rootDiv: {\r\n paddingRight: '30px',\r\n paddingLeft: '10px'\r\n } as IStyle,\r\n dividerLine: {\r\n width: '100%',\r\n height: '1px',\r\n backgroundColor: 'black',\r\n marginBottom: '20px'\r\n } as IStyle,\r\n rowGap: {\r\n height: '30px'\r\n } as IStyle,\r\n mainPanelCollapsed: {\r\n padding: '5px 0',\r\n } as IStyle,\r\n mainPanelExpand: {\r\n padding: '20px 0',\r\n } as IStyle,\r\n});\r\n\r\n\r\n","import * as React from 'react';\r\nimport { usePromiseTracker } from 'react-promise-tracker';\r\nimport Loader from 'react-loader-spinner';\r\n\r\nexport const LoadingIndicator = (props: any) => {\r\n const { promiseInProgress } = usePromiseTracker();\r\n\r\n return (\r\n promiseInProgress && (\r\n \r\n
\r\n \r\n
\r\n \r\n )\r\n );\r\n};\r\n","import { AnimationStyles, FontWeights, getTheme, IButtonStyles, IIconProps, IStackProps, IStackStyles, IStackTokens, mergeStyleSets } from \"office-ui-fabric-react\";\r\n\r\nconst theme = getTheme();\r\nexport const contentStyles = mergeStyleSets({\r\n container: {\r\n display: 'flex',\r\n flexFlow: 'column nowrap',\r\n alignItems: 'stretch',\r\n height: '70%',\r\n width: '35%',\r\n padding: '20px'\r\n },\r\n body:{\r\n height: '100%'\r\n }\r\n});\r\n\r\nexport const gapStackTokens: IStackTokens = {\r\n childrenGap: 10,\r\n padding: 2,\r\n};\r\n\r\nexport const stackStyles: IStackStyles = {\r\n root: {\r\n minHeight: '90%',\r\n minWidth: '90%'\r\n },\r\n};","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n modalTitle: {\r\n id: 'jsonTextModal.title',\r\n defaultMessage: 'Json Upload Dialog'\r\n }\r\n});\r\n\r\n","import React, { useEffect, useContext, useState } from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { Stack, ScrollablePane, DetailsListLayoutMode, SelectionMode, Pivot, PivotLinkSize, PivotItem, PrimaryButton, TextField, ITextFieldStyles, Dialog, Modal, DefaultButton, Label } from '@fluentui/react';\r\nimport { ServiceContext, ApplicationContext } from '@msx/platform-services';\r\nimport { EditableGrid, EditControlType, IColumnConfig, EventEmitter, EventType, NumberAndDateOperators } from 'fluentui-editable-grid';\r\nimport {\r\n IHttpClient,\r\n IHttpClientRequest,\r\n IExtensionsRegistration,\r\n IAppExtension,\r\n IKeyValueItem,\r\n IPortalConfig\r\n} from '@msx/platform-services';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\r\nimport { getCurrentTheme, getExtensionsError } from '../../../../core/store';\r\nimport { getStyles } from '../AdminPage.styles';\r\nimport { _shellStyles } from '../../../App.styles';\r\nimport { useId, useBoolean } from '@fluentui/react-hooks';\r\nimport { contentStyles, gapStackTokens, stackStyles } from './JsonTextModal.styles';\r\nimport { messages } from './JsonTextModal.messages';\r\nimport { extensionMetadataJsonUpload, getExtensionMetadataJsonUploadError, getExtensionMetadataJsonUploadLoadingStatus } from '../../../store';\r\nimport { LoadingIndicator } from '../../../../core/components/shared/loadingindicator';\r\nimport { ToastContainer, toast } from \"react-toastify\";\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any\r\n hidden: boolean;\r\n onModalDismiss: any;\r\n}\r\n\r\ntype JsonTextModalProps = OwnProps & InjectedIntlProps;\r\n\r\ninterface JSONTextFieldProps {\r\n borderColor : string;\r\n borderWidth : string;\r\n}\r\n\r\nconst JsonTextModalComponent: React.FC = props => {\r\n const { intl } = props;\r\n const theme = useSelector(getCurrentTheme);\r\n const { httpClient } = useContext(ServiceContext);\r\n const extensionsError = useSelector(getExtensionsError);\r\n const { appState } = useContext(ApplicationContext)\r\n const reduxDispatch = useDispatch();\r\n const appInsights = useAppInsightsContext();\r\n const [isJSONValid, setIsJSONValid] = useState(false);\r\n const [json, setJson] = useState('');\r\n const [jsonTextFieldAttr, setJsonTextFieldAttr] = useState({ borderColor : 'none', borderWidth : '0px' });\r\n const [fileNameText, setFileNameText] = useState('');\r\n const extensionMetadataJsonUploadLoadingStatus = useSelector(getExtensionMetadataJsonUploadLoadingStatus);\r\n const extensionMetadataJsonUploadError = useSelector(getExtensionMetadataJsonUploadError);\r\n\r\n useEffect(() => {\r\n if(!extensionMetadataJsonUploadLoadingStatus && !extensionMetadataJsonUploadError && !props.hidden){\r\n onModalDismiss('Json Uploaded successfully');\r\n }\r\n }, [extensionMetadataJsonUploadLoadingStatus]);\r\n\r\n useEffect(() => {\r\n if(extensionMetadataJsonUploadError){\r\n onModalDismiss('Json Uploaded error');\r\n }\r\n }, [extensionMetadataJsonUploadError]);\r\n\r\n classes = getClassNames(getStyles, theme);\r\n var multiLineTextFieldStyle: Partial = { fieldGroup: { width: '95%', borderColor:jsonTextFieldAttr.borderColor, borderWidth:jsonTextFieldAttr.borderWidth, margin:'10px 10px 10px 0' } };\r\n\r\n const onJSONChange = (event: React.FormEvent, newValue?: string) : void =>{\r\n if(newValue.trim() == ''){\r\n setJsonTextFieldAttr({ borderColor : 'none', borderWidth : '0px' });\r\n }\r\n else{\r\n ValidateJSON(newValue);\r\n }\r\n setJson(newValue);\r\n }\r\n\r\n const ValidateJSON = (value : string) : void => {\r\n try{\r\n JSON.parse(value);\r\n setJsonTextFieldAttr({ borderColor : '#8BC34A', borderWidth : '4px' });\r\n setIsJSONValid(true);\r\n }\r\n catch (e){\r\n setJsonTextFieldAttr({ borderColor : 'red', borderWidth : '4px' });\r\n setIsJSONValid(false);\r\n }\r\n }\r\n\r\n const onFilenameChange = (event: React.FormEvent, newValue?: string) : void =>{\r\n setFileNameText(newValue);\r\n }\r\n\r\n const onUploadButtonClick = () : void => {\r\n var fileName = fileNameText.toLowerCase().replace('.json', '') + '.json';\r\n reduxDispatch(extensionMetadataJsonUpload(httpClient, fileName, json, appState.appConfig));\r\n }\r\n\r\n const onModalDismiss = (text: string) : void => {\r\n setJson('');\r\n setFileNameText('');\r\n props.onModalDismiss(text);\r\n }\r\n\r\n const renderBodyComponent = () => {\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 onModalDismiss('')} />\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n onModalDismiss('')}\r\n isBlocking={false}\r\n containerClassName={contentStyles.container}\r\n > \r\n
\r\n \r\n
\r\n
\r\n

{intl.formatMessage(messages.modalTitle)}

\r\n
\r\n {renderBodyComponent()}\r\n
\r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const JsonTextModal = injectIntl(JsonTextModalComponent);\r\n","import React, { useEffect, useContext, useState } from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { fetchExtensionsRegistration, getCurrentTheme, getExtensionsError, getIsDevLogIn } from '../../../core/store';\r\nimport { DashboardEdit, PageError } from '../../../core/components';\r\nimport { HTTP_STATUS_NOT_FOUND } from '../../App.types';\r\nimport { messages } from './AdminPage.messages';\r\nimport { getStyles } from './AdminPage.styles';\r\nimport { DashboardContent } from '../../components/sample';\r\nimport { Stack, ScrollablePane, DetailsListLayoutMode, SelectionMode, Pivot, PivotLinkSize, PivotItem, PrimaryButton } from '@fluentui/react';\r\nimport { _shellStyles } from '../../App.styles';\r\nimport { ServiceContext, ApplicationContext } from '@msx/platform-services';\r\nimport { EditableGrid, EditControlType, IColumnConfig, EventEmitter, EventType, NumberAndDateOperators } from 'fluentui-editable-grid';\r\nimport { appConfig } from '../../App.config';\r\nimport {\r\n IHttpClient,\r\n IHttpClientRequest,\r\n IExtensionsRegistration,\r\n IAppExtension,\r\n IKeyValueItem,\r\n IPortalConfig\r\n} from '@msx/platform-services';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { getExtensionMetadataList, getExtensionMetadataListError, getExtensionMetadataListLoadingStatus } from '../../store/selectors/adminPage/extensionMetadata.selectors';\r\nimport { IExtensionMetadata } from '../../models/IExtensionMetadata';\r\nimport { fetchExtensionMetadataList } from '../../store/actions/adminPage/extensionsMetadataList.actions';\r\nimport { Operation } from 'fluentui-editable-grid/dist/types/operation';\r\nimport { extensionMetadataJsonUpload, postExtensionMetadata } from '../../store/actions/adminPage/extensionMetadataCrud.actions';\r\nimport { getExtensionMetadataCrudError, getExtensionMetadataCrudLoadingStatus } from '../../store/selectors/adminPage/extensionMetadataCrud.selectors';\r\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\r\nimport { LoadingIndicator } from '../../../core/components/shared/loadingindicator';\r\nimport { JsonTextModal } from './jsonTextModal/JsonTextModal';\r\nimport { toast, ToastContainer } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any\r\n}\r\n\r\nconst GridColumnConfig: IColumnConfig[] =\r\n [\r\n {\r\n key: 'id',\r\n name: 'ID',\r\n text: 'ID',\r\n editable: false,\r\n dataType: 'number',\r\n minWidth: 50,\r\n maxWidth: 50,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n {\r\n key: 'groupId',\r\n name: 'Group ID',\r\n text: 'Group ID',\r\n editable: true,\r\n dataType: 'string',\r\n minWidth: 220,\r\n maxWidth: 220,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n {\r\n key: 'groupName',\r\n name: 'Group Name',\r\n text: 'Group Name',\r\n editable: true,\r\n dataType: 'string',\r\n minWidth: 150,\r\n maxWidth: 150,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n {\r\n key: 'jsonBlobUrl',\r\n name: 'JSON Blob URL',\r\n text: 'JSON Blob URL',\r\n editable: true,\r\n dataType: 'string',\r\n minWidth: 150,\r\n maxWidth: 150,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true,\r\n inputType: EditControlType.MultilineTextField,\r\n },\r\n {\r\n key: 'blobFileName',\r\n name: 'Blob File Name',\r\n text: 'Blob File Name',\r\n editable: true,\r\n dataType: 'string',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n {\r\n key: 'sasTokenKey',\r\n name: 'SAS Token Key',\r\n text: 'SAS Token Key',\r\n editable: true,\r\n dataType: 'string',\r\n minWidth: 150,\r\n maxWidth: 150,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n {\r\n key: 'isActive',\r\n name: 'Is Active',\r\n text: 'Is Active',\r\n editable: true,\r\n dataType: 'string',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true,\r\n inputType: EditControlType.DropDown,\r\n dropdownValues: [\r\n { key: 'True', text: 'True' },\r\n { key: 'False', text: 'False' }\r\n ]\r\n },\r\n {\r\n key: 'displayOrder',\r\n name: 'Display Order',\r\n text: 'Display Order',\r\n editable: true,\r\n dataType: 'number',\r\n minWidth: 100,\r\n maxWidth: 100,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n {\r\n key: 'accessKeyId',\r\n name: 'accessKeyId',\r\n text: 'Access Key Id',\r\n editable: true,\r\n dataType: 'number',\r\n minWidth: 50,\r\n maxWidth: 50,\r\n isResizable: true,\r\n includeColumnInExport: true,\r\n includeColumnInSearch: true,\r\n applyColumnFilter: true\r\n },\r\n ]\r\n\r\ntype AdminPageProps = OwnProps & InjectedIntlProps;\r\n\r\nconst AdminPageComponent: React.FC = props => {\r\n const { intl } = props;\r\n const theme = useSelector(getCurrentTheme);\r\n const { httpClient } = useContext(ServiceContext);\r\n const extensionsError = useSelector(getExtensionsError);\r\n const { appState } = useContext(ApplicationContext)\r\n const reduxDispatch = useDispatch();\r\n const extensionMetadataList: IExtensionMetadata[] = useSelector(getExtensionMetadataList);\r\n const extensionMetadataListLoadingStatus = useSelector(getExtensionMetadataListLoadingStatus);\r\n const extensionMetadataListLoadingError = useSelector(getExtensionMetadataListError);\r\n const extensionMetadataCrudLoadingStatus = useSelector(getExtensionMetadataCrudLoadingStatus);\r\n const extensionMetadataCrudError = useSelector(getExtensionMetadataCrudError);\r\n const [items, setItems] = useState(extensionMetadataList);\r\n const appInsights = useAppInsightsContext();\r\n const [jsonTextModalDialogObj, setJsonTextModalDialogObj] = React.useState({\r\n visible: false\r\n });\r\n\r\n useEffect(() => {\r\n fetchExtensionsList();\r\n }, [httpClient]);\r\n\r\n useEffect(() => {\r\n if (!extensionMetadataCrudLoadingStatus) {\r\n fetchExtensionsList();\r\n reduxDispatch(fetchExtensionsRegistration(httpClient, [], appConfig, appInsights, true));\r\n }\r\n }, [extensionMetadataCrudLoadingStatus]);\r\n\r\n useEffect(() => {\r\n setItems(extensionMetadataList);\r\n }, [extensionMetadataList]);\r\n\r\n classes = getClassNames(getStyles, theme);\r\n\r\n function fetchExtensionsList() {\r\n reduxDispatch(fetchExtensionMetadataList(httpClient, appState.appConfig));\r\n }\r\n\r\n const onGridSave = (data: any[]): void => {\r\n console.log(data);\r\n if (data.filter(x => x._grid_row_operation_ != Operation.None).length > 0) {\r\n reduxDispatch(postExtensionMetadata(httpClient, data, appState.appConfig));\r\n }\r\n };\r\n\r\n const onUploadClick = (): void => {\r\n setJsonTextModalDialogObj({ visible: true });\r\n }\r\n\r\n const onModalDismiss = (text: string): void => {\r\n setJsonTextModalDialogObj({ visible: false });\r\n if (text.toLowerCase().indexOf('success') > -1) {\r\n toast.success(intl.formatMessage(messages.success), {\r\n position: toast.POSITION.TOP_CENTER\r\n });\r\n }\r\n else if (text.toLowerCase().indexOf('error') > -1) {\r\n toast.error(intl.formatMessage(messages.error), {\r\n position: toast.POSITION.TOP_CENTER\r\n });\r\n }\r\n\r\n }\r\n\r\n const renderNoDataComponent = () => {\r\n return (\r\n

{props.intl.formatMessage(messages.noDataFound)}

\r\n );\r\n }\r\n\r\n const renderDataLoadingErrorComponent = () => {\r\n if (extensionMetadataListLoadingError.response && extensionMetadataListLoadingError.response.status === HTTP_STATUS_NOT_FOUND) {\r\n return renderNoDataComponent();\r\n }\r\n return \r\n }\r\n\r\n const renderBodyComponent = () => {\r\n if (extensionMetadataListLoadingError) {\r\n return renderDataLoadingErrorComponent();\r\n }\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n \r\n
\r\n

{intl.formatMessage(messages.pageTile)}

\r\n {renderBodyComponent()}\r\n
\r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const AdminPage = injectIntl(AdminPageComponent);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n pageTile: {\r\n id: 'dashboardPage.title',\r\n defaultMessage: 'My Dashboard'\r\n },\r\n noDataFound: {\r\n id: 'dashboardPage.noDataFound',\r\n defaultMessage: 'Currently, there are no extensions availiable.',\r\n },\r\n});\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n headingMain: {\r\n margin: '0',\r\n },\r\n };\r\n};\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { useSelector } from 'react-redux';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { getCurrentTheme, getExtensionsError } from '../../../core/store';\r\nimport { DashboardEdit, PageError } from '../../../core/components';\r\nimport { HTTP_STATUS_NOT_FOUND } from '../../App.types';\r\nimport { messages } from './Dashboard.messages';\r\nimport { getStyles } from './Dashboard.styles';\r\nimport { DashboardContent } from '../../components/sample';\r\nimport { Stack, ScrollablePane } from '@fluentui/react';\r\nimport { _shellStyles } from '../../App.styles';\r\nimport { ServiceContext, ApplicationContext } from '@msx/platform-services';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any\r\n}\r\n\r\ntype DashboardProps = OwnProps & InjectedIntlProps;\r\n\r\nconst DashboardComponent: React.FC = props => {\r\n const { intl } = props;\r\n const theme = useSelector(getCurrentTheme);\r\n const { httpClient } = useContext(ServiceContext);\r\n const extensionsError = useSelector(getExtensionsError);\r\n const { appState } = useContext(ApplicationContext)\r\n\r\n useEffect(() => {\r\n // Placeholder\r\n }, [httpClient]);\r\n\r\n classes = getClassNames(getStyles, theme);\r\n\r\n const renderNoDataComponent = () => {\r\n return (\r\n

{props.intl.formatMessage(messages.noDataFound)}

\r\n );\r\n }\r\n\r\n const renderDataLoadingErrorComponent = () => {\r\n if (extensionsError.response && extensionsError.response.status === HTTP_STATUS_NOT_FOUND) {\r\n return renderNoDataComponent();\r\n }\r\n return \r\n }\r\n\r\n const renderBodyComponent = () => {\r\n if (extensionsError) {\r\n return renderDataLoadingErrorComponent();\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n \r\n
\r\n

{intl.formatMessage(messages.pageTile)}

\r\n {renderBodyComponent()}\r\n
\r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const Dashboard = injectIntl(DashboardComponent);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n pageTile: {\r\n id: 'homePage.title',\r\n defaultMessage: 'Home'\r\n },\r\n loadingData: {\r\n id: 'homePage.loadingData',\r\n defaultMessage: 'Loading extensions metadata, please wait...'\r\n },\r\n noDataFound: {\r\n id: 'homePage.noDataFound',\r\n defaultMessage: 'Currently, there are no extensions availiable.',\r\n },\r\n\r\n});\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n tileContainer: {\r\n //background: theme.name === 'dark' ? '#333' : 'transparent',\r\n },\r\n headingMain: {\r\n margin: '0',\r\n },\r\n };\r\n};\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { useSelector } from 'react-redux';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { ServiceContext, useUser, ApplicationContext } from '@msx/platform-services';\r\nimport { getExtensionsError, getCurrentTheme } from '../../../core/store';\r\nimport { TileList, PageError } from '../../../core/components';\r\nimport { HTTP_STATUS_NOT_FOUND } from '../../App.types';\r\nimport { messages } from './Home.messages';\r\nimport { getStyles } from './Home.styles';\r\nimport { Stack, ScrollablePane } from '@fluentui/react';\r\nimport { HomeContent } from '../../components/sample';\r\nimport { _shellStyles } from '../../App.styles';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO;\r\n}\r\n\r\ntype HomeProps = OwnProps & InjectedIntlProps;\r\n\r\nconst HomeComponent: React.FC = props => {\r\n const { intl } = props;\r\n const theme = useSelector(getCurrentTheme);\r\n const extensionsError = useSelector(getExtensionsError);\r\n const { httpClient } = useContext(ServiceContext);\r\n const { appState } = useContext(ApplicationContext)\r\n const user = useUser();\r\n useEffect(() => {\r\n //TODO: \r\n\r\n }, [httpClient]);\r\n\r\n useEffect(() => {\r\n if (user)\r\n messages.pageTile.defaultMessage = \"Hello \" + `${user.name}, welcome.!`\r\n }, [user])\r\n\r\n classes = getClassNames(getStyles, theme);\r\n\r\n const renderNoDataComponent = () => {\r\n return (\r\n

{props.intl.formatMessage(messages.noDataFound)}

\r\n );\r\n }\r\n\r\n const renderDataLoadingErrorComponent = () => {\r\n if (extensionsError.response && extensionsError.response.status === HTTP_STATUS_NOT_FOUND) {\r\n return renderNoDataComponent();\r\n }\r\n return \r\n }\r\n\r\n const renderBodyComponent = () => {\r\n if (extensionsError) {\r\n return renderDataLoadingErrorComponent();\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n //const fullName = user?.name ?? 'username';\r\n //const welcomeMsg = \"Hello \" + `${fullName}, welcome.!`\r\n return (\r\n \r\n
\r\n

{intl.formatMessage(messages.pageTile)}

\r\n {/*

{welcomeMsg}

*/}\r\n {renderBodyComponent()}\r\n
\r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const Home = injectIntl(HomeComponent);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n pageTile: {\r\n id: 'notFoundPage.title',\r\n defaultMessage: 'Page Not Found'\r\n },\r\n pageDescription: {\r\n id: 'notFoundPage.description',\r\n defaultMessage: \"We can't find the page you're lookng for. Please check the URL. You can either return to the previous page or click below link to redirect to Home page.\"\r\n },\r\n homePage: {\r\n id: 'notFoundPage.homePageLinkLabel',\r\n defaultMessage: 'Visit Home'\r\n },\r\n});\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n headingMain: {\r\n margin: '0',\r\n },\r\n homeLink: {\r\n textDecoration: 'none',\r\n color: theme.palette.themePrimary,\r\n fontSize: '14px',\r\n fontWeight: '400',\r\n }\r\n };\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { ApplicationContext } from '@msx/platform-services'\r\nimport { messages } from './NotFound.messages';\r\nimport { getStyles } from './NotFound.styles';\r\nimport { ScrollablePane } from '@fluentui/react';\r\nimport { _shellStyles } from '../../App.styles';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO;\r\n}\r\n\r\ntype NotFoundProps = OwnProps & InjectedIntlProps & RouteComponentProps;\r\n\r\nconst NotFoundComponent: React.FC = props => {\r\n const { intl } = props;\r\n const { appState, extensionsRegistrationClient } = useContext(ApplicationContext);\r\n const allowExtensions = appState.appConfig.registrationConfig.active;\r\n\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n const renderMain = (): JSX.Element => {\r\n\r\n if (appState.isUserLoggedIn && allowExtensions && extensionsRegistrationClient.getRoutes().length === 0)\r\n return null;\r\n\r\n return (\r\n \r\n
\r\n

{intl.formatMessage(messages.pageTile)}

\r\n

{intl.formatMessage(messages.pageDescription)}

\r\n \r\n {intl.formatMessage(messages.homePage)}\r\n \r\n
\r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const NotFound = withRouter(injectIntl(NotFoundComponent));\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n pageTile: {\r\n id: 'toDoListPage.title',\r\n defaultMessage: 'To Do List'\r\n },\r\n loadingData: {\r\n id: 'toDoListPage.loadingData',\r\n defaultMessage: 'Loading To Do list, please wait...'\r\n },\r\n noDataFound: {\r\n id: 'toDoListPage.noDataFound',\r\n defaultMessage: 'Currently, there are no To Do availiable.',\r\n },\r\n tableTitle: {\r\n id: 'toDoListPage.tableTitle',\r\n defaultMessage: 'Showing All To Do: ',\r\n },\r\n colId: {\r\n id: 'toDoListPage.colId',\r\n defaultMessage: 'Action'\r\n },\r\n colTitle: {\r\n id: 'toDoListPage.colTitle',\r\n defaultMessage: 'Title'\r\n },\r\n colOwner: {\r\n id: 'toDoListPage.colOwner',\r\n defaultMessage: 'Owner'\r\n },\r\n colTask: {\r\n id: 'toDoListPage.colTask',\r\n defaultMessage: 'Task'\r\n },\r\n addNewButtonText: {\r\n id: 'toDoListPage.addNewButtonText',\r\n defaultMessage: 'Add new task'\r\n },\r\n addTaskTitle: {\r\n id: 'toDoListPage.addTaskTitle',\r\n defaultMessage: 'Add task'\r\n },\r\n editTaskTitle: {\r\n id: 'toDoListPage.editTaskTitle',\r\n defaultMessage: 'Edit task'\r\n },\r\n updateFormSubmitButtonText: {\r\n id: 'toDoListPage.updateFormSubmitButtonText',\r\n defaultMessage: 'Submit'\r\n },\r\n modalCloseTitle: {\r\n id: 'toDoListPage.modalCloseTitle',\r\n defaultMessage: 'Close modal window'\r\n },\r\n exportToCSV: {\r\n id: 'invoiceTable.exportToCSV',\r\n defaultMessage: 'Export To CSV',\r\n },\r\n});\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n headingMain: {\r\n margin: '0',\r\n },\r\n actionButtonLink: {\r\n height: '80%',\r\n fontSize: '12px',\r\n },\r\n deleteButtonLink: {\r\n },\r\n };\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { PrimaryButton } from 'office-ui-fabric-react';\r\nimport { Stack, IStackProps, IStackStyles } from 'office-ui-fabric-react/lib/Stack';\r\nimport { TextField } from 'office-ui-fabric-react/lib/TextField';\r\nimport { IToDo } from '../../models';\r\nimport { messages } from './ToDoList.messages';\r\n\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n toDo: IToDo;\r\n onSubmitClick?: (todo: IToDo) => void;\r\n}\r\n\r\ntype ToDoListProps = OwnProps & InjectedIntlProps;\r\n\r\nconst UpdateDoComponent: React.FC = props => {\r\n const { toDo, intl } = props;\r\n const [title, setTitle] = useState(toDo ? toDo.title : '');\r\n const emailAddress = `${'testUser@microsoft.com'}`\r\n const [owner] = useState(toDo ? toDo.owner : emailAddress);\r\n\r\n useEffect(() => {\r\n //TODO:\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n\r\n const handleSubmitClick = () => {\r\n const newToDo: IToDo = {\r\n id: toDo ? toDo.id : -1,\r\n title: title, owner: owner,\r\n state: toDo ? toDo.state : 'New',\r\n }\r\n props.onSubmitClick(newToDo)\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n const stackTokens = { childrenGap: 50 };\r\n const stackStyles: Partial = { root: { marginBottom: 20 } };\r\n const columnProps: Partial = {\r\n tokens: { childrenGap: 15 },\r\n styles: { root: { width: 300 } },\r\n };\r\n\r\n const onTitleChange = (event: React.FormEvent, newValue?: string) => {\r\n setTitle(newValue);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const UpdateToDo = injectIntl(UpdateDoComponent);\r\n","import React, { useState, useEffect, useContext, useRef } from 'react';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { IconButton, PrimaryButton, Stack, Link, ScrollablePane } from 'office-ui-fabric-react';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { TooltipHost } from 'office-ui-fabric-react/lib/Tooltip';\r\nimport { ServiceContext, ApplicationContext } from '@msx/platform-services';\r\nimport { Table, MsxModal, MsxModalHeight } from '@msx/react-ui-component'\r\nimport { PageError } from '../../../core/components';\r\nimport { getCurrentTheme } from '../../../core/store';\r\nimport { HTTP_STATUS_NOT_FOUND } from '../../App.types';\r\nimport { IToDo } from '../../models/IToDo';\r\nimport { messages } from './ToDoList.messages';\r\nimport { getStyles } from './ToDoList.styles';\r\nimport {\r\n getToDoList, getToDoListLoadingStatus, getToDoListError,\r\n fetchToDoList, addToDo, editToDo, deleteToDo\r\n} from '../../store';\r\nimport { UpdateToDo } from './UpdateToDo';\r\nimport { _shellStyles } from '../../App.styles';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO;\r\n}\r\n\r\ntype ToDoListProps = OwnProps & InjectedIntlProps;\r\n\r\nconst ToDoListComponent: React.FC = props => {\r\n const { intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n const reduxDispatch = useDispatch();\r\n const toDoListLoadingStatus = useSelector(getToDoListLoadingStatus);\r\n const toDoListLoadingError = useSelector(getToDoListError);\r\n const todoList: IToDo[] = useSelector(getToDoList);\r\n const [tasks, setTasks] = useState(todoList);\r\n const theme = useSelector(getCurrentTheme);\r\n const [showDetails, setShowDetails] = useState(false);\r\n const [currentToDo, setCurrentToDo] = useState(null);\r\n const { httpClient } = useContext(ServiceContext);\r\n const tasksRef = useRef(tasks);\r\n classes = getClassNames(getStyles, appState);\r\n\r\n useEffect(() => {\r\n reduxDispatch(fetchToDoList(httpClient, appState.appConfig));\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n setTasks(todoList);\r\n // eslint-disable-next-line\r\n }, [todoList]);\r\n\r\n\r\n const getTableTitle = (): string => {\r\n return null;\r\n }\r\n\r\n const handleAddToDoClick = () => {\r\n setCurrentToDo(null);\r\n setShowDetails(true);\r\n }\r\n const handleToDoIdClick = (todo: IToDo) => {\r\n setCurrentToDo(todo);\r\n setShowDetails(true);\r\n }\r\n const handleDeleteClick = (todo: IToDo) => {\r\n reduxDispatch(deleteToDo(httpClient, todo, appState.appConfig));\r\n const newTodos = tasksRef.current.filter((item, index) => {\r\n return item.id !== todo.id;\r\n });\r\n setTasks(newTodos);\r\n }\r\n\r\n const closeDetails = (): void => {\r\n setShowDetails(false);\r\n }\r\n\r\n const renderToDoId = (todo: IToDo, index: number): JSX.Element => {\r\n const todoDeleteLinkId: string = 'ToDoDeleteId' + index;\r\n return (\r\n \r\n \r\n handleDeleteClick(todo)}\r\n onKeyDown={(e) => e.keyCode === 13 || e.keyCode === 32 ? handleDeleteClick(todo) : null}\r\n styles={{\r\n root: { width: '30%', height: '80%' },\r\n }}\r\n />\r\n \r\n );\r\n }\r\n\r\n const renderToDoTitle = (todo: IToDo, index: number): JSX.Element => {\r\n const id: string = 'ToDoTitle' + index;\r\n return (\r\n handleToDoIdClick(todo)}\r\n >\r\n {todo.title}\r\n \r\n );\r\n }\r\n\r\n const columns = [\r\n {\r\n key: 'keyTodoId',\r\n fieldName: 'id',\r\n name: props.intl.formatMessage(messages.colId),\r\n onRender: renderToDoId,\r\n },\r\n {\r\n key: 'keyTodoTitle',\r\n fieldName: 'title',\r\n name: props.intl.formatMessage(messages.colTitle),\r\n onRender: renderToDoTitle,\r\n minWidth: 250,\r\n maxWidth: 250,\r\n },\r\n {\r\n key: 'keyTodoOwner',\r\n fieldName: 'owner',\r\n name: props.intl.formatMessage(messages.colOwner),\r\n minWidth: 200,\r\n maxWidth: 200,\r\n },\r\n ];\r\n\r\n const handleSubmitClick = (todo: IToDo): void => {\r\n if (currentToDo) {\r\n reduxDispatch(editToDo(httpClient, todo, appState.appConfig));\r\n const newTodos = [...tasks];\r\n newTodos.forEach((item, index) => {\r\n if (item.id === todo.id) {\r\n item.title = todo.title;\r\n }\r\n });\r\n setTasks(newTodos);\r\n }\r\n else {\r\n reduxDispatch(addToDo(httpClient, todo, appState.appConfig));\r\n setTasks([...tasks, todo]);\r\n }\r\n setShowDetails(false);\r\n }\r\n\r\n const renderDetails = () => {\r\n if (showDetails) {\r\n const title = `${currentToDo ? intl.formatMessage(messages.addTaskTitle) : intl.formatMessage(messages.editTaskTitle)}`;\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n const exportCsvProps = {\r\n canExportCsv: false,\r\n csvFilename: 'todos.csv',\r\n // csvHeaders,\r\n // csvTelemetryProps,\r\n id: 'todosExportToCsv',\r\n exportButtonLabel: props.intl.formatMessage(messages.exportToCSV)\r\n }\r\n\r\n const renderBodyComponent = () => {\r\n if (toDoListLoadingError) {\r\n return renderDataLoadingErrorComponent();\r\n }\r\n const rows = tasks ? tasks : [];\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n\r\n }\r\n const renderNoDataComponent = () => {\r\n return (\r\n

{props.intl.formatMessage(messages.noDataFound)}

\r\n );\r\n }\r\n\r\n const renderDataLoadingErrorComponent = () => {\r\n if (toDoListLoadingError.response && toDoListLoadingError.response.status === HTTP_STATUS_NOT_FOUND) {\r\n return renderNoDataComponent();\r\n }\r\n return \r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n\r\n tasksRef.current = tasks;\r\n return (\r\n \r\n
\r\n

{intl.formatMessage(messages.pageTile)}

\r\n {renderBodyComponent()}\r\n {renderDetails()}\r\n
\r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const ToDoList = injectIntl(ToDoListComponent);\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n subTitle: {\r\n id: 'signinPage.subTitle',\r\n defaultMessage: 'One-stop for all Trade business'\r\n },\r\n getStartedButtonText: {\r\n id: 'signinPage.getStartedButtonText',\r\n defaultMessage: \"Sign in\"\r\n },\r\n learnButtonText: {\r\n id: 'signinPage.learnButtonText',\r\n defaultMessage: 'Learn more'\r\n },\r\n});\r\n\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n root: {\r\n padding: '20px',\r\n },\r\n headingMain: {\r\n },\r\n learnLink: {\r\n textDecoration: 'none',\r\n }\r\n };\r\n};\r\n","import React, { useContext } from 'react';\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { PrimaryButton, } from 'office-ui-fabric-react';\r\nimport { Stack, IStackStyles } from 'office-ui-fabric-react/lib/Stack';\r\nimport { Text } from 'office-ui-fabric-react/lib/Text';\r\nimport { Image } from 'office-ui-fabric-react/lib/Image';\r\nimport { ApplicationContext, ServiceContext } from '@msx/platform-services'\r\nimport { messages } from './Signin.messages';\r\nimport { getStyles } from './Signin.styles';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO;\r\n}\r\n\r\ntype Props = OwnProps & InjectedIntlProps & RouteComponentProps;\r\n\r\nconst SigninComponent: React.FC = props => {\r\n const { intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n const { authClient } = useContext(ServiceContext);\r\n\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n const handleGetStartedButonClick = async () => {\r\n await authClient.login();\r\n }\r\n\r\n\r\n const renderMain = (): JSX.Element => {\r\n const btnStyles = {\r\n root: {\r\n width: '170px',\r\n height: '40px',\r\n\r\n },\r\n };\r\n const stackTokens = { childrenGap: 20 };\r\n const stackStyles: Partial = { root: { minHeight: 'calc(80vh)' } };\r\n const containerStyles: React.CSSProperties = { minHeight: '100%' };\r\n return (\r\n
\r\n \r\n \r\n {appState.appConfig.appName}\r\n {intl.formatMessage(messages.subTitle)}\r\n \r\n \r\n \r\n Learn More - One Trade Hub-Business\r\n \r\n \r\n
\r\n )\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const Signin = withRouter(injectIntl(SigninComponent));\r\n","import { IAppTheme } from \"@msx/platform-services\";\r\nimport {\r\n IDropdownStyles,\r\n IStackTokens,\r\n mergeStyleSets,\r\n} from \"office-ui-fabric-react\";\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n root: {\r\n padding: \"5px\",\r\n margin: \"5px\"\r\n },\r\n };\r\n};\r\n\r\nexport const controlClass = mergeStyleSets({\r\n Embedcontainer: {\r\n height: '500px',\r\n width : '58vw',\r\n marginTop: \"10px\",\r\n },\r\n searchStyles: {\r\n marginTop: \"30px\",\r\n },\r\n submitStyles: {\r\n marginTop: \"28px\",\r\n marginLeft: \"10px\",\r\n },\r\n gridStyle:{\r\n height: '520px',\r\n border: '1px',\r\n width : '20vw',\r\n padding: '1px'\r\n }\r\n});\r\n\r\nexport const dropdownStyles: Partial = {\r\n dropdown: { width: '18vw' },\r\n dropdownItemsWrapper:{maxHeight:'60vh'}\r\n};\r\n\r\nexport const stackTokens: IStackTokens = { childrenGap: 0};\r\nexport const stackTokens2: IStackTokens = { childrenGap: 0, maxWidth : '58vw' };","import React, { FC, useState, useEffect, useRef, useContext } from \"react\";\r\nimport { IAuditReportProps, IVisualProperties } from './reportvisualsconfig.types';\r\nimport { IReportVisualProperties } from '../../models/IReportVisualProperties'\r\nimport { FormattedMessage, InjectedIntlProps, injectIntl } from \"react-intl\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { Dropdown, IDropdownOption, DropdownMenuItemType } from \"office-ui-fabric-react/lib/Dropdown\";\r\nimport { Separator } from '@fluentui/react/lib/Separator';\r\nimport axios from 'axios';\r\nimport { EditableGrid, EditControlType, IColumnConfig, EventEmitter, EventType, NumberAndDateOperators } from 'fluentui-editable-grid';\r\nimport { DetailsList, Selection, IColumn } from '@fluentui/react/lib/DetailsList';\r\nimport { MarqueeSelection } from 'office-ui-fabric-react/lib/MarqueeSelection';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport {\r\n IconButton,\r\n PrimaryButton,\r\n Stack,\r\n Link,\r\n Fabric,\r\n TextField,\r\n DirectionalHint,\r\n StackItem,\r\n Checkbox,\r\n CheckboxVisibility,\r\n DetailsListLayoutMode\r\n} from \"office-ui-fabric-react\";\r\nimport {\r\n classNamesFunction,\r\n SelectionMode,\r\n} from \"office-ui-fabric-react/lib/Utilities\";\r\nimport {\r\n getStyles,\r\n controlClass,\r\n stackTokens,\r\n dropdownStyles,\r\n stackTokens2,\r\n} from \"./reportvisualsconfig.styles\";\r\n\r\nimport { IKeyValueItem } from \"@msx/platform-services\";\r\nimport { useAppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\r\nimport { IButtonProps } from '@fluentui/react/lib/Button';\r\nimport { TeachingBubble } from '@fluentui/react/lib/TeachingBubble';\r\nimport { useBoolean } from '@fluentui/react-hooks';\r\n//import { ITeachingBubblePropsExtended, teachingBubbleConfig } from \"../productList/TeachingBubbleConfig\";\r\n//import { httpGet, httpDelete, httpPost, httpPut } from '../../utils/apiCalls';\r\n//import { getPBIAccessToken } from '../../../core/store';\r\nimport { PowerBIEmbed } from 'powerbi-client-react'\r\nimport { models, Report, Embed, Page, service, VisualDescriptor } from 'powerbi-client'\r\nimport { config } from \"process\";\r\nimport { access, truncateSync } from \"fs\";\r\nimport { ServiceContext, ApplicationContext } from '@msx/platform-services';\r\nimport { GetPBIToken } from '../../../core/utils/pbitokenhelper';\r\nimport { fetchDashboardVisualsConfig } from '../../store/actions/dashboardVisuals/dashboardvisualsConfig.action';\r\nimport { saveDashboardVisualsConfig } from '../../store/actions/dashboardVisuals/savedashboardVisualsConfig.action';\r\nimport { getdashboardVisualsConfig } from '../../store/selectors/dashboardVisuals/dashboardvisualsconfig.selector';\r\nimport { getdashboardVisualsConfigSaveLoadingStatus } from '../../store/selectors/dashboardVisuals/saveDashboardVisualsConfig.selector'\r\nimport { getExtensionMetadataList } from '../../store'\r\nimport { IExtensionMetadata } from \"../../models/IExtensionMetadata\";\r\nimport { appConfig } from '../../App.config';\r\nimport { fetchExtensionsRegistration, getExtensionsError, getIsDevLogIn } from '../../../core/store';\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n //TODO: any \r\n}\r\ntype ReportConfigPageProps = OwnProps & InjectedIntlProps;\r\n\r\nconst ReportVisualsConfigComponent: FC = (props) => {\r\n const { intl } = props;\r\n //const theme = getCurrentTheme(parentContext);\r\n const appInsights = useAppInsightsContext();\r\n const reduxDispatch = useDispatch();\r\n const { authClient } = useContext(ServiceContext);\r\n const [teachingBubbleVisible, { toggle: toggleTeachingBubbleVisible }] = useBoolean(false);\r\n //const [teachingBubbleProps, setTeachingBubbleProps] = useState(teachingBubbleConfig[0])\r\n const [ReportsList, setReportsList] = useState([]);\r\n const [WSsList, setWSsList] = useState([]);\r\n const [AppsList, setAppsList] = useState([]);\r\n const [WSnAppsList, setWSnAppsList] = useState([]);\r\n const [SelectedWSId, setSelectedWSId] = useState();\r\n const [SelectedReport, setSelectedReport] = useState();\r\n //const pbiAccessToken = useSelector(getPBIAccessToken);\r\n const [accessToken, setAccessToken] = useState('');\r\n const [accessToken1, setAccessToken1] = useState('');\r\n const [reportId, setreportId] = useState('');\r\n const [embedURL, setembedURL] = useState('');\r\n const [loadReport, setloadReport] = useState(false);\r\n const [reportvisualsList, setreportvisualsList] = useState([]);\r\n const [selectedvisualsList, setselectedvisualsList] = useState([]);\r\n const savedVisualsList = useSelector(getdashboardVisualsConfig);\r\n //const [visualsList, setvisualsList] = useState([]);\r\n const saveDashboardVisualsConfigLoadingStatus = useSelector(getdashboardVisualsConfigSaveLoadingStatus);\r\n //const [selectedVisualsLst, setSelectedVisuals] = useState([]); \r\n //const selectedVisualsLst: IReportVisualProperties[] = useSelector(getdashboardVisualsConfig);\r\n //const extensionMetadataList: IExtensionMetadata[] = useSelector(getExtensionMetadataList);\r\n //const empl : IExtensionMetadata[] = useSelector(getdashboardVisuals); \r\n //const [items, setItems] = useState(selectedVisualsLst);\r\n const [loadedReport, setLoadedReport] = useState();\r\n //const [tasks, setTasks] = useState(visualsList);\r\n const [gridItemSelection, setgridItemSelection] = useState();\r\n const seperatorMsg = 'Selected Visuals';\r\n //classes = getClassNames(getStyles(theme));\r\n const { httpClient } = useContext(ServiceContext);\r\n const { appState } = useContext(ApplicationContext)\r\n const [selectionDetails, setSelectionDetails] = useState('');\r\n const [selectedItems, setSelectedItems] = useState();\r\n const [selectedIndices, setSelectedIndices] = useState([]);\r\n let _selection: Selection = new Selection({\r\n onSelectionChanged: () => setSelectionDetails(_getSelectionDetails()),\r\n });\r\n\r\n const [columns, setcolumns] = useState([\r\n {\r\n key: 'column1', name: 'Name', fieldName: 'title', minWidth: 250, maxWidth: 250, isResizable: true,\r\n isSorted: true,\r\n isSortedDescending: true,\r\n sortAscendingAriaLabel: 'Sorted A to Z',\r\n sortDescendingAriaLabel: 'Sorted Z to A'\r\n },\r\n ]);\r\n\r\n const [gridColumns, setGridColumns] = useState([\r\n {\r\n key: 'key',\r\n name: 'Visual Title',\r\n text: 'Visual Title',\r\n minWidth: 200,\r\n editable: false,\r\n includeColumnInExport: true,\r\n dataType: \"string\",\r\n applyColumnFilter: true,\r\n },\r\n {\r\n key: 'visualTitle',\r\n name: 'Visual Name',\r\n text: 'Visual Name',\r\n minWidth: 300,\r\n editable: true,\r\n includeColumnInExport: true,\r\n dataType: \"string\",\r\n applyColumnFilter: true,\r\n },\r\n {\r\n key: 'tags',\r\n name: 'Visual Tag',\r\n text: 'Visual Tag',\r\n minWidth: 200,\r\n editable: true,\r\n includeColumnInExport: true,\r\n dataType: \"string\",\r\n applyColumnFilter: true,\r\n inputType: EditControlType.Picker,\r\n pickerOptions: {\r\n pickerTags: ['Screening', 'Imports', 'Exports', 'LiveSite', 'home'],\r\n minCharLimitForSuggestions: 1,\r\n tagsLimit: 3\r\n }\r\n },\r\n {\r\n key: 'isActive',\r\n name: 'Active',\r\n text: 'Active',\r\n minWidth: 200,\r\n editable: true,\r\n includeColumnInExport: true,\r\n dataType: \"string\",\r\n applyColumnFilter: true,\r\n inputType: EditControlType.DropDown,\r\n dropdownValues: [\r\n { key: 'true', text: 'True' },\r\n { key: 'false', text: 'False' },\r\n ]\r\n }\r\n ]);\r\n\r\n const [reportConfig, setReportConfig] = useState({\r\n type: 'report',\r\n id: '0000',\r\n embedUrl: 'https://msit.powerbi.com/reportEmbed',\r\n tokenType: models.TokenType.Aad,\r\n accessToken: '',\r\n settings: {\r\n panes: {\r\n filters: {\r\n expanded: false,\r\n visible: false\r\n },\r\n bookmarks: {\r\n visible: false\r\n }\r\n },\r\n background: models.BackgroundType.Default,\r\n }\r\n },\r\n );\r\n\r\n useEffect(() => {\r\n fetchPBIAccessToken();\r\n fetchSavedVisuals();\r\n }, [authClient]);\r\n\r\n useEffect(() => {\r\n fetchWSforUser();\r\n fetchAppsforUser();\r\n }, [accessToken]);\r\n\r\n useEffect(() => {\r\n if (!saveDashboardVisualsConfigLoadingStatus) {\r\n reduxDispatch(fetchExtensionsRegistration(httpClient, [], appConfig, appInsights, true));\r\n }\r\n }, [saveDashboardVisualsConfigLoadingStatus]);\r\n\r\n useEffect(() => {\r\n if (SelectedWSId) {\r\n fetchReportsforWS();\r\n }\r\n }, [SelectedWSId]);\r\n\r\n useEffect(() => {\r\n if (WSsList || AppsList) {\r\n loadWSnApps();\r\n }\r\n }, [WSsList, AppsList]);\r\n\r\n useEffect(() => {\r\n if (SelectedReport) {\r\n setreportId(SelectedReport.key.toString());\r\n setembedURL(SelectedReport.title);\r\n setAccessToken1(accessToken);\r\n onloadReportClick();\r\n }\r\n },[SelectedReport]);\r\n\r\n // useEffect(() => {\r\n // if (selectedVisualsLst) {\r\n // loadSelectedVisualsinGrid();\r\n // }\r\n // }, [selectedVisualsLst])\r\n\r\n useEffect(() => {\r\n if (savedVisualsList) {\r\n loadSavedVisual();\r\n }\r\n //console.log('selectedvisualsList');\r\n }, [savedVisualsList]);\r\n\r\n // Map of event handlers to be applied to the embedding report\r\n const eventHandlersMap = new Map([\r\n ['loaded', function () {\r\n console.log('Report has loaded');\r\n }],\r\n ['rendered', function () {\r\n console.log('Report has rendered');\r\n //loadVisuals();\r\n // Update display message\r\n //setMessage('The report is rendered')\r\n }],\r\n ['error', function (event?: service.ICustomEvent) {\r\n if (event) {\r\n console.error(event.detail);\r\n }\r\n }]\r\n ]);\r\n\r\n function loadSelectedVisualsinGrid() {\r\n console.log('selectedVisualsLst');\r\n }\r\n\r\n function fetchSavedVisuals() {\r\n reduxDispatch(fetchDashboardVisualsConfig(httpClient, appState.appConfig));\r\n }\r\n\r\n const fetchReportsforWS = async () => {\r\n try {\r\n let apiEndPoint;\r\n if (SelectedWSId.title === 'ws')\r\n apiEndPoint = `https://api.powerbi.com/v1.0/myorg/groups/${SelectedWSId.key}/reports`;\r\n else if (SelectedWSId.title === 'app')\r\n apiEndPoint = `https://api.powerbi.com/v1.0/myorg/apps/${SelectedWSId.key}/reports`;\r\n\r\n let response = await fetch(apiEndPoint, {\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Content-Type-Options': 'nosniff',\r\n 'Authorization': \"Bearer \" + accessToken,\r\n },\r\n });\r\n var data = await response.json();\r\n fetchReportsforUserSuccess(data);\r\n }\r\n catch (error) {\r\n errorReportsCallBack(error);\r\n }\r\n }\r\n\r\n const fetchReportsforUserSuccess = (response: any) => {\r\n let ResponseList = response.value.map((name: any) => ({\r\n key: name.id,\r\n text: name.name,\r\n title: name.embedUrl\r\n }));\r\n ResponseList.sort((o1, o2) =>{ return o1.text.toUpperCase() > o2.text.toUpperCase() ? 1 : o1.text.toUpperCase() < o2.text.toUpperCase() ? -1 : 0; })\r\n setReportsList(ResponseList);\r\n }\r\n\r\n const errorReportsCallBack = (error: any) => {\r\n console.log(\"errorLoadReport\" + error);\r\n }\r\n\r\n const fetchAppsforUser = async () => {\r\n try {\r\n const apiEndPoint = \"https://api.powerbi.com/v1.0/myorg/apps\";\r\n let response = await fetch(apiEndPoint, {\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Content-Type-Options': 'nosniff',\r\n 'Authorization': \"Bearer \" + accessToken,\r\n },\r\n });\r\n var data = await response.json();\r\n fetchAppsforUserSuccess(data);\r\n }\r\n catch (error) {\r\n errorAppsCallBack(error);\r\n }\r\n }\r\n\r\n const fetchAppsforUserSuccess = (response: any) => {\r\n let ResponseList = response.value.map((name: any) => ({\r\n key: name.id,\r\n text: name.name,\r\n title: 'app',\r\n }));\r\n ResponseList.sort((o1, o2) =>{ return o1.text.toUpperCase() > o2.text.toUpperCase() ? 1 : o1.text.toUpperCase() < o2.text.toUpperCase() ? -1 : 0; })\r\n ResponseList.unshift({ key: -2, text: \"-\", itemType: DropdownMenuItemType.Divider });\r\n ResponseList.unshift({ key: -1, text: \"Apps\", itemType: DropdownMenuItemType.Header });\r\n setAppsList(ResponseList);\r\n }\r\n\r\n const errorAppsCallBack = (error: any) => {\r\n console.log(\"AppsLoadError\" + error);\r\n }\r\n\r\n async function fetchWSforUser() {\r\n try {\r\n //const apiEndPoint = \"https://api.powerbi.com/v1.0/myorg/groups?$filter=contains(name,'Trade')\";\r\n const apiEndPoint = \"https://api.powerbi.com/v1.0/myorg/groups\";\r\n let response = await fetch(apiEndPoint, {\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Content-Type-Options': 'nosniff',\r\n 'Authorization': \"Bearer \" + accessToken,\r\n },\r\n });\r\n var data = await response.json();\r\n fetchWSforUserSuccess(data);\r\n }\r\n catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n const fetchWSforUserSuccess = (response: any) => {\r\n let ResponseList = response.value.map((name: any) => ({\r\n key: name.id,\r\n text: name.name,\r\n title: 'ws',\r\n }));\r\n ResponseList.sort((o1, o2) =>{ return o1.text.toUpperCase() > o2.text.toUpperCase() ? 1 : o1.text.toUpperCase() < o2.text.toUpperCase() ? -1 : 0; })\r\n ResponseList.unshift({ key: -4, text: \"-\", itemType: DropdownMenuItemType.Divider });\r\n ResponseList.unshift({ key: -3, text: \"Work Spaces\", itemType: DropdownMenuItemType.Header });\r\n setWSsList(ResponseList);\r\n }\r\n\r\n const errorWSCallBack = (error: any) => {\r\n console.log(\"WSLoadError\" + error);\r\n }\r\n\r\n const loadWSnApps = () => {\r\n let ResponseList = WSsList.map((name: IDropdownOption) => ({\r\n key: name.key,\r\n text: name.text,\r\n itemType: name.itemType,\r\n title: name.title,\r\n }));\r\n AppsList.forEach((item) => {\r\n let item1: any = {\r\n key: item.key,\r\n text: item.text,\r\n itemType: item.itemType,\r\n title: item.title,\r\n }\r\n ResponseList.push(item1);\r\n })\r\n setWSnAppsList(ResponseList);\r\n }\r\n\r\n const fetchPBIAccessToken = async () => {\r\n const resource = process.env.REACT_APP_PBI_RESOURCE_ID;\r\n await authClient.acquireToken(resource)\r\n .then(token => {\r\n setAccessToken(token);\r\n })\r\n };\r\n\r\n function onWSorAppSelectionChange(\r\n event: React.FormEvent,\r\n option: IDropdownOption | undefined\r\n ) {\r\n if (option === undefined) {\r\n console.log(\"no WS/App selected\")\r\n return;\r\n }\r\n else {\r\n let selectedItem: any = option;\r\n setSelectedWSId(selectedItem);\r\n }\r\n }\r\n\r\n function onReportSelectionChange(event: React.FormEvent, option: IDropdownOption | undefined) {\r\n if (option === undefined) {\r\n console.log(\"no Report selected\")\r\n return;\r\n }\r\n else {\r\n let selectedItem: any = option;\r\n setSelectedReport(selectedItem);\r\n //setloadReport(false);\r\n }\r\n }\r\n\r\n function onloadReportClick() {\r\n setReportConfig({\r\n ...reportConfig,\r\n id: SelectedReport.key.toString(),\r\n embedUrl: SelectedReport.title,\r\n accessToken: accessToken\r\n });\r\n }\r\n\r\n const loadVisuals = async () => {\r\n if (!loadedReport) {\r\n console.log('Report not available');\r\n }\r\n else {\r\n setreportvisualsList([]);\r\n const pages = await loadedReport.getPages();\r\n let page = pages.filter(function (page) {\r\n return page.isActive\r\n })[0];\r\n const visuals = await page.getVisuals();\r\n let vList = visuals.map((visual: VisualDescriptor) => ({\r\n name: visual.name + '|' + visual.title + '|' + visual.type,\r\n pageName: visual.page.name,\r\n }));\r\n let sortedVisuals = visuals.sort(compare);\r\n setreportvisualsList(sortedVisuals);\r\n }\r\n }\r\n\r\n function compare(a, b) {\r\n return b.title - a.title;\r\n }\r\n\r\n function _getSelectionDetails(): string {\r\n const count = _selection.getSelectedCount();\r\n setSelectedItems(_selection.getSelection())\r\n setSelectedIndices(_selection.getSelectedIndices());\r\n\r\n switch (count) {\r\n case 0:\r\n return 'No items selected';\r\n case 1:\r\n return '1 item selected: ';\r\n default:\r\n return `${count} items selected`;\r\n }\r\n }\r\n\r\n function addVisuals() {\r\n let newselectedVisualsList: IVisualProperties[] = [...selectedvisualsList];\r\n selectedItems.forEach(visual => {\r\n let item = newselectedVisualsList.filter(x => x.key == visual.name);\r\n if (newselectedVisualsList.indexOf(item[0]) < 0)\r\n newselectedVisualsList.push(getVisualObject(visual));\r\n });\r\n setselectedvisualsList(newselectedVisualsList);\r\n }\r\n\r\n function saveSubmitVisuals(data: any[]) {\r\n\r\n if (data && data.length > 0) {\r\n let newselectedVisualsLstSave: IReportVisualProperties[] = [];\r\n data.forEach(visual => {\r\n let op = visual['_grid_row_operation_'];\r\n if (op != 4) {\r\n newselectedVisualsLstSave.push(getReportVisualObject(visual));\r\n }\r\n });\r\n reduxDispatch(saveDashboardVisualsConfig(httpClient, newselectedVisualsLstSave, appState.appConfig));\r\n }\r\n }\r\n\r\n function loadSavedVisual() {\r\n let savedVisuals: IVisualProperties[] = [];\r\n if (savedVisualsList) {\r\n savedVisualsList.forEach(v => {\r\n if (v.attributes) {\r\n let visual: IVisualProperties = {\r\n key: v.key,\r\n type: v.attributes.type,\r\n reportId: v.attributes.reportId,\r\n embedURL: v.attributes.embedURL,\r\n accessToken: v.attributes.accessToken,\r\n visualName: v.attributes.visualName,\r\n pageName: v.attributes.pageName,\r\n visualTitle: v.attributes.visualTitle,\r\n tags: v.attributes.tags,\r\n isActive: v.active\r\n }\r\n savedVisuals.push(visual);\r\n }\r\n })\r\n }\r\n setselectedvisualsList(savedVisuals);\r\n }\r\n\r\n const getVisualObject = (visual: VisualDescriptor): IVisualProperties => {\r\n return {\r\n key: visual.name,\r\n type: 'visual',\r\n reportId: visual.page.report.config.id,\r\n embedURL: visual.page.report.config.embedUrl,\r\n accessToken: '',\r\n visualName: visual.name,\r\n pageName: visual.page.name,\r\n visualTitle: visual.title,\r\n tags: [],\r\n isActive: true\r\n }\r\n };\r\n\r\n // function getVisualTags(v) {\r\n // let tags: string[] = [];\r\n // if (selectedvisualsList) {\r\n // let item = selectedvisualsList.filter(x => x.key == v.name);\r\n // tags = item[0].tags ? item[0].tags : [];\r\n // }\r\n // return tags;\r\n // }\r\n\r\n const getReportVisualObject = (visual: IVisualProperties): IReportVisualProperties => {\r\n return {\r\n key: visual.key,\r\n name: \"ReportTile\",\r\n description: \"Report Tile\",\r\n component: \"rpt-tile\",\r\n active: visual.isActive,\r\n attributes: {\r\n type: 'visual',\r\n reportId: visual.reportId,\r\n embedURL: visual.embedURL,\r\n accessToken: '',\r\n visualName: visual.visualName,\r\n pageName: visual.pageName,\r\n visualTitle: visual.visualTitle,\r\n tags: getTags(visual.tags)\r\n }\r\n }\r\n };\r\n\r\n function getTags(t) {\r\n let tags: string[] = [];\r\n tags = [...t];\r\n return tags;\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\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 //console.log(`Embedded object of type \"${embeddedReport.config.embedUrl}\" received`);\r\n setLoadedReport(embeddedReport as Report);\r\n }}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {seperatorMsg}\r\n \r\n \r\n {\r\n {\r\n //console.log(s);\r\n }}\r\n />\r\n }\r\n \r\n\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n return renderMain();\r\n};\r\n\r\nexport const ReportVisaulsConfig = injectIntl(ReportVisualsConfigComponent);\r\n","import { IGraphConfig } from \"./Graph.types\";\r\n\r\nexport const GraphConfig: IGraphConfig = {\r\ngraphurl:'/me/transitiveMemberOf/microsoft.graph.group',\r\ngraphQuery : '$count=true&$top=999&$select=displayName,id',\r\n//authGrpId: '__AuthGroupId__'\r\nauthGrpId: 'd1ff5f05-5167-402f-877a-cf05e882ab78'\r\n};\r\n\r\nexport const Scopes: string[] = ['https://graph.microsoft.com/User.Read'];","import React, { FC, useRef, useContext, useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { withRouter, BrowserRouter, Route, Switch } from 'react-router-dom';\r\nimport { injectIntl } from 'react-intl';\r\nimport { Customizer } from 'office-ui-fabric-react';\r\nimport { useBoolean } from '@uifabric/react-hooks';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { CoherenceCustomizations } from '@cseo/styles';\r\nimport { DarkCustomizations } from '@msx/react-ui-component';\r\nimport {\r\n IApplicationContext, ServiceContext, ExtensionsRegistrationClient,\r\n ApplicationContext, useUser,\r\n} from '@msx/platform-services';\r\nimport {\r\n fetchUserProfile, fetchUserProfileBegin, fetchUserProfileSuccess, getUserProfileLoadingStatus,\r\n getExtensionsLoadingStatus, fetchExtensionsRegistration, getExtensionsRegistration,\r\n getCurrentLocale, setCurrentLocale,\r\n getCurrentTheme, setCurrentTheme,\r\n getUserDashboardTiles, getCurrentAppState, setDevLogIn\r\n} from '../../store';\r\nimport { PageError } from '../'\r\nimport { AppHeader, AppLeftNav } from '../../../app/components'\r\nimport { appConfig } from '../../../app/App.config';\r\nimport { getStyles } from './Shell.styles';\r\nimport { IUserProfile } from '../../models';\r\nimport { BusyIndicator } from '../';\r\nimport { messages } from './Shell.messages';\r\nimport { getThemeByName } from '../../utils';\r\nimport { Signin, } from '../../../app/pages';\r\nimport { ShellProps } from './Shell.types';\r\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\r\nimport { Client } from \"@microsoft/microsoft-graph-client\";\r\nimport { GraphConfig, Scopes } from './Graph.Config';\r\nimport { LoadingIndicator } from '../shared/loadingindicator';\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nconst ShellComponent: FC = (props) => {\r\n const { intl } = props;\r\n const reduxDispatch = useDispatch();\r\n const currentAppState = useSelector(getCurrentAppState);\r\n const user = useUser();\r\n const currentTheme = useSelector(getCurrentTheme);\r\n const userDashboardTiles = useSelector(getUserDashboardTiles);\r\n const userProfileLoadingStatus = useSelector(getUserProfileLoadingStatus);\r\n const extensionsLoadingStatus = useSelector(getExtensionsLoadingStatus);\r\n const [showFabricComponent, setShowFabricComponent] = useState(false);\r\n const extensionsRegistration = useSelector(getExtensionsRegistration);\r\n const extensionsRegistrationClient = new ExtensionsRegistrationClient(extensionsRegistration);\r\n const [isStartupError, { setTrue: activateStartupError, setFalse: dismissStartupError }] = useBoolean(false);\r\n const [startupError, setStartupError] = useState('');\r\n const currentLocale = useSelector(getCurrentLocale);\r\n const currentLocaleRef = useRef(currentLocale);\r\n const [isUserLoggedIn, setIsUserLoggedIn] = useState(false);\r\n const { httpClient, authClient } = useContext(ServiceContext);\r\n const [isNavCollapsed, setIsNavCollapsed] = useState(false);\r\n\r\n classes = getClassNames(getStyles, currentTheme);\r\n const appInsights = useAppInsightsContext();\r\n\r\n useEffect(() => {\r\n //MOUNT\r\n loadStartupData();\r\n //loadStartupDataAfterAuthorization();\r\n window.removeEventListener('resize', handleResize);\r\n window.addEventListener('resize', handleResize);\r\n //UNMOUNT\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const handleResize = (): void => {\r\n //setIsSmallScreen(window.innerWidth <= ScreenWidthMaxSmall);\r\n }\r\n\r\n const loadStartupData = async () => {\r\n var isAuthorized = false;\r\n var isLoggedIn = await authClient.isLoggedIn();\r\n setIsUserLoggedIn(isLoggedIn);\r\n if (!isLoggedIn) {\r\n return;\r\n }\r\n\r\n await authClient.acquireToken(Scopes)\r\n .then(async token => {\r\n var gClient = Client.init({\r\n authProvider: (done) => { done(null, token); }\r\n });\r\n\r\n await gClient.api(GraphConfig.graphurl)\r\n .query(GraphConfig.graphQuery).get()\r\n .then((groups: any) => {\r\n if (groups.value != null) {\r\n let selectedG = groups.value.find((g) => g.id == GraphConfig.authGrpId);\r\n if (selectedG != null)\r\n reduxDispatch(setDevLogIn(true));\r\n else\r\n reduxDispatch(setDevLogIn(false));\r\n\r\n loadStartupDataAfterAuthorization();\r\n }\r\n })\r\n });\r\n };\r\n\r\n\r\n\r\n const loadStartupDataAfterAuthorization = async () => {\r\n var isLoggedIn = await authClient.isLoggedIn();\r\n setIsUserLoggedIn(isLoggedIn);\r\n if (!isLoggedIn) {\r\n return;\r\n }\r\n\r\n const Window = window as any;\r\n if (Window.hasStartupDataLoaded === true) return;\r\n console.log('Loading startup data...')\r\n try {\r\n dismissStartupError();\r\n // load user profile\r\n if (appConfig.enableUserSettingsApi) {\r\n reduxDispatch(fetchUserProfileBegin());\r\n const userProfile = await fetchUserProfile(httpClient, appConfig, appInsights)\r\n reduxDispatch(fetchUserProfileSuccess(userProfile as IUserProfile));\r\n const locale = (userProfile as IUserProfile).userPreference.locale;\r\n if (locale !== currentLocaleRef.current) {\r\n reduxDispatch(setCurrentLocale(locale));\r\n }\r\n const themeName = (userProfile as IUserProfile).userPreference.theme;\r\n if (currentTheme.name !== themeName) {\r\n const newTheme = getThemeByName(themeName);\r\n reduxDispatch(setCurrentTheme(newTheme));\r\n }\r\n }\r\n // load extension registraton \r\n if (appConfig.registrationConfig.active) {\r\n reduxDispatch(fetchExtensionsRegistration(httpClient, [], appConfig, appInsights, false));\r\n }\r\n Window.hasStartupDataLoaded = true;\r\n } catch (error) {\r\n setStartupError(JSON.stringify(error));\r\n activateStartupError();\r\n appInsights.trackException({ exception: new Error(error) });\r\n }\r\n };\r\n\r\n const sleep = (ms: number) => {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n const handleHeaderButtonAccess = async () => {\r\n await sleep(500);\r\n\r\n // show/hide feedback button\r\n let showFeedback = currentAppState.isReady && isUserLoggedIn;\r\n if (!appConfig.ocvFeedbackConfig.active) {\r\n showFeedback = false;\r\n }\r\n const el: any = document.querySelector('#coher-header-ocv-button-id');\r\n if (el) el.style.display = showFeedback ? '' : 'none';\r\n }\r\n\r\n const handleFabricVisibilityChange = (isVisible: boolean) => {\r\n setShowFabricComponent(isVisible);\r\n }\r\n\r\n const handleLocaleChange = (locale) => {\r\n reduxDispatch(setCurrentLocale(locale));\r\n }\r\n\r\n const handleNavCollapsed = (isCollapsed) => {\r\n setIsNavCollapsed(isCollapsed);\r\n }\r\n\r\n const renderAppHeader = () => {\r\n return (\r\n \r\n );\r\n }\r\n const renderLeftNav = (): JSX.Element => {\r\n if (!isUserLoggedIn) {\r\n return;\r\n }\r\n return (\r\n \r\n );\r\n };\r\n\r\n // const renderAppFooter = () => {\r\n // return \r\n // }\r\n\r\n const renderRoutes = () => {\r\n if (!isUserLoggedIn) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n if (isStartupError) {\r\n return \r\n }\r\n if (appConfig.enableUserSettingsApi && userProfileLoadingStatus) {\r\n return \r\n }\r\n if (appConfig.registrationConfig.active) {\r\n if (extensionsLoadingStatus) {\r\n return \r\n }\r\n }\r\n return props.onRenderRoutes(extensionsRegistrationClient.getExtensionsPages());\r\n }\r\n\r\n const getDisplayLocales = () => {\r\n let result = [];\r\n if (!appConfig.languageConfig.active) {\r\n return result;\r\n }\r\n const locales = appConfig.languageConfig.locales;\r\n Object.keys(locales).forEach(function (key, idx) {\r\n result.push(\r\n {\r\n key: key,\r\n text: locales[key]\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n currentLocaleRef.current = currentLocale;\r\n const themeCustomizations = getThemeCustomizations();\r\n const newAppState = {\r\n ...currentAppState,\r\n user,\r\n appConfig,\r\n locale: currentLocale,\r\n theme: currentTheme,\r\n isUserLoggedIn: isUserLoggedIn,\r\n isNavCollapsed: isNavCollapsed,\r\n themeCustomizations: themeCustomizations,\r\n };\r\n const contextValue: IApplicationContext = {\r\n extensionsRegistrationClient: extensionsRegistrationClient,\r\n appState: newAppState,\r\n userDashboardTiles: userDashboardTiles,\r\n }\r\n return (\r\n \r\n {renderApp()}\r\n \r\n )\r\n }\r\n\r\n const getThemeCustomizations = () => {\r\n const themeCustomizations = currentTheme.name === 'dark' ? DarkCustomizations : CoherenceCustomizations;\r\n return themeCustomizations;\r\n }\r\n\r\n const renderApp = (): JSX.Element => {\r\n handleHeaderButtonAccess();\r\n const themeCustomizations = getThemeCustomizations();\r\n return (\r\n \r\n {renderAppHeader()}\r\n \r\n <>\r\n
\r\n \r\n
\r\n {renderLeftNav()}\r\n
\r\n {renderRoutes()}\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n // const renderMobileLayout = () => {\r\n // const bodyStackStyles: IStackStyles = { root: { minHeight: 'calc(100vh - 48px)', }, };\r\n // const bodyStackTokens: IStackTokens = { childrenGap: 0, padding: 0, };\r\n // const stackmainContainerStyles: IStackItemStyles = { root: { padding: 0, width: '100%' }, };\r\n // return (\r\n // \r\n // {renderLeftNav()}\r\n // \r\n // \r\n //
\r\n // {renderRoutes()}\r\n //
\r\n //
\r\n //
\r\n //
\r\n // );\r\n\r\n // }\r\n\r\n // const renderGeneralLayout = () => {\r\n // const bodyStackTokens: IStackTokens = { childrenGap: 0, padding: 0, };\r\n // const stackmainContainerStyles: IStackItemStyles = { root: { padding: 5, width: '100%' }, };\r\n // return (\r\n // \r\n // {renderLeftNav()}\r\n // \r\n // \r\n //
\r\n // {renderRoutes()}\r\n //
\r\n //
\r\n //
\r\n //
\r\n // );\r\n\r\n // }\r\n\r\n return renderMain();\r\n};\r\n\r\nexport const Shell = withRouter(injectIntl(ShellComponent));\r\n","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n root: {\r\n paddingTop: '20px',\r\n },\r\n tile: {\r\n margin: '10px 20px 20px 0',\r\n },\r\n }\r\n};\r\n\r\n\r\n","import { defineMessages } from 'react-intl';\r\n\r\nconst idPrefix = 'dashboardEdit.';\r\n\r\nexport const messages = defineMessages({\r\n dataLoadingText: {\r\n id: `${idPrefix}dataLoadingText`,\r\n defaultMessage: 'Loading...',\r\n },\r\n dashboardHeadingText: {\r\n id: `${idPrefix}dashboardHeadingText`,\r\n defaultMessage: 'Dashboard',\r\n },\r\n revertToDefaultButtonText: {\r\n id: `${idPrefix}revertToDefaultButtonText`,\r\n defaultMessage: 'Revert to Default',\r\n },\r\n addNewCardButtonText: {\r\n id: `${idPrefix}addNewCardButtonText`,\r\n defaultMessage: 'Add new card',\r\n },\r\n cancelEditButtonText: {\r\n id: `${idPrefix}cancelEditButtonText`,\r\n defaultMessage: 'Cancel edit mode',\r\n },\r\n editDashboardButtonText: {\r\n id: `${idPrefix}editDashboardButtonText`,\r\n defaultMessage: 'Edit Dashboard',\r\n },\r\n doneEditingButtonText: {\r\n id: `${idPrefix}doneEditingButtonText`,\r\n defaultMessage: 'Done Editing',\r\n },\r\n addnewCardHeadingText: {\r\n id: `${idPrefix}addnewCardHeadingText`,\r\n defaultMessage: 'Add new card',\r\n },\r\n addNewCardFooterAddButtonText: {\r\n id: `${idPrefix}addNewCardFooterAddButtonText`,\r\n defaultMessage: 'Add',\r\n },\r\n addNewCardFooterCancelButtonText: {\r\n id: `${idPrefix}addNewCardFooterCancelButtonText`,\r\n defaultMessage: 'Cancel',\r\n },\r\n});\r\n\r\nexport default messages;\r\n\r\n\r\n\r\n","import React, { useContext } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { SortableContainer, SortableElement } from 'react-sortable-hoc';\r\nimport { Stack } from 'office-ui-fabric-react';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { MsxDashboard, ApplicationContext, IDashboardTile, ExtensionEventTypes } from '@msx/platform-services'\r\nimport {\r\n getInDashboardEditMode, setInDashboardEditMode,\r\n fetchUserProfileSuccess,\r\n} from '../../store';\r\nimport { IUserProfile } from '../../models';\r\nimport { getStyles } from './DashboardEdit.styles'\r\nimport { Extension } from '..';\r\nimport { messages } from './DashboardEdit.message';\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n // TODO: any\r\n}\r\ntype DashboardEditProps = OwnProps & RouteComponentProps;\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nexport const DashboardEditComponent: (React.FC) = props => {\r\n const { intl } = props;\r\n const { extensionsRegistrationClient, appState } = useContext(ApplicationContext);\r\n const inDashboardEditMode = useSelector(getInDashboardEditMode);\r\n const tileExtensions = extensionsRegistrationClient.getExtensionsTiles();\r\n const reduxDispatch = useDispatch();\r\n classes = getClassNames(getStyles, appState.theme);\r\n let displayTiles: JSX.Element[];\r\n\r\n const dashboardComponentMessage = {\r\n dataLoadingText: intl.formatMessage(messages.dataLoadingText),\r\n dashboardHeadingText: intl.formatMessage(messages.dashboardHeadingText),\r\n revertToDefaultButtonText: intl.formatMessage(messages.revertToDefaultButtonText),\r\n addNewCardButtonText: intl.formatMessage(messages.addNewCardButtonText),\r\n cancelEditButtonText: intl.formatMessage(messages.cancelEditButtonText),\r\n editDashboardButtonText: intl.formatMessage(messages.editDashboardButtonText),\r\n doneEditingButtonText: intl.formatMessage(messages.doneEditingButtonText),\r\n addnewCardHeadingText: intl.formatMessage(messages.addnewCardHeadingText),\r\n addNewCardFooterAddButtonText: intl.formatMessage(messages.addNewCardFooterAddButtonText),\r\n addNewCardFooterCancelButtonText: intl.formatMessage(messages.addNewCardFooterCancelButtonText),\r\n };\r\n\r\n const getTiles = () => {\r\n const tiles = [];\r\n tileExtensions.forEach(tile => {\r\n if (tile.active) {\r\n tiles.push(\r\n \r\n );\r\n }\r\n });\r\n return tiles;\r\n }\r\n\r\n const handleSaveChanges = (userDashboardTiles: IDashboardTile[]) => {\r\n reduxDispatch(setInDashboardEditMode(false));\r\n const userProfile: IUserProfile = {\r\n userPreference: {\r\n tilesOrder: userDashboardTiles,\r\n locale: appState.locale,\r\n theme: appState.theme.name,\r\n }\r\n };\r\n reduxDispatch(fetchUserProfileSuccess(userProfile));\r\n const newEvent = new CustomEvent(ExtensionEventTypes.DASHBOARD_EDIT_ACTION_SAVE, { detail: { tiles: userDashboardTiles } });\r\n window.dispatchEvent(newEvent);\r\n\r\n }\r\n\r\n const handleBeginChanges = () => {\r\n reduxDispatch(setInDashboardEditMode(true));\r\n }\r\n\r\n const handleCancelChanges = () => {\r\n reduxDispatch(setInDashboardEditMode(false));\r\n }\r\n\r\n const SortableItem = SortableElement(({ value }) => {\r\n return value;\r\n });\r\n\r\n const SortableList = SortableContainer(({ items }) => {\r\n return \r\n {items.map((value, index) => {\r\n return \r\n })\r\n }\r\n \r\n });\r\n\r\n const renderTiles = (): JSX.Element[] => {\r\n return displayTiles.map((tile, i) => {\r\n return (\r\n \r\n
\r\n {tile}\r\n
\r\n
\r\n );\r\n });\r\n };\r\n\r\n const renderBody = (tiles: JSX.Element[], state: any): JSX.Element => {\r\n if (!tiles) return null;\r\n displayTiles = tiles;\r\n return (\r\n \r\n state.onSortEnd({ oldIndex, newIndex })}\r\n axis={'xy'}\r\n useDragHandle={false}\r\n distance={5}\r\n />\r\n \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (!appState.appConfig.registrationConfig.active) return null;\r\n if (tileExtensions.length === 0) return null;\r\n\r\n const tiles = getTiles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return renderMain();\r\n\r\n}\r\nexport const DashboardEdit = withRouter(injectIntl(DashboardEditComponent));\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n headingMain: {\r\n id: `extension.headingMain`,\r\n defaultMessage: 'No Access',\r\n },\r\n subHeading: {\r\n id: `extension.subHeading`,\r\n defaultMessage: 'Looks like you do not have Read Access to this extension.',\r\n }\r\n});\r\n\r\nexport default messages;\r\n\r\n\r\n\r\n","import React, { useContext, useState } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { injectIntl } from 'react-intl';\r\nimport { NavigationRouteProps, MsxExtension, ApplicationContext, ExtensionsRegistrationClient } from '@msx/platform-services'\r\nimport { getConfig } from './Extension.config';\r\nimport { ExtensionProps } from './Extension.types';\r\nimport { _shellStyles } from '../../../app/App.styles';\r\nimport { Link, MessageBar, MessageBarType, ScrollablePane } from '@fluentui/react';\r\nimport { useSelector } from 'react-redux';\r\nimport { getExtensionsRegistration, getPBIAccessToken, getReportExtensionTiles, getExtnAttributes } from '../../store';\r\nimport { GetPBIToken } from '../../utils/pbitokenhelper';\r\nimport { AccessType, IAccessDetails, IAppExtensionExtended } from '../../../app/components/leftNav/IAppExtensionExtended';\r\nimport messages from './Extension.messages';\r\n\r\nexport const ExtensionComponent: (React.FC) = props => {\r\n const { componentKey, isDashboard, intl } = props;\r\n const { appState } = useContext(ApplicationContext);\r\n const config = getConfig();\r\n const extensionsRegistration = useSelector(getExtensionsRegistration);\r\n //const attributes1 = useSelector(getExtnAttributes);\r\n const pbiAccessToken = useSelector(getPBIAccessToken);\r\n const reportTiles = useSelector(getReportExtensionTiles);\r\n const extensionsRegistrationClient = new ExtensionsRegistrationClient(extensionsRegistration);\r\n const [msgBarVisible, setMsgBarVisible] = useState(true);\r\n\r\n const handleRouteNavigation = (route: NavigationRouteProps) => {\r\n props.history.push(route.location);\r\n }\r\n\r\n const handleLaunchFeedback = (extensionKey: string) => {\r\n (window as any).startMultiFeedback_AllOptional();\r\n }\r\n\r\n const handleLaunchChatBot = (extensionKey: string) => {\r\n (window as any).OpenFDA(\"hostappid=\" + appState.appConfig.botConfig.hostAppId);\r\n }\r\n\r\n function getTileAttributes(key: string) {\r\n try {\r\n //GetPBIToken();\r\n let attributes0: any;\r\n if (reportTiles) {\r\n let currentTile = reportTiles.filter(t => t.key == key);\r\n if (currentTile) {\r\n attributes0 = currentTile[0]['attributes'];\r\n }\r\n }\r\n\r\n const attributes = {\r\n ...attributes0,\r\n accessToken: GetPBIToken(),\r\n }\r\n return attributes;\r\n }\r\n catch (ex) {\r\n\r\n }\r\n }\r\n\r\n const renderExtension = (): JSX.Element => {\r\n \r\n const attributes = getTileAttributes(props.componentKey);\r\n return (\r\n \r\n );\r\n }\r\n\r\n const renderRequestReadAccess = (accessDetails: IAccessDetails): JSX.Element => {\r\n return (\r\n \r\n
\r\n

{intl.formatMessage(messages.headingMain)}

\r\n

{accessDetails.primaryMessage}  \r\n \r\n {accessDetails.linkMessage}\r\n \r\n

\r\n
\r\n
\r\n )\r\n }\r\n\r\n const renderRequestOtherAccess = (accessDetailsArr: IAccessDetails[]): JSX.Element => {\r\n var MsgBarList: JSX.Element[] = [];\r\n accessDetailsArr.forEach(elem => {\r\n MsgBarList.push(<>\r\n {elem.primaryMessage}\r\n \r\n {elem.linkMessage}\r\n
)\r\n })\r\n\r\n return (\r\n { setMsgBarVisible(false) }}>\r\n {MsgBarList}\r\n \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n if (isDashboard) return renderExtension();\r\n var extensions: IAppExtensionExtended[] = extensionsRegistrationClient.getExtensions() as IAppExtensionExtended[];\r\n var ext = extensions.filter(x => x.pages.filter(y => y.key == componentKey).length > 0);\r\n if (ext.length > 0 && !ext[0].authorized) {\r\n return renderRequestReadAccess(ext[0].accessDetails[0]);\r\n }\r\n\r\n return (\r\n \r\n {\r\n (ext.length > 0 && ext[0].authorized && ext[0].accessDetails != null && ext[0].accessDetails.length > 0 && msgBarVisible)\r\n ?\r\n renderRequestOtherAccess(ext[0].accessDetails)\r\n :\r\n null\r\n }\r\n {renderExtension()}\r\n \r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\nexport const Extension = withRouter(injectIntl(ExtensionComponent));\r\n","import { appConfig } from '../../../app/App.config';\r\n\r\nexport const getConfig = () => {\r\n const config = appConfig.extensionConfig;\r\n Object.assign(config, { IsMockData: appConfig.isMockData });\r\n // Bellow attributes added for demo purpose only to support Supplier extension. \r\n // Please remove during actual implementation\r\n Object.assign(config, { API_ENDPOINT: '' });\r\n Object.assign(config, { INVOICE_API_ENDPOINT: '' });\r\n Object.assign(config, { USERPROFILE_API_ENDPOINT: '' });\r\n Object.assign(config, { USERMANAGEMENT_API_ENDPOINT: '' });\r\n Object.assign(config, { INVOICE_RESOURCE_ID: '' });\r\n Object.assign(config, { INVOICE_RESOURCE_ID_MSA: '' });\r\n Object.assign(config, { OCP_APIM_SUBSCRIPTION_KEY: '' });\r\n return config;\r\n};","import { IStyle } from 'office-ui-fabric-react/lib/Styling';\r\nimport { IAppTheme } from '@msx/platform-services'\r\n\r\nexport interface IExtensionStyles {\r\n contentContainer: IStyle;\r\n content: IStyle;\r\n errorInfo: IStyle;\r\n title: IStyle;\r\n details: IStyle;\r\n retryButton: IStyle;\r\n detailsList: IStyle;\r\n}\r\n\r\nexport const getStyles = (theme: IAppTheme): IExtensionStyles => {\r\n return {\r\n contentContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n content: {\r\n display: 'flex',\r\n },\r\n errorInfo: {\r\n marginTop: '10px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '500px',\r\n },\r\n title: {\r\n fontSize: '18px',\r\n fontWeight: 'bold',\r\n },\r\n details: {\r\n fontSize: '14px',\r\n },\r\n retryButton: {\r\n width: '120px',\r\n },\r\n detailsList: {\r\n listStyle: 'none',\r\n paddingLeft: '0',\r\n },\r\n }\r\n};\r\n\r\n","import { defineMessages } from 'react-intl';\r\n\r\nexport const messages = defineMessages({\r\n title: {\r\n id: 'errorPage.title',\r\n defaultMessage: 'Something went wrong',\r\n },\r\n retryText: {\r\n id: 'errorPage.retryText',\r\n defaultMessage: 'Try again',\r\n },\r\n});\r\n\r\nexport default messages;\r\n","import React, { useContext } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { PrimaryButton } from 'office-ui-fabric-react';\r\nimport { ServiceContext } from '@msx/platform-services';\r\nimport { getCurrentTheme } from '../../../store';\r\nimport { getStyles } from './PageError.styles'\r\nimport messages from './PageError.messages';\r\n\r\nexport interface PageErrorProps extends InjectedIntlProps {\r\n error: any;\r\n}\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\nexport const PageErrorComponent: (React.FC) = props => {\r\n const theme = useSelector(getCurrentTheme);\r\n const { intl } = props;\r\n const { authClient } = useContext(ServiceContext);\r\n classes = getClassNames(getStyles, theme);\r\n\r\n const handleRetry = () => {\r\n const message = JSON.stringify(props.error);\r\n if (message.indexOf(\"silent sign-in request\") > -1) {\r\n authClient.login().catch();\r\n return;\r\n }\r\n (window as any).location.reload();\r\n }\r\n\r\n const renderErrorContent = (): JSX.Element => {\r\n const items = [];\r\n items.push(
  • {JSON.stringify(props.error)}
  • )\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {intl.formatMessage(messages.title)}\r\n
    \r\n
    \r\n
      \r\n {items}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n const renderMain = (): JSX.Element => {\r\n return renderErrorContent()\r\n }\r\n return renderMain();\r\n}\r\n\r\nexport const PageError = injectIntl(PageErrorComponent);\r\n","\r\nimport React, { FC } from 'react';\r\nimport { Stack, IStackStyles, IStackTokens, IStackItemStyles } from 'office-ui-fabric-react';\r\nimport { Spinner } from 'office-ui-fabric-react/lib/Spinner';\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n message: string;\r\n}\r\n\r\ntype Props = OwnProps & InjectedIntlProps;\r\n\r\nconst BusyIndicatorComponent: FC = (props) => {\r\n const { message } = props;\r\n const stackStyles: IStackStyles = {\r\n root: {\r\n width: '100%',\r\n },\r\n };\r\n const stackItemStyles: IStackItemStyles = {\r\n root: {\r\n padding: 5,\r\n width: '100%',\r\n alignSelf: 'center',\r\n },\r\n };\r\n\r\n const stackTokens: IStackTokens = {\r\n childrenGap: 20,\r\n padding: 20,\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const BusyIndicator = injectIntl(BusyIndicatorComponent);","import { IAppTheme } from '@msx/platform-services'\r\n\r\nexport const getStyles = (theme: IAppTheme) => {\r\n return {\r\n root: {\r\n marginTop: '20px',\r\n },\r\n }\r\n};\r\n\r\n\r\n","import React, { useContext } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { injectIntl, InjectedIntlProps } from 'react-intl';\r\nimport { MsxTileList, ApplicationContext } from '@msx/platform-services'\r\nimport { Extension } from '..';\r\nimport { Stack } from '@fluentui/react';\r\nimport { classNamesFunction } from 'office-ui-fabric-react/lib/Utilities';\r\nimport { getStyles } from './TileList.styles';\r\nimport { IAppExtensionExtended } from '../../../app/components/leftNav/IAppExtensionExtended';\r\n\r\n\r\nconst getClassNames = classNamesFunction();\r\nlet classes: any;\r\n\r\ninterface OwnProps extends InjectedIntlProps {\r\n isEdit?: boolean;\r\n sortableContainer?: any;\r\n sortableItem?: any;\r\n}\r\ntype TileListProps = OwnProps & RouteComponentProps;\r\n\r\n\r\nexport const TileListComponent: (React.FC) = props => {\r\n const { appState, extensionsRegistrationClient } = useContext(ApplicationContext);\r\n const tileExtensions = extensionsRegistrationClient.getExtensionsTiles();\r\n classes = getClassNames(getStyles, appState.theme);\r\n\r\n const getTiles = () => {\r\n var extensions: IAppExtensionExtended[] = extensionsRegistrationClient.getExtensions() as IAppExtensionExtended[];\r\n\r\n const tiles = [];\r\n tileExtensions.forEach(tile => {\r\n if (tile.active) {\r\n var tileAttributes = tile['attributes'];\r\n if (tileAttributes) {\r\n var tags = tileAttributes['tags'] as string[];\r\n if (tags && tags.length > 0) {\r\n let i = tags.findIndex(t => t === 'home')\r\n if (i >= 0)\r\n tiles.push(\r\n \r\n );\r\n }\r\n }\r\n else {\r\n var ext = extensions.filter(x => x.tiles.filter(y => y.key == tile.key).length > 0);\r\n if (ext.length > 0 && ext[0].authorized) {\r\n tiles.push(\r\n \r\n );\r\n }\r\n }\r\n }\r\n });\r\n return tiles;\r\n }\r\n\r\n\r\n const renderMain = (): JSX.Element => {\r\n const tiles = getTiles();\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return renderMain();\r\n\r\n}\r\nexport const TileList = withRouter(injectIntl(TileListComponent));\r\n","\r\nimport React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { IAppExtensionPage } from '@msx/platform-services';\r\nimport { Extension } from '../core/components'\r\nimport { AppRoutePath } from './App.types';\r\nimport {\r\n Home,\r\n Dashboard,\r\n ToDoList,\r\n NotFound,\r\n AdminPage\r\n} from './pages'\r\n\r\nimport {\r\n ModalBasicExample,\r\n DonutChartExample,\r\n TableExample\r\n} from './components/sample'\r\n\r\nexport interface Props {\r\n extensonPages: IAppExtensionPage[];\r\n}\r\n\r\nexport const Routes: (React.FC) = (props) => {\r\n const { extensonPages } = props;\r\n\r\n const renderMain = (): JSX.Element => {\r\n return (\r\n \r\n \r\n \r\n\r\n {/* Create app specific routes */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Create route for dynamic extensions */}\r\n {extensonPages.map((page) => {\r\n return }\r\n />;\r\n })}\r\n\r\n {/* Create not found pages route */}\r\n \r\n \r\n );\r\n }\r\n\r\n return renderMain();\r\n\r\n}\r\n\r\n\r\n","\r\nimport React from 'react';\r\nimport { IAppExtensionPage } from '@msx/platform-services';\r\nimport { Shell } from '../core/components'\r\nimport { Routes } from './App.routes';\r\n\r\nexport interface Props {\r\n // if any\r\n}\r\n\r\nexport const App: (React.FC) = (props) => {\r\n\r\n const renderRoutes = (extensonPages: IAppExtensionPage[]) => {\r\n return \r\n }\r\n\r\n const renderMain = () => {\r\n return \r\n }\r\n\r\n return renderMain();\r\n}\r\n\r\n\r\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\nimport { createBrowserHistory } from 'history';\r\n\r\nconst browserHistory = createBrowserHistory({ basename: '' });\r\nconst reactPlugin = new ReactPlugin();\r\nconst appInsights = new ApplicationInsights({\r\n config: {\r\n connectionString: 'InstrumentationKey=01f82486-2f41-4225-84dc-ccfe1747b37a;IngestionEndpoint=https://westus2-2.in.applicationinsights.azure.com/',\r\n extensions: [reactPlugin],\r\n extensionConfig: {\r\n [reactPlugin.identifier]: { history: browserHistory }\r\n }\r\n }\r\n});\r\nappInsights.loadAppInsights();\r\nexport { reactPlugin, appInsights };","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { initializeIcons } from '@uifabric/icons';\r\nimport { AppSettingsProvider, AppServiceProvider, AppBaseProvider } from './core/provider'\r\nimport { App } from './app/App';\r\nimport { mergeStyles } from 'office-ui-fabric-react';\r\nimport './index.css';\r\n\r\nimport { AppInsightsContext } from '@microsoft/applicationinsights-react-js';\r\nimport { reactPlugin } from './core/utils/AppInsights';\r\n\r\n// Inject some global styles\r\nmergeStyles({\r\n selectors: {\r\n ':global(body), :global(html), :global(#app)': {\r\n margin: 0,\r\n padding: 0,\r\n height: '100vh'\r\n }\r\n }\r\n});\r\n\r\ninitializeIcons();\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('app'));\r\n"],"sourceRoot":""}